? ? ? 已經面向對象編程多年了,漸漸地對面向對象有了越來越深的體會,下面談談我對面向對象的拙見:)
? ? ? 面向對象三大特性:封裝、繼承、多態。
? ? ? 首先是封裝,我覺得封裝是面向對象的基礎,封裝讓各種相關的數據和方法形成一個有機的整體(對象)。各種對象由于組成元素(字段、屬性)和行為(方法)的不同而不同,這樣世界才豐富多彩。封裝讓對象內部與外界有了明顯的”界”。再談談封裝的粒度,完全面向對象編程是不可能的或很不現實的,并且沒必要,面向對象并不是對現實的模擬,需要根據項目的情況來調整對象的粒度,比如:現在我們考察一個地區有多少棟建筑,就沒必要考慮建筑的形狀,建筑的層數,建筑里有多少房間等。我覺得把握適當的粒度也從一方面反映個人抽象能力。
? ? ? 其次是繼承,繼承是面向對象中類與類(接口)之間的關系,我覺得用生物進化論類比繼承是很恰當的,繼承讓對象衍生出更具多樣性的對象(多態)。繼承的出發點是好的,然而在編程過程中繼承的深度是需要謹慎考慮,繼承得太深了容易陷入模擬現實的圈子里。Adapter設計模式,把繼承的深度降低了,同時設計帶來了更大的靈活性。依賴抽象(或基類),不要依賴具體。
? ? ? 最后是多態,我覺的多態可以從宏觀和微觀兩個方面來看。從宏觀來看,類的泛化是一種多態的表現形式,派生類擴展了基類,基類下的派生類共性于基類,特性于擴展;微觀上看,就要深入類的內部了,重載反映了行為上的多種形態,方法參數的抽象性我覺得也是多態的體現。
? ? ?封裝 — 造“物”,繼承 — 進化,多態 — 求同存異。
? ? ?以上是本人對面向對象見解,不喜勿噴,因為多態:)
?