面向對象理解

1.萬物皆對象

編程實際是從現實問題建模轉變爲程序問題的一種具體實現,編程思想也脫胎於現實世界。

 

2.類-對象的統稱,對象-類的具體實例

類:具有相同特性的所有對象的抽象,如同:鳥類、人類

對象:具體的某個類的實實在在存在的東西,如同:樹上的那一隻鳥,面前叫張三的人

但類並不是具體的存在與實際空間中,是一個抽象的概念性名詞。

對應到程序中,類也並沒有實際的存在於內存空間,真實存在的是類的對應實例,也就是java的new一個對象。那一塊的內存空間纔對應了張三那個人。

 

3.對象由其他對象組成-屬性

一個對象也包含了其他的對象,就如同一個人包含了手腳,手腳又包含着各種不同的組織結構。

對應到程序中。每一個被包含的對象就是外層對象的屬性/域/filed。

 

4.對象之間有通訊方式-方法

對象之間能夠交互,比如,人能用筆寫字。

對應到建模中,人類有一個方法,參數爲一隻筆的具體對象,方法實現的功能就是寫字,畢竟筆不能自己寫字。

對應到程序中,人類與筆類之間的交互,也就是類對應的方法,去實現具體的功能。

 

5.程序-有序對象的集合

程序是用來具體處理某一問題的解集。比如,現在的問題是:我要從A城渠道B城。完成這個問題中間需要調度很多其他的事物/對象,我需要交通工具,比如:車,車需要在路上跑,車需要油,需要有人開車,等等。

對應到程序中,這個問題的解決,中間的所有事物都是這個程序的一部分,將所有必須的類通過一定的關係組合在一起,就能解決上面的問題,換言之,這些所有的類就是一個解決從A到B的程序。

 

6.類具有相同方法

如上所說,類是抽象的概念,而抽象概念是我們認知世界很重要的觀念。比如,你見過張三,知道他是人這個類,那麼你就知道他可以說話,你可以用天氣來開始對話。之後你遇到李四,你就知道他和張三同屬人類,也可以說話,可以談論天氣。雖然張三和李四有所差異,問張三天氣,張三很高興。問李四天氣,或許沒那麼高興。那是對象的不同實現。

反之,沒有類的概念,你知道張三可以說話,可以談論天氣,遇到李四你就很茫然,不知道他能做什麼。這也就像面向過程的編程思想一樣,你需要將每個事情都完全瞭解掌控,否者就不能解決問題。

對應到程序中,也就是類都有一樣的方法,但是由於屬性的不同值,所得到結果一般不一致。也就是具體對象的不同結果。

 

7.每個類都有指定的功能,且功能單一

存在即合理,換言之,存在的東西都有一定的用處,“用處”就可以理解爲功能。沒有任何功能的代碼寫入程序裏,常人沒法理解。

而功能單一,個人猜想只是爲了方便程序員對類管理,每個類都有且只有特色的方法,將功能模塊細分到不同的類,避免類的冗餘,即有利於擴展也利於管理。

 

8.權限-不能瞭解不需要了解的內容

 

權限對應了現實世界知識關係。人類用燈類照明,人類沒必要去了解燈類怎麼發出光,怎麼集成電路。只需要知道接通電,按下開關就能發光。這裏的怎麼發光,怎麼集成電路是使用燈光的人所不需要知道的;開關是使用的人需要的。這個時候就將不需要知道的隱藏起來,需要你知道的暴露出來供你使用。

對應到程序中,就用權限來進行了處理,隱藏自身的細節,暴露用來交互的方法。

 

9.類與類之間的關係

繼承:類的細分,類似自然界 界門綱目科屬種 的劃分。

實現:某種抽象功能的擴展。

依賴:常見於方法參數傳入的類與外層類的關係。

組合:contains-a 

聚合:has-a 

10異常處理並不是OOP的內容

異常處理不是面向對象的思維,只是java編程方式的擴展。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章