1渺尘、統(tǒng)一建模語(yǔ)言簡(jiǎn)介
統(tǒng)一建模語(yǔ)言(Unified Modeling Language, UML)是用來(lái)設(shè)計(jì)軟件藍(lán)圖的可視化建模語(yǔ)言,1997年被國(guó)際對(duì)象管理組織(OMG)采納為面向?qū)ο蟮慕UZ(yǔ)言的國(guó)際標(biāo)準(zhǔn)。它的特定是簡(jiǎn)單盔沫、統(tǒng)一、圖形化、能表達(dá)軟件設(shè)計(jì)中的靜態(tài)與動(dòng)態(tài)信息搏屑。
統(tǒng)一建模語(yǔ)言能為軟件開(kāi)發(fā)的所有階段提供模型化和可視化支持伟骨。而且融入了軟件工程領(lǐng)域的新思想饮潦、新方法和新技術(shù),使軟件設(shè)計(jì)人員溝通更簡(jiǎn)明逛腿,進(jìn)一步縮短了設(shè)計(jì)時(shí)間稀并,減少開(kāi)發(fā)成本。它的應(yīng)用領(lǐng)域很寬单默,不僅適合于一般系統(tǒng)的開(kāi)發(fā)碘举,而且適合于并行與分布式系統(tǒng)的建模。
UML從目標(biāo)系統(tǒng)的不同角度出發(fā)搁廓,定義了用例圖引颈、類(lèi)圖耕皮、對(duì)象圖、狀態(tài)圖蝙场、活動(dòng)圖凌停、時(shí)序圖、協(xié)作圖售滤、構(gòu)件圖罚拟、部署圖等9種圖。
2趴泌、類(lèi)舟舒、結(jié)構(gòu)和類(lèi)圖
2.1拉庶、類(lèi)
類(lèi)(Class)是指具有相同屬性嗜憔、方法和關(guān)系的對(duì)象的抽象,它封裝了數(shù)據(jù)和行為氏仗,是面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)的基礎(chǔ)吉捶,具有封裝性、繼承性和多態(tài)性等三大特性皆尔。在UML中呐舔,類(lèi)使用包含類(lèi)名、屬性和操作且?guī)в蟹指艟€(xiàn)的矩形來(lái)表示慷蠕。
(一)類(lèi)名(Name)是一個(gè)字符串珊拼,例如:Student。
(二)屬性(Attribute)是指類(lèi)的特性流炕,即類(lèi)的成員變量澎现。UML按以下格式表示:
[可見(jiàn)性]屬性名:類(lèi)型[=默認(rèn)值]
例如:-name:String
注:“可見(jiàn)性”表示該屬性對(duì)類(lèi)外的元素是否可見(jiàn),包括公有(Public)每辟、私有(Private)剑辫、受保護(hù)(Protected)和朋友(Friendly)四種,在類(lèi)圖中分別用符號(hào)+渠欺、-妹蔽、#、~表示挠将。
(三)操作(Operations)是類(lèi)的任意一個(gè)實(shí)例對(duì)象都可以使用的行為胳岂,是類(lèi)的成員方法。UML按以下格式表示:
[可見(jiàn)性]名稱(chēng)(參數(shù)列表)[:返回類(lèi)型]
例如:+display():void
圖1所示是學(xué)生類(lèi)的UML表示舔稀。
2.2乳丰、接口
接口(Interface)是一種特殊的類(lèi),它具有類(lèi)的結(jié)構(gòu)但不可被實(shí)例化镶蹋,只可以被子類(lèi)實(shí)現(xiàn)成艘。它包含抽象操作赏半,但不包含屬性。它描述了類(lèi)或組件對(duì)外可見(jiàn)的動(dòng)作淆两。在UML中断箫,接口使用一個(gè)帶有名稱(chēng)的小圓圈來(lái)進(jìn)行表示。
圖2所示是圖形類(lèi)接口的UML表示秋冰。
2.3仲义、類(lèi)圖
類(lèi)圖(ClassDiagram)是用來(lái)顯示系統(tǒng)中的類(lèi)、接口剑勾、協(xié)作以及它們之間的靜態(tài)結(jié)構(gòu)和關(guān)系的一種靜態(tài)模型埃撵。它主要用于描述軟件系統(tǒng)的結(jié)構(gòu)化設(shè)計(jì),幫助人們簡(jiǎn)化對(duì)軟件系統(tǒng)的理解虽另,它是系統(tǒng)分析和設(shè)計(jì)階段的重要產(chǎn)物暂刘,也是系統(tǒng)編碼與測(cè)試的重要模型依據(jù)。
類(lèi)圖中的類(lèi)可以通過(guò)某種編程語(yǔ)言直接實(shí)現(xiàn)捂刺。類(lèi)圖在軟件系統(tǒng)開(kāi)發(fā)的整個(gè)生命周期都是有效的谣拣,它是面向?qū)ο笙到y(tǒng)的建模中最常見(jiàn)的圖。圖3所示是“計(jì)算長(zhǎng)方形和圓形的周長(zhǎng)和面積”的類(lèi)圖族展,圖形接口有計(jì)算面積和周長(zhǎng)的抽象方法森缠,長(zhǎng)方形和圓形實(shí)現(xiàn)這兩個(gè)方法供訪問(wèn)類(lèi)調(diào)用。
3仪缸、類(lèi)之間的關(guān)系
在軟件系統(tǒng)中贵涵,類(lèi)不是孤立存在的,類(lèi)與類(lèi)之間存在各種關(guān)系恰画。根據(jù)類(lèi)與類(lèi)之間的耦合度從弱到強(qiáng)排列宾茂,UML中的類(lèi)圖有以下幾種關(guān)系:依賴(lài)關(guān)系、關(guān)聯(lián)關(guān)系锣尉、聚合關(guān)系刻炒、組合關(guān)系、泛化關(guān)系和實(shí)現(xiàn)關(guān)系自沧。其中泛化和實(shí)現(xiàn)的耦合度相等坟奥,它們是最強(qiáng)的。
3.1拇厢、依賴(lài)關(guān)系
依賴(lài)(Dependency)關(guān)系是一種使用關(guān)系爱谁,它是對(duì)象之間耦合度最弱的一種關(guān)聯(lián)方式,是臨時(shí)性的關(guān)聯(lián)孝偎。在代碼中访敌,某個(gè)類(lèi)的方法通過(guò)局部變量墩划、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用來(lái)訪問(wèn)另一個(gè)類(lèi)(被依賴(lài)類(lèi))中的某些方法來(lái)完成一些職責(zé)眉尸。
在UML類(lèi)圖中劲绪,依賴(lài)關(guān)系使用帶箭頭的虛線(xiàn)來(lái)表示鞍陨,箭頭從使用類(lèi)指向被依賴(lài)的類(lèi)。圖4所示是人與手機(jī)的關(guān)系圖阻塑,人通過(guò)手機(jī)的語(yǔ)音傳送方法打電話(huà)蓝撇。
3.2、關(guān)聯(lián)關(guān)系
關(guān)聯(lián)(Association)關(guān)系是對(duì)象之間的一種引用關(guān)系陈莽,用于表示一類(lèi)對(duì)象與另一類(lèi)對(duì)象之間的聯(lián)系渤昌,如老師和學(xué)生,師傅和徒弟走搁,丈夫和妻子等独柑。關(guān)聯(lián)關(guān)系是類(lèi)與類(lèi)之間最常用的一種關(guān)系,分為一般關(guān)聯(lián)關(guān)系私植、聚合關(guān)系和組合關(guān)系忌栅。我們先介紹一般關(guān)系。
關(guān)聯(lián)可以是雙向的兵琳,也可以是單向的狂秘。在UML類(lèi)圖中骇径,雙向的關(guān)聯(lián)可以用帶兩個(gè)箭頭或者沒(méi)有箭頭的實(shí)線(xiàn)來(lái)表示躯肌,單向的關(guān)聯(lián)用帶一個(gè)箭頭的實(shí)線(xiàn)來(lái)表示,箭頭從使用類(lèi)指向被關(guān)聯(lián)的類(lèi)破衔。也可以在關(guān)聯(lián)線(xiàn)的兩端標(biāo)注角色名清女,代表兩種不同的角色。
在代碼中通常將一個(gè)類(lèi)的對(duì)象作為另一個(gè)類(lèi)的成員變量來(lái)實(shí)現(xiàn)關(guān)聯(lián)關(guān)系晰筛。圖5所示是老師和學(xué)生的關(guān)系圖嫡丙,每個(gè)老師可以教多個(gè)學(xué)生,每個(gè)學(xué)生也可向多個(gè)老師學(xué)读第,他們是雙向關(guān)聯(lián)曙博。
3.3、聚合關(guān)系
聚合(Aggregation)關(guān)系是關(guān)聯(lián)關(guān)系的一種怜瞒,是強(qiáng)關(guān)聯(lián)關(guān)系父泳,是整體和部分之間的關(guān)系,是has-a的關(guān)系吴汪。
聚合關(guān)系也是通過(guò)成員對(duì)象來(lái)實(shí)現(xiàn)的惠窄,其中成員對(duì)象是整體對(duì)象的一部分,但是成員對(duì)象可以脫離整體對(duì)象而獨(dú)立存在漾橙。例如杆融,學(xué)校與老師的關(guān)系,學(xué)校包含老師霜运,但如果學(xué)校停辦了脾歇,老師依然存在蒋腮。
在UML類(lèi)圖中,聚合關(guān)系可以用帶空心菱形的實(shí)線(xiàn)來(lái)表示藕各,菱形指向整體徽惋。圖6所示是大學(xué)和教師的關(guān)系圖。
3.4座韵、組合關(guān)系
組合(Composition)關(guān)系也是關(guān)聯(lián)關(guān)系的一種险绘,也表示類(lèi)之間的整體與部分的關(guān)系,但它是一種更強(qiáng)烈的聚合關(guān)系誉碴,是contains-a關(guān)系宦棺。
在組合關(guān)系中,整體對(duì)象可以控制部分對(duì)象的生命周期黔帕,一旦整體對(duì)象不存在代咸,部分對(duì)象也將不存在,部分對(duì)象不能脫離整體對(duì)象而存在成黄。例如呐芥,頭和嘴的關(guān)系,滅有了頭奋岁,嘴也就不存在了思瘟。
在UML類(lèi)圖中,組合關(guān)系用帶實(shí)心菱形的實(shí)現(xiàn)來(lái)表示闻伶,菱形指向整體滨攻。圖7所示是頭和嘴的關(guān)系圖。
3.5蓝翰、泛化關(guān)系
泛化(Generalization)關(guān)系是對(duì)象之間耦合度最大的一種關(guān)系光绕,表示一般與特殊的關(guān)系,是父類(lèi)與子類(lèi)之間的關(guān)系畜份,是一種繼承關(guān)系诞帐,是is-a的關(guān)系。
在UML類(lèi)圖中爆雹,泛化關(guān)系用帶空心三角箭頭的實(shí)線(xiàn)來(lái)表示停蕉,箭頭從子類(lèi)指向父類(lèi)。在代碼實(shí)現(xiàn)時(shí)顶别,使用面向?qū)ο蟮睦^承機(jī)制來(lái)實(shí)現(xiàn)泛化關(guān)系谷徙。例如,Student類(lèi)和Teacher類(lèi)都是Person類(lèi)的子類(lèi)驯绎,其類(lèi)圖如圖8所示完慧。
3.6、實(shí)現(xiàn)關(guān)系
實(shí)現(xiàn)(Realization)關(guān)系是接口與實(shí)現(xiàn)類(lèi)之間的關(guān)系剩失。在這種關(guān)系中屈尼,類(lèi)實(shí)現(xiàn)了接口册着,類(lèi)中的操作實(shí)現(xiàn)了接口中所聲明的所有的抽象操作。
在UML類(lèi)圖中脾歧,實(shí)現(xiàn)關(guān)系使用帶空心三角箭頭的虛線(xiàn)來(lái)表示甲捏,箭頭從實(shí)現(xiàn)類(lèi)指向接口。例如鞭执,汽車(chē)和船實(shí)現(xiàn)了交通工具司顿,其類(lèi)圖如圖9所示。