世界是具體的,認知是抽象的。像自然界中的生物、植物、動物乙個個名詞,就是對一系列具體個體抽象出來的稱謂,而魚、老虎、樹等就是乙個個實在的具體。哦,也許你會說,樹也是對一系列具體個體的抽象出來的稱謂,對也不對,對是因為樹確實是一系列具體個體的抽象稱謂,不對是因為照這個邏輯下去,就會陷入死迴圈,直到小到細胞,原子,夸克,但是你能保證夸克就是最小的具體嗎?還好前人已經幫我們解決這個思考了,通過繼承的關係,可以從抽象開始,逐層的繼承下去,就會形成乙個具有抽象與具體關係的層次關係,就如同我們的世界那樣,也是通過抽象與具體形成的層次。
物件導向的設計實質是通過對現實世界提煉出符合需求的抽象封裝,然後通過逐層繼承抽象並拓展實現,實現同一繼承**然而變現多型性質。
比如下圖的繼承關係,這是遊戲的從最抽象出的物件,到角色、靜態採集物、場景,再到人物、寵物、怪、坐騎等,就是典型的物件導向設計。
軟體設計就難的是應對變化、變化、變化。通過把系統功能封裝成乙個個物件,就可以粒度細化、功能實現的耦合度低和職責獨立,細化了就能夠更好的把控;耦合度低就是高內聚、松耦合,能夠減少功能實現之間的關聯,降低修改的影響;職責單一獨立就能夠提高**復用,復用就能夠提高開發效率與提高可維護性。
為了能夠更好的實現物件導向設計,應該做到隔離變化,也就是把變與不變隔離開,不要讓變化的東西影響到不變的,適應軟體的變化。物件各有獨自的功能,也就是物件的功能要單一,新能功能型別不應該影響到舊的物件。這裡說的比較簡單,其實大師們已經總結出物件導向設計原則來指導我們的開發了。
3.1依賴倒置原則
3.2開閉原則
3.3單一職責原則
3.4黎克特制替換原則
3.5介面隔離原則
3.6優先使用物件組合,而不是類繼承
3.7找出變化點,封裝變化點
3.8面向介面程式設計,而不是物件導向程式設計在現實中,面向介面設計隨處可見,比如那麼多的標準協會,比如發布的c++標準,c-98/03/11等,比如各個工廠生產的零件等,都有各自對應的生產標準,只有介面標準化,才會使產業更加強盛。相反,介面沒有標準,就會造成生產力低下,根本無經濟全球化一說了。
面向介面程式設計就是抽象需求成乙個個獨立的介面/抽象類,然後被繼承或委託/組成的形式來實現或拓展新的具體或更加強大完善的抽象,通過層層封裝、繼承,最後就會實現執行時多型的特性,從而提高**的靈活性。
本文通過分析什麼是物件導向,為什麼需要物件導向,和物件導向設計的原則來說明軟體開發中物件導向設計是實現大型軟體程式的基石。面向介面程式設計,而不是物件導向程式設計,能夠使**更加靈活,更加優美強大。
設計模式 物件導向設計原則
軟體的可維護性和可複製性是兩個非常重要的軟體質量屬性 物件導向物件設計原則是設計模式學習的基礎。每乙個設計模式都符合乙個或者多個物件導向設計原則 單一職責原則是最簡單的物件導向設計原則,它用於控制類的粒度大小 單一設計原則 乙個物件應該只包含單一的職責,並且該職責被完整的封裝在乙個類裡 這也意味著 ...
設計模式 物件導向設計原則
物件導向設計原則為支援可維護性復用而誕生,這些原則蘊含在很多設計模式中,它們是從許多設計方案中總結出的指導性原則。最常見的7種物件導向設計原則如下表所示 使用頻率 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責 開閉原則 o...
設計模式 物件導向設計原則
類和方法的職責應該盡可能是單一的。其核心思想是 乙個類,最好只做一件事,只有乙個引起他的變化。對擴充套件開放,對修改關閉。繼承 依賴於抽象。a,高層次模組不依賴於低層次模組,他們都應該依賴於抽象。b,抽象不依賴於具體,具體應該依賴於抽象。對介面程式設計,對基類程式設計 使用小而專的介面,介面的定義盡...