小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

UML 類圖 ——非常好

 昵稱39360 2011-08-03
作者:馮瑞濤(TerryFeng)  來源:博客園  發(fā)布時(shí)間:2009-11-21 14:03  閱讀:618 次  原文鏈接   [收藏]  

 

 

•什么是類

面向?qū)ο笏枷?/p>

特例

image

抽象

•每個(gè)對(duì)象都扮演了一個(gè)角色,并為其它成員提供特定的服務(wù)或執(zhí)行特定的行為。

•在面向?qū)ο笫澜缰校袨榈膯?dòng)是通過將“消息”傳遞給對(duì)此行為負(fù)責(zé)的對(duì)象來完成的;同時(shí)還將伴隨著執(zhí)行要求附上相關(guān)的信息(參數(shù));而收到該消息的對(duì)象則會(huì)執(zhí)行相應(yīng)的“方法”來實(shí)現(xiàn)需求

•用類和對(duì)象表示現(xiàn)實(shí)世界,用消息和方法來模擬現(xiàn)實(shí)世界的核心思想

如何用UML表示一個(gè)類

image

•名稱(類名):每個(gè)類都有一個(gè)惟一的名稱,通常采用CamelCase格式表示

•屬性:是已被命名的類的特性,它描述該類實(shí)例中包含的信息

•操作(方法):是類所提供的服務(wù),它可以由類的任何對(duì)象請(qǐng)求以影響其行為

•屬性名和操作名也通常采用CamelCase格式表示,只不過首字母通常為小寫。

 

•如何閱讀類圖

示例類圖

先看清有哪些類,然后看看類之間存在的關(guān)系,并結(jié)合多重性來理解類圖的結(jié)構(gòu)特點(diǎn)以及各個(gè)屬性和方法的含義

image

讀圖過程

•讀出類:圖中共有7個(gè)類,Order、OrderItem、Customer、Consignee、DeliverOrder、Peddlery、Prodcut

•讀出關(guān)系:從圖中關(guān)系最復(fù)雜(也就是線最密集)的類開始閱讀,本圖中最復(fù)雜的就是Order類。
1)OrderItem和Order之間是組合關(guān)系,根據(jù)箭頭的方向可知Order包含了OrderItem。
2)Order類和Customer、Consignee、DeliverOrder是關(guān)聯(lián)關(guān)系。也就是說,一個(gè)訂單和客戶、收貨人、送貨單是相關(guān)的。

•多重性(重?cái)?shù)):用來說明關(guān)聯(lián)的兩個(gè)類之間的數(shù)量關(guān)系

這個(gè)關(guān)系線本身看不到方向,但是看下面的總結(jié)重?cái)?shù)為1的都是源

源類及多重性

 

目標(biāo)類及多重性

 

分析

 

Customer(1)

 

Order(0…n)

 

訂單是屬于某個(gè)客戶的,網(wǎng)站的客戶可以有0個(gè)或多個(gè)訂單

 

Order(1)

 

Consignee(1)

 

每個(gè)訂單只能夠有一個(gè)收貨人

 

Order(1)

 

OrderItem(1…n)

 

訂單是由訂單項(xiàng)組成的,至少要有一個(gè)訂單項(xiàng),最多可以有n個(gè)

 

Order(1)

 

DeliverOrder(1…n)

 

一個(gè)訂單有一個(gè)或多個(gè)送貨單

 

說明:系統(tǒng)根據(jù)訂單項(xiàng)的產(chǎn)品所屬的商戶,將其分發(fā)給商戶,拆成了多個(gè)送貨單!

 

DeliverOrder(1)

 

OrderItem(1…n)

 

一張送貨單對(duì)應(yīng)訂單中的一到多個(gè)訂單項(xiàng)

 

DeliverOrder(1)

 

Consignee(1)

 

每張送貨單都對(duì)應(yīng)著一個(gè)收貨人

 

Peddlery(1)

 

DeliverOrder(0…n)

 

每個(gè)商戶可以有相關(guān)的0個(gè)或多個(gè)送貨單

 

OrderItem(1)

 

Product(1)

 

每個(gè)訂單項(xiàng)中都包含著唯一的一個(gè)產(chǎn)品

 

Peddlery(1)

 

Prodcut(0…n)

 

產(chǎn)品是屬于某個(gè)商戶的,可以注冊(cè)0到多個(gè)產(chǎn)品

 

理解類中的方法和調(diào)用過程

•Order 類,有兩個(gè)方法:dispatch()和close(),從名字中可以猜出它們分別實(shí)現(xiàn)“分拆訂單生成送貨單”和“完成訂單”。而在 DeliveOrder()類中則有一個(gè)Close()方法,同理它應(yīng)該表示“完成送貨”。而在OrderItem中有一個(gè)stateChange()方 法和deliverState,不難猜出它就是用來改變其“是否交給收貨人”標(biāo)志位的

•先調(diào)用Order的dispatch()方法, 它將根據(jù)其包含的OrderItem中產(chǎn)品信息,來按供應(yīng)商戶分拆成若干個(gè)DeliverOrder。商戶登錄系統(tǒng)后就可以獲取其 DeliverOrder,并在執(zhí)行完后調(diào)用close()方法。這時(shí),就將調(diào)用OrderItem的stateChange()方法來改為其狀態(tài)。同時(shí) 再調(diào)用Order的close()方法,判斷該Order的所有的OrderItem是否都已經(jīng)送到了,如果是就將其真正close()掉

使用了更多輔助建模元素的類圖

image

 

增強(qiáng)的輔助建模元素

•導(dǎo)航箭號(hào):類的實(shí)例之間只能沿著導(dǎo)航箭頭的方向傳遞 ,在Order中可以獲取其相應(yīng)的Consignee,而從Consignee中是無法了解與其相關(guān)的Order的

•角色名稱:Customer端有一個(gè)“+Owner”字符串 ,這表示Customer扮演的角色是Owner,也能對(duì)關(guān)聯(lián)進(jìn)行命名

image

•導(dǎo)出屬性:是指可以根據(jù)其他值計(jì)算出來的特性,這種屬性應(yīng)在其名稱前加上一個(gè)“/”符號(hào)。

• 限定符:在Order和OrderItem之間的組合關(guān)系中,OrderItem這端多了一個(gè)方框,里面寫著“ProductId”。它在UML中稱為限 定符,存在限定符的關(guān)聯(lián)稱為受限關(guān)聯(lián)。它用來表示某種限定關(guān)系。在本例中,它的用途是說明:對(duì)于一張訂單,每一種產(chǎn)品只能用一個(gè)訂單項(xiàng)

•約束:用來說明規(guī)則,{xor}…

•職責(zé):在類的屬性欄中添加注釋行表示,或增加了一個(gè)新的分欄

 

 

 

•其他高級(jí)概念

接口與抽象類

•抽象類是一種不能夠被直接實(shí)例化的類,也就是說不能夠創(chuàng)建一個(gè)屬于抽象類的對(duì)象

image

•接口則是一種類似于抽象類的機(jī)制,它是一個(gè)沒有具體實(shí)現(xiàn)的類

image

關(guān)聯(lián)類

•關(guān)聯(lián)類即是關(guān)聯(lián)也是類,它不僅像關(guān)聯(lián)那樣連接兩個(gè)類,而且還可以定義一組屬于關(guān)系本身的特性

image

模板類

•可以根據(jù)占位符或參數(shù)來定義類,而不用說明屬性、方法返回值和方法參數(shù)的實(shí)際類型 ,

和泛型一個(gè)道理,在Bind關(guān)系中用(int,20)替換T及size ,形成新的方法

image

主動(dòng)類與嵌套類

•主動(dòng)類的實(shí)例稱為主動(dòng)對(duì)象,一個(gè)主動(dòng)對(duì)象擁有一個(gè)控制線程并且能夠發(fā)起控制活動(dòng);它不在別的線程、堆棧或狀態(tài)機(jī)內(nèi)運(yùn)行,具有獨(dú)立的控制期。從某種意義上說,它就是一個(gè)線程

•在諸如Java的語言中,允許你將一個(gè)類的定義放在另一個(gè)類定義的內(nèi)部,這就是嵌套類,在Java中也稱為內(nèi)層類。嵌套類是聲明在它的外層類中的,因此只能夠通過外層類或外層類的對(duì)象對(duì)它進(jìn)行訪問

image

常見依賴關(guān)系與程序?qū)崿F(xiàn)

依賴構(gòu)造型

含義

例子程序

《create》

表明目標(biāo)對(duì)象是由源對(duì)象創(chuàng)建的,目標(biāo)對(duì)象創(chuàng)建后將傳遞給系統(tǒng)其他部分。

public class ClassA{

public ClassB createB() {

    return new ClassB();

}

}

《local》

《call》

源類對(duì)象創(chuàng)建目標(biāo)類對(duì)象實(shí)例,并將該實(shí)例包含在一個(gè)局部變量中。例如右邊的例子中,將賦給一個(gè)名為test的變量

public class ClassA{

public void testMethod() {

    ClassB test=new ClassB(); 

}

}

《parameter》

源類對(duì)象通過它的某個(gè)成員函數(shù)的參數(shù)得以訪問目標(biāo)類對(duì)象實(shí)例。它的意思是指:類ClassA的操作需要類ClassB的實(shí)例作為參數(shù),或返回類ClassB的實(shí)例。

public class ClassA{

    public void testMethod(ClassB test) {

    // use b;

}

}

《delegate》

源類對(duì)象把一個(gè)對(duì)于成員函數(shù)的調(diào)用傳遞給目標(biāo)類對(duì)象。這是現(xiàn)代編程語言和設(shè)計(jì)模式中很常用的一種機(jī)制,但這不屬于UML的標(biāo)準(zhǔn)關(guān)系。 委托

public class ClassA{

    private ClassB objectB;

    public void testMethod() {

        objectB.testMethod();

}

}

引用對(duì)象和值對(duì)象

•引用對(duì)象:reference object,例如客戶、產(chǎn)品、訂單等對(duì)象都是典型的引用對(duì)象,對(duì)于這些對(duì)象而言,標(biāo)識(shí)(identity)是很重要的,因?yàn)閷?duì)于現(xiàn)實(shí)世界中的一個(gè)實(shí)體只需要一個(gè)軟件對(duì)象來表示

•值對(duì)象(簡單值):例如日期、重量、高度等對(duì)象都是典型的值對(duì)象,表示現(xiàn)實(shí)世界中的同一個(gè)對(duì)象往往有多個(gè)值對(duì)象

對(duì)象約束語言 OCL

•環(huán)境與約束:每個(gè)OCL表達(dá)式都必須是針對(duì)某個(gè)元素的,因此在OCL表達(dá)式前必須說明它針對(duì)元素(這就稱為環(huán)境)
1)“context Object inv:”,其中Object是OCL表達(dá)式針對(duì)的建模元素名稱;
2)“ Object ”,其中Object是OCL表達(dá)式針對(duì)的建模元素名稱。
當(dāng)聲明了環(huán)境之后,就可以用self來引用它的變量

•子集約束:

image

•一致性:一個(gè)客戶擁有零個(gè)或多個(gè)合同,發(fā)票是基于某個(gè)合同的,而一個(gè)客戶將收到零張或多張發(fā)票
Invoice:self.contract.customer=self.customer

•異或關(guān)系:

image

•規(guī)定的取值范圍:Rectangle:length>0 and width>0

 

 

•如何繪制類圖

需求描述

• 小王是一個(gè)愛書之人,家里各類書籍已過千冊(cè),而平時(shí)又時(shí)常有朋友外借,因此需要一個(gè)個(gè)人圖書管理系統(tǒng)。該系統(tǒng)應(yīng)該能夠?qū)幕拘畔从?jì)算機(jī)類、非計(jì)算 機(jī)類分別建檔,實(shí)現(xiàn)按書名、作者、類別、出版社等關(guān)鍵字的組合查詢功能。在使用該系統(tǒng)錄入新書籍時(shí)系統(tǒng)會(huì)自動(dòng)按規(guī)則生成書號(hào),可以修改信息,但一經(jīng)創(chuàng)建就 不允許刪除。該系統(tǒng)還應(yīng)該能夠?qū)耐饨枨闆r進(jìn)行記錄,可對(duì)外借情況列表打印。另外,還希望能夠?qū)馁徺I金額、冊(cè)數(shù)按特定時(shí)間周期進(jìn)行統(tǒng)計(jì)

發(fā)現(xiàn)類

小王是一個(gè)愛書之家里各類書籍已過千冊(cè),而平時(shí)又時(shí)常有朋友外借,因此需要一個(gè)個(gè)人圖書管理系統(tǒng)。該系統(tǒng)應(yīng)該能夠?qū)?/span>基本信息計(jì)算機(jī)類、非計(jì)算機(jī)類分別建檔,實(shí)現(xiàn)按書名作者、類別出版社關(guān)鍵字的組合查詢功能。在使用該系統(tǒng)錄入新書籍時(shí)系統(tǒng)會(huì)自動(dòng)按規(guī)則生成書號(hào),可以修改信息,但一經(jīng)創(chuàng)建就不允許刪除。該系統(tǒng)還應(yīng)該能夠?qū)耐饨枨闆r進(jìn)行記錄,可對(duì)外借情況列表打印。另外,還希望能夠?qū)?/span>購買金額冊(cè)數(shù)特定時(shí)間周期進(jìn)行統(tǒng)計(jì)

篩選備選類

•“小王”、“人”、“家里”很明顯是系統(tǒng)外的概念,無須對(duì)其建模;

•而“個(gè)人圖書管理系統(tǒng)”、“系統(tǒng)”指的就是將要開發(fā)的系統(tǒng),即系統(tǒng)本身,也無須對(duì)其進(jìn)行建模;

• 很明顯“書籍”是一個(gè)很重要的類,而“書名”、“作者”、“類別”、“出版社”、“書號(hào)”則都是用來描述書籍的基本信息的,因此應(yīng)該作為“書籍”類的屬性 處理,而“規(guī)則”是指書號(hào)的生成規(guī)則,而書號(hào)則是書籍的一個(gè)屬性,因此“規(guī)則”可以作為編寫“書籍”類構(gòu)造函數(shù)的指南。

•“基本信息”則是書名、作者、類別等描述書籍的基本信息統(tǒng)稱,“關(guān)鍵字”則是代表其中之一,因此無需對(duì)其建模;

•“功能”、“新書籍”、“信息”、“記錄”都是在描述需求時(shí)使用到的一些相關(guān)詞語,并不是問題域的本質(zhì),因此先可以將其淘汰掉;

篩選修選類

•“計(jì)算機(jī)類”、“非計(jì)算機(jī)類”是該系統(tǒng)中圖書的兩大分類,因此應(yīng)該對(duì)其建模,并改名為“計(jì)算機(jī)類書籍”和“非計(jì)算機(jī)類書籍”,以減少歧義;

• “外借情況”則是用來表示一次借閱行為,應(yīng)該成為一個(gè)候選類,多個(gè)外借情況將組成“外借情況列表”,而外借情況中一個(gè)很重要的角色是“朋友”—借閱主體。 雖然到本系統(tǒng)中并不需要建立“朋友”的資料庫,但考慮到可能會(huì)需要列出某個(gè)朋友的借閱情況,因此還是將其列為候選類。為了能夠更好地表述,將“外借情況” 改名為“借閱記錄”,而將“外借情況列表”改名為“借閱記錄列表”;

•“購買金額”、“冊(cè)數(shù)”都是統(tǒng)計(jì)的結(jié)果,都是一個(gè)數(shù)字,因此不用將其建模,而“特定時(shí)限”則是統(tǒng)計(jì)的范圍,也無需將其建模;不過從這里的分析中,我們可以發(fā)現(xiàn),在該需求描述中隱藏著一個(gè)關(guān)鍵類—書籍列表,也就是執(zhí)行統(tǒng)計(jì)的主體。

得到候選類

書籍         計(jì)算機(jī)類書籍       非計(jì)算機(jī)類書籍

借閱記錄     借閱記錄列表       書籍列表

•在使用“名詞動(dòng)詞法”尋找類的時(shí)候,很多團(tuán)隊(duì)會(huì)在此耗費(fèi)大量的時(shí)間,特別是對(duì)于中大型項(xiàng)目,這樣很容易迷失方向。其實(shí)在此主要的目的是對(duì)問題領(lǐng)域建立概要的了解,無需太過咬文嚼字

關(guān)聯(lián)分析,建模,多重性分析,再建模

image

職責(zé)分析

•書籍類:從需求描述中,可找到書名、類別、作者、出版社;同時(shí)從統(tǒng)計(jì)的需要中,可得知“定價(jià)”也是一個(gè)關(guān)鍵的成員變量。

•書籍列表類:書籍列表就是全部的藏書列表,其主要的成員方法是新增、修改、查詢(按關(guān)鍵字查詢)、統(tǒng)計(jì)(按特定時(shí)限統(tǒng)計(jì)冊(cè)數(shù)與金額)。

•借閱記錄類:借閱人(朋友)、借閱時(shí)間。

•借閱記錄列表類:主要職責(zé)就是添加記錄(借出)、刪除記錄(歸還)以及打印借閱記錄

image

限定與修改

image

異或 Xor:相同為零,不同為一,兩個(gè)值如果一樣就是錯(cuò)誤的,也就是說,只能是其中的一個(gè)。

•導(dǎo)航性分析:Book與BookList之間、BorrowRecord和BorrowList之間是組合關(guān)系均無需添加方向描述,而Book與BorrowRecord之間則是雙方關(guān)聯(lián),也無需添加

•約束:Book對(duì)象創(chuàng)建后就不能夠被刪除只能被修改,因此在Book類邊上加上用自由文本寫的約束;一本書要么屬于計(jì)算機(jī)類,要么屬于非計(jì)算機(jī)類,因此在ItBook和OtherBook間加了 “{Xor}”約束

•限定符:一本書只有一冊(cè),因此只能夠被借一次,因此對(duì)于一本Book而言只能有一個(gè)RecordId與其對(duì)應(yīng)

 

•類圖應(yīng)用說明

軟件系統(tǒng)模型,全部是針對(duì)類圖在各個(gè)階段的演變

image

領(lǐng)域模型是從面向?qū)ο蟮囊暯强创F(xiàn)實(shí)世界的結(jié)果,也就是通過類圖來描述現(xiàn)實(shí)世界中各種事物的關(guān)系。

分析模型和領(lǐng)域模型是很相近的,分析模型主要是針對(duì)軟件系統(tǒng)的分析,領(lǐng)域模型則更多是偏重對(duì)業(yè)務(wù)領(lǐng)域的分析

設(shè)計(jì)模型則是在分析模型的基礎(chǔ)上添加設(shè)計(jì)元素的結(jié)果。與分析模型相比,設(shè)計(jì)模型中的類的屬性集更趨完善;

數(shù)據(jù)庫邏輯模型

•從某種意義上說UML中的類圖是E-R圖的超集,E-R圖只針對(duì)存儲(chǔ)的數(shù)據(jù),而類圖則在些基礎(chǔ)上,增加了行為建模的能力。在使用類圖來表示E-R模型時(shí),要注意遵循以下策略

•將表示E-R模型的類,用UML的標(biāo)準(zhǔn)構(gòu)造型“{persistent}”來表示;

•展開類的結(jié)構(gòu)性細(xì)節(jié),并且加強(qiáng)關(guān)聯(lián)和多重性分析;

盡量消除循環(huán)關(guān)聯(lián)、n-元關(guān)聯(lián)

 

 

•復(fù)合結(jié)構(gòu)圖

復(fù)合結(jié)構(gòu)圖的組成部分

•通過 “部件(Part)”和“連接器(Connector)”來表示類的內(nèi)部結(jié)構(gòu)

•部件也稱為結(jié)構(gòu)化部分,它是一個(gè)代表上下文關(guān)系中的一個(gè)對(duì)象或一組對(duì)象的元素,也可以是類中的一部分。部件具有名稱、類型和多重性

image

•連接器:是一種上下文中的關(guān)聯(lián),它用來連接兩個(gè)部件

復(fù)合結(jié)構(gòu)圖實(shí)例

image

• 該類由“命令解析”、“485通信”和“數(shù)據(jù)組裝”三個(gè)部分組成,命令解析提供了getState(獲取狀態(tài))和setState(設(shè)置狀態(tài))兩個(gè)接口; 根據(jù)傳入數(shù)據(jù)的不同,由“485”通信來完成數(shù)據(jù)的獲取或設(shè)置的任務(wù);并且根據(jù)最終的執(zhí)行結(jié)果,進(jìn)行“數(shù)據(jù)封裝”,調(diào)用外部的storeData接口來實(shí) 現(xiàn)數(shù)據(jù)的存儲(chǔ)

 

E-R 圖

E-R圖為實(shí)體-聯(lián)系圖,提供了表示實(shí)體型、屬性和聯(lián)系的方法,用來描述現(xiàn)實(shí)世界的概念模型。
構(gòu)成E-R圖的基本要素是實(shí)體型、屬性和聯(lián)系,其表示方法為:
· 實(shí)體型:用矩形表示,矩形框內(nèi)寫明實(shí)體名;
· 屬性:用橢圓形表示,并用無向邊將其與相應(yīng)的實(shí)體連接起來;
· 聯(lián)系:用菱形表示,菱形框內(nèi)寫明聯(lián)系名,并用無向邊分別與有關(guān)實(shí)體連接起來,同時(shí)在無向邊旁標(biāo)上聯(lián)系的類型(1 : 1,1 : n或m : n)。

ER圖是完全針對(duì)數(shù)據(jù)庫設(shè)計(jì)的,我們也可以直接建立數(shù)據(jù)庫關(guān)系模型來代表ER圖

其他表示法

•小結(jié)

•首先,從一個(gè)現(xiàn)實(shí)生活中的例子開始引入面向?qū)ο笏枷氲谋举|(zhì),并且詳細(xì)地說明了UML中類的表示法

•接著講述了閱讀類圖的方法、技巧和相關(guān)的知識(shí):關(guān)系、多重性、導(dǎo)航箭頭、角色名稱、導(dǎo)出屬性、限定符、約束;接口/抽象類、關(guān)聯(lián)類、模板類、主動(dòng)類、嵌套類;OCL

• 類圖的繪制方法,類圖的功能與作用

•復(fù)合結(jié)構(gòu)圖的基礎(chǔ)知識(shí)

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多