软件工程——快速掌握面向对象开发方法
在《軟件工程——快速掌握結(jié)構(gòu)化開發(fā)方法》一文中,我們講述了如何用結(jié)構(gòu)化開發(fā)方法開發(fā)一個(gè)簡(jiǎn)單的項(xiàng)目案例,并重點(diǎn)討論了在結(jié)構(gòu)化分析和結(jié)構(gòu)化設(shè)計(jì)階段使用事件、數(shù)據(jù)流圖模型、數(shù)據(jù)字典、ER模型、結(jié)構(gòu)圖模型完成項(xiàng)目的分析與設(shè)計(jì)的整個(gè)過(guò)程。
在結(jié)構(gòu)化開發(fā)方法中,利用數(shù)據(jù)流圖模型對(duì)系統(tǒng)進(jìn)行層層分解,將一個(gè)大的系統(tǒng)分解為多個(gè)程序模塊,數(shù)據(jù)流圖中需要存儲(chǔ)的信息通過(guò)ER圖建立數(shù)據(jù)模型,其功能模型和數(shù)據(jù)模型是分離的,也就是說(shuō)在結(jié)構(gòu)化開發(fā)方法中,程序和數(shù)據(jù)是分離的。另外,程序的結(jié)構(gòu)要遵循每個(gè)程序模塊只有一個(gè)入口和一個(gè)出口,在程序模塊內(nèi)部只能采用順序、選擇、重復(fù)三種基本的控制結(jié)構(gòu)。
?
什么是面向?qū)ο蠓椒?#xff1f;
當(dāng)前主流的軟件開發(fā)方法除了前面討論的結(jié)構(gòu)化開發(fā)方法外,還有面向?qū)ο箝_發(fā)方法。面向?qū)ο箝_發(fā)方法盡可能模擬人類習(xí)慣的思維方式來(lái)分析軟件項(xiàng)目,按照現(xiàn)實(shí)世界的問(wèn)題域來(lái)構(gòu)建解決現(xiàn)實(shí)問(wèn)題的系統(tǒng)。例如在《軟件工程——快速掌握結(jié)構(gòu)化開發(fā)方法》一文項(xiàng)目案例中,要求開發(fā)一款名片自動(dòng)識(shí)別APP產(chǎn)品,按照人類認(rèn)識(shí)一個(gè)新事務(wù)的思維方式,會(huì)把名片看作一個(gè)新的事務(wù),名片有哪些屬性(名稱、職務(wù)、地址等)? 名片能做什么(交際、拓展人脈等)?就如同我們找一個(gè)新工作時(shí),會(huì)考慮這個(gè)新工作有哪些屬性(工資、工作時(shí)間、工作類型等)?這個(gè)新工作主要做什么(編寫程序、銷售產(chǎn)品等等)?
面向?qū)ο箝_發(fā)方法把系統(tǒng)看作是一起工作來(lái)完成某項(xiàng)任務(wù)的相互作用的事務(wù)集合,事務(wù)也稱為對(duì)象。面向?qū)ο箝_發(fā)方法主要有面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計(jì)、面向?qū)ο缶幊倘齻€(gè)階段,分別對(duì)應(yīng)軟件開發(fā)生命周期的系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)施三個(gè)階段。面向?qū)ο蠓治鲎R(shí)別出系統(tǒng)中的所有對(duì)象以及對(duì)象之間的關(guān)系,在面向?qū)ο蠓治鲋兄饕褂玫膱D形模型有用例圖和類圖;面向?qū)ο笤O(shè)計(jì)對(duì)已識(shí)別的對(duì)象進(jìn)行細(xì)化,并定義出其全部屬性和方法,在面向?qū)ο笤O(shè)計(jì)中主要使用的圖形模型是類圖、順序圖;面向?qū)ο缶幊淌褂镁唧w的語(yǔ)言或環(huán)境來(lái)實(shí)現(xiàn)這些對(duì)象。
面向?qū)ο箝_發(fā)方法與結(jié)構(gòu)化開發(fā)方法完全不同,在面向?qū)ο蠓椒ㄖ?#xff0c;既沒(méi)有程序和過(guò)程,也沒(méi)有數(shù)據(jù)實(shí)體和文件,系統(tǒng)只是由對(duì)象組成。也可以這么說(shuō),面向?qū)ο箝_發(fā)方法中的對(duì)象是結(jié)構(gòu)化開發(fā)方法中的實(shí)體、數(shù)據(jù)和程序模塊的組合體,它具有屬性和行為,同時(shí)可以對(duì)系統(tǒng)發(fā)出的消息進(jìn)行響應(yīng)。
面向?qū)ο蠓椒ú捎玫哪P椭饕荱ML建模語(yǔ)言,UML從系統(tǒng)的不同角度出發(fā),定義了用例圖、類圖、對(duì)象圖、狀態(tài)圖、活動(dòng)圖、順序圖、協(xié)作圖、構(gòu)件圖、部署圖等九種圖。這些圖形模型從不同的側(cè)面對(duì)系統(tǒng)進(jìn)行描述。在實(shí)際分析和設(shè)計(jì)中,這九種圖形模型不一定全部用到,常用的圖形模型有用例圖、類圖、順序圖、部署圖。
?
面向?qū)ο蠓治?/h2>
雖然面向?qū)ο箝_發(fā)方法和結(jié)構(gòu)化開發(fā)方法有很大不同,但前期的系統(tǒng)需求調(diào)查是完全相同的。在《軟件工程——快速掌握結(jié)構(gòu)化開發(fā)方法》一文中,項(xiàng)目經(jīng)理小王的系統(tǒng)需求調(diào)查結(jié)果事件列表,完全可以應(yīng)用到面向?qū)ο蠓治鲋?#xff0c;下表是小王在名片自動(dòng)識(shí)別APP項(xiàng)目案例中的需求調(diào)查事件列表。
表1 名片自動(dòng)識(shí)別APP事件
?
有了需求事件列表,就可以歸納和抽象出系統(tǒng)相關(guān)角色了。需要注意的是,角色不是指具體的人和事務(wù),而是表示人或事物在系統(tǒng)中所扮演的角色。例如圖書管理系統(tǒng)有管理員和借書者兩個(gè)角色,小張既可以是管理員角色,也可以是借書者角色。從事件列表中歸納和抽象出來(lái)的角色就是系統(tǒng)中要識(shí)別的對(duì)象。
表1的事件涉及的角色有使用者(用戶)、名片、百度圖像識(shí)別接口、數(shù)據(jù)庫(kù)。對(duì)識(shí)別的角色編號(hào),可以采用字母R開頭加序號(hào)的編號(hào)規(guī)則,例如R001,R002等。下表是角色列表。
表2 識(shí)別的角色列表
?
識(shí)別出角色后,就可以建立角色用例圖了,角色用例圖從系統(tǒng)的角度描述了角色(對(duì)象)的行為及角色間的關(guān)系。類似數(shù)據(jù)流圖要配備數(shù)據(jù)字典一樣,角色用例圖也要配備用例規(guī)約,用例規(guī)約描述了用例圖中每個(gè)用例的用例名稱、參與角色、與其它用例間的關(guān)系、前置條件、后置條件、操作流程、輸入與輸出數(shù)據(jù)項(xiàng)等內(nèi)容。下圖是表2角色的系統(tǒng)用例圖。
?
圖1 名片識(shí)別APP角色用例圖
在上圖所示的角色用例圖中,分別列出了使用者、名片、百度AI接口、數(shù)據(jù)庫(kù)角色的用例。角色使用者有【注冊(cè)】、【登錄】、【添加名片】三個(gè)用例,其中【注冊(cè)】和【登錄】用例依賴于角色數(shù)據(jù)庫(kù)的【存取信息】用例;角色名片有【掃描名片】和【識(shí)別名片】?jī)蓚€(gè)用例,其中【識(shí)別名片】用例依賴于角色百度AI接口的【調(diào)用百度AI接口用例】和角色數(shù)據(jù)庫(kù)的【存取信息】用例;角色數(shù)據(jù)庫(kù)有【存取信息】用例;角色百度AI接口有【調(diào)用百度AI接口】用例。
角色用例圖確定后,還需要對(duì)每個(gè)用例配置用例規(guī)約,用例規(guī)約內(nèi)容組成沒(méi)有強(qiáng)制要求,以能夠?yàn)槊嫦驅(qū)ο笤O(shè)計(jì)提供充分的參考依據(jù)為原則。下面給出角色數(shù)據(jù)庫(kù)【存取信息】用例的用例規(guī)約。
表3 角色數(shù)據(jù)庫(kù)【存取信息】用例規(guī)約
?
角色用例模型分析完成后,下一步的工作就是分析系統(tǒng)中的對(duì)象及對(duì)象間的關(guān)系,描述模型使用UML建模語(yǔ)言中的類圖。類圖描述了系統(tǒng)對(duì)象的名稱、屬性及行為,以及對(duì)象與對(duì)象之間的關(guān)系。一般說(shuō)來(lái),前面分析的系統(tǒng)角色就是系統(tǒng)中的對(duì)象。當(dāng)然角色還可以細(xì)分,例如數(shù)據(jù)庫(kù)角色就可以細(xì)分為使用者數(shù)據(jù)庫(kù)角色和名片數(shù)據(jù)庫(kù)角色,細(xì)分后的角色可以繼承原有角色的所有行為和屬性,這也體現(xiàn)了對(duì)象的繼承關(guān)系。下圖是名片識(shí)別APP的類圖。
?
圖 2 名片識(shí)別APP類圖
至此,分析階段的用例和類圖的建模已經(jīng)完成,后續(xù)還需要根據(jù)用例和類圖模型建立界面模型。例如,User類有登錄、注冊(cè)、添加名片的行為,就需要為User類提供執(zhí)行這些行為的界面模型。有很多圖像繪制工具支持界面模型的建模,如常用的PhotoShop等工具。
?
圖 3 登錄界面模型
?
面向?qū)ο笤O(shè)計(jì)
分析階段完成后,就可以進(jìn)入面向?qū)ο蟮脑O(shè)計(jì)階段了。面向?qū)ο蠓治鲋饕P(guān)心系統(tǒng)的功能和業(yè)務(wù),無(wú)需關(guān)心與計(jì)算機(jī)實(shí)現(xiàn)相關(guān)的內(nèi)容。到了面向?qū)ο笤O(shè)計(jì)階段,就要充分考慮系統(tǒng)體系結(jié)構(gòu)、運(yùn)行環(huán)境、編程語(yǔ)言等與計(jì)算機(jī)實(shí)現(xiàn)相關(guān)的內(nèi)容。例如BS架構(gòu)或CS架構(gòu)的設(shè)計(jì)思路和方案就完全不同,在BS架構(gòu)中,不同的設(shè)計(jì)框架其設(shè)計(jì)方案也不完全相同。
在BS架構(gòu)中,比較流行的設(shè)計(jì)框架是MVC框架,它將業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法來(lái)組織程序,業(yè)務(wù)邏輯放到一個(gè)部件或模塊中。這樣做的好處是,當(dāng)修改用戶界面時(shí),不需要重新編寫業(yè)務(wù)邏輯。MVC框架是模型(Model)、視圖(View)、控制器(Controller)的縮寫,Model可以理解為實(shí)體對(duì)象,只有屬性沒(méi)有行為,實(shí)體對(duì)象的所有行為都放置在控制器中;View可以理解為用戶界面,如JSP、aspx頁(yè)面等;Controller是控制器,負(fù)責(zé)處理與實(shí)體對(duì)象相關(guān)的業(yè)務(wù)邏輯,并從視圖接收和回傳數(shù)據(jù)到視圖。
在UML建模語(yǔ)言中,也提供了一種劃分類的方式,分為邊界類、實(shí)體類和控制類。邊界類主要用于描述用戶與系統(tǒng)之間的交互對(duì)象,例如JSP、aspx頁(yè)面等,邊界類與MVC中的視圖對(duì)應(yīng);實(shí)體類主要用于描述具體的實(shí)體對(duì)象,通常映射到數(shù)據(jù)庫(kù)表或文件中,實(shí)體類與MVC中的模型對(duì)應(yīng);控制類主要用于描述系統(tǒng)中業(yè)務(wù)邏輯,例如分析階段中類的行為,在設(shè)計(jì)階段可以放置到控制類中實(shí)現(xiàn),控制類與MVC中的控制器對(duì)應(yīng)。設(shè)計(jì)類圖如下圖所示。
?
圖 4 名片識(shí)別APP設(shè)計(jì)類圖
在上面的設(shè)計(jì)類圖中,UserControll類和CardControll類是MVC框架的控制器類,login.jsp、register.jsp、card.jsp前端頁(yè)面是MVC框架的視圖,User是MVC框架的實(shí)體類。
給出設(shè)計(jì)類圖后,還需要給出控制器類每個(gè)業(yè)務(wù)處理方法的順序圖,以明確業(yè)務(wù)邏輯處理過(guò)程。下面給出UserControll類register()業(yè)務(wù)處理方法的順序圖。
?
圖 5 UserControl類register業(yè)務(wù)處理方
上圖給出了使用者注冊(cè)業(yè)務(wù)邏輯處理過(guò)程,整個(gè)過(guò)程從使用者進(jìn)入注冊(cè)頁(yè)面開始,涉及到register.jsp頁(yè)面、UserControll對(duì)象、User對(duì)象和DataBase對(duì)象。
在面向?qū)ο笤O(shè)計(jì)階段,除了給出設(shè)計(jì)類圖、順序圖等設(shè)計(jì)模型外,還需要給出數(shù)據(jù)庫(kù)設(shè)計(jì)、界面設(shè)計(jì)、軟件部署等設(shè)計(jì)模型,這里就不再一一給出了。
?
面向?qū)ο蟮木幊虒?shí)現(xiàn)
面向?qū)ο蟮木幊虒?shí)現(xiàn)是在面向?qū)ο笤O(shè)計(jì)的基礎(chǔ)上,將設(shè)計(jì)階段的設(shè)計(jì)模型映射為計(jì)算機(jī)編程結(jié)構(gòu)。映射工具可以是代碼自動(dòng)化生成工具,代碼自動(dòng)化生成工具可以根據(jù)設(shè)計(jì)類圖自動(dòng)生成類代碼。但大部分編碼還需要人工來(lái)實(shí)現(xiàn),如MVC框架中JSP頁(yè)面的實(shí)現(xiàn)、控制器類的業(yè)務(wù)邏輯處理代碼、服務(wù)類的實(shí)現(xiàn)代碼等。
在面向?qū)ο缶幊踢^(guò)程中,面向?qū)ο蟮姆庋b、繼承、多態(tài)、抽象等特征已經(jīng)在設(shè)計(jì)階段完成,因此在編程階段無(wú)需考慮對(duì)象的封裝、繼承、多態(tài)、抽象等特征的實(shí)現(xiàn)。
?
小總
1、面向?qū)ο箝_發(fā)方法與結(jié)構(gòu)化開發(fā)方法完全不同,在面向?qū)ο蠓椒ㄖ?#xff0c;既沒(méi)有程序和過(guò)程,也沒(méi)有數(shù)據(jù)實(shí)體和文件,系統(tǒng)只是由對(duì)象組成。也可以這么說(shuō),面向?qū)ο箝_發(fā)方法中的對(duì)象是結(jié)構(gòu)化開發(fā)方法中的實(shí)體、數(shù)據(jù)和程序模塊的組合體,它具有屬性和行為,同時(shí)可以對(duì)系統(tǒng)發(fā)出的消息進(jìn)行響應(yīng)。
2、面向?qū)ο箝_發(fā)方法分為面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計(jì)和面向?qū)ο缶幊虒?shí)現(xiàn)三個(gè)階段。其中最重要的是面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)兩個(gè)階段。面向?qū)ο箝_發(fā)方法主要的分析和設(shè)計(jì)模型是UML建模語(yǔ)言,面向?qū)ο蠓治鲆话阌玫経ML建模語(yǔ)言的用例圖、類圖等模型,面向?qū)ο笤O(shè)計(jì)一般用到UML建模語(yǔ)言的實(shí)現(xiàn)類圖、順序圖、部署圖等模型。
總結(jié)
以上是生活随笔為你收集整理的软件工程——快速掌握面向对象开发方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SAP创建新的项目类型
- 下一篇: Sass @at-root 指令用法示例