通過學習設計模式對物件導向程式設計有了更深層次的了解。在《大話設計模式》一書中的第乙個設計模式裡(簡單工廠模式)體會到了自己學習物件導向程式設計時的歷程。
首先要保證**無錯,我想這是大部分初學者的心願。其次就是**規範,這一點是很重要的,程式不僅僅是寫給自己看的,更需要讓別人能看懂。別人能看懂還不行,畢竟程式設計是已經成本很高的事,要想獲得收益,首先想到的就是要降低成本。那麼,降低哪些成本呢?當然這就要涉及到程式的維護、擴充套件和復用,這樣才能有效降低成本。而物件導向的程式設計方法也就應運而生了。眾所周知,物件導向有三個特性:封裝、繼承和多型。
封裝 是物件和類概念的主要特徵。
封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏,可以隱藏實現細節,使得**模組化。 繼承
繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。
通過繼承建立的新類稱為「子類」或「派生類」。
被繼承的類稱為「基類」、「父類」或「超類」。
繼承的過程,就是從一般到特殊的過程。繼承可以擴充套件已存在的**模組(類);它和封裝的目的都是為了——**重用。 多型
多型性(polymorphisn)是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。
多型與封裝和繼承有所不同,它是為了實現介面重用。
實現多型,有兩種方式:覆蓋、過載。
覆蓋:是指子類重新定義父類的虛函式的做法。
過載:是指允許存在多個同名函式,而這些函式的參數列不同(或許引數個數不同,或許引數型別不同,或許兩者都不同)。
但是,過載並不是嚴格意義上的多型,只不過它可以實現多型的特性而已。
多型必須具備三大特徵:子類繼承父類,子類覆蓋父類,父類指向子類。如果是這樣的話,就說明只有繼承關係才是多型的先決條件。
多型是基於對抽象方法的覆蓋來實現的,用統一的對外介面來完成不同的功能。過載也是用統一的對外介面來完成不同的功能。那麼兩者有什麼區別呢?
過載,是指允許存在多個同名方法,而這些方法的引數不同。過載的實現是:編譯器根據方法不同的參數列,對同名方法的名稱做修飾。對於編譯器而言,這些同名方法就成了不同的方法。它們的呼叫位址在編譯期就繫結了。
多型:是指子類重新定義父類的虛方法(virtual,abstract)。當子類重新定義了父類的虛方法後,父類根據賦給它的不同的子類,動態呼叫屬於子類的該方法,這樣的方法呼叫在編譯期間是無法確定的。
不難看出,兩者的區別在於編譯器何時去尋找所要呼叫的具體方法,對於過載而言,在方法呼叫之前,編譯
器就已經確定了所要呼叫的方法,這稱為「早繫結」或「靜態繫結」;而對於多型,只有等到方法呼叫的那一刻,編譯器才會確定所要呼叫的具體方法,這稱為「晚繫結」或「動態繫結」。
多型是指只有到執行時才能確定要執行的**,即指的是後繫結。
設計模式就是物件導向程式設計的良好體現,在接下來的學習中,將重點總結設計模式。
物件導向基本特徵
物件導向4大基本特徵 抽象 封裝 繼承 多型。抽象。將一些事物的共性抽離出來歸為乙個類。如對於動物,具有生命體徵 活動能力等區別於其它事物的共同特徵 封裝。有選擇地隱藏和暴露資料和方法。比如有u盤這個類,我希望隱藏內部組成和實現,只暴露usb介面以供使用 繼承。子類可以直接使用父類的部分資料和方法,...
物件導向的三個基本特徵 物件導向基本特徵
物件導向的三個基本特徵 封裝是物件和類概念的主要特徵,就是把客觀的封裝起來,只對外暴露出來,並把自己的資料和方法只讓可信的類或物件操作作用 隱藏實現細節,使得 模組化 使用現有類的所有功能,並且無需重新編寫原來的類中的方法對這些功能的擴充套件,oc只能實現單繼承,如果想要實現多繼承的話可以通過分類或...
物件導向的基本特徵
物件導向方法具有三個基本特徵 封裝 encapsulation 繼承 inheritance 和多型 polymorphism 其中 封裝指的是將物件的實現細節隱藏起來,然後通過一些公用方法來暴露該物件的功能 繼承是物件導向實現軟體復用的重要手段,當子類繼承父類之後,子類作為一種特殊的父類,將直接獲...