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