《軟件工程》教學課件CH7-3面向對象設計及實現(xiàn).ppt_第1頁
《軟件工程》教學課件CH7-3面向對象設計及實現(xiàn).ppt_第2頁
《軟件工程》教學課件CH7-3面向對象設計及實現(xiàn).ppt_第3頁
《軟件工程》教學課件CH7-3面向對象設計及實現(xiàn).ppt_第4頁
《軟件工程》教學課件CH7-3面向對象設計及實現(xiàn).ppt_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

7.2.3 面向對象設計 面向對象設計(OOD,Object-Oriented Design)是面向對象分析到實現(xiàn)的一個橋梁。面向對象分析是將用戶需求經過分析后,建立問題域精確模型的過程;而面向對象設計則根據(jù)面向對象分析得到的需求模型,建立求解域模型的過程。即分析必須搞清楚系統(tǒng)“做什么”,而設計必須搞清楚系統(tǒng)“怎么做”,從分析到設計不是傳統(tǒng)方法的轉換,而是平滑(無縫)過渡,而求解域模型是系統(tǒng)實現(xiàn)的依據(jù)。,面向對象設計可分為系統(tǒng)設計和類(對象)設計。系統(tǒng)設計是高層設計,主要確定實現(xiàn)系統(tǒng)的策略和目標系統(tǒng)的高層結構。類-&-對象設計是低層設計,主要確定解空間中的類、關聯(lián)、接口形式及實現(xiàn)服務的算法;高層設計主要確定系統(tǒng)的結構、用戶界面,即用來構造系統(tǒng)的總的模型,并把任務分配給系統(tǒng)的各個子系統(tǒng)。,1面向對象設計的設計準則 (1) 模塊化 模塊化是軟件設計的重要準則。在面向對象開發(fā)方法中,將對象定義為模塊。對象把數(shù)據(jù)結構和作用在數(shù)據(jù)上的操作(方法)封裝起來構成模塊。對象是組成系統(tǒng)的基本模塊。 (2) 抽象 類是一種抽象數(shù)據(jù)類型,在該數(shù)據(jù)類型之上,可以創(chuàng)建對象(類的成員)。類包含相似對象的共同屬性和服務,它對外定義了公共接口,構成了類的規(guī)格說明(即協(xié)議),供外界合法訪問。 (3) 信息隱藏 在面向對象方法中,對象是屬性和服務的封裝體,這就實現(xiàn)了信息隱藏。類結構分離了接口與實現(xiàn),類的屬性的表示方法和操作的實現(xiàn)算法,對于類的用戶來說,都應該是隱藏的,用戶只能通過公共接口訪問類中的屬性。,(4) 弱耦合 所謂耦合,是指一個軟件結構內不同模塊之間互連的依賴關系。依賴關系越多耦合度越強,依賴關系越少耦合度越弱。在面向對象方法中,對象是最基本的模塊,不同對象之間相互關聯(lián)的依賴關系表示了耦合度。衡量設計優(yōu)良的一個重要標準就是弱耦合,弱耦合的設計中某個對象的改變不會或很少影響到其他對象。 不同對象之間耦合是不可避免的。兩個對象必須相互聯(lián)系相互依賴時,應該通過類的協(xié)議(即公共接口)實現(xiàn)兩個對象相互依賴(耦合),而不是通過類的具體實現(xiàn)細節(jié)來描述。 (5) 強內聚 所謂內聚,是一個模塊內各個元素彼此結合的緊密程度。結合得越緊密內聚越強,結合得越不緊密內聚越弱。強內聚也是衡量設計優(yōu)良的一個重要標準。在面向對象設計中,內聚可分為下述三類:,1) 服務(操作)內聚。一個服務應該是單一的,即只完成一個任務。 2) 類內聚。類內聚要求類的屬性和服務應該是高內聚的,而且它們應該是系統(tǒng)任務所必需的。一個類應該只有一個功能,如果某個類有多個功能,通常應該把它分解成多個專用的類。 3) 一般-特殊內聚。一般-特殊內聚表示:一般-特殊結構符合領域知識的表示形式,也就是說,特殊類應該盡量地繼承一般類的屬性和服務。這樣的一般-特殊結構是高內聚的。 (6)可重用 在面向對象設計中,一個類的設計應該具有通用性,為開發(fā)相似的系統(tǒng)提供軟件重用可能。因此,在軟件開發(fā)過程中,為了實現(xiàn)重用,既要盡量重用已有的類,又要創(chuàng)建可重用的新類。,2設計策略 在使用面向對象方法學開發(fā)軟件的實踐中,得出了下面一些基于經驗的啟發(fā)規(guī)則,這些規(guī)則往往能幫助軟件開發(fā)人員設計出好的方案來,以保證軟件的質量。 (1)設計結果應該清晰易懂 (2)一般-特殊結構的深度應適當 (3)設計簡單的類 (4)設計簡單的協(xié)議 (5)設計簡單的服務 (6)減少設計變動,3系統(tǒng)分解與組織 面向對象設計同過程設計一樣,自頂向下進行功能分解。在設計比較復雜的應用系統(tǒng)時,將系統(tǒng)分解成若干個比較小的部分,再分別設計每個部分。這樣既簡化了應用系統(tǒng),又降低了設計的難度,并有利于實現(xiàn)和維護。 系統(tǒng)是根據(jù)功能來分解的,我們將系統(tǒng)分解的各個部分(即系統(tǒng)的主要組成部分)稱為子系統(tǒng)。 子系統(tǒng)間交互的形式和交互的信息由接口確定,因此,接口應該簡單、明確。,(1)面向對象設計的五個層次、四個部分 面向對象設計模型同樣由主題、類-對象、結構、屬性和服務等五個層次組成,并且又擴充了問題域(PDC)、人機交互(HIC)、任務管理(TMC)和數(shù)據(jù)管理(DMC)四個部分。 典型的面向對象設計模型如圖3.3.23示。,圖3.3.23 典型的面向對象設計模型,(2)子系統(tǒng)間的交互方式 在應用系統(tǒng)中,子系統(tǒng)之間的關系可分為客戶/服務器關系和同等伙伴關系兩種。這兩種關系對應兩種交互的方式,即客戶/服務器交互方式和同等伙伴交互方式。 通常,系統(tǒng)使用客戶/服務器關系,因為單向交互更容易理解,也更容易設計和修改,而雙向交互相對困難些。 (3) 系統(tǒng)組織 將子系統(tǒng)組織成完整的系統(tǒng)有兩種方式,即水平層次組織和垂直塊組織。 1) 層次組織 層次組織是將子系統(tǒng)按層組織成為一個層次軟件系統(tǒng),每層是一個子系統(tǒng)。上層建立在下層的基礎上,下層為上層提供必要的服務。低層子系統(tǒng)提供服務,相當于服務器,上層子系統(tǒng)使用下層提供的服務,相當于客戶。,2) 塊組織 塊組織將系統(tǒng)垂直地分解成若干個相對獨立的、弱耦合的子系統(tǒng),一個子系統(tǒng)相當于一塊,每塊提供一種類型的服務。例如,圖3.3.24示一個典型應用系統(tǒng)的組織結構。,(4)設計系統(tǒng)的拓撲結構:構成完整系統(tǒng)的拓撲結構有:管道型、樹型、星型等。,補充: 概括地說,面向對象軟件開發(fā)方法采用面向對象設計 (OOD)技術進行問題解決方案的設計工作,它將問題的解決方案表述為: 類關聯(lián) 的形式,其中,類包括問題空間類、用戶界面類、任務管理類和數(shù)據(jù)管理類,是從設計的角度出發(fā)對問題解決方案中的對象的抽象和描述,關聯(lián)則用于描述這些類和類之間的關系。 因此,面向對象設計工作主要包括問題空間類、用戶界面類、任務管理類和數(shù)據(jù)管理類的設計,具體工作內容和步驟如圖3.3.25所示。,圖3.3.25 面向對象設計工作內容和步驟,一、問題空間類 是指那些直接從面向對象分析模型設計得到的類,它是使軟件系統(tǒng)能夠實現(xiàn)對問題的求解的最基本的類,也是面向對象軟件系統(tǒng)的核心類。 利用面向對象分析技術對問題進行了分析描述之后,就可以直接將其結果用于問題空間類的設計,即直接將分析所得到的對象、對象與對象之間的關聯(lián)確定為類以及類與類之間的關聯(lián),這些直接從分析結果得到的類就是問題空間類。 以一個字處理系統(tǒng)為例,如下圖所示:,圖示: 結構化方法設計結果,又例:下圖示以及表18所示的是大學教務管理問題中的問題空間類。,圖示:大學教務管理問題中的問題空間類,表5.1 Class : Student(學生) 數(shù)據(jù)變量 序號 名稱 定義 類型 中文名稱 備注 1 ID char(8) 描述型 學號 2 Name char(24) 描述型 姓名 3 Sex 男,女 描述型 性別 枚舉類型 4 Birthday date 描述型 出生日期 5 EnrollmentDay date 描述型 入學日期 6 Department char(24) 描述型 系別 7 Speciality char(24) 描述型 專業(yè) 8 Password char(6) 描述型 密碼 9 Application 注冊,選課 描述型 申請 枚舉類型,操作 序號 名稱 接口參數(shù) 返回值 中文名稱 備注 1 GetID () ID 讀入學號 GetPassword () Password 讀入密碼 2 VerifyPassword () True/Fasle 檢驗 3 GetApplication () Application 詢問 4 PutApplication () NULL 回答 5 Note (“message“ ) NULL 通知 6 ChangePassword (NewPassword, OldPassword) NULL 修改,表5.2 Class : Graduate(研究生) 表5.3 Class : UnderGraduate(本科生) 表5.4 Class : RegisterRec(注冊記錄) 表5.5 Class : Course(課程) 表5.6 Class : GraduateCourse(研究生課程) 表5.7 Class : UnderGraduate(本科生課程) 表5.8 Class : SelectCourse(選課單),二、用戶界面類 是指那些為實現(xiàn)人機交互接口而設計的類,它是使軟件系統(tǒng)能夠接收用戶的命令和能夠為用戶提供信息所需要的類。 用戶界面類是為了使系統(tǒng)能夠與用戶進行交互而必須增添設計的類。在實際中,一個軟件系統(tǒng)常常會因為其用戶界面使得用戶不滿意而遭到否定或棄之不用。因此用戶界面類的設計是一項既影響軟件系統(tǒng)前途,又需要做耐心細致調查分析的重要工作。盡管在分析過程中已經對用戶在用戶界面方面進行了分析,但是在設計過程中仍然必須繼續(xù)做這項分析工作,必須具體設計確定交互作用的時間、交互方式和交互技術等。 用戶界面類的設計通常可以采用系統(tǒng)原型(模型)法進行。,1、分析考察用戶 2、設計命令層次 1)研究用戶交互的意義及準則 如果已建立的交互系統(tǒng)中已有命令層次,則先研究這個已有的交互界面的意義和準則。 2)建立初始命令層 可以以多種方式提供給用戶,如窗口、按鈕、下拉菜單、菜單條、可動的圖標,等等。 3)細化命令層 為了細化命令層,應考慮如下幾個問題: (1)排序。在開發(fā)命令層時,必須仔細選擇不同的操作名稱,并把這些名稱按一定要求排序,將最有用的放在前面,或者按習慣的工作步驟排序。 (2)組裝。在操作中尋找組裝結構模式,這有助于在層次中組織和分離操作。,(3)寬度和廣度。由于人的短暫記憶局限,命令層次不宜太廣太深。以3最為合適。 (4)極小化。盡量少用組合鍵,極小化用戶的擊鍵次數(shù)。 3、完成設計 當前由于軟件開發(fā)工具,特別是可視化開發(fā)工具的日益豐富,完成用戶界面的具體設計已經是一件十分容易的事情了,但是在具體設計時不能忽略以下原則: 1)一致性 使用一致的術語,一致的步驟和一致的動作行為。 2)減少步驟 極小化擊鍵次數(shù)、使用鼠標的次數(shù)和下拉菜單的次數(shù),極小化響應時間。 3)盡量顯示提示信息 盡量為用戶提供有意義的、及時反饋信息。 4)設置取消操作 用戶難免出錯,應盡量能使用戶取消其錯誤動作。,5)盡量減少要用戶記憶的內容 不應該要求用戶記下某窗口的信息而用于另一窗口中。 6)易學易用 為用戶提供聯(lián)機學習手冊。 7)屏幕生動活潑 屏幕畫面看起來能夠吸引用戶,喚起用戶的注意和興趣。 例如,對于大學教務管理問題,可以先根據(jù)對用戶的分析設計如下頁圖所示的用戶進入系統(tǒng)的屏幕。,圖示: 用戶進入系統(tǒng)屏幕界面,然后,根據(jù)針對該用戶界面和大多數(shù)面向對象軟件開發(fā)環(huán)境所提供的可重用類設計相應的用戶界面類,設計結果如下頁圖所示。,圖示:大學教務管理問題的部分用戶界面類和問題空間類,其中,Window、EditField、StaticField和Button等類 一般可從開發(fā)環(huán)境提供的類庫中通過繼承重用獲得,需要進一步做的設計工作主要是設計有關與問題空間類和任務管理類進行通訊的操作。例如需要為OKButton類設計一個向問題空間類中的Student類發(fā)送檢驗消息的操作。,三、任務管理類 是指那些為實現(xiàn)對多操作并發(fā)執(zhí)行的管理而設計的類,它是使軟件系統(tǒng)能夠同時處理多個并發(fā)行為所需要的類。 所謂任務,就是一個處理過程,它可能包含不同類的多個操作的執(zhí)行。任務管理類的用途之一就是用于管理系統(tǒng)的這種任務,它的另一個主要用途是在操作系統(tǒng)級(運行平臺)上 負責處理并發(fā)、中斷、調度等問題,從而使得所設計的系統(tǒng)能夠相對獨立于運行平臺,當需要移植到其它運行平臺上,只需要替換有關任務管理類就可以了。 因此,為了設計任務管理類,首先必須從所設計的系統(tǒng)有關類中找出需要并發(fā)進行的操作和那些與特定運行平臺有關的操作,然后再對它們進行分析設計 1、確定任務類型 1)確定事件驅動型任務,某些任務是由事件驅動而執(zhí)行的。這種任務可能負責與設備的通訊,與一個窗口或多個窗口、其它任務、子系統(tǒng)、其它處理器或其它系統(tǒng)的通訊。 2)確定時鐘驅動型任務 這種任務在特定的時間被觸發(fā)執(zhí)行某些處理。例如,某些設備要求周期性地獲得數(shù)據(jù)或控制,某些用戶界面、子系統(tǒng)、任務、處理器或其它系統(tǒng)也可能需要周期性地通訊。此時就常用到時鐘驅動型的任務。 3)確定優(yōu)先任務及臨界任務 優(yōu)先任務分高優(yōu)先級和低優(yōu)先級二種,用來適應處理的需要。臨界任務是有關系統(tǒng)成功或失敗的臨界處理,它尤其涉及嚴格的可靠性約束。 4)確定協(xié)調任務 當存在三個以上的任務時,就應該考慮增加一個任務,用它來協(xié)調任務。協(xié)調任務的引入當然會增加系統(tǒng)的開銷,但是引入?yún)f(xié)調任務有利于封裝任務之間的協(xié)調控制。使用狀態(tài)轉換矩陣可以描述該任務的行為。,2、分析任務 設計多任務系統(tǒng)的主要問題是設計人員常常定義太多的任務。原因是為了自己處理時的方便,但是這樣做就增大了整個設計的技術復雜度,并且不容易理解。因此,在進行任務管理類的具體設計前,必須仔細分析和選擇各個任務,盡量使得任務的數(shù)目降低到最少。 3、完成設計 設計任務包括定義任務的內容以及它怎樣協(xié)調和通訊。 1)任務的內容 2)怎樣協(xié)調 3)怎樣通訊,任務管理類設計模板如右圖所示:,問題空間類、用戶界面類和任務管理類之間的基本關系如下圖所示,任務管理類對象 從運行平臺(操作系統(tǒng))接收消息并通過發(fā)送消息創(chuàng)建有關用戶界面類對象,用戶界面類對象根據(jù)從用戶處獲得的信息創(chuàng)建有關問題空間類對象并發(fā)送有關消息給它。 如果沒有為系統(tǒng)設計任務管理類,則上述任務管理類負責的有關工作由用戶界面類負責完成。,圖 示: 任務管理類、用戶界面類和問題空間類及其消息傳送關系,四、數(shù)據(jù)管理類 是指那些為實現(xiàn)對數(shù)據(jù)進行管理而設計的類,它是使軟件系統(tǒng)能夠對對象的屬性值進行存貯和檢索所需要的類。 數(shù)據(jù)管理類用于存貯和檢索對象的屬性值,可以采用文件模式或關系數(shù)據(jù)庫模式實現(xiàn)。設計數(shù)據(jù)管理類的目的是為了使得對對象屬性值的管理獨立于各種不同的數(shù)據(jù)管理模式。 1、數(shù)據(jù)格式設計 1)文件數(shù)據(jù)格式 當采用文件存貯管理方式時,數(shù)據(jù)格式的設計就是對文件記錄結構進行設計。 2)關系數(shù)據(jù)庫格式 當采用關系數(shù)據(jù)庫管理方式時,數(shù)據(jù)格式的設計就是對關系表結構進行設計。,2 、操作設計 數(shù)據(jù)管理類的操作包括增添數(shù)據(jù)記錄、刪除數(shù)據(jù)記錄、檢索數(shù)據(jù)記錄和更新數(shù)據(jù)記錄等幾種形式,問題空間類可通過這些操作發(fā)送消息給相應的數(shù)據(jù)管理類實現(xiàn)對數(shù)據(jù)的存貯、刪除、檢索和更新。數(shù)據(jù)管理類設計模板如下圖所示。,圖 示: 數(shù)據(jù)管理類設計模板,下頁圖示是為大學教務管理問題中的SelectCourse(選課單)類設計的一個數(shù)據(jù)管理類。 在SelectCourse類中需要保存的是StudentID、CourseID以及分解為兩個原子變量Year和Semester 的SelectForCourse等描述性變量,該類通過Write(登記)等操作向相應的數(shù)據(jù)管理類SelectCourseManager發(fā)送Add(增添)、Update(更新) 等消息。,圖示:大學教務管理問題中相應于SelectCourse類的數(shù)據(jù)管理,面向對象實現(xiàn)技術 與結構化實現(xiàn)技術中先以模塊為單位進行過程設計和編碼調試相似,面向對象實現(xiàn)技術是先以類為單位進行操作設計、編碼調試;然后實現(xiàn)類與類之間的關聯(lián)定義,并進行系統(tǒng)測試;最后交予用戶使用并根據(jù)使用情況進行維護。在每一個階段都必須按照有關規(guī)范編寫相應的說明書或報告。因此,本章主要討論面向對象實現(xiàn)技術的一些特點和不同于結構化實現(xiàn)技術。 1、實現(xiàn)語言 毫無疑問,面向對象設計的實現(xiàn)最自然的實現(xiàn)方式是利用面向對象語言。目前最常用的面向對象語言是C+,其它比較著名的面向對象語言則還有Smalltalk、面向對象PASCAL,JAVA、Objective-C,Common Lisp Object System (CLOS),等等。,2、基本實現(xiàn)手段 為了實現(xiàn)面向對象的設計,所選用的編碼語言一般應包括實現(xiàn)類定義、對象創(chuàng)建、結構定義、實例關聯(lián)定義、操作調用和消息發(fā)送、內存管理、封裝等基本功能的編碼手段。這里以目前最為流行的C+語言分別對這些基本功能的實現(xiàn)手段加以說明。 1 類定義 使用C+對大學教務管理問題中的類Student(學生)定義如例6.1所示: 例6.1 類的定義 typedef struct int month; int day; int year; date; / Month - 月;day - 日;year - 年 enum sexdef M, F; /M - 男;F - 女 enum appdef R, S; /R - 注冊;S - 選課 class Student protected: / 導出類可以訪問的數(shù)據(jù)變量,char ID8; char Name24; sexdef Sex; date Birthday; date EnrollmentDay; char Department24; char Speciality24; char Password6; apptdef Application; / 導出類可以訪問的操作 appdef GetApplication(); void PutApplication(); void Note(char *Msg); public: / 構造函數(shù),必須與類名稱相同 Student (char *InitID); / 析構函數(shù),必須與類名稱相同 Student();,/ 所有類都可以訪問的操作 char *GetID(); char *GetPassword(); boolean VerifyPassword(); void ChangePassword(char *NewPassword, char *OldPassword); ; 在C+中,數(shù)據(jù)變量和操作都被說明為成員,數(shù)據(jù)變量和操作的名稱不能相同。類的成 員必須被說明為公有的(public)、保護的(protectd)或私有的(private)中的一種,其中 私有的為缺省值。公有成員可以被任何類的操作訪問;保護成員只允許類自身及其導出類的操作訪問;私有成員只允許類自身的操作訪問。在上述例子中,類Student的所有數(shù)據(jù)變量和幾個操作被定義為保護成員,因為其導出類Undergraduate(本科生)和Graduate(研究生) 將要訪問這些成員。 類中操作的定義類似于一個過程或函數(shù)的定義,只是需要把類名作為操作名的前綴。例6.2給出了用C+編碼設計的類Student的操作ChangePassword。,例6.2 類操作的定義 void Student:Changepassword(char *NewPassword, char *OldPassword); if (OldPassword = Password ) Password = NewPassword; 與類名稱相同的兩個操作Student和Student分別稱為構造函數(shù)和析構函數(shù),它們分別用 于對象創(chuàng)建和對象消除操作。例如類Student的構造函數(shù)和析構函數(shù)的定義分別如例6.3和6.4 所示。 例6.3 類構造函數(shù)的定義 Student:Student (char *InitID) ID = InitID; ,例6.4 類析構函數(shù)的定義 Student:Student() / 析構函數(shù)是不帶參數(shù)的,其名稱是在類名稱前面加一個波浪號“”。 6.2.2 對象創(chuàng)建 C+有兩種對象創(chuàng)建方式,靜態(tài)內存分配方式和動態(tài)內存分配方式,每當創(chuàng)建一個新對 象,就執(zhí)行一次構造函數(shù)。 例6.5用靜態(tài)內存分配方式創(chuàng)建了類Student的學號為98109002的對象studentobj。 例6.5 對象創(chuàng)建的靜態(tài)內存分配方式 Student studentobj(“98109002“);,如果該語句是出現(xiàn)在一個操作或函數(shù)中,則說明studentobj被定義為局部變量,當操作或 函數(shù)執(zhí)行完畢退出時,該對象將被自動消除,所占用的內存被釋放,釋放內存時將執(zhí)行一次析構函數(shù)。如果該語句是將studentobj定義為一個全局變量,則只有系統(tǒng)退出后對象studentobj才會被消除。 采用動態(tài)內存分配方式創(chuàng)建對象時需要借用C+的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論