两种重要的图——Snapshot diagram UML diagram
Snapshot diagram (代碼快照?qǐng)D)
- 用于描述程序運(yùn)行時(shí)的內(nèi)部狀態(tài),包括堆和棧的調(diào)用。
- 刻畫(huà)各類(lèi)變化隨時(shí)間的變化,描述各類(lèi)概念如:原始類(lèi)型/對(duì)象類(lèi)型,不可變對(duì)象/可變對(duì)象,引用別名
- 刻畫(huà)基本類(lèi)型的值:直接用一個(gè)箭頭指向它。
- 刻畫(huà)對(duì)象類(lèi)型的值:用圈圈起來(lái),再用一個(gè)箭頭指向它,在圈的里面有一個(gè)label來(lái)標(biāo)識(shí)它的類(lèi)型。圈的內(nèi)部可以包含類(lèi)的各個(gè)屬性(基本類(lèi)型/對(duì)象類(lèi)型),一個(gè)箭頭由屬性的名字指向?qū)傩缘闹怠?br />
- 不可變對(duì)象的值用雙線橢圓來(lái)表示,如String,下圖中s所指向的String對(duì)象就發(fā)生了改變。
- 可變對(duì)象的值用單線橢圓來(lái)表示,可變對(duì)象內(nèi)部屬性的值可以發(fā)生改變,如StringBuilder。
- 不可變的引用(用final修飾)用雙線箭頭來(lái)表示。如下圖中,id是不可變的,age是可變的。
- 有的時(shí)候,變量的引用是不可變的,即只能指向這唯一一個(gè)對(duì)象,但這個(gè)對(duì)象的值是可以改變的,如final StringBuilder。
- Example
下面這段代碼的Snapshot diagram。
- 一些復(fù)雜數(shù)據(jù)類(lèi)型的Snapshot diagram
List:
Set:
Map:
UML類(lèi)圖
類(lèi)圖基礎(chǔ)屬性
+表示public
-表示private
#表示protected
~表示default,也就是包權(quán)限
_下劃線表示static
斜體表示抽象類(lèi)
在UML中,類(lèi)使用包含類(lèi)名、屬性和操作且?guī)в蟹指艟€的長(zhǎng)方形來(lái)表示,如定義一個(gè)Employee類(lèi),它包含屬性name、age和email,以及操作modifyInfo(),在UML類(lèi)圖中該類(lèi)如圖所示:
在UML類(lèi)圖中,類(lèi)一般由三部分組成:
類(lèi)名、屬性、操作
UML規(guī)定屬性的表示方式為:可見(jiàn)性 名稱(chēng):類(lèi)型 [ = 缺省值 ]
UML規(guī)定操作的表示方式為:可見(jiàn)性 名稱(chēng)(參數(shù)列表) [ : 返回類(lèi)型]
對(duì)于接口,可以在接口名的上方寫(xiě)<<interface>>
類(lèi)與類(lèi)之間關(guān)系
在UML類(lèi)圖中,常見(jiàn)的有以下幾種關(guān)系: 泛化(Generalization), 實(shí)現(xiàn)(Realization),關(guān)聯(lián)(Association),聚合(Aggregation),組合(Composition),依賴(lài)(Dependency)
下面是一幅從網(wǎng)上摘取的生動(dòng)形象的圖。
關(guān)聯(lián)關(guān)系通常將一個(gè)類(lèi)的對(duì)象作為另一個(gè)類(lèi)的成員變量。在使用類(lèi)圖表示關(guān)聯(lián)關(guān)系時(shí)可以在關(guān)聯(lián)線上標(biāo)注角色名,一般使用一個(gè)表示兩者之間關(guān)系的動(dòng)詞或者名詞表示角色名。
如在一個(gè)登錄界面類(lèi)LoginForm中包含一個(gè)JButton類(lèi)型的注冊(cè)按鈕loginButton,它們之間可以表示為關(guān)聯(lián)關(guān)系,代碼實(shí)現(xiàn)時(shí)可以在LoginForm中定義一個(gè)名為loginButton的屬性對(duì)象,其類(lèi)型為JButton。
關(guān)聯(lián)關(guān)系又分為單向關(guān)聯(lián)、雙向關(guān)聯(lián)、自關(guān)聯(lián)、聚合關(guān)系、組合關(guān)系。
其中聚合關(guān)系和組合關(guān)系比較特別。
聚合(Aggregation)關(guān)系表示整體與部分的關(guān)系。在聚合關(guān)系中,成員對(duì)象是整體對(duì)象的一部分,但是成員對(duì)象可以脫離整體對(duì)象獨(dú)立存在。在UML中,聚合關(guān)系用帶空心菱形的直線表示。例如:汽車(chē)發(fā)動(dòng)機(jī)(Engine)是汽車(chē)(Car)的組成部分,但是汽車(chē)發(fā)動(dòng)機(jī)可以獨(dú)立存在,因此,汽車(chē)和發(fā)動(dòng)機(jī)是聚合關(guān)系。
在代碼實(shí)現(xiàn)聚合關(guān)系時(shí),成員對(duì)象通常作為構(gòu)造方法、Setter方法或業(yè)務(wù)方法的參數(shù)注入到整體對(duì)象中,上圖對(duì)應(yīng)的Java代碼片段如下:
組合(Composition)關(guān)系也表示類(lèi)之間整體和部分的關(guān)系,但是在組合關(guān)系中整體對(duì)象可以控制成員對(duì)象的生命周期,一旦整體對(duì)象不存在,成員對(duì)象也將不存在,成員對(duì)象與整體對(duì)象之間具有同生共死的關(guān)系。在UML中,組合關(guān)系用帶實(shí)心菱形的直線表示。例如:人的頭(Head)與嘴巴(Mouth),嘴巴是頭的組成部分之一,而且如果頭沒(méi)了,嘴巴也就沒(méi)了,因此頭和嘴巴是組合關(guān)系,如圖所示。
泛化關(guān)系
泛化有兩種——繼承、實(shí)現(xiàn)。
類(lèi)與類(lèi)之間的繼承關(guān)系用實(shí)線和空心三角來(lái)表示。
類(lèi)對(duì)接口的實(shí)現(xiàn)用虛線和空心三角來(lái)表示。
總結(jié)
以上是生活随笔為你收集整理的两种重要的图——Snapshot diagram UML diagram的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ICS大作业——程序人生 Hello‘s
- 下一篇: 如何设计复用性较好的类?