• <output id="49na7"></output>

    <strike id="49na7"><sup id="49na7"></sup></strike>

    1. <tr id="49na7"></tr>
      1. 微信掃碼關注:
        新聞中心

        首頁 > 新聞中心 - 行業新聞

        軟件工程——快速掌握面向對象開發方法
        日期:2019-03-01

        在《軟件工程——快速掌握結構化開發方法》一文中,我們講述了如何用結構化開發方法開發一個簡單的項目案例,并重點討論了在結構化分析和結構化設計階段使用事件、數據流圖模型、數據字典、ER模型、結構圖模型完成項目的分析與設計的整個過程。

        在結構化開發方法中,利用數據流圖模型對系統進行層層分解,將一個大的系統分解為多個程序模塊,數據流圖中需要存儲的信息通過ER圖建立數據模型,其功能模型和數據模型是分離的,也就是說在結構化開發方法中,程序和數據是分離的。另外,程序的結構要遵循每個程序模塊只有一個入口和一個出口,在程序模塊內部只能采用順序、選擇、重復三種基本的控制結構。

        什么是面向對象方法?

        當前主流的軟件開發方法除了前面討論的結構化開發方法外,還有面向對象開發方法。面向對象開發方法盡可能模擬人類習慣的思維方式來分析軟件項目,按照現實世界的問題域來構建解決現實問題的系統。例如在《軟件工程——快速掌握結構化開發方法》一文項目案例中,要求開發一款名片自動識別APP產品,按照人類認識一個新事務的思維方式,會把名片看作一個新的事務,名片有哪些屬性(名稱、職務、地址等)? 名片能做什么(交際、拓展人脈等)?就如同我們找一個新工作時,會考慮這個新工作有哪些屬性(工資、工作時間、工作類型等)?這個新工作主要做什么(編寫程序、銷售產品等等)?

        面向對象開發方法把系統看作是一起工作來完成某項任務的相互作用的事務集合,事務也稱為對象。面向對象開發方法主要有面向對象分析、面向對象設計、面向對象編程三個階段,分別對應軟件開發生命周期的系統分析、系統設計、系統實施三個階段。面向對象分析識別出系統中的所有對象以及對象之間的關系,在面向對象分析中主要使用的圖形模型有用例圖和類圖;面向對象設計對已識別的對象進行細化,并定義出其全部屬性和方法,在面向對象設計中主要使用的圖形模型是類圖、順序圖;面向對象編程使用具體的語言或環境來實現這些對象。

        面向對象開發方法與結構化開發方法完全不同,在面向對象方法中,既沒有程序和過程,也沒有數據實體和文件,系統只是由對象組成。也可以這么說,面向對象開發方法中的對象是結構化開發方法中的實體、數據和程序模塊的組合體,它具有屬性和行為,同時可以對系統發出的消息進行響應。

        面向對象方法采用的模型主要是UML建模語言,UML從系統的不同角度出發,定義了用例圖、類圖、對象圖、狀態圖、活動圖、順序圖、協作圖、構件圖、部署圖等九種圖。這些圖形模型從不同的側面對系統進行描述。在實際分析和設計中,這九種圖形模型不一定全部用到,常用的圖形模型有用例圖、類圖、順序圖、部署圖。

        面向對象分析

        雖然面向對象開發方法和結構化開發方法有很大不同,但前期的系統需求調查是完全相同的。在《軟件工程——快速掌握結構化開發方法》一文中,項目經理小王的系統需求調查結果事件列表,完全可以應用到面向對象分析中,下表是小王在名片自動識別APP項目案例中的需求調查事件列表。

        表1 名片自動識別APP事件

        有了需求事件列表,就可以歸納和抽象出系統相關角色了。需要注意的是,角色不是指具體的人和事務,而是表示人或事物在系統中所扮演的角色。例如圖書管理系統有管理員和借書者兩個角色,小張既可以是管理員角色,也可以是借書者角色。從事件列表中歸納和抽象出來的角色就是系統中要識別的對象。

        表1的事件涉及的角色有使用者(用戶)、名片、百度圖像識別接口、數據庫。對識別的角色編號,可以采用字母R開頭加序號的編號規則,例如R001,R002等。下表是角色列表。

        表2 識別的角色列表

        識別出角色后,就可以建立角色用例圖了,角色用例圖從系統的角度描述了角色(對象)的行為及角色間的關系。類似數據流圖要配備數據字典一樣,角色用例圖也要配備用例規約,用例規約描述了用例圖中每個用例的用例名稱、參與角色、與其它用例間的關系、前置條件、后置條件、操作流程、輸入與輸出數據項等內容。下圖是表2角色的系統用例圖。

        圖1 名片識別APP角色用例圖

        在上圖所示的角色用例圖中,分別列出了使用者、名片、百度AI接口、數據庫角色的用例。角色使用者有【注冊】、【登錄】、【添加名片】三個用例,其中【注冊】和【登錄】用例依賴于角色數據庫的【存取信息】用例;角色名片有【掃描名片】和【識別名片】兩個用例,其中【識別名片】用例依賴于角色百度AI接口的【調用百度AI接口用例】和角色數據庫的【存取信息】用例;角色數據庫有【存取信息】用例;角色百度AI接口有【調用百度AI接口】用例。

        角色用例圖確定后,還需要對每個用例配置用例規約,用例規約內容組成沒有強制要求,以能夠為面向對象設計提供充分的參考依據為原則。下面給出角色數據庫【存取信息】用例的用例規約。

        表3 角色數據庫【存取信息】用例規約

        角色用例模型分析完成后,下一步的工作就是分析系統中的對象及對象間的關系,描述模型使用UML建模語言中的類圖。類圖描述了系統對象的名稱、屬性及行為,以及對象與對象之間的關系。一般說來,前面分析的系統角色就是系統中的對象。當然角色還可以細分,例如數據庫角色就可以細分為使用者數據庫角色和名片數據庫角色,細分后的角色可以繼承原有角色的所有行為和屬性,這也體現了對象的繼承關系。下圖是名片識別APP的類圖。

        圖 2 名片識別APP類圖

        至此,分析階段的用例和類圖的建模已經完成,后續還需要根據用例和類圖模型建立界面模型。例如,User類有登錄、注冊、添加名片的行為,就需要為User類提供執行這些行為的界面模型。有很多圖像繪制工具支持界面模型的建模,如常用的PhotoShop等工具。

        圖 3 登錄界面模型

        面向對象設計

        分析階段完成后,就可以進入面向對象的設計階段了。面向對象分析主要關心系統的功能和業務,無需關心與計算機實現相關的內容。到了面向對象設計階段,就要充分考慮系統體系結構、運行環境、編程語言等與計算機實現相關的內容。例如BS架構或CS架構的設計思路和方案就完全不同,在BS架構中,不同的設計框架其設計方案也不完全相同。

        在BS架構中,比較流行的設計框架是MVC框架,它將業務邏輯、數據、界面顯示分離的方法來組織程序,業務邏輯放到一個部件或模塊中。這樣做的好處是,當修改用戶界面時,不需要重新編寫業務邏輯。MVC框架是模型(Model)、視圖(View)、控制器(Controller)的縮寫,Model可以理解為實體對象,只有屬性沒有行為,實體對象的所有行為都放置在控制器中;View可以理解為用戶界面,如JSP、aspx頁面等;Controller是控制器,負責處理與實體對象相關的業務邏輯,并從視圖接收和回傳數據到視圖。

        在UML建模語言中,也提供了一種劃分類的方式,分為邊界類、實體類和控制類。邊界類主要用于描述用戶與系統之間的交互對象,例如JSP、aspx頁面等,邊界類與MVC中的視圖對應;實體類主要用于描述具體的實體對象,通常映射到數據庫表或文件中,實體類與MVC中的模型對應;控制類主要用于描述系統中業務邏輯,例如分析階段中類的行為,在設計階段可以放置到控制類中實現,控制類與MVC中的控制器對應。設計類圖如下圖所示。

        圖 4 名片識別APP設計類圖

        在上面的設計類圖中,UserControll類和CardControll類是MVC框架的控制器類,login.jsp、register.jsp、card.jsp前端頁面是MVC框架的視圖,User是MVC框架的實體類。

        給出設計類圖后,還需要給出控制器類每個業務處理方法的順序圖,以明確業務邏輯處理過程。下面給出UserControll類register()業務處理方法的順序圖。

        圖 5 UserControl類register業務處理方

        上圖給出了使用者注冊業務邏輯處理過程,整個過程從使用者進入注冊頁面開始,涉及到register.jsp頁面、UserControll對象、User對象和DataBase對象。

        在面向對象設計階段,除了給出設計類圖、順序圖等設計模型外,還需要給出數據庫設計、界面設計、軟件部署等設計模型,這里就不再一一給出了。

        面向對象的編程實現

        面向對象的編程實現是在面向對象設計的基礎上,將設計階段的設計模型映射為計算機編程結構。映射工具可以是代碼自動化生成工具,代碼自動化生成工具可以根據設計類圖自動生成類代碼。但大部分編碼還需要人工來實現,如MVC框架中JSP頁面的實現、控制器類的業務邏輯處理代碼、服務類的實現代碼等。

        在面向對象編程過程中,面向對象的封裝、繼承、多態、抽象等特征已經在設計階段完成,因此在編程階段無需考慮對象的封裝、繼承、多態、抽象等特征的實現。

        小總

        1、面向對象開發方法與結構化開發方法完全不同,在面向對象方法中,既沒有程序和過程,也沒有數據實體和文件,系統只是由對象組成。也可以這么說,面向對象開發方法中的對象是結構化開發方法中的實體、數據和程序模塊的組合體,它具有屬性和行為,同時可以對系統發出的消息進行響應。

        2、面向對象開發方法分為面向對象分析、面向對象設計和面向對象編程實現三個階段。其中最重要的是面向對象分析和面向對象設計兩個階段。面向對象開發方法主要的分析和設計模型是UML建模語言,面向對象分析一般用到UML建模語言的用例圖、類圖等模型,面向對象設計一般用到UML建模語言的實現類圖、順序圖、部署圖等模型。

        亿濠扑克