面向?qū)ο蟮娜筇匦裕悍庋b、繼承和多態(tài)。這是任何一本面向?qū)ο笤O(shè)計的書里都會介紹的,但鮮有講清楚的,新手看了之后除了記住幾個概念外,并沒真正了解他們的意義。前幾天在youtube上看了Bob大叔講解的SOLID原則,其中有一段提到面向?qū)ο蟮娜筇匦裕斋@很多,但是我并不完全贊同他的觀點,這里談?wù)勎业南敕ǎ?/p>
封裝
『封裝』第一層含義是信息隱藏。這是教科書里都會講解的,把類或模塊的實現(xiàn)細(xì)節(jié)隱藏起來,對外只提供最小的接口,也就是所謂的『最小知識原則』。有個共識,正常的程序員能理解的代碼在一萬行左右。這是指在理解代碼的實現(xiàn)細(xì)節(jié)的情況下,正常的程序員能理解的代碼的規(guī)模。比如一個文件系統(tǒng),F(xiàn)AT、NTFS、EXT4和YAFFS2等,它們的實現(xiàn)是比較復(fù)雜的,少則幾千行代碼,多則幾萬行,要理解它們的內(nèi)部實現(xiàn)是很困難的,但是如果屏蔽它們的內(nèi)部實現(xiàn)細(xì)節(jié),只是要了解它們對外的接口,那就非常容易了。
關(guān)于『封裝』的這一層含義,Bob大叔提出了驚人的見解:『封裝』不是面向?qū)ο蟮奶匦?,面向過程的C語言比面向?qū)ο蟮腃++/Java在『封裝』方面做得更好!證據(jù)也是很充分:C語言把函數(shù)的分為內(nèi)部函數(shù)和外部函數(shù)兩類。內(nèi)部函數(shù)用static修飾,放在C文件中,外部函數(shù)放在頭文件中。你完全不知道內(nèi)部函數(shù)的存在,即使知道也沒法調(diào)用。而像在C++/Java中,通過public/protected/private/friend等關(guān)鍵字,把函數(shù)或?qū)傩苑殖刹煌牡燃?,這把內(nèi)部的細(xì)節(jié)暴露給使用者了,使用者甚至可以繞過編譯器的限制去調(diào)用私有函數(shù)。所以在信息隱藏方面,『封裝』不但不是面向?qū)ο蟮奶匦?,而且面向?qū)ο鬁p弱了『封裝』。
『封裝』的第二層含義是把數(shù)據(jù)和行為封裝在一起。我覺得這才是面向?qū)ο笾械摹悍庋b』的意義所在,而一般的教科書里并沒提及或強調(diào)。面向過程的編程中,數(shù)據(jù)和行為是分離的,面向?qū)ο蟮木幊虅t是把它們看成一個有機的整體。所以,從這一層含義來看,『封裝』確實是面向?qū)ο蟮摹禾匦浴弧?/p>
面向?qū)ο笫且环N思維方式,而不是表現(xiàn)形式。在C語言中,可以實現(xiàn)面向?qū)ο蟮木幊?,事實上,幾乎所有C語言開發(fā)的大型項目,都是采用了面向?qū)ο蟮乃枷腴_發(fā)的。把C語言說成面向過程的語言是不公平的,是不是面向?qū)ο蟮木幊讨饕强粗笇?dǎo)思想,而不是編程語言。你用C++/Java可以寫面向過程的代碼,也可以用C語言寫面向?qū)ο蟮拇a。
繼承
類就是分類的標(biāo)準(zhǔn),也就是一類事物,一類具有相同屬性和行為對象的抽象。比如動物就是一個類,它描述了所有具有動物這個屬性的事物的集合。狗也是一個類,它具有動物所有的特性,我們說狗這個類繼承了動物這個類,動物是狗的父類,狗是動物的子類。在C語言中也可以模擬繼承的效果,比如:
struct Animal { ... };
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
分享標(biāo)題:面向?qū)ο笕筇匦缘囊饬x講解-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://aaarwkj.com/article40/cdpheo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、App開發(fā)、動態(tài)網(wǎng)站、網(wǎng)站建設(shè)、ChatGPT、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容