八面向?qū)ο蟪绦蛟O(shè)計(jì)方法與實(shí)例電子教案_第1頁(yè)
八面向?qū)ο蟪绦蛟O(shè)計(jì)方法與實(shí)例電子教案_第2頁(yè)
八面向?qū)ο蟪绦蛟O(shè)計(jì)方法與實(shí)例電子教案_第3頁(yè)
八面向?qū)ο蟪绦蛟O(shè)計(jì)方法與實(shí)例電子教案_第4頁(yè)
八面向?qū)ο蟪绦蛟O(shè)計(jì)方法與實(shí)例電子教案_第5頁(yè)
已閱讀5頁(yè),還剩77頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本章學(xué)習(xí)重點(diǎn)掌握內(nèi)容:面向?qū)ο蟮姆治雒嫦驅(qū)ο蟮脑O(shè)計(jì)與實(shí)現(xiàn)第8章面向?qū)ο蟪绦蛟O(shè)計(jì)方法與實(shí)例1/13/20251第8章面向?qū)ο蟪绦蛟O(shè)計(jì)方法與實(shí)例8.1面向?qū)ο蠓椒▽W(xué)概述8.2面向?qū)ο蟮哪P?.3面向?qū)ο蟪绦蛟O(shè)計(jì)過(guò)程8.4電梯模擬系統(tǒng)

1/13/202528.1面向?qū)ο蠓椒▽W(xué)概述

面向?qū)ο?Object-Oriented,縮寫(xiě)為OO)方法學(xué)的出發(fā)點(diǎn)和基本原則,是盡可能模擬人類(lèi)習(xí)慣的思維方式,使開(kāi)發(fā)軟件的方法與過(guò)程盡可能接近人類(lèi)認(rèn)識(shí)世界解決問(wèn)題的方法與過(guò)程,也就是使描述問(wèn)題的問(wèn)題空間(也稱為問(wèn)題域)與實(shí)現(xiàn)解法的解空間(也稱為求解域)在結(jié)構(gòu)上盡可能一致。面向?qū)ο蠓椒ㄊ且环N新的思維方法,它不是把程序看作是工作在數(shù)據(jù)上的一系列過(guò)程或函數(shù)的集合,而是把程序看作是相互協(xié)作而又彼此獨(dú)立的對(duì)象的集合。每個(gè)對(duì)象就像一個(gè)微型程序,有自己的數(shù)據(jù)、操作、功能和目的。1/13/202538.1面向?qū)ο蠓椒▽W(xué)概述面向?qū)ο蠓椒ㄔ诟拍詈捅硎痉椒ㄉ系囊恢滦?,保證了軟件工程各項(xiàng)開(kāi)發(fā)活動(dòng)之間的平滑(“無(wú)縫”)過(guò)渡。面向?qū)ο箝_(kāi)發(fā)過(guò)程的核心是面向?qū)ο蠓治觯∣OA)和面向?qū)ο笤O(shè)計(jì)(OOD)兩個(gè)階段,但二者的界限比較模糊。OOA通過(guò)分析用例,提取用戶的需求,從而建立問(wèn)題域邏輯模型的過(guò)程;OOD是建立面向?qū)ο蟮那蠼庥蚰P偷倪^(guò)程。從OOA到OOD實(shí)際是一個(gè)多次反復(fù)、逐步迭代模型的過(guò)程。面向?qū)ο螅∣O)是認(rèn)識(shí)事物的一種方法,是一種以對(duì)象為中心的思維方式。這里先介紹它的幾個(gè)主要概念:對(duì)象、類(lèi)、封裝、繼承、消息、結(jié)構(gòu)與關(guān)聯(lián)、多態(tài)性。1/13/202551、對(duì)象世界上所有的事物都可以稱為對(duì)象。對(duì)象可以是有形的如:一臺(tái)電視機(jī)等。也可以是無(wú)形的如:帳戶、一項(xiàng)記錄等。對(duì)象具有靜態(tài)特征和動(dòng)態(tài)特征。對(duì)象是封裝了數(shù)據(jù)結(jié)構(gòu)及可以施加在這些數(shù)據(jù)結(jié)構(gòu)上的操作的封裝體,這個(gè)封裝體有可以唯一地標(biāo)識(shí)它的名字,而且向外界提供一組服務(wù)(即公有的操作)。屬性和操作是對(duì)象的兩大要素。屬性是對(duì)象靜態(tài)特征的描述,操作是對(duì)象動(dòng)態(tài)特征的描述。對(duì)象名也稱為對(duì)象標(biāo)識(shí)。如電視的屬性有:品牌、尺寸、重量等。操作有:收視、選臺(tái)、音量調(diào)節(jié)等。8.1.1對(duì)象和類(lèi)1/13/202562、類(lèi)類(lèi)是對(duì)象的藍(lán)圖。根據(jù)抽象的原則對(duì)客觀對(duì)象進(jìn)行歸納和劃分,把具有相同特征的對(duì)象歸為一個(gè)類(lèi)。它是一個(gè)抽象的概念。類(lèi)是對(duì)象模版,用于創(chuàng)建具有相同屬性和相同操作(服務(wù))的對(duì)象。它包括屬性和方法(注:類(lèi)的服務(wù)、行為和操作只是叫法上的區(qū)別)。3、封裝封裝是指按照信息隱藏的原則,把對(duì)象的屬性和操作結(jié)合在一起,構(gòu)成一個(gè)獨(dú)立的封裝體。封裝性也就是信息隱藏,通過(guò)封裝把對(duì)象的實(shí)現(xiàn)細(xì)節(jié)對(duì)外界隱藏起來(lái)了。

8.1.1對(duì)象和類(lèi)1/13/20257外部對(duì)象不能直接操作對(duì)象的屬性,只能使用對(duì)象提供的接口。具有封裝性的條件如下:有一個(gè)清晰的邊界。所有私有數(shù)據(jù)和實(shí)現(xiàn)操作的代碼都被封裝在這個(gè)邊界內(nèi),從外面看不見(jiàn)更不能直接訪問(wèn)。有確定的接口(即協(xié)議)。接口就是對(duì)象之間通信的橋梁,只能通過(guò)向?qū)ο蟀l(fā)送消息來(lái)使用它。受保護(hù)的內(nèi)部實(shí)現(xiàn)。實(shí)現(xiàn)對(duì)象功能的細(xì)節(jié)(私有數(shù)據(jù)和私有方法)不能在定義該對(duì)象的類(lèi)的范圍外進(jìn)行訪問(wèn)。8.1.1對(duì)象和類(lèi)1/13/20258

4、繼承繼承使得一個(gè)類(lèi)可以繼承另一個(gè)類(lèi)的屬性和方法。這樣通過(guò)抽象出共同的屬性和方法組建新的類(lèi),便于代碼的重用。如圖8.1的繼承關(guān)系。Button-pressed:bool+pressButton():void8.1.1對(duì)象和類(lèi)elevatorButton-elevatorRef:Elevator+pressButton():voidfloorButton-floorNumber:int+pressButton():void圖8.1繼承中的父子類(lèi)1/13/20259子類(lèi)電梯按鈕和樓層按鈕繼承了父類(lèi)Button的全部屬性和服務(wù),同時(shí)又具有自身新的屬性和服務(wù)。一般和特殊是相對(duì)而言的,在哺乳動(dòng)物和狗及貓之間,哺乳動(dòng)物是一般類(lèi)(稱為基類(lèi)、超類(lèi)或父類(lèi)),狗和貓是特殊類(lèi)(也稱子類(lèi));在狗和黑狗之間狗是一般類(lèi),黑狗是特殊類(lèi)。5、消息向某個(gè)對(duì)象發(fā)出的服務(wù)請(qǐng)求稱作消息。對(duì)象提供的服務(wù)規(guī)定的消息格式稱作消息協(xié)議。消息包括:被請(qǐng)求的對(duì)象標(biāo)識(shí)、被請(qǐng)求的服務(wù)標(biāo)識(shí)、輸入信息和應(yīng)答信息。如:向電梯按鈕類(lèi)發(fā)送請(qǐng)求按下電梯按鈕的消息elvatorButton.pressButton()。8.1.1對(duì)象和類(lèi)1/13/2025108.1.1對(duì)象和類(lèi)6、結(jié)構(gòu)與關(guān)聯(lián)一個(gè)系統(tǒng)一般由很多對(duì)象組成,對(duì)象之間并不是互相孤立的,而是存在著各種各樣的關(guān)系。包括:部分/整體、一般/特殊、實(shí)例連接、消息連接。(1)部分/整體對(duì)象之間存在的部分與整體的結(jié)構(gòu)關(guān)系。如電梯按鈕是電梯類(lèi)的一個(gè)組成部分,電梯由電梯按鈕、門(mén)、樓層、響鈴等組成。如圖8.2的組合關(guān)系。

1/13/2025118.1.1對(duì)象和類(lèi)Elevator-door:Door+processPossibleArrival():voidelevatorButton-elevatorRef:Elevator+pressButton():voidDoor-open:bool+closeDoor():void圖8.2組合關(guān)系

1/13/2025128.1.1對(duì)象和類(lèi)組合和聚合。組合關(guān)系中部分和整體的關(guān)系很緊密。聚合關(guān)系中則比較松散,一個(gè)部分對(duì)象可以屬于幾個(gè)整體對(duì)象。(2)一般/特殊對(duì)象之間的結(jié)構(gòu)關(guān)系,很多時(shí)候也稱作泛化和特化關(guān)系。(3)實(shí)例連接對(duì)象之間的實(shí)例連接稱作鏈接,對(duì)象類(lèi)之間的實(shí)例連接稱作關(guān)聯(lián)。(4)消息連接消息連接表現(xiàn)了這樣一種聯(lián)系:一個(gè)對(duì)象發(fā)送消息請(qǐng)求另一個(gè)對(duì)象的服務(wù),接收消息的對(duì)象響應(yīng)消息,執(zhí)行相應(yīng)的服務(wù)。1/13/2025137、多態(tài)性所謂多態(tài)性是指不同對(duì)象接收相同的消息時(shí)產(chǎn)生不同的行為。這里的消息主要是對(duì)類(lèi)中成員函數(shù)的調(diào)用,而不同的行為就是指類(lèi)成員函數(shù)的不同實(shí)現(xiàn)。即在類(lèi)等級(jí)的不同層次中可以共享(公用)一個(gè)行為(方法)的名字,然而不同層次中的每個(gè)類(lèi)卻各自按自己的需要來(lái)實(shí)現(xiàn)這個(gè)行為。當(dāng)對(duì)象接收到發(fā)送給它的消息時(shí),根據(jù)該對(duì)象所屬于的類(lèi)動(dòng)態(tài)選用在該類(lèi)中定義的實(shí)現(xiàn)算法。如圖8.1中,當(dāng)向按鈕對(duì)象發(fā)送消息pressButton()時(shí),不同按鈕對(duì)象如電梯內(nèi)部按鈕和樓層按鈕會(huì)自動(dòng)判斷自己的所屬類(lèi)并執(zhí)行相應(yīng)的服務(wù)。8.1.1對(duì)象和類(lèi)1/13/202514面向?qū)ο蟮哪P?,分別從三個(gè)不同側(cè)面描述了所要開(kāi)發(fā)的系統(tǒng)。對(duì)象模型定義了“做什么”的實(shí)體,功能模型指明了系統(tǒng)應(yīng)該“做什么”,動(dòng)態(tài)模型明確規(guī)定在何種狀態(tài)下,接受什么事件的觸發(fā)而“做什么”。一個(gè)典型的軟件系統(tǒng)組合了上述三方面內(nèi)容:它使用數(shù)據(jù)結(jié)構(gòu)(對(duì)象模型),執(zhí)行操作(動(dòng)態(tài)模型),并且完成屬性值的變化(功能模型)。8.2面向?qū)ο蟮哪P?/13/2025151.對(duì)象模型是一個(gè)類(lèi)(屬性和方法)、對(duì)象(類(lèi)的實(shí)例)、類(lèi)或?qū)ο笾g關(guān)系的定義集。對(duì)象模型表示靜態(tài)的、結(jié)構(gòu)化系統(tǒng)的“數(shù)據(jù)”性質(zhì),為建立動(dòng)態(tài)模型和功能模型提供了實(shí)質(zhì)性的框架。對(duì)象模型把面向?qū)ο蟮母拍钆c常用的信息建模概念結(jié)合起來(lái),增強(qiáng)了模型的可理解性和表達(dá)能力。對(duì)象模型還表示了類(lèi)/對(duì)象之間的結(jié)構(gòu)關(guān)系。類(lèi)/對(duì)象之間的關(guān)系一般可概括為關(guān)聯(lián)、歸納(繼承)、組合(或聚集)三類(lèi)。8.2面向?qū)ο蟮哪P?/13/2025168.2面向?qū)ο蟮哪P?.動(dòng)態(tài)模型表示瞬間的、行為化的系統(tǒng)“控制”性質(zhì),它規(guī)定了對(duì)象模型中對(duì)象狀態(tài)的合法變化序列。對(duì)象有自己的生命周期,它由多個(gè)階段組成,每個(gè)特定階段都有規(guī)范該對(duì)象行為的一組運(yùn)行規(guī)則。對(duì)象的狀態(tài)是對(duì)象屬性的一種抽象,事件是某個(gè)特定時(shí)刻發(fā)生的一個(gè)系統(tǒng)行為是引起對(duì)象狀態(tài)轉(zhuǎn)換的控制信息。對(duì)象對(duì)事件的響應(yīng),取決于當(dāng)時(shí)的狀態(tài),響應(yīng)包括改變自己的狀態(tài),或者是形成一個(gè)新的觸發(fā)行為(事件)。動(dòng)態(tài)模型描繪對(duì)象的狀態(tài),觸發(fā)狀態(tài)轉(zhuǎn)換的事件,以及對(duì)象行為(對(duì)事件的響應(yīng)),即基于事件共享而互相關(guān)聯(lián)的一組狀態(tài)集合構(gòu)成了系統(tǒng)的動(dòng)態(tài)模型。1/13/202517

3.功能模型指明了系統(tǒng)應(yīng)該“做什么”,直接地反映了用戶對(duì)目標(biāo)系統(tǒng)的需求。面向?qū)ο蟮墓δ苣P陀梢唤M用例組成,用例模型描述的是外部執(zhí)行者(Actor)所理解的系統(tǒng)功能。用例模型描述了待開(kāi)發(fā)系統(tǒng)的功能需求用例模型將系統(tǒng)看作黑盒,從外部執(zhí)行者的角度來(lái)理解系統(tǒng)用例模型驅(qū)動(dòng)了需求分析之后各階段的開(kāi)發(fā)工作,不僅在開(kāi)發(fā)過(guò)程中保證了系統(tǒng)所有功能的實(shí)現(xiàn),而且被用于驗(yàn)證和檢測(cè)所開(kāi)發(fā)的系統(tǒng),從而影響到開(kāi)發(fā)工作的各個(gè)階段和UML的各個(gè)模型。在UML中,一個(gè)用例模型由若干個(gè)用例圖描述,用例圖主要元素是用例和執(zhí)行者。8.2面向?qū)ο蟮哪P?/13/202518傳統(tǒng)程序設(shè)計(jì)方法的主要思想是自頂向下逐步分解。整個(gè)系統(tǒng)由分層的子程序集合構(gòu)成。這要求程序設(shè)計(jì)師必須對(duì)系統(tǒng)的調(diào)用關(guān)系非常清楚,這對(duì)于開(kāi)發(fā)大型系統(tǒng)來(lái)講是是非困難的,而且構(gòu)建的系統(tǒng)穩(wěn)定性較差,任何上層子程序的修改都會(huì)引整個(gè)系統(tǒng)的改變。而面向?qū)ο蟮贸绦蛟O(shè)計(jì)方法提供一種嶄新的系統(tǒng)設(shè)計(jì)方案,就是將系統(tǒng)看成一系列相關(guān)聯(lián)的對(duì)象的集合,而對(duì)象之間是通過(guò)消息傳遞的方法相互作用來(lái)完成任務(wù),每個(gè)對(duì)象用自己的方法管理數(shù)據(jù)。本節(jié)就介紹這種軟件開(kāi)發(fā)的方法,它將軟件開(kāi)發(fā)過(guò)程分為3個(gè)階段:面向?qū)ο蟮姆治?、面向?qū)ο蟮脑O(shè)計(jì)、面向?qū)ο蟮膶?shí)現(xiàn)。不同階段則使用不同的模型來(lái)描述。8.3面向?qū)ο蟪绦蛟O(shè)計(jì)過(guò)程

1/13/2025198.3.1面向?qū)ο蟮姆治雒嫦驅(qū)ο蠓治龅娜蝿?wù)是確定系統(tǒng)能夠做什么?誰(shuí)來(lái)使用這個(gè)系統(tǒng)?同時(shí)建立用例模型,并定義系統(tǒng)中的問(wèn)題領(lǐng)域類(lèi),主要由系統(tǒng)用戶和開(kāi)發(fā)人員合作完成。1.需求分析分析的第一步是定義用例,以描述所開(kāi)發(fā)系統(tǒng)的外部功能需求。用例模型的主要構(gòu)件是用例、角色和系統(tǒng)邊界。用例用于描述系統(tǒng)所有功能需求,系統(tǒng)邊界用于界定系統(tǒng)功能的范圍,而角色用于描述與系統(tǒng)功能有關(guān)的外部實(shí)體,它可以是用戶,也可以是外部系統(tǒng)。

1/13/202520使用面向?qū)ο蟪绦蛟O(shè)計(jì)方法時(shí),在本階段不需要嚴(yán)格的系統(tǒng)規(guī)格說(shuō)明書(shū),可以使用圖表(如用例圖)來(lái)描述系統(tǒng)的功能,除了用用例圖描述系統(tǒng)需求外,還可以用文字(或活動(dòng)圖)對(duì)每個(gè)用例進(jìn)行需求說(shuō)明,更具體地描述該用例與角色的交互。例如電梯模擬系統(tǒng)的用例圖如下:8.3.1面向?qū)ο蟮姆治?/13/2025218.3.1面向?qū)ο蟮姆治龀丝吞幚黼娞莺艚袠?biāo)示移動(dòng)方向處理樓層呼叫標(biāo)示電梯位置電梯模擬系統(tǒng)移動(dòng)停止電梯開(kāi)關(guān)門(mén)觸發(fā)緊急處理器圖8.3電梯模擬系統(tǒng)用例圖1/13/2025222.特定領(lǐng)域類(lèi)分析分析階段的另一項(xiàng)工作是特定領(lǐng)域分析,以列出系統(tǒng)中的特定領(lǐng)域類(lèi)。我們可以通過(guò)閱讀規(guī)格說(shuō)明、用例以及尋找系統(tǒng)處理的"概念"來(lái)進(jìn)行特定領(lǐng)域分析,也可以通過(guò)用戶和領(lǐng)域?qū)<业挠懻?,以識(shí)別出要處理的所有關(guān)鍵類(lèi)及它們的相互關(guān)系。這里的特定領(lǐng)域是指具體的商業(yè)領(lǐng)域,而不是整個(gè)系統(tǒng)領(lǐng)域。在本實(shí)例中,可以確定電梯模擬系統(tǒng)中特定領(lǐng)域類(lèi)為電梯、調(diào)度、門(mén)、按鈕、樓層等,并使用類(lèi)圖來(lái)描述系統(tǒng)領(lǐng)域類(lèi)及其關(guān)系。8.3.1面向?qū)ο蟮姆治?/13/202523需要強(qiáng)調(diào)的是,這一階段對(duì)特定領(lǐng)域類(lèi)的描述具有一定的素描性質(zhì),也就是說(shuō)特定領(lǐng)域類(lèi)的操作和屬性不一定與最終實(shí)現(xiàn)時(shí)的定義一致。因?yàn)榇藭r(shí)還沒(méi)有涉及到系統(tǒng)功能的具體實(shí)現(xiàn),不可能準(zhǔn)確、完整地定義它們。有一些操作需要在設(shè)計(jì)階段細(xì)化時(shí)才能確定。此外,為了描述問(wèn)題領(lǐng)域中類(lèi)的動(dòng)態(tài)行為,可以使用UML中的任何一種動(dòng)態(tài)圖(如順序圖、活動(dòng)圖、協(xié)作圖、狀態(tài)圖)。本階段的各動(dòng)態(tài)圖都具有素描性質(zhì),主要是為了協(xié)助對(duì)領(lǐng)域類(lèi)及其相互關(guān)系的分析,為下一階段的具體設(shè)計(jì)打下基礎(chǔ)。8.3.1面向?qū)ο蟮姆治?/13/202524設(shè)計(jì)階段的任務(wù)是對(duì)分析模型進(jìn)行擴(kuò)展并將模型進(jìn)一步細(xì)化,并考慮技術(shù)細(xì)節(jié)和限制條件。設(shè)計(jì)的目的是指定一個(gè)可行的解決方案,以便能很容易地轉(zhuǎn)變成為編程代碼。設(shè)計(jì)可以分成兩個(gè)階段:

體系結(jié)構(gòu)設(shè)計(jì)階段(ArchitectureDesign)。這是一個(gè)從較高層次的進(jìn)行的設(shè)計(jì),用來(lái)定義包(子系統(tǒng)),描述包之間的依賴性及通信機(jī)制。很自然,目的是要設(shè)計(jì)一個(gè)清晰簡(jiǎn)單的體系結(jié)構(gòu),有很少的依賴性,而且盡可能避免雙向依賴。

詳細(xì)設(shè)計(jì)階段(DetailedDesign)。在此階段,所有的類(lèi)都詳盡地進(jìn)行描述,給編寫(xiě)代碼的程序員一個(gè)清晰的規(guī)范說(shuō)明。UML中的動(dòng)態(tài)模型用來(lái)說(shuō)明類(lèi)的對(duì)象如何在特定的情況下做出相應(yīng)的表現(xiàn)。8.3.2面向?qū)ο蟮脑O(shè)計(jì)1/13/2025258.3.2面向?qū)ο蟮脑O(shè)計(jì)1.體系結(jié)構(gòu)設(shè)計(jì)類(lèi)圖中包括有助于用戶從技術(shù)邏輯中分離出應(yīng)用邏輯(領(lǐng)域類(lèi)),從而減少它們之間的依賴性。這就是軟件結(jié)構(gòu)設(shè)計(jì)強(qiáng)調(diào)的模塊間的高聚合、低偶合的原則。在商業(yè)MIS中,存在以下包(或子系統(tǒng)):用戶接口包:用戶接口類(lèi)允許用戶訪問(wèn)系統(tǒng)數(shù)據(jù)和加入新數(shù)據(jù)。在商業(yè)對(duì)象中,用戶接口包跟商業(yè)對(duì)象包合作,調(diào)用商業(yè)對(duì)象的操作,實(shí)施數(shù)據(jù)的檢索和插入。

1/13/2025268.3.2面向?qū)ο蟮脑O(shè)計(jì)商業(yè)對(duì)象包:該包包括域類(lèi),這些域類(lèi)(如elevatorButton,Floor,Light等)來(lái)自于分析模型。設(shè)計(jì)階段完整地定義了這些類(lèi)的操作,并增加了一些其他細(xì)節(jié)來(lái)支持持續(xù)存儲(chǔ)。在設(shè)計(jì)階段,詳細(xì)設(shè)計(jì)這些類(lèi),以完整定義他們的操作,支持對(duì)數(shù)據(jù)庫(kù)的存取。所以,所有商業(yè)對(duì)象類(lèi)必須繼承數(shù)據(jù)庫(kù)包中的類(lèi)。數(shù)據(jù)庫(kù)包:它向商業(yè)對(duì)象包中的類(lèi)提供服務(wù),以便他們能夠持續(xù)地存儲(chǔ)。在當(dāng)前版本中,持久對(duì)象類(lèi)將把它的子類(lèi)的對(duì)象存儲(chǔ)到文件系統(tǒng)的文件中。通用包:該包含了一些服務(wù),用來(lái)被系統(tǒng)中其他包調(diào)用。1/13/2025278.3.2面向?qū)ο蟮脑O(shè)計(jì)2.詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)的目的是通過(guò)創(chuàng)建新的類(lèi)圖、狀態(tài)圖和動(dòng)態(tài)圖,描述新類(lèi),并擴(kuò)展和細(xì)化分析階段“素描”的商業(yè)對(duì)象類(lèi)。不過(guò)在詳細(xì)設(shè)計(jì)階段,它們是從技術(shù)層次上對(duì)系統(tǒng)進(jìn)行更詳盡的描述。如分析階段的用例描述用來(lái)驗(yàn)證它們是否在設(shè)計(jì)階段都得到處理,而順序圖用來(lái)展示系統(tǒng)中每個(gè)用例在技術(shù)上如何實(shí)現(xiàn),等等。在設(shè)計(jì)階段,也可細(xì)化分析階段的狀態(tài)圖,更詳細(xì)的顯示狀態(tài)的變換細(xì)節(jié)。使用狀態(tài)圖可以揭示單個(gè)對(duì)象在整個(gè)系統(tǒng)中的變化細(xì)節(jié),對(duì)了解和實(shí)現(xiàn)關(guān)鍵類(lèi)有較大的幫助。此外,還可以使用其他圖在實(shí)現(xiàn)層上從不同側(cè)面對(duì)分析階段建立的模型進(jìn)行細(xì)化。

1/13/2025288.3.3面向?qū)ο蟮膶?shí)現(xiàn)面向?qū)ο蟮膶?shí)現(xiàn)可分為兩個(gè)階段:一是對(duì)類(lèi)進(jìn)行編程的過(guò)程。可以選擇某種面向?qū)ο髮?duì)象編程語(yǔ)言(如c++或Java)作為實(shí)現(xiàn)系統(tǒng)的軟件環(huán)境;二是測(cè)試和配置,完成系統(tǒng)編碼后,需要對(duì)系統(tǒng)進(jìn)行測(cè)試。1.編碼本階段完成系統(tǒng)框架進(jìn)行編碼。選擇合適的語(yǔ)言實(shí)現(xiàn)設(shè)計(jì)階段完成的總體框架的搭建和具體算法的描述。在實(shí)現(xiàn)階段中,可以選取下列圖的說(shuō)明來(lái)輔助編程:1/13/202529類(lèi)的規(guī)格說(shuō)明:每個(gè)類(lèi)的規(guī)格說(shuō)明詳細(xì)顯示了必要的屬性和操作。類(lèi)圖:顯示類(lèi)的靜態(tài)結(jié)構(gòu)和類(lèi)之間的關(guān)系。狀態(tài)圖:顯示類(lèi)的對(duì)象可能的狀態(tài)、所需處理的轉(zhuǎn)移以及觸發(fā)這些轉(zhuǎn)移的操作。包含某個(gè)類(lèi)的對(duì)象的動(dòng)態(tài)圖(順序圖、協(xié)作圖、活動(dòng)圖):顯示該類(lèi)的某個(gè)方法的實(shí)現(xiàn)或別的對(duì)象是如何使用該類(lèi)的對(duì)象的。用例圖和規(guī)格說(shuō)明:顯示系統(tǒng)需求和結(jié)果。

8.3.3面向?qū)ο蟮膶?shí)現(xiàn)1/13/202530

編碼期間也可能會(huì)發(fā)現(xiàn)設(shè)計(jì)模型的缺陷。這時(shí)需要開(kāi)發(fā)者修改設(shè)計(jì)模型。修改設(shè)計(jì)模型時(shí)一定要保持設(shè)計(jì)模型與編碼的一致性,以便將來(lái)易于維護(hù)。2.測(cè)試和配置完成系統(tǒng)編碼后,需要對(duì)系統(tǒng)進(jìn)行測(cè)試,它通常包括:單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試和驗(yàn)收測(cè)試。在單元測(cè)試中使用類(lèi)圖和類(lèi)的規(guī)格說(shuō)明,對(duì)單獨(dú)的類(lèi)或一組類(lèi)進(jìn)行測(cè)試;在集成測(cè)試中,使用組件圖和協(xié)作圖,對(duì)各組件的合作情況進(jìn)行測(cè)試;在系統(tǒng)測(cè)試中,使用用例圖,以檢驗(yàn)所開(kāi)發(fā)的系統(tǒng)是否滿足例圖所描述的需求。8.3.3面向?qū)ο蟮膶?shí)現(xiàn)1/13/202531

8.4.1需求陳述電梯模擬系統(tǒng)的設(shè)計(jì)與“真實(shí)”的系統(tǒng)相比省去很多技術(shù)的細(xì)節(jié)。我們的電梯系統(tǒng)有所有電梯都有的基本功能,如上升和下降,開(kāi)門(mén)和關(guān)門(mén),以及能承載乘客。電梯假設(shè)在一棟大樓的第一層到第N層運(yùn)行,第一層是大廳。電梯里有每一層對(duì)應(yīng)的按鈕,除了第一層和第N層外,每個(gè)樓層都有兩個(gè)按鈕,乘客可以呼叫上樓和下樓。頂樓只有一個(gè)下行按鈕,第一層的大廳只有一個(gè)上行按鈕。當(dāng)電梯停在某一層時(shí),電梯開(kāi)門(mén),電梯的指示燈表明當(dāng)前電梯運(yùn)行的方向,這樣乘客知道當(dāng)前電梯運(yùn)行的方向。電梯在兩個(gè)樓層間快速移動(dòng)時(shí),電梯的門(mén)是緊閉的,而且電梯能提前減速到達(dá)目的地。為保證電梯系統(tǒng)的安全,在任何不安全的因素下,緊急制動(dòng)就會(huì)促發(fā),電梯被強(qiáng)制停止。8.4電梯模擬系統(tǒng)1/13/202532電梯到達(dá)一個(gè)樓層時(shí),它會(huì)重置電梯按鈕,并響鈴(繼承到電梯內(nèi)部)進(jìn)入電梯,然后電梯向樓層發(fā)布已經(jīng)到達(dá)的信號(hào)。作為響應(yīng),樓層會(huì)重置樓層按鈕,并顯示電梯已經(jīng)到達(dá)指定樓層。然后,電梯門(mén)開(kāi),注意樓層上對(duì)應(yīng)的門(mén)隨電梯門(mén)一起自動(dòng)打開(kāi)。隨后,電梯內(nèi)的乘客離開(kāi)電梯,正在等待電梯的人進(jìn)入電梯。一個(gè)人進(jìn)入電梯內(nèi)后,按下電梯按鈕,電梯內(nèi)的指示燈會(huì)亮。另外,等電梯到達(dá)另一樓層,并重置電梯按鈕后,燈就熄滅。接著,電梯向指定樓層移動(dòng),電梯到達(dá)指定樓層后,如果沒(méi)有人進(jìn)入電梯,而且樓層上的樓層按鈕沒(méi)有被按下的話,就等待電梯門(mén)關(guān)閉,直到樓層按鈕被按下。8.4.1需求陳述1/13/2025338.4.2.1用例圖電梯系統(tǒng)的用例圖如圖8.4所示,主要包括用例、角色和關(guān)系。8.4.2電梯模擬系統(tǒng)的分析乘客處理電梯呼叫標(biāo)示移動(dòng)方向處理樓層呼叫標(biāo)示電梯位置電梯模擬系統(tǒng)移動(dòng)停止電梯開(kāi)關(guān)門(mén)觸發(fā)緊急處理器圖8.4電梯系統(tǒng)用例圖1/13/202534其中的小人代表參與系統(tǒng)的外來(lái)實(shí)體,在這就是電梯系統(tǒng)的唯一角色----乘客,它需要系統(tǒng)為他提供相應(yīng)的服務(wù),乘客通過(guò)觀察電梯移動(dòng)的方向和電梯位置指示器決定是否進(jìn)/出電梯,因此他參與系統(tǒng)的四個(gè)用例,處理電梯呼叫、處理樓層呼叫、標(biāo)示電梯位置和標(biāo)志移動(dòng)方向。以下是該用例圖的簡(jiǎn)單功能描述。

8.4.2電梯模擬系統(tǒng)的分析1/13/202535處理電梯呼叫:這個(gè)用例包括幾個(gè)場(chǎng)景。這些場(chǎng)景有乘客的呼叫電梯、電梯按鈕的亮滅、電梯控制器處理電梯呼叫,處理按鈕信息更新等等。處理樓層呼叫:和處理電梯呼叫類(lèi)似,這個(gè)用例包括乘客選擇樓層、樓層按鈕的亮滅和電梯控制器處理樓層呼叫,處理按鈕信息更新等等。移動(dòng)停止電梯:這是一臺(tái)電梯的主要功能,詳細(xì)的動(dòng)作包括驅(qū)動(dòng)速度的改變,停止的判定,電梯的運(yùn)動(dòng)方向驅(qū)動(dòng)。標(biāo)識(shí)電梯移動(dòng)方向:電梯應(yīng)該有這種機(jī)制,即讓乘客知道電梯目前的運(yùn)動(dòng)方向,決定是否進(jìn)電梯。8.4.2電梯模擬系統(tǒng)的分析1/13/202536標(biāo)識(shí)電梯位置:類(lèi)似電梯移動(dòng)方向,電梯應(yīng)該讓乘客知道他/她的目的層是否到達(dá),決定是否離開(kāi)電梯。開(kāi)關(guān)門(mén):乘客進(jìn)出電梯,電梯應(yīng)該開(kāi)關(guān)門(mén)。這個(gè)用例應(yīng)該包括當(dāng)電梯正關(guān)閉時(shí)乘客想進(jìn)入,乘客可以使電梯門(mén)打開(kāi)。觸發(fā)緊急制動(dòng)器:電梯有安全機(jī)制確定一個(gè)不安全的狀態(tài)不是瞬時(shí)產(chǎn)生的。系統(tǒng)框架(用例圖中封閉的矩形)包含系統(tǒng)的用例,而邊界代表系統(tǒng)和外界實(shí)體交互的界面。8.4.2電梯模擬系統(tǒng)的分析1/13/202537每個(gè)用例代表系統(tǒng)對(duì)外提供的服務(wù),或另一個(gè)子系統(tǒng)??捎檬录鲗?duì)其中的用例進(jìn)行詳細(xì)描述。如下對(duì)用例“處理電梯呼叫“:處理電梯呼叫用例基本流程。(1)乘客按下第M層的下行按鈕。(2)M被插入到下行隊(duì)列的合適位置。(3)如果M被插到下行隊(duì)列頭。如果電梯正處于下行狀態(tài)。將M發(fā)送給電梯作為目的地。如果電梯處于停止?fàn)顟B(tài)。將M發(fā)送給電梯作為目的地。(4)電梯到達(dá)此樓層。(5)電梯自動(dòng)打開(kāi)門(mén)。(6)乘客進(jìn)入電梯。(7)超重響警鈴。8.4.2電梯模擬系統(tǒng)的分析1/13/202538

8.4.2.2類(lèi)圖類(lèi)圖是面向?qū)ο笙到y(tǒng)中應(yīng)用最多的圖,它對(duì)系統(tǒng)進(jìn)行靜態(tài)建模。靜態(tài)圖主要描述系統(tǒng)的功能需求-系統(tǒng)給最終用戶提供的服務(wù)。類(lèi)圖描述一組類(lèi)、接口和協(xié)作,及它們的關(guān)系。類(lèi)圖包括整個(gè)系統(tǒng)的描述,如系統(tǒng)的結(jié)構(gòu)和細(xì)節(jié),還有類(lèi)的屬性和操作等細(xì)節(jié)。

具體方法如下:8.4.2電梯模擬系統(tǒng)的分析1/13/202539

1.找出問(wèn)題陳述中所有的名詞表8-1問(wèn)題陳述中的名詞

大樓乘客載客量電梯樓層電梯按鈕樓層按鈕電梯模擬程序樓層電梯指示燈人(電梯內(nèi)的人,樓層等電梯的人)時(shí)間鈴電梯門(mén)時(shí)鐘問(wèn)題陳述中的名詞

8.4.2電梯模擬系統(tǒng)的分析1/13/2025402.選擇在系統(tǒng)中擔(dān)負(fù)主要職責(zé)的名詞,而去掉下面的詞電梯模擬程序載客量時(shí)間建筑物是與系統(tǒng)無(wú)關(guān)的事物,時(shí)間和載客量分別是時(shí)鐘和電梯所具有的特性,而非獨(dú)立的實(shí)體,電梯模擬程序是以完整的程序,而不是一個(gè)具體的實(shí)體8.4.2電梯模擬系統(tǒng)的分析1/13/2025413.將剩下的名詞劃成不同的類(lèi),以確定真正的類(lèi)

大樓樓層門(mén)按鈕(電梯和樓層按鈕)燈時(shí)鐘調(diào)度鈴乘客(包括電梯內(nèi)的人,樓層等電梯的人)它們都可能成為系統(tǒng)中所涉及的最終類(lèi)。我們?yōu)闃菍影粹o和電梯按鈕創(chuàng)建一個(gè)類(lèi),按鈕類(lèi),并擁有兩個(gè)子類(lèi),分別為樓層按鈕和電梯按鈕(他們分別在電梯系統(tǒng)中擔(dān)負(fù)主要職責(zé),分別管理呼喚電梯和指揮電梯的移動(dòng))。

系統(tǒng)主要的類(lèi)有:

大樓,樓層,門(mén),按鈕),燈,時(shí)鐘,調(diào)度,鈴,乘客。8.4.2電梯模擬系統(tǒng)的分析1/13/2025428.4.2.3電梯系統(tǒng)類(lèi)圖根據(jù)上面的分析得出系統(tǒng)的類(lèi)圖。如電梯類(lèi)圖、電梯按鈕和門(mén)類(lèi):門(mén):“電梯”對(duì)象-電梯控制器-命令門(mén)打開(kāi)和關(guān)閉,這和用例中的描述相對(duì)應(yīng)。電梯:電梯在控制下上升和下降(用不同的速度),需要時(shí)可以停下。按鈕:電梯控制器類(lèi)也控制按鈕類(lèi),按鈕類(lèi)生成兩個(gè)子類(lèi)電梯按鈕類(lèi)和樓層按鈕類(lèi))??刂茖?duì)象和按鈕對(duì)象通信,得到按鈕是否被按下,反過(guò)來(lái)控制按鈕燈的發(fā)光。8.4.2電梯模擬系統(tǒng)的分析1/13/2025438.4.2電梯模擬系統(tǒng)的分析Elevator(電梯)-door:Door+processPossibleArrival():voidButton(按鈕)-pressed:bool+pressButton():voidDoor(門(mén))-open:bool+closeDoor():voidelevatorButton(電梯按鈕)-elevatorRef:Elevator+pressButton():voidfloorButton(樓層按鈕)-floorNumber:int+pressButton():void8.5電梯類(lèi)圖

1擁有

1擁有*11/13/2025448.4.2電梯模擬系統(tǒng)的分析

系統(tǒng)由不同的類(lèi)組成,類(lèi)間的關(guān)系稱為類(lèi)的關(guān)聯(lián),通過(guò)類(lèi)之間的消息傳遞才構(gòu)成紛繁復(fù)雜的軟件系統(tǒng)。Uml通過(guò)類(lèi)圖描述類(lèi)之間的關(guān)聯(lián),如圖中繼承關(guān)聯(lián)(樓層按鈕合電梯按鈕的關(guān)系),組合關(guān)聯(lián)(電梯和門(mén)以及電梯按鈕的關(guān)系),一般關(guān)聯(lián)(電梯和門(mén)的關(guān)系等)。關(guān)聯(lián)可表示為關(guān)聯(lián)對(duì)象的個(gè)數(shù)和關(guān)聯(lián)名,如電梯和電梯按鈕的關(guān)聯(lián)表示。系統(tǒng)類(lèi)圖如下:1/13/2025458.4.2電梯模擬系統(tǒng)的分析調(diào)度(Scheduler)時(shí)鐘(Clock)乘客(Person)樓層(Floor)電梯(Elevator)樓層按鈕(floorButton)燈(Light)樓層按鈕(floorButton)鈴(Bell)門(mén)(Door)圖8.6電梯模擬系統(tǒng)的類(lèi)圖1調(diào)度0..10..1

等待乘1坐1擁有111..21..21..*11/13/2025468.4.2.4類(lèi)的屬性確定類(lèi)的結(jié)構(gòu)以后,需要表述類(lèi)本身具有的特性,也就是類(lèi)的屬性。通過(guò)對(duì)用例圖中每個(gè)用例的詳細(xì)表述中查詢每個(gè)類(lèi)對(duì)象擁有的屬性,并用合適的名詞描述屬性??捎靡粡埍砀衩枋鲈谛枨笾忻總€(gè)類(lèi)相關(guān)的描述。如下表8-2:8.4.2電梯模擬系統(tǒng)的分析1/13/2025478.4.2電梯模擬系統(tǒng)的分析表8-2電梯模擬系統(tǒng)中類(lèi)的相關(guān)描述類(lèi)與類(lèi)相關(guān)的描述詞(名詞或名詞短語(yǔ))電梯電梯運(yùn)行的時(shí)間電梯的狀態(tài)電梯運(yùn)行的方向電梯目前處于的位置電梯到達(dá)樓層的時(shí)間門(mén)門(mén)的狀態(tài)(開(kāi)和關(guān))時(shí)鐘時(shí)鐘的時(shí)間樓層按鈕按鈕的狀態(tài)(按下核釋放)電梯按鈕按鈕的狀態(tài)(按下核釋放)燈燈的狀態(tài)(開(kāi)和關(guān))鈴沒(méi)有調(diào)度到達(dá)指定樓層的時(shí)間,人到達(dá)時(shí)間樓層燈,按鈕,1/13/2025488.4.2電梯模擬系統(tǒng)的分析電梯按鈕電梯狀態(tài):布爾=假樓層按鈕電梯狀態(tài):布爾=假電梯目前的位置:整形=1電梯的方向:枚舉=UP電梯到達(dá)的時(shí)間:整形電梯移動(dòng):布爾=假命名類(lèi)的屬性:包括屬性的名字、類(lèi)型、初始值,如圖8.7表示:

燈開(kāi)關(guān)狀態(tài):布爾=假圖8-7具有屬性的類(lèi)圖1/13/202549

8.4.2.5類(lèi)的行為行為是指為了完成某一任務(wù),一個(gè)對(duì)象提供的、并體現(xiàn)其責(zé)任的操作。同類(lèi)對(duì)象之間和不同的對(duì)象之間通過(guò)相互通信來(lái)完成復(fù)雜的系統(tǒng)狀態(tài)的控制。行為的獲取類(lèi)的方法仍舊從用例圖中的每個(gè)用例入手,通過(guò)對(duì)用例中每個(gè)場(chǎng)景的詳細(xì)分析區(qū)或去每個(gè)對(duì)象所擁有的職責(zé),具體從三個(gè)方面完成類(lèi)的行為的獲取。(1)提取對(duì)象外部行為的大致功能和名稱,同時(shí)進(jìn)行適當(dāng)?shù)木?;?)標(biāo)識(shí)對(duì)象之間的消息傳遞;(3)使用模板描述對(duì)象的外部服務(wù)和對(duì)象間的消息傳遞。所謂模板是軟件組織制定的用于描述對(duì)象行為的標(biāo)準(zhǔn)格式。8.4.2電梯模擬系統(tǒng)的分析1/13/2025508.4.2電梯模擬系統(tǒng)的分析表8-3電梯模擬系統(tǒng)中類(lèi)的行為描述類(lèi)動(dòng)作行為的描述電梯類(lèi)移動(dòng),到達(dá)指定樓層,按下電梯按鈕,釋放電梯按鈕,人進(jìn)入電梯,人離開(kāi)電梯,開(kāi)關(guān)門(mén),響鈴等時(shí)鐘類(lèi)每秒計(jì)時(shí)調(diào)度類(lèi)創(chuàng)建一個(gè)乘客,時(shí)間安排,處理樓層等待的人,延遲時(shí)間電梯按鈕類(lèi)標(biāo)識(shí)電梯的移動(dòng)樓層按鈕類(lèi)按鈕按下和釋放門(mén)類(lèi)開(kāi)門(mén),關(guān)門(mén),表示人已經(jīng)乘坐電梯樓層類(lèi)通知電梯的到來(lái),標(biāo)識(shí)電梯離開(kāi)等鈴類(lèi)創(chuàng)建自身,響鈴燈類(lèi)創(chuàng)建自身,開(kāi)關(guān)燈總控類(lèi)運(yùn)行電梯系統(tǒng),獲取時(shí)鐘,發(fā)送時(shí)間給計(jì)劃表和電梯類(lèi)1/13/2025518.4.2電梯模擬系統(tǒng)的分析根據(jù)以上描述命名類(lèi)的行為,包括行為的名字,返回類(lèi)型和參數(shù)。如圖8.8表示:電梯按鈕電梯狀態(tài):布爾=假按下按鈕()釋放按鈕()樓層按鈕電梯狀態(tài):布爾=假按下按鈕()釋放按鈕()電梯目前的位置:整形=1電梯的方向:枚舉=UP電梯到達(dá)的時(shí)間:整形電梯移動(dòng):布爾=假電梯運(yùn)行的時(shí)間()人進(jìn)入電梯()人離開(kāi)電梯()燈開(kāi)關(guān)狀態(tài):布爾=假開(kāi)燈()關(guān)燈()圖8.8具有屬性和行為的類(lèi)圖1/13/202552設(shè)計(jì)階段的主要任務(wù)是定義包(子系統(tǒng)),包括包間的依賴性和主要通信機(jī)制,以及細(xì)化包的內(nèi)容,使編程人員得到所有類(lèi)的一個(gè)足夠清晰的描述。同時(shí)使用UML中的動(dòng)態(tài)模型,描述特定情況下這些類(lèi)的實(shí)例之間的行為。1.結(jié)構(gòu)設(shè)計(jì)本系統(tǒng)較為簡(jiǎn)單,僅給出類(lèi)間的包含關(guān)系和系統(tǒng)結(jié)構(gòu)圖。根據(jù)系統(tǒng)需要,添加控制類(lèi)Building類(lèi),完成對(duì)電梯的總控,各類(lèi)的關(guān)系如圖8.9:8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/2025538.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)Person

-ID:int

+stepOntoFloor(Floor&):void+enterElevator(Elevator&,Floor&):void+exitElevator(Floor&,Elevator&):voidFloor-floorNumber:int-elevatorRef:elevator-occupantPtr:Person+elevatorArrived():void+isOccupied():bool+personArrives():voidBuilding-floor:Floor-elevator:Elevator -clock:Clock -scheduler:Scheduler+runSimulation(int):voidElevator-currentFloor:int=1-direction:enum=up-capacity:int=1-arrivalTime:int-moving:bool=false-scheduler:Scheduler+summonElevator():void+prepareToLeave():void+processTime():void+personEnters():void+personExits():voidrunSimulation(int):voidClock-time:int=0-scheduler:Scheduler+getTime():int+tick():voidScheduler-floorArrivalTime:int-currentClockTime:int+processTime(time:int):int圖8.9添加控制類(lèi)后的系統(tǒng)類(lèi)圖

0..1乘坐110..1等待11111/13/202554各類(lèi)的詳細(xì)聲明如下:(1)Building(電梯模擬的總控)類(lèi):它是整個(gè)電梯模擬系統(tǒng)的控制類(lèi),每一秒鐘,該類(lèi)接收時(shí)鐘信息,并建立計(jì)劃分配表給Scheduler類(lèi),給電梯發(fā)送指定的時(shí)間,同時(shí)啟動(dòng)電梯的運(yùn)行。它由Floor類(lèi)、Elevator類(lèi)、Clock類(lèi)、Scheduler類(lèi)對(duì)象組成。方法:runSimulation(int),按設(shè)定的時(shí)間模擬電梯運(yùn)行(2)Bell(響鈴)類(lèi):電梯到達(dá)指定位置時(shí)產(chǎn)生鈴聲提示。方法:ringBell(),響鈴。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/202555(3)Clock(時(shí)鐘)類(lèi):電梯運(yùn)行中時(shí)間的獲取和時(shí)間設(shè)置。方法:tick(),按每一秒增加時(shí)鐘。 getTime(),獲取時(shí)鐘當(dāng)前時(shí)間。(4)Door(門(mén))類(lèi):電梯到達(dá)指定樓層時(shí),乘客乘坐電梯時(shí)實(shí)現(xiàn)電梯門(mén)的開(kāi)關(guān),通知乘客進(jìn)入或退出電梯。方法:openDoor(Person*const,Person*const,Floor&,Elevator&),在電梯到達(dá)指定樓層時(shí)打開(kāi)門(mén)。 closeDoor(constFloor&),在電梯到達(dá)指定樓層,乘客進(jìn)入電梯后實(shí)現(xiàn)關(guān)門(mén)。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/202556(5)Floor(樓層)類(lèi):電梯到達(dá)的樓層,以及乘客等待的樓層,通知樓層按鈕完成樓層按鈕的操作,并通知指示燈開(kāi)關(guān)。方法:isOccupied(),調(diào)度發(fā)送消息,電梯被占,乘客需等待一段時(shí)間。getNumber(),返回樓層的層數(shù)。elevatorArrived(),通知樓層電梯到達(dá)。elevatorLeaving(),通知樓層電梯離開(kāi)。(6)Light(指示燈)類(lèi):樓層按鈕和電梯按鈕按下和恢復(fù)原狀后顯示狀況的燈。方法:turnOn(),開(kāi)燈。 turnOff(),關(guān)燈。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/202557(7)Person(乘客)類(lèi):乘坐電梯的乘客,分別完成對(duì)電梯按鈕和樓層按鈕的操作,以及進(jìn)入和離開(kāi)電梯時(shí)通知電梯完成相應(yīng)動(dòng)作。方法:stepOntoFloor(Floor&),調(diào)度發(fā)送消息有人進(jìn)入指定樓層。 enterElevator(Elevator&,Floor&),乘客在指定樓層進(jìn)入電梯內(nèi)。; exitElevator(constFloor&,Elevator&),乘客在指定樓層走出電梯。;(8)FloorButton(樓層按鈕)類(lèi):召喚電梯,標(biāo)示電梯的移動(dòng)方向。方法:pressButton(),按下樓層按鈕。 resetButton(),復(fù)原樓層按鈕。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/202558(9)ElevatorButton(電梯按鈕)類(lèi):提供電梯移動(dòng)的服務(wù)。方法:pressButton(),按下電梯內(nèi)按鈕。 resetButton(),松開(kāi)按鈕電梯內(nèi)按鈕。(10)Elevator(電梯)類(lèi):電梯模擬系統(tǒng)的主要類(lèi),由Floor類(lèi)、Person類(lèi)、Door類(lèi)和Bel類(lèi)組成。實(shí)現(xiàn)電梯的移動(dòng)和電梯到達(dá)指定位置后和其他類(lèi)的交互,并響鈴。方法:summonElevator(intfloor),呼喚電梯完成一特殊樓層的服務(wù)。prepareToLeave(bool),電梯準(zhǔn)備離開(kāi)。processTime(int),電梯運(yùn)行時(shí)間。 passengerEnters(Person*const),乘客進(jìn)入電梯。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/202559passengerExits(),乘客離開(kāi)電梯。processPossibleArrival(),可能到達(dá)的電梯。processPossibleDeparture(),電梯可能離開(kāi)。arriveAtFloor(Floor&),電梯到達(dá)指定的樓層。move(),電梯移動(dòng)。(11)Scheduler(計(jì)劃表)類(lèi):產(chǎn)生隨機(jī)時(shí)間,創(chuàng)建在某一時(shí)刻乘坐電梯的乘客。方法:processTime(int),設(shè)置時(shí)間表。 schedulerTime(constFloor&),設(shè)置到達(dá)指定樓層的計(jì)劃時(shí)間和延時(shí)時(shí)間。 delayTime(constFloor&),到達(dá)指定樓層時(shí)間延時(shí)。 createNewPerson(Floor&),獲取指定樓層等待電梯的乘客。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/2025602.類(lèi)的設(shè)計(jì)詳細(xì)設(shè)計(jì)的目的是通過(guò)創(chuàng)建新的類(lèi)圖、順序圖、狀態(tài)圖和動(dòng)態(tài)圖,描述新的類(lèi)圖,并擴(kuò)展和細(xì)化分析階段"素描"的商業(yè)對(duì)象類(lèi)。主要為實(shí)現(xiàn)系統(tǒng)的功能定義類(lèi)中必要的操作,為訪問(wèn)類(lèi)的屬性提供相應(yīng)的訪問(wèn)接口,對(duì)定義好的操作或接口進(jìn)行優(yōu)化,另外實(shí)現(xiàn)對(duì)象間的關(guān)聯(lián),并給出類(lèi)的定義。

注意:關(guān)聯(lián)通常用指針或指針數(shù)組實(shí)現(xiàn),c++中也可以采用引用來(lái)實(shí)現(xiàn)關(guān)聯(lián)。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/2025612.1順序圖順序圖描述對(duì)象之間的動(dòng)態(tài)交互關(guān)系,著重表現(xiàn)對(duì)象間消息傳遞的時(shí)間順序。順序圖有兩個(gè)坐標(biāo)軸:縱坐標(biāo)軸表示時(shí)間,橫坐標(biāo)軸表示不同的對(duì)象。順序圖中的對(duì)象用一個(gè)矩形框表示,框內(nèi)標(biāo)有對(duì)象名(對(duì)象名的表示格式與對(duì)象圖中相同)。從表示對(duì)象的矩形框向下的垂直虛線是對(duì)象的“生命線”,用于表示在某段時(shí)間內(nèi)該對(duì)象是存在的。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/202562對(duì)象間的通信用對(duì)象生命線之間的水平消息線來(lái)表示,消息箭頭的形狀表明消息的類(lèi)型(同步、異步或簡(jiǎn)單)。當(dāng)收到消息時(shí),接收對(duì)象立即開(kāi)始執(zhí)行活動(dòng),即對(duì)象被激活了。激活用對(duì)象生命線上的細(xì)長(zhǎng)矩形框表示。消息通常用消息名和參數(shù)表來(lái)標(biāo)識(shí)。消息還可以帶有條件表達(dá)式,用以表示分支或決定是否發(fā)送消息。如果用條件表達(dá)式表示分支,則會(huì)有若干個(gè)互斥的箭頭,也就是說(shuō),在某一時(shí)刻僅可發(fā)送分支中的一個(gè)消息。圖8.10顯示了時(shí)鐘對(duì)象、計(jì)劃表對(duì)象和電梯對(duì)象之間的交互。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/2025638.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn):Building:Clock:Scheduler:Elevatortick()(計(jì)算時(shí)間值)getTime()(獲取當(dāng)前時(shí)間)timeprocessTime(currentTime:int)(設(shè)置目前時(shí)間)processTime(currentTime:int)(電梯運(yùn)行時(shí)間)

圖8.10時(shí)鐘對(duì)象、計(jì)劃表對(duì)象和電梯對(duì)象之間的交互的順序圖1/13/2025642.2協(xié)作圖協(xié)作圖側(cè)重于描述各個(gè)對(duì)象之間存在的消息收發(fā)關(guān)系(交互關(guān)系),而不專門(mén)突出這些消息發(fā)送的時(shí)間順序。尋找對(duì)象間的協(xié)作。仔細(xì)察看表8-3(電梯模擬系統(tǒng)中類(lèi)的行為描述),尋找消息的發(fā)送者和消息的接受者,以判斷交互的對(duì)象和消息的轉(zhuǎn)遞。如:在表中電梯(Elevator類(lèi))對(duì)象擁有“釋放電梯按鈕的行為”,要完成該行為,電梯(Elevator類(lèi))對(duì)象必須電梯按鈕(elevatorButton類(lèi))對(duì)象發(fā)送消息—resetButton,這就激活了電梯按鈕(elevatorButton類(lèi))中的操作resetButton,這就表明電梯類(lèi)的對(duì)象和電梯按鈕類(lèi)的對(duì)象之間建立了交互關(guān)系。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/2025658.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

表8-4顯示了電梯模擬系統(tǒng)中所有對(duì)象之間的交互。

類(lèi)的對(duì)象發(fā)送的消息目標(biāo)對(duì)象ElevatorresetButton、ringBell、elevatorArrived、openDoor、closeDoorElevatorButton、Bell、FloorDoor、DoorClockSchedulerstepOntoFloor、isOccupedPerson、FloorPersonpressButton、pressButtonpassengerEnter、passengerExitspersonArrivesElevatorButton、FloorButtonElevator、Elevator、FloorFloorresetButton、turnOff、turnOnFloorButton、Light、LightFloorButtonsummonElevatorElevatorElevatorButtonprepareToLeaveElevatorDoorexitElevator、enterElevatorPerson、PersonBellLightBuildingTick、getTime、processTimeprocessTimeClock、Clock、SchedulerElevator1/13/2025668.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)圖8.11顯示系統(tǒng)中的對(duì)象之間的協(xié)作圖:Elevator:Light:Floor:FloorButton:Person:Person:Bell:ElevatorButton:Door3.1resetButton()3.2turnOn()4.2.1passengerEnter()4.1.1passengerExits()1.resetButton2.ringBell()4.2enterElevator()4.1exitElevator

1/13/2025678.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)2.3系統(tǒng)中類(lèi)的聲明有以上的各種圖形的分析,可以得出系統(tǒng)所設(shè)計(jì)的所有類(lèi)的聲明。電梯模擬系統(tǒng)中所涉及的類(lèi)的聲明見(jiàn)表8-5:Elevator(電梯)類(lèi)操作電梯內(nèi)按鈕,響鈴,移動(dòng)電梯到達(dá)指定樓層,開(kāi)關(guān)門(mén)Clock(時(shí)鐘)類(lèi)計(jì)算電梯運(yùn)行中的時(shí)間Scheduler(計(jì)劃表)類(lèi)產(chǎn)生隨機(jī)時(shí)間,創(chuàng)建在某一時(shí)刻乘坐電梯的乘客Person(乘客)類(lèi)完成對(duì)電梯按鈕和樓層按鈕的操作,以及進(jìn)入和離開(kāi)電梯時(shí)通知電梯完成相應(yīng)動(dòng)作Floor(樓層)類(lèi)電梯到達(dá)的樓層,以及乘客等待的樓層,通知樓層按鈕完成樓層按鈕的操作,并實(shí)現(xiàn)指示燈的開(kāi)關(guān)1/13/2025688.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)FloorButton(樓層按鈕)類(lèi)召喚電梯,標(biāo)示電梯的移動(dòng)方向ElevatorButton(電梯按鈕)類(lèi)提供電梯移動(dòng)的服務(wù)Door(門(mén))類(lèi)電梯到達(dá)指定樓層時(shí),乘客乘坐電梯時(shí)實(shí)現(xiàn)電梯門(mén)的開(kāi)關(guān),通知乘客進(jìn)入或退出電梯。Bell(響鈴)類(lèi)電梯到達(dá)指定位置時(shí)產(chǎn)生鈴聲提示Light(指示燈)類(lèi)開(kāi)關(guān)燈Building(電梯模擬的總控)類(lèi)電梯模擬系統(tǒng)的總控類(lèi)所有類(lèi)的聲明分別存放在不同的c++頭文件中,電梯模擬系統(tǒng)所涉及的類(lèi)的頭文件如表8-6:

1/13/2025698.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)Bell.h響鈴類(lèi):電梯到達(dá)指定位置時(shí)產(chǎn)生鈴聲Clock.h時(shí)鐘類(lèi):電梯運(yùn)行中時(shí)間的計(jì)算Door.h門(mén)類(lèi):實(shí)現(xiàn)電梯門(mén)的開(kāi)關(guān)Floor.h樓層類(lèi):通知樓層按鈕完成樓層按鈕的操作Light.h指示燈類(lèi):開(kāi)關(guān)燈Person.h乘客類(lèi):電梯按鈕和樓層按鈕的操作,以及進(jìn)入和離開(kāi)電梯時(shí)通知電梯完成相應(yīng)動(dòng)作ElevatorButton.h電梯按鈕類(lèi):電梯移動(dòng)的服務(wù)FloorButton.h樓層按鈕類(lèi):召喚電梯,標(biāo)示電梯移動(dòng)方向Elevator.h電梯類(lèi):操作電梯內(nèi)按鈕,響鈴,移動(dòng)電梯到達(dá)指定樓層,開(kāi)關(guān)門(mén)Scheduler.h計(jì)劃表類(lèi):產(chǎn)生隨機(jī)時(shí)間,創(chuàng)建在某一時(shí)刻乘坐電梯的乘客Building.h電梯模擬系統(tǒng)的總控類(lèi)表8-6電梯模擬系統(tǒng)中所涉及類(lèi)聲明的頭文件各頭文件的詳細(xì)聲明(略)。1/13/2025703.對(duì)象實(shí)現(xiàn)本系統(tǒng)的對(duì)象實(shí)現(xiàn)由共bell.cpp、clock..cpp、floor.cpp、door.cpp、elevator.cpp、light.cpp、person.cpp、scheduler.cpp、floorButton.cpp、elevatorButton.cpp、building.cpp、elevator_control.cpp共12個(gè)文件組成,其中elevator_control.cpp是主控類(lèi),表8-7顯示了各個(gè)文件的簡(jiǎn)單說(shuō)明。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/2025718.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)表8-7電梯模擬系統(tǒng)中所涉及的實(shí)現(xiàn)文件聲明bell.cpp響鈴類(lèi)的定義clock..cpp時(shí)鐘類(lèi)的定義scheduler.cpp計(jì)劃表類(lèi)的定義elevator.cpp電梯類(lèi)的定義light.cpp燈類(lèi)的定義person.cpp乘客類(lèi)的定義door.cpp門(mén)類(lèi)的定義floorButton.cpp樓層按鈕類(lèi)的定義elevatorButton.cpp電梯按鈕類(lèi)的定義floor.cpp樓層類(lèi)的定義building.cpp總控類(lèi)的定義elevator_control.cpp電梯模擬系統(tǒng)主程序1/13/202572現(xiàn)以電梯類(lèi)為例,簡(jiǎn)單給出電梯(Elevator)類(lèi)中各操作的算法描述。Elevator類(lèi)中主要操作如下:(1)Elevator(Floor&firstFloor,Floor&secondFloor)//電梯類(lèi)的構(gòu)造函數(shù),分別在初始化列表中完成組合類(lèi)電梯按鈕類(lèi)、floor、乘客類(lèi)、時(shí)鐘類(lèi)和響鈴類(lèi)的對(duì)象初始化(2)~Elevator()//電梯類(lèi)的析構(gòu)函數(shù)撤銷(xiāo)電梯。8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/202573(3)summonElevator(intfloor)//呼喚電梯完成一特殊樓層的服務(wù)算法描述://在某一樓層設(shè)置該樓層的電梯呼叫服務(wù)。floor==Floor::FLOOR1?floor1NeedsService=true:floor2NeedsService=true;

8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/202574(4)prepareToLeave(boolleaving)//電梯準(zhǔn)備離開(kāi)算法描述://獲取當(dāng)前呼叫電梯的樓層Floor&thisFloor=currentFloor==Floor::FLOOR1?floor1Ref:floor2Ref; //通知控制器這部電梯正要離開(kāi) thisFloor.elevatorLeaving();//電梯發(fā)送消息給門(mén),請(qǐng)求關(guān)門(mén) door.closeDoor(thisFloor);//電梯朝向指定電梯按鈕的指示方向移動(dòng) if(leaving) move();8.4.3電梯模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1/13/202575(5)processTime(inttime)//通過(guò)檢測(cè)電梯到達(dá)目的樓下或準(zhǔn)備離開(kāi)某樓層時(shí),更新電梯時(shí)間算法描述://首先獲取當(dāng)前時(shí)鐘的時(shí)間currentBuildingClockTime=time;//電梯按預(yù)先設(shè)定的樓層移動(dòng),則調(diào)用方法 processPossibleArrival()計(jì)算到達(dá)目的樓層的時(shí)間,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論