亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

對面向?qū)ο蟮睦斫?

ethernet / 2748人閱讀

摘要:回來正題,繼續(xù)探究面向?qū)ο?。其實面向?qū)ο笫怯幸幌盗械睦^承關(guān)系,實現(xiàn)關(guān)系,依賴關(guān)系組成。希望這篇文章可以幫助到一些對這方面還有困惑,不解的小白。我也是一個一年多的小白

好,今天來給大家總結(jié)一下我覺得的面向?qū)ο蟆?/p>

首先,我們帶著問題去想。

問題就是:什么是面向?qū)ο?

過去一些學(xué)校老師每當(dāng)講到面向?qū)ο蟮恼鹿?jié),都會貓不猶豫的定義一些class(類)。那么,這就是面向?qū)ο罅嗣矗窟^去我也是這么認(rèn)為的,但現(xiàn)在看來,其不然。

那么到底什么才是面向?qū)ο竽兀?/b>

相信到這里大家都有一些疑惑。那平時咱們寫那么多的類,難道都不是面向?qū)ο??我很遺憾的告訴你,并不全是。包括我一年前剛?cè)肼殞懥撕芏啻a,也維護(hù)過很多"前輩"的項目,當(dāng)時又傻又天真的以為:"哇,這代碼真特么牛逼,一個類就幾百幾千行"。

現(xiàn)在回頭一想,哎呀我去,我都沒眼看了,那些代碼,跑著跑著,是會出bug的,他們的質(zhì)量不過關(guān)就,那上去跑了,跑條毛啊,最終還不是返回來給我們改bug。

到目前為止,我已經(jīng)慢慢開始轉(zhuǎn)變了這些想法。其實那都不是叫面向?qū)ο?,因為他們把不同類本身該有的事情都綜合起來一個類里面,所以它本身只是個類,并不具備面向?qū)ο蟮幕咎刭|(zhì)。

回來正題,繼續(xù)探究面向?qū)ο?。想想我們?nèi)祟?。舉個簡單的例子:

/** 
 * 抽象人類,人們說的人類,反正就是隨你想的
 */
Interface Human
{
    public function setLastName($last_name);

    public function getLastName();

    public function setFirstName($first_name);

    public function getFirstName();
}

/** 
 * 我老爸
 */
class Father implement Human
{
    /** 
     * 姓,在國內(nèi),姓是不能隨便改的,當(dāng)然也是可以改。所以這里修飾成保護(hù)
     */
    protected $last_name;

    public $first_name;

    public function setLastName($last_name)
    {
        $this->last_name = $last_name;

        return $this;
    }

    public function getLastName()
    {
        return $this->last_name;
    }

    public function setFirstName($first_name)
    {
        $this->first_name = $first_name;

        return $this;
    }

    public function getFirstName()
    {
        return $this->first_name;
    }
}

/** 
 * 兒子 - 我
 */
class Son extends Father
{

}

$father = new Father();
$father->setLastName("黃");

$son = new Son();
$son->setFirstName("總");
// 打印我的名字
echo $son->getLastName() , $son->getFirstName();

既然我繼承我老爸,當(dāng)然是跟我老爸姓的啦。要改姓也可以,得問問老爸是否同意先。

不過一般我們的做法是

直接定義一個"Son"類,然后里面各種方法,甚至一些人類不可以做到的方法,比如會飛(不借助工具),反正就是一個類里頭夾雜各種不可思議的方法,真的是萬萬沒想到。那么如果是這樣,那其實我就不認(rèn)為這是面向?qū)ο罅?,而是簡單的定義類而已。

其實面向?qū)ο笫怯幸幌盗械睦^承關(guān)系,實現(xiàn)關(guān)系,依賴關(guān)系組成。寫代碼,做開發(fā),其實和生活是息息相關(guān)的,多留意自己的生活,多拿生活例子在開發(fā)工作中舉例,其實,原理就一目了然了。

繼續(xù)回來上面的話題,繼續(xù)面向?qū)ο蟆?/p>

比如說,我老爸會使用工具,但是我也會,而且過程,結(jié)果大不相同,而且使用的工具也不一樣,而且這個工具是需要買,或者找別人借的,不是自己家的。結(jié)合上面的小例子稍微修改一下。

/** 
 * 抽象人類,人們說的人類,反正就是隨你想的
 */
Interface Human
{
    ......   // 代碼省略
    public function useTools(ToolInterface $toolInterface = null);
}

/** 
 * 我老爸
 */
class Father implement Human
{
    /** 
     * 姓,在國內(nèi),姓是不能隨便改的,當(dāng)然也是可以改。所以這里修飾成保護(hù)
     */
    ...... // 代碼省略
    public function useTools(ToolInterface $toolInterface = null)
    {
        $result = $toolInterface->useTool();
        ......//代碼省略,自由發(fā)揮
        // 用工具得到結(jié)果,經(jīng)過老爸一系列加工,變成了不一樣的東東
        return $result
    }
}

/** 
 * 兒子 - 我
 */
class Son extends Father
{
    ...... // 代碼省略
    public function useTools(ToolInterface $toolInterface = null)
    {
        // 使用工具,我想調(diào)整一下這個工具再使用
        ......// 調(diào)整中
        $result = $toolInterface->useTool();
        ......//代碼省略,自由發(fā)揮,加工結(jié)果
        return $result
    }
}

Interface ToolInterface 
{
    public function useTool();
}

class Nokia implements ToolInterface
{
    // 代碼自己想想
    public function useTool();
}

class IPhone20Plus implements ToolInterface
{
    // 代碼自己想想
    public function useTool();
}

$father = new Father();
$father->setLastName("黃");

$son = new Son();
$son->setFirstName("總");
// 打印我的名字
echo $son->getLastName() , $son->getFirstName();
// 使用工具, 我不管他們怎么使用,反正我就是給了他了。而且,只要是個工具(實現(xiàn)ToolInterface)就行了
$father->useTool(new Nokia());
$son->useTook(new IPhone20Plus());

那么其實到這里,你可以很清晰的看到,其實這,才算是"我理解"的面向?qū)ο?。每個類都有自己多帶帶,獨(dú)有的方法,不同的操作。

而且在后面工具的哪里,我并沒有強(qiáng)制的在內(nèi)部是使用工具,而是在外部通過注入的方式去實現(xiàn)想要的。

再想想現(xiàn)實中,我們用的iPhone,安卓,到底是哪里來的呢?就是買來的嘛,總沒有說自己出一款,就算是自己出的,零件也是需要依賴各個地方的吧。所以其實我們整個生活圈就是一個很大的生態(tài)系統(tǒng),你在編程世界里面有的,基本上在生活當(dāng)中都能找到影子。

而且這樣有一個很好的好處,就是你會不知不覺的,降低了類與類之間的耦合性了,我們面向?qū)ο?,要的不就是這個效果嗎?再結(jié)合學(xué)過的知識,面向?qū)ο蟮奶匦裕煤盟伎歼@些問題,不斷考量,改善自己的這些想法。

希望這篇文章可以幫助到一些對這方面還有困惑,不解的小白。有什么地方說的不足的,還請各位大大指點,感謝各位。

By Jan(我也是一個一年多的小白)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/20907.html

相關(guān)文章

  • 面向 JavaScript

    摘要:是完全的面向?qū)ο笳Z言,它們通過類的形式組織函數(shù)和變量,使之不能脫離對象存在。而在基于原型的面向?qū)ο蠓绞街?,對象則是依靠構(gòu)造器利用原型構(gòu)造出來的。 JavaScript 函數(shù)式腳本語言特性以及其看似隨意的編寫風(fēng)格,導(dǎo)致長期以來人們對這一門語言的誤解,即認(rèn)為 JavaScript 不是一門面向?qū)ο蟮恼Z言,或者只是部分具備一些面向?qū)ο蟮奶卣?。本文將回歸面向?qū)ο蟊疽?,從對語言感悟的角度闡述為什...

    novo 評論0 收藏0
  • 7. 初步理解面向象 【連載 7】

    摘要:是一種典型的面向?qū)ο缶幊陶Z言。這篇文章主要是來初步理解一下面向?qū)ο蟮乃季S為下面的內(nèi)容先給一個基礎(chǔ)。針對面向?qū)ο缶幊痰母鄡?nèi)容,會在后面的文章里面詳細(xì)解釋。他們都稱之為對象。之后,我們再用編程語言,把這種映射編寫出來,就是的面向?qū)ο缶幊汤病? showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...

    keelii 評論0 收藏0
  • 談?wù)勎?em>對面向象以及類與理解

    showImg(https://segmentfault.com/img/remote/1460000007103938?w=391&h=247); 文章最初發(fā)表于我的個人博客非典型性程序猿 對于剛接觸JAVA或者其他面向?qū)ο缶幊陶Z言的朋友們來說,可能一開始都很難理解面向?qū)ο蟮母拍钜约邦惡蛯ο蟮年P(guān)系。筆者曾經(jīng)帶過一個短期培訓(xùn)班教授java入門基礎(chǔ),在最后結(jié)束課程的時候,還有很多同學(xué)不太理解面向?qū)ο?..

    walterrwu 評論0 收藏0
  • 談?wù)勎宜?em>理解面向

    摘要:眾多面向?qū)ο蟮木幊趟枷腚m不盡一致,但是無論哪種面向?qū)ο缶幊陶Z言都具有以下的共通功能。原型編程以類為中心的傳統(tǒng)面向?qū)ο缶幊?,是以類為基礎(chǔ)生成新對象。而原型模式的面向?qū)ο缶幊陶Z言沒有類這樣一個概念。 什么是面向?qū)ο螅窟@個問題往往會問到剛畢業(yè)的新手or實習(xí)生上,也是往往作為一個技術(shù)面試的開頭題。在這里我們不去談如何答(fu)好(yan)問(guo)題(qu),僅談?wù)勎宜斫獾拿嫦驅(qū)ο蟆?從歷...

    avwu 評論0 收藏0
  • javascript 面向象版塊之理解

    摘要:用代碼可以這樣描述安全到達(dá)國外面向過程既然說了面向?qū)ο?,那么與之對應(yīng)的就是面向過程。小結(jié)在這篇文章中,介紹了什么是面向?qū)ο蠛兔嫦蜻^程,以及中對象的含義。 這是 javascript 面向?qū)ο蟀鎵K的第一篇文章,主要講解對面向?qū)ο笏枷氲囊粋€理解。先說說什么是對象,其實這個還真的不好說。我們可以把自己當(dāng)成一個對象,或者過年的時候相親,找對象,那么你未來的老婆也是一個對象。我們就要一些屬性,比...

    lovXin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<