日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

两种重要的图——Snapshot diagram UML diagram

發(fā)布時(shí)間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两种重要的图——Snapshot diagram UML diagram 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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。
String s1 = new String("abc"); List<String> list = new ArrayList<>(); list.add(s1);s1 = s1.concat("d"); System.out.println(list.get(0));String s2 = s1.concat("e"); list.set(0, s2); System.out.println(list.get(0));

  • 一些復(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)系
    關(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代碼片段如下:
  • public class Car {private Engine engine;//構(gòu)造注入public Car(Engine engine) {this.engine = engine;}//設(shè)值注入public void setEngine(Engine engine) {this.engine = engine;} } public class Engine { }

    組合(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)系,如圖所示。

    public class Head {private Mouth mouth;public Head() {mouth = new Mouth(); //實(shí)例化成員類(lèi)}…… } public class Mouth {…… }

    泛化關(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。