隨筆-1  評(píng)論-68  文章-98  trackbacks-0

          “實(shí)戰(zhàn)OO”學(xué)習(xí)筆記

          作者:徐建祥(netpirate@gmail.com

          時(shí)間:2006/01/11

          來(lái)自:http://www.anymobile.org

           

          “實(shí)戰(zhàn)OO系列文章是徐鋒發(fā)表在2004年《程序員》雜志的一系列關(guān)于面向?qū)ο蟮娜腴T文章,通過(guò)圖書館的實(shí)例,深入淺出地講述了基于軟件建模技術(shù)的面向?qū)ο箝_(kāi)發(fā)過(guò)程。介紹了面向?qū)ο蟮姆治觯?/SPAN>OOA)和設(shè)計(jì)(OOD),并對(duì)OOP做了指導(dǎo),讓你迅速了解OO的威力,成為你分析系統(tǒng)和設(shè)計(jì)解決方案的工具。

           

          全系列包括:

          1)域建模

          2)用例建模

          3)魯棒性分析

          4)交互建模

          5)過(guò)程總結(jié)

          6)部署與實(shí)施

          7)補(bǔ)遺

           

          1、  問(wèn)題域建模,概念模型

           

          輔助性的,靜態(tài)模型,幫助開(kāi)發(fā)團(tuán)隊(duì)了解客戶所處的世界。

           

          從現(xiàn)實(shí)問(wèn)題域中找到最有代表性的概念對(duì)象;整理成類圖;改成文字描述,基本完成術(shù)語(yǔ)表。

           

          a、  概念模型的目的是讓開(kāi)發(fā)團(tuán)隊(duì)對(duì)問(wèn)題域,業(yè)務(wù)知識(shí)建立正確的理解;

          b、  概念模型是在開(kāi)發(fā)過(guò)程中產(chǎn)生出來(lái)的第一個(gè)系統(tǒng)的靜態(tài)模型。

           

          2、  用例建模,用例模型

           

          反映系統(tǒng)行為的,動(dòng)態(tài)模型,幫助開(kāi)發(fā)團(tuán)隊(duì)明白客戶想解決什么問(wèn)題。

           

          Ivar Jacobson:“用例實(shí)例是在系統(tǒng)中執(zhí)行的一系列動(dòng)作,這些動(dòng)作將生成特定參與者可見(jiàn)的價(jià)值結(jié)果。一個(gè)用例定義一組用例實(shí)例。”

           

          a、  需求(功能特性)捕獲,編號(hào)(FEAT***),以便進(jìn)行跟蹤管理;

          b、  識(shí)別參與者(actor,與系統(tǒng)交互,系統(tǒng)之外的所有事物);

          c、  合并需求,編號(hào)實(shí)例(UC**),決定用例的優(yōu)先級(jí);

          d、  細(xì)化用例描述:搭框架;細(xì)化事件流(溝通);補(bǔ)缺漏(確認(rèn))。

           

          1、   用例名稱:

                新增書籍信息(UC01

          2、   簡(jiǎn)要說(shuō)明:

                錄入新購(gòu)書籍信息,并自動(dòng)存儲(chǔ)建檔。

          3、   事件流:

                3.1 基本事件流

                3.2 擴(kuò)展事件流

          4、   非功能需求:

          5、   前置條件:

                用戶進(jìn)入圖書管理系統(tǒng)。

          6、   后置條件:

                完成新書信息的存儲(chǔ)建檔。

          7、   擴(kuò)展點(diǎn):

                無(wú)。

          8、   優(yōu)先級(jí):

                最高(滿意度5,不滿意度)

            1)前置條件:指在用例啟動(dòng)時(shí),參與者(Actor)與系統(tǒng)應(yīng)置于什么狀態(tài),這個(gè)狀態(tài)應(yīng)該是系統(tǒng)能夠檢測(cè)到的、可觀測(cè)的;

            2)后置條件:用例結(jié)束時(shí),系統(tǒng)應(yīng)置于什么狀態(tài),這個(gè)狀態(tài)也應(yīng)該是系統(tǒng)能夠檢測(cè)得到的、可觀測(cè)的;

            3)基本事件流:基本事件流是對(duì)用例中常規(guī)、預(yù)期路徑的描述,也被稱為Happy day場(chǎng)景,這時(shí)大部分時(shí)間所遇到的場(chǎng)景;它將體現(xiàn)系統(tǒng)的核心價(jià)值;

            4)擴(kuò)展事件流:主要是對(duì)一些異常情況、選擇分支進(jìn)行描述。

           

          注:非核心實(shí)體無(wú)須過(guò)渡展開(kāi),如四輪馬車,將新增、修改、查詢、刪除,抽象為管理;可以通過(guò)包來(lái)實(shí)現(xiàn)用例層次。

           

          3、  Robustness魯棒分析,健壯性分析

           

          Ivar Jacobson 1991引入,分析與設(shè)計(jì)之間的橋梁。

          草圖,使得開(kāi)發(fā)者對(duì)于系統(tǒng)細(xì)節(jié)了解得更加清楚。

           

          3.1 分析的作用:

          a、  正確性檢查;

          b、  完整性檢查;

          c、  持續(xù)發(fā)現(xiàn)對(duì)象;

          d、  對(duì)象確定;

          e、  初步設(shè)計(jì):將分析的元素,類分為實(shí)體對(duì)象,控制對(duì)象,邊界對(duì)象。類似MVC

           

          實(shí)體對(duì)象:來(lái)自域模型,通常映射到數(shù)據(jù)表或文件中。

          控制對(duì)象:抽象應(yīng)用程序的執(zhí)行邏輯。

          邊界對(duì)象:用來(lái)完成參與者與系統(tǒng)之間交互的對(duì)象。

           

          3.2 分析規(guī)則:

          a、參與者,只能夠通過(guò)邊界對(duì)象與系統(tǒng)交互;

          b、邊界對(duì)象,只能與控制對(duì)象或參與者交互;

          c、實(shí)體對(duì)象,也只能與控制對(duì)象交互;

          d、控制對(duì)象,可以與邊界對(duì)象、實(shí)體對(duì)象交互,但不能與參與者交互。

           

          4、  交互建模

           

          序列圖,協(xié)作圖,詳細(xì)設(shè)計(jì)階段。通過(guò)尋找對(duì)象之間的交互關(guān)系,從而進(jìn)行“行為分配”。

          Ivar Jacobson:“只有在所有的用例為所有事件進(jìn)程建立了交互模型之后,才可以確定已經(jīng)發(fā)現(xiàn)系統(tǒng)所需的每個(gè)對(duì)象所扮演的角色,以及它們的責(zé)任。”

           

          序列圖Sequence diagram:體現(xiàn)事件發(fā)生的次序。

          協(xié)作圖Collaboration diagram:通過(guò)使用局部圖指明了各個(gè)對(duì)象之間是如何靜態(tài)相連的。

           

          a、  羅列實(shí)體對(duì)象;

          b、  羅列邊界對(duì)象和參與者,放置在左邊;

          c、  添加個(gè)類的屬性與方法;

          d、  引入基礎(chǔ)類;

          e、  質(zhì)量評(píng)審;

          1)    低耦合:耦合性是指兩個(gè)類之間的連接強(qiáng)度,耦合性越低,獨(dú)立性越高,越靈活。

          2)    高內(nèi)聚:內(nèi)聚性是指一個(gè)類的屬性和方法高度地集成,內(nèi)聚性越高,設(shè)計(jì)越合理。

          3)    效率:衡量的要點(diǎn)在于解決方案的執(zhí)行效率是否滿足系統(tǒng)要求。

          4)    完整性:是指在任何環(huán)境下都可以重復(fù)使用。

          5)    簡(jiǎn)單性:類越簡(jiǎn)單,出錯(cuò)的可能性越小,系統(tǒng)的靈活性和可維護(hù)性也越好。

          可以使用一些例如OCPSRPDIPLSP原則等經(jīng)典的面向?qū)ο笤O(shè)計(jì)原則來(lái)衡量。

          Robert C Martin《敏捷軟件開(kāi)發(fā)》

          f、   用設(shè)計(jì)模式進(jìn)行優(yōu)化。

           

          5、  過(guò)程總結(jié)

           

          現(xiàn)代軟件開(kāi)發(fā)過(guò)程:

           

          a、  RUPRational公司,Rose軟件,“用例驅(qū)動(dòng)、以體系結(jié)構(gòu)為中心,迭代、增量的軟件開(kāi)發(fā)過(guò)程。”

          RUP軟件開(kāi)發(fā)分為四個(gè)階段:

          1)      初始階段:理解和分析需求,生產(chǎn)用例模型框架,對(duì)優(yōu)先級(jí)較高的用例進(jìn)行細(xì)化;

          2)      精化階段:完成部分優(yōu)先級(jí)最高的用例開(kāi)發(fā),并完善出所有的用例模型;

          3)      構(gòu)建階段:分為多個(gè)迭代,逐步完成不同優(yōu)先級(jí)的用例開(kāi)發(fā);

          4)      交付階段:進(jìn)行各種功能、性能測(cè)試,進(jìn)行產(chǎn)品化、部署,完成整個(gè)系統(tǒng)的開(kāi)發(fā)工作。

           

          b、  XP,極限編程,“敏捷建模”,以最大化發(fā)揮人的能量為核心目標(biāo),以“小步快走”的邏輯知道開(kāi)發(fā),12個(gè)最佳實(shí)踐充分體現(xiàn)了其迭代式開(kāi)發(fā)的特點(diǎn)。

           

          User Story用戶故事是Kent Beck在極限編程(XP)方法論中推薦的最佳實(shí)踐之一。它由客戶參與編寫,說(shuō)明他們需要系統(tǒng)為他們做什么,一般用客戶的術(shù)語(yǔ)寫就,三句話左右。

          敏捷開(kāi)發(fā):

          1) 直接的溝通和交流;

          2) 分步實(shí)施、及時(shí)交付、及時(shí)測(cè)試;

          3) 從簡(jiǎn)單開(kāi)始,逐步完善;

          4) 積極主動(dòng);

          5) 接受變化,響應(yīng)變化,甚至從頭再來(lái)。

           

          c、  FDDFeature Drive Develop,特征驅(qū)動(dòng)開(kāi)發(fā),Together創(chuàng)始人Peter Coad所創(chuàng)。通過(guò)特征來(lái)制定開(kāi)發(fā)計(jì)劃,也是每日構(gòu)建為核心,強(qiáng)調(diào)按特征分步開(kāi)發(fā)和交付。一個(gè)特征就是一個(gè)小的、具有客戶價(jià)值的功能,通常表示為<action><result><object>

           

          迭代開(kāi)發(fā)過(guò)程:

           

          a、  第一次迭代

          1)      捕獲需求

          2)      建立初始的領(lǐng)域模型

          3)      建立用例模型框架

          4)      制定開(kāi)發(fā)計(jì)劃

          b、  第二次迭代

          1)      關(guān)鍵用例的Robustness分析與交互建模

          2)      體系結(jié)構(gòu)設(shè)計(jì)

          3)      建立類模型

          4)      關(guān)鍵用例的開(kāi)發(fā)與測(cè)試

          5)      完善用例模型

          c、  n次迭代

          完成所有用例的分析、設(shè)計(jì)與開(kāi)發(fā)。

          d、  最后的迭代

          1)      整體測(cè)試:進(jìn)行各種功能、性能和壓力測(cè)試。

          2)      部署與安裝:生成相應(yīng)的部署圖。

          3)      產(chǎn)品化:進(jìn)行一些產(chǎn)品化的包裝。

          注:每一次迭代之后,都應(yīng)該交付一個(gè)可以運(yùn)行的中間版本。

           

          6、  部署和實(shí)施

           

          構(gòu)件圖:表現(xiàn)系統(tǒng)物理結(jié)構(gòu)。

          部署圖:說(shuō)明系統(tǒng)部署結(jié)構(gòu)。

           

          “構(gòu)件是系統(tǒng)中可替換的物理部分,它包裝了實(shí)現(xiàn)而且遵從并提供一組接口的實(shí)現(xiàn)。”

          1)      實(shí)施構(gòu)件:構(gòu)成一個(gè)可執(zhí)行系統(tǒng)必要和充分的構(gòu)件,如DLLEXE文件。

          2)      工作產(chǎn)品構(gòu)件:開(kāi)發(fā)過(guò)程的產(chǎn)物,包括創(chuàng)建實(shí)施構(gòu)件的源代碼和數(shù)據(jù)文件。

          3)      執(zhí)行構(gòu)件:是作為一個(gè)正在執(zhí)行的系統(tǒng)的結(jié)果而被創(chuàng)建的,如COM+對(duì)象。

           

          構(gòu)件圖:包括構(gòu)件、接口以及各種關(guān)系。

          1)      對(duì)源代碼進(jìn)行建模:表示出各個(gè)不同源程序文件之間的關(guān)系。

          2)      對(duì)可執(zhí)行的發(fā)布建模:表示出各個(gè)執(zhí)行部分之間的信賴和關(guān)聯(lián)關(guān)系。

          3)      對(duì)物理數(shù)據(jù)庫(kù)建模:表示出各種類型的數(shù)據(jù)庫(kù)、表之間的關(guān)系。

          4)      對(duì)可調(diào)整的系統(tǒng)建模:如負(fù)載均衡,故障恢復(fù)等。

           

          部署圖或?qū)嵤﹫D的關(guān)鍵組成部分:節(jié)點(diǎn)和連接;構(gòu)件和連接。

          1)      對(duì)處理器和設(shè)備建模;

          2)      對(duì)構(gòu)件的分步建模:通常用來(lái)可視化地指定其構(gòu)件的位置和協(xié)作關(guān)系。

           

          7、  其它

           

          活動(dòng)圖:面向?qū)ο蟮牧鞒虉D。

          狀態(tài)圖:用來(lái)描述一個(gè)特定對(duì)象的所有可能狀態(tài)及其引起狀態(tài)轉(zhuǎn)移的事件。

           

          活動(dòng)圖按照簡(jiǎn)繁程度劃分:

          1)      基本活動(dòng)圖。

          2)      實(shí)例說(shuō)明。

          3)      帶泳道的活的圖。

          a、  業(yè)務(wù)建模階段:針對(duì)的是職責(zé)對(duì)象。

          b、  系統(tǒng)設(shè)計(jì)狀態(tài)階段:針對(duì)的是對(duì)象,使用較少,一般使用順序圖。

           

          鏈接:

           

          徐鋒專欄--無(wú)名空間

          http://blog.csdn.net/fjxufeng/

           

          用例驅(qū)動(dòng)的需求過(guò)程實(shí)踐(徐鋒)

          http://www.ccw.com.cn/cio/research/info/htm2003/20031223_13XEG.asp

          http://www.sawin.cn/doc/SA/REQ/blueski313.htm

           

          廣告管理系統(tǒng)中的UML分析與設(shè)計(jì)

          http://www.itpmi.com/Article.asp?ArtID=425

           

          銷售管理系統(tǒng)的UML分析與設(shè)計(jì)

          http://51cmm.csai.cn/ANALYZE/no000081.htm

           

          posted on 2006-01-29 22:35 Xu Jianxiang 閱讀(1050) 評(píng)論(0)  編輯  收藏 所屬分類: Design Research
          主站蜘蛛池模板: 米林县| 松潘县| 乌拉特前旗| 长子县| 颍上县| 杨浦区| 化隆| 和平县| 甘肃省| 浮梁县| 阜康市| 无极县| 汉沽区| 额济纳旗| 固镇县| 桐城市| 东山县| 额尔古纳市| 丽水市| 巴林左旗| 凌海市| 和田市| 普定县| 明溪县| 四子王旗| 昆明市| 邵武市| 博乐市| 安庆市| 宽甸| 高邮市| 谢通门县| 揭东县| 和静县| 潍坊市| 南丹县| 仲巴县| 博湖县| 沿河| 鄂尔多斯市| 沾化县|