物件導向的優良特性是封裝,繼承,多型。
封裝的意義,在於明確標識出允許外部使用的所有成員函式和資料項,或者叫介面。
有了封裝,就可以明確區分內外,使得類實現者可以修改封裝內的東西而不影響外部呼叫者;而外部呼叫者也可以知道自己不可以碰**。這就提供乙個良好的合作基礎——或者說,只要介面這個基礎約定不變,則**改變不足為慮。
繼承同時具有兩種含義:其一是繼承基類的方法,並做出自己的改變和/或擴充套件——號稱解決了**重用問題;其二是宣告某個子類相容於某基類(或者說,介面上完全相容於基類),外部呼叫者可無需關注其差別(內部機制會自動把請求派發[dispatch]到合適的邏輯)。
再說多型:基於物件所屬類的不同,外部對同乙個方法的呼叫,實際執行的邏輯不同。
很顯然,多型實際上是依附於繼承的兩種含義的:「改變」和「擴充套件」本身就意味著必須有機制去自動選用你改變/擴充套件過的版本,故無多型,則兩種含義就不可能實現。
實踐中,繼承的第一種含義(實現繼承)意義並不很大,甚至常常是有害的。因為它使得子類與基類出現強耦合。
繼承的第二種含義非常重要。它又叫「介面繼承」。
介面繼承實質上是要求「做出乙個良好的抽象,這個抽象規定了乙個相容介面,使得外部呼叫者無需關心具體細節,可一視同仁的處理實現了特定介面的所有物件」——這在程式設計上,叫做歸一化。
歸一化使得高層的外部使用者可以不加區分的處理所有介面相容的物件集合——就好象linux的泛檔案概念一樣,所有東西都可以當檔案處理,不必關心它是記憶體、磁碟、網路還是螢幕(當然,對底層設計者,當然也可以區分出「字元裝置」和「塊裝置」,然後做出針對性的設計:細緻到什麼程度,視需求而定)。
歸一化的例項:
a、一切物件都可以序列化/tostring
b、一切ui物件都是個window,都可以響應視窗事件。
總結,物件導向的兩點好處如下,
一是通過封裝明確定義了何謂介面、何謂介面內部實現、何謂介面的外部呼叫者,使得大家各司其職,不得越界;
二是通過繼承+多型這種內建機制,在語言的層面支援歸一化的設計,並使得內行可以從**本身看到這個設計——但,注意僅僅只是支援歸一化的設計。不懂如何做出這種設計的外行仍然不可能從瞎胡鬧的設計中得到任何好處。
JAVA基礎 物件導向的優良特性
物件導向的優良特性是封裝,繼承,多型。封裝的意義,在於明確標識出允許外部使用的所有成員函式和資料項,或者叫介面。有了封裝,就可以明確區分內外,使得類實現者可以修改封裝內的東西而不影響外部呼叫者 而外部呼叫者也可以知道自己不可以碰 這就提供乙個良好的合作基礎 或者說,只要介面這個基礎約定不變,則 改變...
物件導向的特性
1.抽象 抽象就是忽略乙個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。2.繼承 繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方...
物件導向特性
三大特性 封裝 繼承 多型 封裝封裝屬性 1,私有化成員變數 2,提供get,set方法 3,在方法的內容加入控制語句 static靜態 修飾 成員屬性 方法 塊 static成員屬性 靜態變數,全域性變數 static成員 塊 用於初始化靜態變數 static成員方法 靜態方法 同一類中,在靜態方...