| 
 
 •什么是類面向?qū)ο笏枷?/p> 特例 抽象 •每個(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è)類 •名稱(類名):每個(gè)類都有一個(gè)惟一的名稱,通常采用CamelCase格式表示 •屬性:是已被命名的類的特性,它描述該類實(shí)例中包含的信息 •操作(方法):是類所提供的服務(wù),它可以由類的任何對(duì)象請(qǐng)求以影響其行為 •屬性名和操作名也通常采用CamelCase格式表示,只不過首字母通常為小寫。 
 •如何閱讀類圖示例類圖 先看清有哪些類,然后看看類之間存在的關(guān)系,并結(jié)合多重性來理解類圖的結(jié)構(gòu)特點(diǎn)以及各個(gè)屬性和方法的含義 讀圖過程 •讀出類:圖中共有7個(gè)類,Order、OrderItem、Customer、Consignee、DeliverOrder、Peddlery、Prodcut •讀出關(guān)系:從圖中關(guān)系最復(fù)雜(也就是線最密集)的類開始閱讀,本圖中最復(fù)雜的就是Order類。    •多重性(重?cái)?shù)):用來說明關(guān)聯(lián)的兩個(gè)類之間的數(shù)量關(guān)系 這個(gè)關(guān)系線本身看不到方向,但是看下面的總結(jié)重?cái)?shù)為1的都是源 
 理解類中的方法和調(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()掉 使用了更多輔助建模元素的類圖 
 增強(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)行命名 •導(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ì)象 •接口則是一種類似于抽象類的機(jī)制,它是一個(gè)沒有具體實(shí)現(xiàn)的類 關(guān)聯(lián)類 •關(guān)聯(lián)類即是關(guān)聯(lián)也是類,它不僅像關(guān)聯(lián)那樣連接兩個(gè)類,而且還可以定義一組屬于關(guān)系本身的特性 模板類 •可以根據(jù)占位符或參數(shù)來定義類,而不用說明屬性、方法返回值和方法參數(shù)的實(shí)際類型 , 和泛型一個(gè)道理,在Bind關(guān)系中用(int,20)替換T及size ,形成新的方法 主動(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)行訪問 常見依賴關(guān)系與程序?qū)崿F(xiàn) 
 引用對(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)境)     •子集約束: •一致性:一個(gè)客戶擁有零個(gè)或多個(gè)合同,發(fā)票是基于某個(gè)合同的,而一個(gè)客戶將收到零張或多張發(fā)票    •異或關(guān)系: •規(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ì)的主體。 得到候選類 
 •在使用“名詞動(dòng)詞法”尋找類的時(shí)候,很多團(tuán)隊(duì)會(huì)在此耗費(fèi)大量的時(shí)間,特別是對(duì)于中大型項(xiàng)目,這樣很容易迷失方向。其實(shí)在此主要的目的是對(duì)問題領(lǐng)域建立概要的了解,無需太過咬文嚼字 關(guān)聯(lián)分析,建模,多重性分析,再建模 職責(zé)分析 •書籍類:從需求描述中,可找到書名、類別、作者、出版社;同時(shí)從統(tǒng)計(jì)的需要中,可得知“定價(jià)”也是一個(gè)關(guān)鍵的成員變量。 •書籍列表類:書籍列表就是全部的藏書列表,其主要的成員方法是新增、修改、查詢(按關(guān)鍵字查詢)、統(tǒng)計(jì)(按特定時(shí)限統(tǒng)計(jì)冊(cè)數(shù)與金額)。 •借閱記錄類:借閱人(朋友)、借閱時(shí)間。 •借閱記錄列表類:主要職責(zé)就是添加記錄(借出)、刪除記錄(歸還)以及打印借閱記錄 限定與修改 異或 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è)階段的演變 •領(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ì)象的元素,也可以是類中的一部分。部件具有名稱、類型和多重性 •連接器:是一種上下文中的關(guān)聯(lián),它用來連接兩個(gè)部件 復(fù)合結(jié)構(gòu)圖實(shí)例 • 該類由“命令解析”、“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í)世界的概念模型。     
 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í) 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||
|  |