框架是: - 應(yīng)用或子系統(tǒng)的設(shè)計
- 表示為:
- 一組抽象類和
- 這些類中對象的協(xié)作方法
用框架來創(chuàng)建應(yīng)用通過: - 建立一個新的子類
- 組合對象
- 修改運(yùn)行中的程序
(編輯腳本) 逆向控制 子程序庫 用戶程序調(diào)用可重用的代碼. 用戶設(shè)計程序結(jié)構(gòu). 框架 重用代碼調(diào)用客戶程序 主要由重用代碼(框架)決定程序結(jié)構(gòu) 框架應(yīng)用的部件 新的類使用組件的步組L 測試框架 類 - Test, TestResult, TestSuite 通過創(chuàng)建 Test的子類來使用。 定義 instance methods 來 配置、運(yùn)行測試 定義 class methods 來建立一個測試單元 Model/View/Controller Classes - Model, View, Controller, ApplicationModel, ValueModel, etc. Use by using GUI builder to make a screen; the GUI builder automatically builds an ApplicationModel and a window-spec that later gets interpreted to build a window. HotDraw Classes - Figure, Drawing, Handle, Tool, DrawingEditor Subclass DrawingEditor, Figure, rarely Drawing Parameterize Handle, Tool. There is a graphical tool for defining new Tools. White-box vs. Black-box White-box 用戶化通過定義子類強(qiáng)調(diào)繼承 必須了解內(nèi)部結(jié)構(gòu) 設(shè)計簡單容易 學(xué)習(xí)困難,需要更多的編程 Black-box 通過配置用戶化 強(qiáng)調(diào)多態(tài) 必須了解接口 設(shè)計復(fù)雜、困難 學(xué)習(xí)容易,需要較少的編程 框架設(shè)計的第一規(guī)則 相關(guān)的原則 框架是抽象: 人們從實際的應(yīng)用中歸納出來 設(shè)計重用的代碼需要疊代 框架編碼領(lǐng)域知識 框架的客戶是程序員(譯者:最終還是應(yīng)用的客戶) 從實際案例中歸納 人們思考是具體的,不是抽象的. 通過研究具體的例子抽象被徹底的發(fā)現(xiàn) 歸納: - 找出名稱不同的相同事物,
- 通過參數(shù)化排除差異,
- 把大的事物分解成小的部分以發(fā)現(xiàn)類似的組件, 并且
- 分類相似的事物.
發(fā)現(xiàn)抽象類 抽象類的發(fā)現(xiàn)是通過歸納具體類. 定義類共有的SuperClass: - 定義操作的公共接口
- 把具有相同實現(xiàn)的操作轉(zhuǎn)移到SuperClass
- 把實現(xiàn)不同的操作定義為抽象操作
(continued) - 定義公共接口(interface)
- 重命名操作使各個類有相同的操作名
- 重新排列參數(shù)、修改參數(shù)類型等.
- 重構(gòu) 操作
框架需要迭代 能夠重用的代碼需要多次迭代. 軟件工程基本規(guī)則 如果程序沒有測試, 他將不能工作. 結(jié)論: 還沒被重用的軟件是不能重用的. 框架編碼領(lǐng)域知識 框架解決特定的一組問題. Not always application-domain specific, but domain specific. (GUI, distribution, structured drawing editor, business transaction processing, workflow) 客戶是程序員 框架的目的是更容易的構(gòu)建應(yīng)用. 適用這些標(biāo)語為程序員: 客戶總是正確的. 我們是客戶驅(qū)動. 理解你的客戶. 實例驅(qū)動的設(shè)計 歸納是迭帶的. 小的改變是最多的. 少數(shù)大的改變代表看待問題的新方法. 更快的歸納: - 接受不同的意見
- 解釋/辯護(hù) 當(dāng)前的設(shè)計
開發(fā)框架的理想的方法 1) 分析問題域 - 學(xué)習(xí)眾所周知的抽象.
- 收集用框架編寫的例子程序. (最少 4 or 5).
設(shè)計框架的理想方法 2) 設(shè)計覆蓋例子的抽象. 3) 通過編寫這些例子來測試框架. - 每個例子都是相互獨立的程序.
- 履行一個測試意味著開發(fā)一個軟件.
抽象設(shè)計 設(shè)計階段: 尋找共性, 描述每個想法. 用設(shè)計模式 靈活性和洞察力是有用的, 而且進(jìn)展是困難的. 設(shè)計模式 設(shè)計模式使設(shè)計更接近黑盒. 怎樣表示對象的變化 - Strategy -- 算法
- Prototype -- 產(chǎn)品
- State -- 對象的狀態(tài)
- Mediator – 對象相互調(diào)用的方法
設(shè)計模式的使用 模式使設(shè)計更復(fù)雜. 模式使設(shè)計更有彈性. 你需要這種彈性嗎? 這復(fù)雜性是否值得? 在兩個模式中做選擇時選擇使設(shè)計更簡單的. 為什么理想永遠(yuǎn)是理想 分析領(lǐng)域需求分析個別的例子,已經(jīng)是非常困難的. - 即使例子已經(jīng)被分析也僅僅實用.
- 分析和實現(xiàn)例子是工程的很大一部分成本.
- 人們需要匯集例子實現(xiàn)的反饋.
開發(fā)框架的好辦法 精選兩個相似的應(yīng)用. 包括在相同領(lǐng)域有經(jīng)驗的開發(fā)者. 一個框架組 兩個應(yīng)用組 - 框架組
交換軟件意見 考慮其他的應(yīng)用 解釋教受框架 - 應(yīng)用組
盡力重用框架 抱怨框架如何難于使用 開發(fā)框架的典型方法 注意到許多應(yīng)用是相似的. 用面向?qū)ο蟮恼Z言開發(fā)領(lǐng)域中的下一個應(yīng)用. 把軟件劃分為可重用和不可重用兩部分. 開發(fā)下一個應(yīng)用盡可能的重用可重用的部分. 驚奇! 框架的重用性不好. 修改. 開發(fā)下一個盡可能重用的軟件. 重用的副作用 相互沖突的目標(biāo) 重用的花費(fèi)是昂貴的 堅持重用是困難的 重用的有利的一面 框架使用者利用框架開發(fā)者的經(jīng)驗. 僅增加有價值的特性. 幫助防止框架太復(fù)雜、太抽象. 另一種策略 定義框架 – 原形幾個小的應(yīng)用. 創(chuàng)建真實應(yīng)用. 重構(gòu)框架和老的應(yīng)用. 過程摘要 以想得到的應(yīng)用的例子開始 疊代的開發(fā)抽象 通過創(chuàng)建應(yīng)用來測試 細(xì)節(jié) 1) 三個例子 2) White-box 框架 3) 組件庫 4)熱點( Hot Spots) 5) 扁平化對象 (continued) 6) 平滑對象 7) Black-box 框架 8) Visual Builder 9) 語言工具 http://st-www.cs.uiuc.edu/users/droberts/evolve.html 應(yīng)用產(chǎn)生器 Black-box 更容易: 用a picture描述應(yīng)用 從 a picture產(chǎn)生代碼 可視化編程語言使非程序員也能創(chuàng)建應(yīng)用. 黑盒框架的缺點 黑盒框架趨向于有: - 更多種類的對象
- more artificial kinds of objects(真不知怎么描述?)
- 對象間更復(fù)雜的關(guān)系
- 更多對象
不完善的框架強(qiáng)迫你調(diào)試更復(fù)雜的系統(tǒng). 模版和重構(gòu) 重構(gòu) - 在不影響功能的情況下改變程序結(jié)構(gòu).
- 修改重用問題的方法.
- 創(chuàng)建一個彈性的 "hot spot"
- 經(jīng)常應(yīng)用一個模版
重構(gòu)幫助發(fā)現(xiàn)組合 框架設(shè)計提示 用對象組合代替繼承 多使用模版 /少泛化 框架應(yīng)該打破限制 戰(zhàn)略 開發(fā)框架是昂貴的,想清楚再做. - 框架開發(fā)需要長的周期.
- 好的框架能給你帶來競爭優(yōu)勢.
從簡單開始. - 有 OOP經(jīng)驗
- 選擇訓(xùn)練好的抽象
- 先建一個小的框架
- 歸納已經(jīng)存在的系統(tǒng)
- 起先保持小的用戶群
客戶是至關(guān)緊要的 進(jìn)早的找到用戶,并聽取他們的反饋. 是你最初的客戶成功. 最初的客戶是開發(fā)小組的一部分. 重用的環(huán)節(jié) 現(xiàn)實: Projects may customize the initial framework, and start competing streams of development. 處理疊代 不要說框架是有用的除非你的客戶這么說. 當(dāng)框架演化時保持小的客戶群. 一個成功的框架必須不斷發(fā)展來適應(yīng)新的用戶需求. 不要不停的修補(bǔ). 有計劃的發(fā)布版本 并協(xié)調(diào)客戶. 文檔和練習(xí) 框架文檔的價值在 重用的程序一定要是可理解的. 精練的文檔使框架更重用. 文檔以例子為基礎(chǔ). 文檔和練習(xí)必須經(jīng)過測試. Documenting system shows how to change it. Framework developers must be intimately involved. NIH vs. TILI Problem with reuse is NOT fault of customer. Software is not as reusable as it is claimed. It is hard to make software reusable. 可重用的設(shè)計是困難的 - 對于應(yīng)用領(lǐng)域 框架必須是抽象并強(qiáng)大的
- 必須是可定制的對于用戶
- 必須容易理解
|