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