1.物件導論---java程式設計思想(學習筆記)
我這些學習筆記,記錄的都是我自己認為的知識點,可能以後再看的時候還要翻書,但是可以用來定位到準確的書中示例的位置,減少翻書重找的時間,利於自身知識體系的搭建。 self-transcendence
一、物件導論
我們之所以將自然界分解,組織成各種概念,並按其含義分類,主要是因為我們是整個口語交流社會共同遵守的協定的參與者,這個協定以語言的形式固定下來......除非贊成這個協定中規定的有關語言資訊的組織和分類,否則我們根本無法交談。
“晒太陽”就如上文所說,我們預設為晒太陽就是太陽晒我們,如果你要在晒太陽上糾正別人那我想就無法交流了,這就是口語化。
面向物件程式設計(Object-oriented Programming,OOP)
1.1抽象過程
解決什麼樣的問題直接取決於抽象的型別和質量
型別--所抽象的是什麼
面向物件的表示方式是下面這樣的
將問題空間的元素以及他對應的解空間的表示稱為“物件”(還有一些無法在問題空間中存在的元素也稱之為“物件”)
程式可以通過新增新型別的物件使自身適用於某個特定問題,每個物件看起來都像一臺微型計算機--具有狀態和操作
所以在閱讀描述解決方案程式碼的同時,也是在閱讀問題的表述
(這就是一種更靈活並且強有力的語言抽象)
Alan Key總結了第一個成功的面嚮物件語言、也是java所基於的語言之一的Smalltalk的五個特徵,這些特徵表現了一種純粹的面向物件程式設計方式:
1. 萬物皆物件。將物件視為奇特的變數,他可以儲存資料,還可以對自身進行操作。
2. 程式是物件的集合,他們通過傳送訊息來通知彼此要做什麼。假設有一個鳥類物件,他自身具有飛的操作,你呼叫這個物件的飛的方法的過程。就是傳送訊息通知要做什麼。
3. ???每個物件都有自己的由其他物件所構成的儲存。通過建立包含現有物件的包的方式來建立新型別的物件。因此,可以在程式中構建複雜的體系,同時把複雜性隱藏在物件簡單性身後。
4. 每個物件都擁有其型別。即:每個物件都是某個類的一個例項。類=型別。每個類最重要的區別於其他類的特徵就是“可以傳送什麼樣的訊息給他”。
5. 某一特定型別的所有物件都可以接收相同的訊息。圓形型別的物件也是幾何形型別的物件,所以一個圓形物件,必定可以接受傳送給幾何形物件的訊息。這意味著可以編寫與幾何形互動並自動處理所有與幾何形性質相關的事物的程式碼。這種可替代性是
1.2每個物件都有一個介面
所有的物件都是唯一的,但同時也是具有相同的特性和行為的物件所歸屬的類的一部分。
Light li=new Light();
定義這個物件的引用(it),然後呼叫new方法建立改型別的物件。
1.3每個物件都提供服務
當正在試圖開發或理解一個程式設計時,最好的方法之一就是將物件想象為“服務提供者”,程式本身將向用戶提供服務,他將通過呼叫其他物件提供的服務來實現這一目的,你的目標就是去建立或者是在現有程式碼庫中尋找能夠提供理想的服務來解決問題的一系列的物件。
將物件看作服務提供者還有一個好處,它有助於提高物件的內聚性,高內聚是軟體設計的基本質量要求之一,這意味著一個軟體構件的各個方面組合的很好。人們再設計物件的時候面臨的一個問題,將過多的功能都塞在一個物件中。
講物件作為服務提供者看待是一件偉大的簡化工具,這不僅在設計過程中非常有用,而且當其他人試圖理解你的程式碼或者重用某個物件的時候,如果他們看出來了這個物件所提供的服務的價值,它會使調整物件以適應其設計的過程變得簡單許多。
(自我理解:如果程式設計達到這一點,即使後面新增再多的功能也不會互相影響)