透切理解面向對象三大基本特性是理解面向對象五大基本原則的基礎.
三大特性是:封裝,繼承,多態
封裝,是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。封裝是面向對象的特征之一,是對象和類概念的主要特性。 簡單的說,一個類就是一個封裝了數據以及操作這些數據的代碼的邏輯實體。在一個對象內部,某些代碼或某些數據可以是私有的,不能被外界訪問。通過這種方式,對象對內部數據提供了不同級別的保護,以防止程序中無關的部分意外的改變或錯誤的使用了對象的私有部分。
繼承,是指可以讓某個類型的對象獲得另一個類型的對象的屬性的方法。它支持按級分類的概念。繼承是指這樣一種能力:它可以使用現有類的所有功能,并在無需重新編寫原來的類的情況下對這些功能進行擴展。 通過繼承創建的新類稱為“子類”或“派生類”,被繼承的類稱為“基類”、“父類”或“超類”。繼承的過程,就是從一般到特殊的過程。要實現繼承,可以通過“繼承”(Inheritance)和“組合”(Composition)來實現。繼承概念的實現方式有二類:實現繼承與接口繼承。實現繼承是指直接使用基類的屬性和方法而無需額外編碼的能力;接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力;
多態,就是指一個類實例的相同方法在不同情形有不同表現形式。多態機制使具有不同內部結構的對象可以共享相同的外部接口。這意味著,雖然針對不同對象的具體操作不同,但通過一個公共的類,它們(那些操作)可以通過相同的方式予以調用。
多態是三個特性中比較抽象的,也只是剛開始接觸面向對象了解比較少的,所以在這里詳細說一下:
例:
定義:某一類事物的多種表現形態
動物:
貓—加菲貓
??—藍貓
狗—哈士奇
??—金毛
程序中:
2.1子類繼承父類
2.2子類有重寫父類的方法
2.3父類指針指向子類對象
動物 a = [貓 alloc] init];
動物 a = [狗 alloc] init];
表現形式: 在父類指針指向不同的對象的時候,通過父類指針調用被重寫的方法,會執行該指針所指向的那個對象的方法;
優點:
多態最重要的優點在于簡化了編程接口,何以理解?他允許在類和類之間重用一些習慣性的命名,而不是為每一個新加的函數命名一個新的名字。。這樣,編程接口就是一些抽象行為的集合,從而和實現接口的類區分開。
多態也使得代碼可以分散在不同的對象中,而不用視圖在一個函數中考慮到所有可能的對象。這樣可以優化代碼的擴展性和復用性。擋一個新的情景出現時,無須對現有的代碼進行改動,而只需要增加一個新的類和新的同名的方法。
比如JAVA中的抽象類的應用.基于多態實現。
五大基本原則
單一職責原則SRP(Single Responsibility Principle)
是指一個類的功能要單一,不能包羅萬象。如同一個人一樣,分配的工作不能太多,否則一天到晚雖然忙忙碌碌的,但效率卻高不起來。
開放封閉原則OCP(Open-Close Principle)
一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的。比如:一個網絡模塊,原來只服務端功能,而現在要加入客戶端功能,
那么應當在不用修改服務端功能代碼的前提下,就能夠增加客戶端功能的實現代碼,這要求在設計之初,就應當將服務端和客戶端分開,公共部分抽象出來。
替換原則(the Liskov Substitution Principle LSP)
子類應當可以替換父類并出現在父類能夠出現的任何地方。比如:公司搞年度晚會,所有員工可以參加抽獎,那么不管是老員工還是新員工,
也不管是總部員工還是外派員工,都應當可以參加抽獎,否則這公司就不和諧了。
依賴原則(the Dependency Inversion Principle DIP) 具體依賴抽象,上層依賴下層。假設B是較A低的模塊,但B需要使用到A的功能,
這個時候,B不應當直接使用A中的具體類: 而應當由B定義一抽象接口,并由A來實現這個抽象接口,B只使用這個抽象接口:這樣就達到
了依賴倒置的目的,B也解除了對A的依賴,反過來是A依賴于B定義的抽象接口。通過上層模塊難以避免依賴下層模塊,假如B也直接依賴A的實現,那么就可能造成循環依賴。一個常見的問題就是編譯A模塊時需要直接包含到B模塊的cpp文件,而編譯B時同樣要直接包含到A的cpp文件。
接口分離原則(the Interface Segregation Principle ISP)
模塊間要通過抽象接口隔離開,而不是通過具體的類強耦合起來
------整理