freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

面向對象設計六大原則-資料下載頁

2025-05-07 21:44本頁面
  

【正文】 印刷,顯得笨重,實現殊為不易;一旦發(fā)現錯字別字,就很難修改,往往需要整塊雕版重新雕刻。 例一: 參考下圖的設計,在這個設計里,取款、存款、轉帳都使用一個通用界面接口,也就是說,每一個類都被強迫依賴了另兩個類的接口方法,那么每個類有可能因為另外兩個類的方法 (跟自己無關 )而被影響。拿取款來說,它根本不關心“存款操作”和“轉帳操作”,可是它卻要受到這兩個方法的變化的影響。 那么我們該如何解決這個問題呢?參考下圖的設計,為每個類都單獨設計專門的操作 接口,使得它們只依賴于它們關系的方法,這樣就不會互相影了! 例二: 使用多個專門的接口還能夠體現對象的層次,因為我們可以通過接口的繼承,實現對總接口的定義。例如, .NET 框架中 IList接口的定義。 1. public interface IEnumerable 2. { 3. IEnumerator GetEnumerator()。 4. } 5. public interface ICollection : IEnumerable 6. { 7. void CopyTo(Array array, int index)。 8. 9. // 其余成員略 10. } 11. public interface IList : ICollection, IEnumerable 12. { 13. int Add(object value)。 14. void Clear()。 15. bool Contains(object value)。 16. int IndexOf(object value)。 17. void Insert(int index, object value)。 18. void Remove(object value)。 19. void RemoveAt(int index)。 20. 21. // 其余成員略 22. } 如果不采用這樣的接口繼承方式,而是定義一個總的接口包含上述成員,就無法實現 IEnumerable 接口、ICollection接口與 IList接口成員之間的隔離。假如這個總接口名為 IGeneralList,它抹平了 IEnumerable接口、 ICollection 接口與 IList 接口之間的差別,包含了它們的所有方法?,F在,如果我們需要定義一個 Hashtable 類。根據數據結構的特性,它將無法實現 IGeneralList 接口。因為 Hashtable 包含的 Add()方法,需要提供鍵與值,而之前針對 ArrayList 的 Add()方法,則只需要值即可。這意味著兩者的接口存在差異。我們需要專門為 Hashtable 定義一個接口,例如 IDictionary,但它卻與 IGeneralList 接口不存在任何關系。正是因為一個總接口的引入,使得我們在可枚舉與集合層面上丟失了共同的抽象意義。雖然Hashtable 與 ArrayList 都是可枚舉的,也都具備集合特征,它 們卻不可互換。 如果遵循接口隔離原則,將各自的集合操作功能分解為不同的接口,那么站在 ICollection 以及IEnumerable 的抽象層面上,可以認為 ArrayList 和 Hashtable 是相同的對象。在這一抽象層面上,二者是可替換的,如圖 29所示。這樣的設計保證了一定程度的重用性與可擴展性。從某種程度來講,接口隔離原則可以看做是接口層的單一職責原則。 圖 29 遵循接口隔離原則 倘若一個類實現 了所有的專門接口,從實現上看,它與實現一個總接口的方式并無區(qū)別;但站在調用者的角度,不同的接口代表了不同的關注點、不同的職責,甚至是不同的角色。因此,面對需求不同的調用者,這樣的類就可以提供一個對應的細粒度接口去匹配。此外,一個龐大的接口不利于我們對其進行測試,因為在為該接口實現 Mock 或 Fake對象 時,需要實現太多的方法。 概括地講,面向對象設計原則仍然是面向對象思想的體現。例如,單一職責原則與接口隔離原則體現了封裝的思想,開放封閉原則體現了對象的封裝與多態(tài),而 Liskov 替換原則是對對象繼承的規(guī)范,至 于依賴倒置原則,則是多態(tài)與抽象思想的體現。在充分理解面向對象思想的基礎上,掌握基本的設計原則,并能夠在項目設計中靈活運用這些原則,就能夠改善我們的設計,尤其能夠保證可重用性、可維護性與可擴展性等系統(tǒng)的質量屬性。這些核心要素與設計原則,就是我們設計的對象法則,它們是理解和掌握設計模式的必備知識。 7 組合 /聚集復用原則 組合 /聚合復用原則( Composite/Aggregate Reuse Principle CARP) .組合和聚合都是對象建模中關聯( Association)關系的一種 .聚合表示整體與部分的關 系,表示“含有”,整體由部分組合而成,部分可以脫離整體作為一個獨立的個體存在。組合則是一種更強的聚合,部分組成整體,而且不可分割,部分不能脫離整體而單獨存在。在合成關系中,部分和整體的生命周期一樣,組合的新的對象完全支配其組成部分,包括他們的創(chuàng)建和銷毀。一個合成關系中成分對象是不能與另外一個合成關系共享。 組合 /聚合和繼承是實現復用的兩個基本途徑。 合成復用原則是指盡量使用合成 /聚合,而不是使用繼承。 只有當以下的條件全部被滿足時,才應當使用繼承關系。 1 子類是超類的一個特殊種類,而不是超類的一個角色,也就 是區(qū)分“ HasA”和“ IsA” .只有“ IsA”關系才符合繼承關系,“ HasA”關系應當使用聚合來描述。 2 永遠不會出現需要將子類換成另外一個類的子類的情況。如果不能肯定將來是否會變成另外一個子類的話,就不要使用繼承。 3 子類具有擴展超類的責任,而不是具有置換掉或注銷掉超類的責任。如果一個子類需要大量的置換掉超類的行為,那么這個類就不應該是這個超類的子類。 錯誤的使用繼承而不是合成 /聚合的一個常見原因是錯誤地把“ HasA”當成了“ IsA” .”IsA”代表一個類是另外一個類的一種;而“ HasA”代表一個類是另外一個類的一個角色,而不是另外一個類的特殊種類。 我們需要辦理一張銀行卡,如果銀行卡默認都擁有了存款、取款和透支的功能,那么我們辦理的卡都將具有這個功能,此時使用了繼承關系: 為了靈活地擁有各種功能,此時可以分別設立儲蓄卡和信用卡兩種,并有銀行卡來對它們進行聚合使用。此時采用了合成復用原則 銀行卡 + 取款 ()+ 存款 ()+ 透支 ()你的銀行卡+ 取款 ()+ 存款 ()+ 透支 ()我的銀行卡+ 取款 ()+ 存款 ()+ 透支 () 儲蓄卡 + 取款 ()+ 存款 ()信用卡+ 透支 ()銀行卡我的銀行卡+ 取款 ()+ 存款 ()+ 透支 ()
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1