版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第九章面向對象方法學引論面向對象方法學概述面向對象的基本概念面向對象建模對象模型動態(tài)模型功能模型第九章面向對象方法學引論面向對象方法學概述1面向對象方法學的出發(fā)點和基本原則,是盡可能模擬人類習慣的思維方式,使開發(fā)軟件的方法與過程盡可能接近人類認識世界解決問題的方法與過程,也就是使描述問題的問題空間(也稱為問題域)與實現(xiàn)解法的解空間(也稱為求解域)在結構上盡可能一致。面向對象方法學概述1.面向對象方法學的要點面向對象方法學的出發(fā)點和基本原則,是盡可能模擬人類習慣的思維2面向對象方法具有下述4個要點:認為客觀世界是由各種對象組成的,任何事物都是對象,復雜的對象可以由比較簡單的對象以某種方式組合而成。把所有對象都劃分成各種對象類(簡稱為類,class),每個對象類都定義了一組數(shù)據(jù)和一組方法。按照子類(或稱為派生類)與父類(或稱為基類)的關系,把若干個對象類組成一個層次結構的系統(tǒng)(也稱為類等級)。對象彼此之間僅能通過傳遞消息互相聯(lián)系。面向對象方法具有下述4個要點:3
面向對象就是運用對象、類、繼承、封裝、消息、結構與連接等面向對象的概念對問題進行分析、求解的系統(tǒng)開發(fā)技術,或者說,是以對象(類)為數(shù)據(jù)中心、對象之間的動態(tài)行為模式為運行機制的一種問題求解方法。用公式可表示為:面向對象=對象+類+繼承+封裝+消息+結構與連接面向對象就是運用對象、類、繼承、封裝、消息、結4也就是說,面向對象就是既使用對象又使用類和繼承等機制,而且對象之間僅能通過傳遞消息實現(xiàn)彼此通信。如果僅使用對象和消息,則這種方法可以稱為基于對象的(object-based)方法,而不能稱為面向對象的方法;如果進一步要求把所有對象都劃分為類,則這種方法可稱為基于類的(class-based)方法,但仍然不是面向對象的方法。只有同時使用對象、類、繼承和消息的方法,才是真正面向對象的方法。也就是說,面向對象就是既使用對象又使用類和繼承等機51)與人類習慣的思維方法一致傳統(tǒng)的程序設計技術是面向過程的設計方法,這種方法以算法為核心,把數(shù)據(jù)和過程作為相互獨立的部分,數(shù)據(jù)代表問題空間中的客體,程序代碼則用于處理這些數(shù)據(jù)。2)穩(wěn)定性好傳統(tǒng)的軟件開發(fā)方法以算法為核心,開發(fā)過程基于功能分析和功能分解。用傳統(tǒng)方法所建立起來的軟件系統(tǒng)的結構緊密依賴于系統(tǒng)所要完成的功能,當功能需求發(fā)生變化時將引起軟件結構的整體修改。事實上,用戶需求變化大部分是針對功能的,因此,這樣的軟件系統(tǒng)是不穩(wěn)定的。2.面向對象方法學的優(yōu)點1)與人類習慣的思維方法一致2.面向對象方法學的優(yōu)點63)可重用性好用已有的零部件裝配新的產(chǎn)品,是典型的重用技術,例如,可以用已有的預制件建筑一幢結構和外形都不同于從前的新大樓。重用是提高生產(chǎn)率的最主要的方法。4)較易開發(fā)大型軟件產(chǎn)品在開發(fā)大型軟件產(chǎn)品時,組織開發(fā)人員的方法不恰當往往是出現(xiàn)問題的主要原因。用面向對象方法學開發(fā)軟件時,構成軟件系統(tǒng)的每個對象就像一個微型程序,有自己的數(shù)據(jù)、操作、功能和用途,因此,可以把一個大型軟件產(chǎn)品分解成一系列本質上相互獨立的小產(chǎn)品來處理。3)可重用性好75)可維護性好用傳統(tǒng)方法和面向過程語言開發(fā)出來的軟件很難維護,是長期困擾人們的一個嚴重問題,是軟件危機的突出表現(xiàn)。由于下述因素的存在,使得用面向對象方法所開發(fā)的軟件可維護性好:(1)面向對象的軟件穩(wěn)定性比較好。(2)面向對象的軟件比較容易修改。(3)面向對象的軟件比較容易理解。(4)易于測試和調試。5)可維護性好8迭代是軟件開發(fā)過程中普遍存在的一種內在屬性。經(jīng)驗表明,軟件過程各個階段之間的迭代或一個階段內各個工作步驟之間的迭代,在面向對象范型中比在結構化范型中更常見?!皣娙边@個詞體現(xiàn)了面向對象軟件開發(fā)過程迭代和無縫的特性。噴泉模型迭代是軟件開發(fā)過程中普遍存在的一種內在屬性。經(jīng)驗表明,軟件過9由描述該對象屬性的數(shù)據(jù)以及可以對這些數(shù)據(jù)施加的所有操作封裝在一起構成的統(tǒng)一體。對象可以作的操作表示它的動態(tài)行為,在面向對象分析和面向對象設計中,通常把對象的操作稱為服務或方法。面向對象的基本概念1、對象對象是人們要進行研究的任何事物,具體一點講就是研究對象。它可以是有形實體,也可以是作用、事件、性能說明等,當然,如果朋友成為你研究的對象時,對象也可以是你的朋友。由描述該對象屬性的數(shù)據(jù)以及可以對這些數(shù)據(jù)施加的102)對象的定義目前,對對象所下的定義并不完全統(tǒng)一,人們從不同角度給出對象的不同定義。這些定義雖然形式不同,但基本含義是相同的。(1)定義1:對象是具有相同狀態(tài)的一組操作的集合。這個定義主要是從面向對象程序設計的角度看“對象”。(2)定義2:對象是對問題域中某個東西的抽象,這種抽象反映了系統(tǒng)保存有關這個東西的信息或與它交互的能力。也就是說,對象是對屬性值和操作的封裝。這個定義著重從信息模擬的角度看待“對象”。2)對象的定義11(3)定義3:對象∷=〈ID,MS,DS,MI〉。其中,ID是對象的標識或名字,MS是對象中的操作集合,DS是對象的數(shù)據(jù)結構,MI是對象受理的消息名集合(即對外接口)。這個定義是一個形式化的定義。從動態(tài)角度或對象的實現(xiàn)機制來看,對象是一臺自動機。具有內部狀態(tài)S,操作fi(i=1,2,…,n),且與操作fi對應的狀態(tài)轉換函數(shù)為gi(i=1,2,…,n)的一個對象,可以用下圖所示的自動機來模擬。(3)定義3:對象∷=〈ID,MS,DS,MI〉。其中,12軟件工程ppt-09面向對象方法學引論課件133)對象的特點以數(shù)據(jù)為中心。對象是主動的。實現(xiàn)了數(shù)據(jù)封裝。本質上具有并行性。模塊獨立性好。3)對象的特點143)
對象的狀態(tài)和行為
對象有自身的狀態(tài),比如你的女朋友有她的姓名(張朋)、年齡(25歲)、工作單位等狀態(tài)。對象還有操作,用于改變對象的狀態(tài),對象及其操作就是對象的行為,比如“張朋跳槽到某公司”這個行為將使她的工作單位這個狀態(tài)發(fā)生變化。3)對象的狀態(tài)和行為152、其他概念1)類(class)在面向對象的軟件技術中,具有相同或相似性質的對象的抽象就是類。如桃樹、李樹、樟樹等是具體的樹,抽象之后得到“樹”這個類。類具有屬性,屬性是狀態(tài)的抽象,如一棵李樹的高度是3米,樟樹是10米,樹則抽象出一個屬性“高度”。類具有操作,它是對象行為的抽象。2、其他概念1)類(class)16類的結構
類的結構有兩種,一種是“一般-具體”結構,如植物、樹都是類,它們之間是抽象到具體的關系,即樹是一種(isa)植物。還有一種就是“整體-部分”結構,如計算機是類、CPU也是類,則計算機與CPU之間就是整體與部分的關系,即計算機有一個(hasa)CPU。類的結構17實例(instance)實例就是由某個特定的類所描述的一個具體的對象。類是對具有相同屬性和行為的一組相似的對象的抽象,類在現(xiàn)實世界中并不能真正存在。當使用“對象”這個術語時,既可以指一個具體的對象,也可以泛指一般的對象,但是,當使用“實例”這個術語時,必然是指一個具體的對象。實例(instance)183)消息(message)消息就是要求某個對象執(zhí)行在定義它的那個類中所定義的某個操作的規(guī)格說明。即對象之間進行通信的構造。比如張朋是一個對象,上司發(fā)出一個出差通知消息:張朋出差到深圳。這樣,相應的對象接收到這個消息就會給予響應。通常,一個消息由下述3部分組成:接收消息的對象;張朋消息選擇符(也稱為消息名);出差通知零個或多個變元。張朋出差到深圳3)消息(message)194)方法(method)方法就是對象所能執(zhí)行的操作,也就是類中所定義的服務。方法描述了對象執(zhí)行操作的算法,響應消息的方法。在C++語言中把方法稱為成員函數(shù)。
比如張朋是一個對象,上司發(fā)出一個消息:張朋出差到深圳。這樣,相應的對象接收到這個消息就會給予響應,在這個消息中,張朋是對象名,出差到就是方法名,深圳就是參數(shù)。在類中操作的實現(xiàn)過程叫做方法。上面的出差到(某地)這個方法如何實現(xiàn)呢,就是買車票,乘車到某地。這個過程就是方法。4)方法(method)205)屬性(attribute)屬性就是類中所定義的數(shù)據(jù),它是對客觀世界實體所具有的性質的抽象。類的每個實例都有自己特有的屬性值。在C++語言中把屬性稱為數(shù)據(jù)成員6)封裝(encapsulation)在面向對象的程序中,把數(shù)據(jù)和實現(xiàn)操作的代碼集中起來放在對象內部。一個對象好像是一個不透明的黑盒子,表示對象狀態(tài)的數(shù)據(jù)和實現(xiàn)操作的代碼與局部數(shù)據(jù),都被封裝在黑盒子里面,從外面是看不見的,更不能從外面直接訪問或修改這些數(shù)據(jù)和代碼。5)屬性(attribute)21對象具有封裝性的條件如下:(1)有一個清晰的邊界。所有私有數(shù)據(jù)和實現(xiàn)操作的代碼都被封裝在這個邊界內,從外面看不見更不能直接訪問。(2)有確定的接口(即協(xié)議)。這些接口就是對象可以接受的消息,只能通過向對象發(fā)送消息來使用它。(3)受保護的內部實現(xiàn)。實現(xiàn)對象功能的細節(jié)(私有數(shù)據(jù)和代碼)不能在定義該對象的類的范圍外訪問。對象具有封裝性的條件如下:227)繼承(inheritance)廣義地說,繼承是指能夠直接獲得已有的性質和特征,而不必重復定義它們。在面向對象的軟件技術中,繼承是子類自動地共享基類中定義的數(shù)據(jù)和方法的機制。下圖描繪了實現(xiàn)繼承機制的原理:7)繼承(inheritance)238)多態(tài)性(polymorphism)多態(tài)性是指子類對象可以像父類對象那樣使用,同樣的消息既可以發(fā)送給父類對象也可以發(fā)送給子類對象。在C++語言中,多態(tài)性是通過虛函數(shù)來實現(xiàn)的。在類等級不同層次中可以說明名字、參數(shù)特征和返回值類型都相同的虛擬成員函數(shù),而不同層次的類中的虛函數(shù)實現(xiàn)算法各不相同。虛函數(shù)機制使得程序員能在一個類等級中使用相同函數(shù)的多個不同版本,在運行時刻才根據(jù)接收消息的對象所屬于的類,決定到底執(zhí)行哪個特定的版本,這稱為動態(tài)聯(lián)編,也叫滯后聯(lián)編。8)多態(tài)性(polymorphism)249)重載(overloading)有兩種重載:函數(shù)重載是指在同一作用域內的若干個參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字;運算符重載是指同一個運算符可以施加于不同類型的操作數(shù)上面。當然,當參數(shù)特征不同或被操作數(shù)的類型不同時,實現(xiàn)函數(shù)的算法或運算符的語義是不相同的。在C++語言中函數(shù)重載是通過靜態(tài)聯(lián)編(也叫先前聯(lián)編)實現(xiàn)的。9)重載(overloading)25所謂模型,就是為了理解事物而對事物作出的一種抽象,是對事物的一種無歧義的書面描述。通常,模型由一組圖示符號和組織這些符號的規(guī)則組成,利用它們來定義和描述問題域中的術語和概念。為了開發(fā)復雜的軟件系統(tǒng),系統(tǒng)分析員應該從不同角度抽象出目標系統(tǒng)的特性,使用精確的表示方法構造系統(tǒng)的模型,驗證模型是否滿足用戶對目標系統(tǒng)的需求,并在設計過程中逐漸把和實現(xiàn)有關的細節(jié)加進模型中,直至最終用程序實現(xiàn)模型。面向對象建模所謂模型,就是為了理解事物而對事物作出的一種抽象,26
面向對象的建模分析從概念上分為二個層次。 ①
問題分析:主要任務是收集并確認用戶的需求信息,對實際問題進行功能分析和過程分析。 ②
應用分析:主要任務是動態(tài)描述系統(tǒng)中對象的合法狀態(tài)序列。
面向對象的建模分析從概念上分為二個層次。27在對目標系統(tǒng)進行分析的初始階段,面對大量模糊的、涉及眾多專業(yè)領域的、錯綜復雜的信息,系統(tǒng)分析員往往感到無從下手。模型提供了組織大量信息的一種有效機制。通常,用戶和領域專家可以通過快速建立的原型親身體驗,從而對系統(tǒng)模型進行更有效的審查。在對目標系統(tǒng)進行分析的初始階段,面對大量模糊的、281.面向對象的模型
面向對象的模型包括三個,它們分別是: ①
描述系統(tǒng)數(shù)據(jù)結構的對象模型。 ②
描述系統(tǒng)控制結構的動態(tài)模型。 ③
描述系統(tǒng)功能的功能模型。1.面向對象的模型29對象模型表示靜態(tài)的、結構化的系統(tǒng)的“數(shù)據(jù)”性質。它是對模擬客觀世界實體的對象以及對象彼此間的關系的映射,描述了系統(tǒng)的靜態(tài)結構。它從客觀世界實體對象的關系角度來描述,表現(xiàn)了對象的相互關系。事實上,這個模型可以當作擴充的實體——關系模型(E-R)。面向對象方法強調圍繞對象而不是圍繞功能來構造系統(tǒng)。對象模型為建立動態(tài)模型和功能模型,提供了實質性的框架。對象模型對象模型表示靜態(tài)的、結構化的系統(tǒng)的“數(shù)據(jù)”性質。它是301.類圖的基本符號類圖描述類及類與類之間的靜態(tài)關系。類圖是一種靜態(tài)模型,它是創(chuàng)建其他UML圖的基礎。一個系統(tǒng)可以由多張類圖來描述,一個類也可以出現(xiàn)在幾張類圖中。1.類圖的基本符號類圖描述類及類與類之間的靜態(tài)關系。311)定義類UML中類的圖形符號為長方形,用兩條橫線把長方形分成上、中、下3個區(qū)域(下面兩個區(qū)域可省略),3個區(qū)域分別放類的名字、屬性和服務。表示類的圖1)定義類表示類的圖32類名是一類對象的名字。命名是否恰當對系統(tǒng)的可理解性影響相當大,因此,為類命名時應該遵守以下幾條準則:(1)使用標準術語。例如,“交通信號燈”比“信號單元”這個名字好,“傳送帶”比“零件傳送設備”好。(2)使用具有確切含義的名詞。例如,“庫房”比“房屋”或“存物場所”更確切。(3)必要時用名詞短語作名字。例如,“最小的領土單元”、“儲藏室”、“公司員工”等都是比較恰當?shù)拿帧n惷且活悓ο蟮拿?。命名是否恰當對系統(tǒng)的可理解性影響332)定義屬性UML描述屬性的語法格式如下:可見性屬性名:類型名=初值{性質串}屬性的可見性(即可訪問性)通常有下述3種:公有的(public)、私有的(private)和保護的(protected),分別用加號(+)、減號(-)和井號(#)表示。如果未聲明可見性,則表示該屬性的可見性尚未定義。注意,沒有默認的可見性。屬性名和類型名之間用冒號(:)分隔。類型名表示該屬性的數(shù)據(jù)類型,它可以是基本數(shù)據(jù)類型,也可以是用戶自定義的類型。2)定義屬性34在創(chuàng)建類的實例時應給其屬性賦值,如果給某個屬性定義了初值,則該初值可作為創(chuàng)建實例時這個屬性的默認值。類型名和初值之間用等號(=)隔開。用花括號括起來的性質串明確地列出該屬性所有可能的取值。枚舉類型的屬性往往用性質串列出可以選用的枚舉值,不同枚舉值之間用逗號分隔。也可以用性質串說明屬性的其他性質,例如,約束說明{只讀}表明該屬性是只讀屬性。在創(chuàng)建類的實例時應給其屬性賦值,如果給某個屬性定35例如,“發(fā)貨單”類的屬性“管理員”,在UML類圖中像下面那樣描述:-管理員:String=“未定”類的屬性中還可以有一種能被該類所有對象共享的屬性,稱為類的作用域屬性,也稱為類變量。C++語言中的靜態(tài)數(shù)據(jù)成員就是這樣的屬性。類變量在類圖中表示為帶下劃線的屬性,例如,發(fā)貨單類的類變量“貨單數(shù)”,用來統(tǒng)計發(fā)貨單的總數(shù),在該類所有對象中這個屬性的值都是一樣的,下面是對這個屬性的描述:-貨單數(shù):Integer例如,“發(fā)貨單”類的屬性“管理員”,在UML類圖中像下面那樣363)定義服務服務也就是操作,UML描述操作的語法格式如下:可見性操作名(參數(shù)表):返回值類型{性質串}操作可見性的定義方法與屬性相同。參數(shù)表是用逗號分隔的形式參數(shù)的序列。描述一個參數(shù)的語法如下:參數(shù)名:類型名=默認值3)定義服務37類圖由類及類與類之間的關系組成。定義了類之后就可以定義類與類之間的各種關系了。類與類之間通常有關聯(lián)、泛化(繼承)、依賴和細化等4種關系。1)關聯(lián)關聯(lián)表示兩個類的對象之間存在某種語義上的聯(lián)系。例如,作家使用計算機,我們就認為在作家和計算機之間存在某種語義連接,因此,在類圖中應該在作家類和計算機類之間建立關聯(lián)關系。2.表示關系的符號類圖由類及類與類之間的關系組成。定義了類之后就可以定38(1)普通關聯(lián)普通關聯(lián)是最常見的關聯(lián)關系,只要在類與類之間存在連接關系就可以用普通關聯(lián)表示。普通關聯(lián)的圖示符號是連接兩個類之間的直線。通常,關聯(lián)是雙向的,可在一個方向上為關聯(lián)起一個名字,在另一個方向上起另一個名字(也可不起名字)。為避免混淆,在名字前面(或后面)加一個表示關聯(lián)方向的黑三角。(1)普通關聯(lián)39在表示關聯(lián)的直線兩端可以寫上重數(shù)(multiplicity),它表示該類有多少個對象與對方的一個對象連接。重數(shù)的表示方法通常有:0…1 表示0到1個對象0…*或* 表示0到多個對象1+或1…* 表示1到多個對象1…15 表示1到15個對象3 表示3個對象如果圖中未明確標出關聯(lián)的重數(shù),則默認重數(shù)是1。在表示關聯(lián)的直線兩端可以寫上重數(shù)(multiplicity)40(2)關聯(lián)的角色在任何關聯(lián)中都會涉及到參與此關聯(lián)的對象所扮演的角色(即起的作用),在某些情況下顯式標明角色名有助于別人理解類圖。例如,下圖是一個遞歸關聯(lián)(即一個類與它本身有關聯(lián)關系)的例子。一個人與另一個人結婚,必然一個人扮演丈夫的角色,另一個人扮演妻子的角色。如果沒有顯式標出角色名,則意味著用類名作為角色名。(2)關聯(lián)的角色41(3)限定關聯(lián)限定關聯(lián)通常用在一對多或多對多的關聯(lián)關系中,可以把模型中的重數(shù)從一對多變成一對一,或從多對多簡化成多對一。在類圖中把限定詞放在關聯(lián)關系末端的一個小方框內。例如,某操作系統(tǒng)中一個目錄下有許多文件,一個文件僅屬于一個目錄,在一個目錄內文件名確定了惟一一個文件。(3)限定關聯(lián)42(4)關聯(lián)類為了說明關聯(lián)的性質可能需要一些附加信息??梢砸胍粋€關聯(lián)類來記錄這些信息。關聯(lián)中的每個連接與關聯(lián)類的一個對象相聯(lián)系。關聯(lián)類通過一條虛線與關聯(lián)連接。例如,下圖是一個電梯系統(tǒng)的類模型,隊列就是電梯控制器類與電梯類的關聯(lián)關系上的關聯(lián)類。(4)關聯(lián)類43(1)共享聚集如果在聚集關系中處于部分方的對象可同時參與多個處于整體方對象的構成,則該聚集稱為共享聚集。例如,一個課題組包含許多成員,每個成員又可以是另一個課題組的成員,則課題組和成員之間是共享聚集關系,如下圖所示。2)聚集聚集也稱為聚合,是關聯(lián)的特例。聚集表示類與類之間的關系是整體與部分的關系。兩種特殊的聚集關系分別是共享聚集和組合聚集。(1)共享聚集2)聚集44(2)組合聚集如果部分類完全隸屬于整體類,部分與整體共存,整體不存在了部分也會隨之消失(或失去存在價值了),則該聚集稱為組合聚集(簡稱為組成)。例如,在屏幕上打開一個窗口,它就由文本框、列表框、按鈕和菜單組成,一旦關閉了窗口,各個組成部分也同時消失,窗口和它的組成部分之間存在著組合聚集關系。(2)組合聚集453)泛化UML中的泛化關系就是通常所說的繼承關系,它是通用元素和具體元素之間的一種分類關系。具體元素完全擁有通用元素的信息,并且還可以附加一些其他信息。在UML中,用一端為空心三角形的連線表示泛化關系,三角形的頂角緊挨著通用元素。注意:泛化針對類型而不針對實例,一個類可以繼承另一個類,但一個對象不能繼承另一個對象。泛化可進一步劃分成普通泛化和受限泛化。3)泛化46(1)普通泛化普通泛化與繼承基本相同。沒有具體對象的類稱為抽象類。抽象類通常作為父類,用于描述其他類(子類)的公共屬性和行為。(1)普通泛化47與抽象類相反的類是具體類,具體類有自己的對象,并且該類的操作都有具體的實現(xiàn)方法。與抽象類相反的類是具體類,具體類有自己的對象,并且該類的操作48(2)受限泛化可以給泛化關系附加約束條件,以進一步說明該泛化關系的使用方法或擴充方法,這樣的泛化關系稱為受限泛化。預定義的約束有4種:多重、不相交、完全和不完全。這些約束都是語義約束。多重繼承指的是,一個子類可以同時多次繼承同一個上層基類,例如下圖中的水陸兩用類繼承了兩次交通工具類。(2)受限泛化49與多重繼承相反的是不相交繼承,即一個子類不能多次繼承同一個基類(這樣的基類相當于C++語言中的虛基類)。如果圖中沒有指定{多重}約束,則是不相交繼承,一般的繼承都是不相交繼承。完全繼承指的是父類的所有子類都已在類圖中窮舉出來了,圖示符號是指定{完全}約束。不完全繼承與完全繼承恰好相反,父類的子類并沒有都窮舉出來,隨著對問題理解的深入,可不斷補充和維護,這為日后系統(tǒng)的擴充和維護帶來很大方便。不完全繼承是一般情況下默認的繼承關系。與多重繼承相反的是不相交繼承,即一個子類不能多次繼504)依賴和細化(1)依賴關系依賴關系描述兩個模型元素(類、用例等)之間的語義連接關系:其中一個模型元素是獨立的,另一個模型元素不是獨立的,它依賴于獨立的模型元素,如果獨立的模型元素改變了,將影響依賴于它的模型元素。在UML的類圖中,用帶箭頭的虛線連接有依賴關系的兩個類,箭頭指向獨立的類。在虛線上可以帶一個版類標簽,具體說明依賴的種類,例如,下圖表示一個友元依賴關系,該關系使得B類的操作可以使用A類中私有的或保護的成員。4)依賴和細化51(2)細化關系當對同一個事物在不同抽象層次上描述時,這些描述之間具有細化關系。假設兩個模型元素A和B描述同一個事物,它們的區(qū)別是抽象層次不同,如果B是在A的基礎上的更詳細的描述,則稱B細化了A,或稱A細化成了B。細化的圖示符號為由元素B指向元素A的、一端為空心三角形的虛線,如圖所示。(2)細化關系52動態(tài)模型表示瞬時的、行為化的系統(tǒng)的“控制”性質,它規(guī)定了對象模型中的對象的合法變化序列。描述了系統(tǒng)的涉及時序和改變的狀態(tài)一旦建立起對象模型之后,就需要考察對象的動態(tài)行為。所有對象都具有自己的生命周期(或稱為運行周期)。對一個對象來說,生命周期由許多階段組成,在每個特定階段中,都有適合該對象的一組運行規(guī)律和行為規(guī)則,用以規(guī)范該對象的行為。生命周期中的階段也就是對象的狀態(tài)。動態(tài)模型動態(tài)模型表示瞬時的、行為化的系統(tǒng)的“控制”性質,它規(guī)53狀態(tài)是對對象屬性值的一種抽象。各對象之間相互觸發(fā)(即作用)就形成了一系列的狀態(tài)變化。一個觸發(fā)行為稱作一個事件。對象對事件的響應,取決于接受該觸發(fā)的對象當時所處的狀態(tài),響應包括改變自己的狀態(tài)或者又形成一個新的觸發(fā)行為。狀態(tài)有持續(xù)性,它占用一段時間間隔。狀態(tài)與事件密不可分,一個事件分開兩個狀態(tài),一個狀態(tài)隔開兩個事件。事件表示時刻,狀態(tài)代表時間間隔。通常,用UML提供的狀態(tài)圖來描繪對象的狀態(tài)、觸發(fā)狀態(tài)轉換的事件以及對象的行為。每個類的動態(tài)行為用一張狀態(tài)圖來描繪,各個類的狀態(tài)圖通過共享事件合并起來,從而構成系統(tǒng)的動態(tài)模型。也就是說,動態(tài)模型是基于事件共享而互相關聯(lián)的一組狀態(tài)圖的集合。狀態(tài)是對對象屬性值的一種抽象。各對象之間相互觸發(fā)(即作用)就54狀態(tài)圖的表示方法狀態(tài)圖的表示方法55功能模型表示變化的系統(tǒng)的“功能”性質,它指明了系統(tǒng)應該“做什么”,因此更直接地反映了用戶對目標系統(tǒng)的需求。通常,功能模型由一組數(shù)據(jù)流圖組成。在面向對象方法學中,數(shù)據(jù)流圖遠不如在結構分析、設計方法中那樣重要。一般說來,與對象模型和動態(tài)模型比較起來,數(shù)據(jù)流圖并沒有增加新的信息,但是,建立功能模型有助于軟件開發(fā)人員更深入地理解問題域,改進和完善自己的設計。因此,不能完全忽視功能模型的作用。功能模型功能模型表示變化的系統(tǒng)的“功能”性質,它指明了系56數(shù)據(jù)流圖說明數(shù)據(jù)流是如何從外部輸入、經(jīng)過操作和內部存儲輸出到外部的。功能模型也包括對象模型中值的約束條件。功能模型說明對象模型中操作的含義、動態(tài)模型中動作的意義以及對象模型中約束的意義。相關的概念有數(shù)據(jù)流圖中的處理、數(shù)據(jù)流、動作對象、數(shù)據(jù)存儲對象等。數(shù)據(jù)流圖的表示方法如下圖所示。數(shù)據(jù)流圖說明數(shù)據(jù)流是如何從外部輸入、經(jīng)過操作和內部存57數(shù)據(jù)流圖的表示方法綜上所述,功能模型定義“做什么”,動態(tài)模型定義“何時做”,而對象模型定義“對誰做”。
軟件工程ppt-09面向對象方法學引論課件58UML提供的用例圖也是進行需求分析和建立功能模型的強有力工具。在UML中把用用例圖建立起來的系統(tǒng)模型稱為用例模型。用例模型描述的是外部行為者(actor)所理解的系統(tǒng)功能。用例模型的建立是系統(tǒng)開發(fā)者和用戶反復討論的結果,它描述了開發(fā)者和用戶對需求規(guī)格所達成的共識。1.用例圖一幅用例圖包含的模型元素有系統(tǒng)、行為者、用例及用例之間的關系。下圖是自動售貨機系統(tǒng)的用例圖。UML提供的用例圖也是進行需求分析和建立功能模型的強有力工具59軟件工程ppt-09面向對象方法學引論課件601)系統(tǒng)系統(tǒng)被看作是一個提供用例的黑盒子,內部如何工作、用例如何實現(xiàn),這些對于建立用例模型來說都是不重要的。代表系統(tǒng)的方框的邊線表示系統(tǒng)的邊界,用于劃定系統(tǒng)的功能范圍,定義了系統(tǒng)所具有的功能。描述該系統(tǒng)功能的用例置于方框內,代表外部實體的行為者置于方框外。2)用例一個用例是可以被行為者感受到的、系統(tǒng)的一個完整的功能。在UML中把用例定義成系統(tǒng)完成的一系列動作,動作的結果能被特定的行為者察覺到。這些動作除了完成系統(tǒng)內部的計算與工作外,還包括與一些行為者的通信。用例通過關聯(lián)與行為者連接,關聯(lián)指出一個用例與哪些行為者交互,這種交互是雙向的。1)系統(tǒng)61用例具有下述特征:(1)用例代表某些用戶可見的功能,實現(xiàn)一個具體的用戶目標;(2)用例總是被行為者啟動的,并向行為者提供可識別的值;(3)用例必須是完整的。用例的實例是系統(tǒng)的一種實際使用方法,通常把用例的實例稱為腳本。腳本是系統(tǒng)的一次具體執(zhí)行過程,例如,在自動售貨機系統(tǒng)中,張三投入硬幣購買礦泉水,系統(tǒng)收到錢后把礦泉水送出來,上述過程就是一個腳本;李四投幣買可樂,但是可樂已賣完了,于是系統(tǒng)給出提示信息并把錢退還給李四,這個過程是另一個腳本。用例具有下述特征:623)行為者行為者是指與系統(tǒng)交互的人或其他系統(tǒng),它代表外部實體。使用用例并且與系統(tǒng)交互的任何人或物都是行為者。行為者代表一種角色,而不是某個具體的人或物。事實上,一個具體的人可以充當多種不同角色。在用例圖中用直線連接行為者和用例,表示兩者之間交換信息,稱為通信聯(lián)系。行為者觸發(fā)(激活)用例,并與用例交換信息。實踐表明,行為者對確定用例是非常有用的。面對一個大型、復雜的系統(tǒng),要列出用例清單往往很困難,可以先列出行為者清單,再針對每個行為者列出它的用例。這樣做可以比較容易地建立起用例模型。3)行為者634)用例之間的關系UML用例之間主要有擴展和使用兩種關系,它們是泛化關系的兩種不同形式。(1)擴展關系向一個用例中添加一些動作后構成了另一個用例,這兩個用例之間的關系就是擴展關系,后者繼承前者的一些行為,通常把后者稱為擴展用例。例如,在自動售貨機系統(tǒng)中,“售貨”是一個基本的用例,如果顧客購買罐裝飲料,售貨功能完成得很順利,但是,如果顧客要購買用紙杯裝的散裝飲料,則不能執(zhí)行該用例提供的常規(guī)動作,而要做些改動。4)用例之間的關系64(2)使用關系當一個用例使用另一個用例時,這兩個用例之間就構成了使用關系。一般說來,如果在若干個用例中有某些相同的動作,則可以把這些相同的動作提取出來單獨構成一個用例(稱為抽象用例)。這樣,當某個用例使用該抽象用例時,就好像這個用例包含了抽象用例中的所有動作。在用例圖中,用例之間的使用關系用帶版類《使用》的泛化關系表示。(2)使用關系65含擴展和使用關系的用例圖含擴展和使用關系的用例圖66幾乎在任何情況下都需要使用用例,通過用例可以獲取用戶需求,規(guī)劃和控制項目。獲取用例是需求分析階段的主要工作之一,而且是首先要做的工作。大部分用例將在項
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中醫(yī)護理學基礎課件
- 心電圖護理中的虛擬現(xiàn)實技術應用
- 護理管理與實踐領導力
- 痔瘡護理中的飲食禁忌
- 土壤養(yǎng)分傳感技術
- 2025年電池管理系統(tǒng)通信容錯機制
- 在線商務咨詢行業(yè)的競爭格局
- 幾何基礎導數(shù)題目及答案
- 2026 年中職經(jīng)濟與管理基礎(經(jīng)濟學原理)試題及答案
- 辦公隔斷裝修合同協(xié)議2025年
- 2025房屋買賣合同公證書范文
- 氣管切開患者的管理與康復治療
- 《中國急性腎損傷臨床實踐指南(2023版)》解讀
- 江蘇自考現(xiàn)代企業(yè)經(jīng)營管理-練習題(附答案)27875
- 場地空地出租合同范本
- 大學體育與科學健身智慧樹知到期末考試答案2024年
- 月子中心員工禮儀培訓方案
- 電鍍制造成本預估表
- 2023大型新能源集控中心建設項目技術方案
- 2023年研究生類社會工作碩士(MSW)考試題庫
評論
0/150
提交評論