
有句話說: 程序員都是"懶惰"的! 小馬哥無比認(rèn)同,因?yàn)閼卸?所以我們思進(jìn)取,把復(fù)雜的事情研究透徹,然后簡(jiǎn)單干,用一種聰明的方式重新干!?
封裝
面向?qū)ο缶褪且环N"懶惰"的聰明做事方式,本質(zhì)代碼復(fù)用,程序員不愿意去寫很多重復(fù)的代碼,于是在日漸龐雜的代碼工程中,將常用邏輯進(jìn)行抽象,逐漸形成面向?qū)ο蟮乃枷? 你在理解面向?qū)ο笾?肯定聽說過面向過程的編碼方式,(順序,分支,循環(huán)是三種基本控制結(jié)構(gòu)),函數(shù)或者方法是其主要特征, 其實(shí)函數(shù)或者方法也是抽象,將常用邏輯進(jìn)行抽取,實(shí)現(xiàn)了數(shù)據(jù)和結(jié)構(gòu)的分離, 比如一個(gè)計(jì)算器函數(shù), 運(yùn)算規(guī)則定義在函數(shù)體內(nèi),多變的數(shù)據(jù)作為參數(shù)傳遞進(jìn)去, 這就是一種封裝,封裝了邏輯,剝離了數(shù)據(jù), 誰調(diào)用函數(shù),誰就負(fù)責(zé)傳遞數(shù)據(jù)作為參數(shù)來使用函數(shù),實(shí)現(xiàn)了函數(shù)體的復(fù)用. 同樣的道理,面向?qū)ο蟮木幊趟枷?也是復(fù)用,不過相比函數(shù)來說,這種封裝又提升了一個(gè)級(jí)別, 對(duì)象中封裝了不像函數(shù)僅僅封裝一種邏輯,而是封裝了多個(gè)邏輯(每一個(gè)邏輯體我們稱之為成員方法),此外還封裝了數(shù)據(jù)(成員屬性/成員變量),這樣的對(duì)象都是通過一個(gè)模板創(chuàng)造出來的,這個(gè)模板叫做類, 類是固定的, 通過給類的構(gòu)造函數(shù)傳遞不同參數(shù), 于是我們創(chuàng)建出不同的對(duì)象, 這樣復(fù)用了類這個(gè)東東.
以上是面向?qū)ο蠓庋b的特性,封裝,目的之一就實(shí)現(xiàn)了抽象,從而也實(shí)現(xiàn)了復(fù)用(函數(shù),類都是如此);其實(shí)封裝對(duì)于面向?qū)ο髞碚f,還保護(hù)了對(duì)象實(shí)例的成員屬性不被外界任意修改.
繼承
面向?qū)ο筮€有一個(gè)繼承的特點(diǎn),在我看來,繼承的目的還是復(fù)用,"懶惰"是一種美德,通過繼承父類,我們就可以直接使用父類的成員屬性和成員方法,作為子類是比父類進(jìn)化更超前的一個(gè)群體,只需要有自己更厲害的更獨(dú)特的成員方法就可以了,于是,作為程序員,省略掉很多時(shí)間去寫重復(fù)的東西.
多態(tài)
多態(tài)的本質(zhì),還是"懶惰"的程序員用于省事,將所有的指代都用一個(gè)統(tǒng)一的稱呼來實(shí)現(xiàn),這統(tǒng)一的稱呼籠統(tǒng)的泛指了一大類對(duì)象,這樣做的目的在于,如果面對(duì)多變的需求,某一個(gè)類的實(shí)例不能滿足當(dāng)下需求,我們?cè)谧兓唧w實(shí)現(xiàn)類的時(shí)候,不同去修改所有的稱呼.舉個(gè)栗子,你去餐廳吃飯, 今天接待你的是小W,明天接待你的是小L,后天不一定是誰,所以,省事的做法是你不用管他(她)是誰,只管尊敬的稱呼ta為服務(wù)員,就可以讓服務(wù)員來幫你完成點(diǎn)餐,上菜,結(jié)賬這些在餐廳的所有事情.
面向?qū)ο缶幊趟枷氩⒉桓呱?無非是為了省事和"懶惰"所采取的一種代碼策略,多體會(huì)來龍去脈,學(xué)習(xí)知識(shí)無比快.