面向物件理解
1.萬物皆物件
程式設計實際是從現實問題建模轉變為程式問題的一種具體實現,程式設計思想也脫胎於現實世界。
2.類-物件的統稱,物件-類的具體例項
類:具有相同特性的所有物件的抽象,如同:鳥類、人類
物件:具體的某個類的實實在在存在的東西,如同:樹上的那一隻鳥,面前叫張三的人
但類並不是具體的存在與實際空間中,是一個抽象的概念性名詞。
對應到程式中,類也並沒有實際的存在於記憶體空間,真實存在的是類的對應例項,也就是java的new一個物件。那一塊的記憶體空間才對應了張三那個人。
3.物件由其他物件組成-屬性
一個物件也包含了其他的物件,就如同一個人包含了手腳,手腳又包含著各種不同的組織結構。
對應到程式中。每一個被包含的物件就是外層物件的屬性/域/filed。
4.物件之間有通訊方式-方法
物件之間能夠互動,比如,人能用筆寫字。
對應到建模中,人類有一個方法,引數為一隻筆的具體物件,方法實現的功能就是寫字,畢竟筆不能自己寫字。
對應到程式中,人類與筆類之間的互動,也就是類對應的方法,去實現具體的功能。
5.程式-有序物件的集合
程式是用來具體處理某一問題的解集。比如,現在的問題是:我要從A城渠道B城。完成這個問題中間需要排程很多其他的事物/物件,我需要交通工具,比如:車,車需要在路上跑,車需要油,需要有人開車,等等。
對應到程式中,這個問題的解決,中間的所有事物都是這個程式的一部分,將所有必須的類通過一定的關係組合在一起,就能解決上面的問題,換言之,這些所有的類就是一個解決從A到B的程式。
6.類具有相同方法
如上所說,類是抽象的概念,而抽象概念是我們認知世界很重要的觀念。比如,你見過張三,知道他是人這個類,那麼你就知道他可以說話,你可以用天氣來開始對話。之後你遇到李四,你就知道他和張三同屬人類,也可以說話,可以談論天氣。雖然張三和李四有所差異,問張三天氣,張三很高興。問李四天氣,或許沒那麼高興。那是物件的不同實現。
反之,沒有類的概念,你知道張三可以說話,可以談論天氣,遇到李四你就很茫然,不知道他能做什麼。這也就像面向過程的程式設計思想一樣,你需要將每個事情都完全瞭解掌控,否者就不能解決問題。
對應到程式中,也就是類都有一樣的方法,但是由於屬性的不同值,所得到結果一般不一致。也就是具體物件的不同結果。
7.每個類都有指定的功能,且功能單一
存在即合理,換言之,存在的東西都有一定的用處,“用處”就可以理解為功能。沒有任何功能的程式碼寫入程式裡,常人沒法理解。
而功能單一,個人猜想只是為了方便程式設計師對類管理,每個類都有且只有特色的方法,將功能模組細分到不同的類,避免類的冗餘,即有利於擴充套件也利於管理。
8.許可權-不能瞭解不需要了解的內容
許可權對應了現實世界知識關係。人類用燈類照明,人類沒必要去了解燈類怎麼發出光,怎麼積體電路。只需要知道接通電,按下開關就能發光。這裡的怎麼發光,怎麼積體電路是使用燈光的人所不需要知道的;開關是使用的人需要的。這個時候就將不需要知道的隱藏起來,需要你知道的暴露出來供你使用。
對應到程式中,就用許可權來進行了處理,隱藏自身的細節,暴露用來互動的方法。
9.類與類之間的關係
繼承:類的細分,類似自然界 界門綱目科屬種 的劃分。
實現:某種抽象功能的擴充套件。
依賴:常見於方法引數傳入的類與外層類的關係。
組合:contains-a
聚合:has-a
10異常處理並不是OOP的內容
異常處理不是面向物件的思維,只是java程式設計方式的擴充套件。