其他層次的復用
複習軟體構造看到這裡,ppt中對於類之間的關係中的association和composition的描述一摸一樣,因此產生了疑問,查閱了相關的資料之後,弄明白了二者的區別,遂作此總結。
復用可以產生可靠的軟體
復用產生標準化的軟體
這大概是最常用的關係了。子類通過extends關鍵字繼承父類,從而獲得父類的所有非私有的域和方法,比如tiger類繼承animal類,它就具有了animal的所有屬性和行為。同時子類也可以重寫(override)或重定義(redefine)父類的行為。通過繼承的方法實現模組的復用,可以避免無用的通過呼叫或**實現功能的方法,與實際情況更加吻合。但是子類繼承了父類所有的域和方法,有時並非所有的父類行為都是我們需要的,這就產生了很多無用的方法,而且在使用繼承之前通常都要設計好繼承層級,這樣也增加了實現的代價。
委託相對於繼承是一種更加靈活的模組復用方式。委託只是當乙個物件依賴於另乙個物件來實現其功能的某個子集時(乙個實體將某些東西傳遞給另乙個實體),例如 sorter將功能委派給某些comparator。明智的委派使**重用成為可能,設計良好的委託有利於復用。可以分為顯示委託(explicit delegation,將傳送物件傳遞給接收物件)和隱式委託(implicit delegation,通過語言的成員查詢規則)兩種。
委託的三種型別
use(使用)
使用類的最簡單形式是呼叫其方法。兩個類之間的這種關係形式稱為「使用 - 關係」使用(其中乙個類使用另乙個類而不實際將其作為屬性合併。例如,可以是引數或在方法中本地使用方法引數或者區域性變數)。使用虛線箭頭表示:
association(關聯)
關聯是更加緊密的一種重用形式,兩個類中的任意乙個都可以擁有對方作為自己的屬性/例項變數,可以表示成英語中的「has a」關係。比如學生和老師就可以表示成這樣的一種關聯關係,乙個老師可以有很多學生,而乙個學生也可以有很多老師。使用標有數字的實線表示:
composition(組合)
這種復用形式是一種更加緊密的關係,其中乙個類作為另乙個類的組成部分並且不能脫離單獨存在,可以表示成英語中的「owns a」關係。比如人和心臟的關係就可以表示成這樣的組合關係,心臟作為人的乙個元件,不能脫離人單獨作為完整個體存在。使用實線和實心菱形來表示。
庫是一組提供可重用功能的類和方法(api)。乙個好的api應該:易於學習、易於使用,即使沒有文件、難以濫用、易於閱讀和維護使用它的**、足以滿足要求的強大功能、易於發展、適合受眾。
系統級別的復用是通過framework(框架)來實現的。框架用於子系統設計,包含抽象和具體類的集合以及每個類之間的介面。通過新增元件來填充缺少的設計元素並例項化抽象類來實現子系統,是可重複使用的實體。應用框架是包含了介面、抽象類和具體類的可復用程式,使用時需要 在其基礎上補充所需要的設計元素。擴充套件框架:需要擴充套件通用框架以建立特定的應用程式或子系統;框架可以延伸,開發者可以定義具體類從抽象類繼承操作,增加能夠被框架呼叫的方法;同時框架非常複雜,學習使用它們需要時間(例如directx或mfc)。
vuex 模組化 根級別 和 模組級別 差異
1 模組級別的 action 和 mutation 只能處理所在模組中的 state,根級的 action 和 mutation 除了訪問根級 state 之外,還可以通過 state.module yyy 來訪問模組中的 state。分割模組的作用是分治,可以適當降低複雜度,同時避免不同模組之間狀...
SQLserver鎖和事務隔離級別的比較與使用
來自 物件 鎖 每條sql 語句 隔離 事務 鎖 併發問題 丟失更新 未確認的讀取 髒讀 不一致的分析 非重複讀 多次讀取相同的資料 行 不一致 其他使用者更改update 幻像讀 多次讀取有不存在和新增的資料 其他使用者插入insert 或刪除delete 隔離級別 隔離級別 髒讀 不可重複讀取 ...
SQLserver鎖和事務隔離級別的比較與使用
物件 鎖 每條sql 語句 隔離 事務鎖 併發問題 丟失更新 未確認的讀取 髒讀 不一致的分析 非重複讀 多次讀取相同的資料 行 不一致 其他使用者更改update 幻像讀 多次讀取有不存在和新增的資料 其他使用者插入insert 或刪除delete 隔離級別 隔離級別 髒讀 不可重複讀取 幻像 說...