日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

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

生活随笔

當(dāng)前位置: 首頁(yè) >

通过简单例子 | 快速理清 UML类图中六大关系

發(fā)布時(shí)間:2025/3/19 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过简单例子 | 快速理清 UML类图中六大关系 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

類(lèi)與類(lèi)之間的六大關(guān)系

  • 泛化 ( Generalization ) —> 表繼承關(guān)系
  • 實(shí)現(xiàn) ( Realization )
  • 關(guān)聯(lián) ( Association )
  • 聚合 ( Aggregation )
  • 組合 ( Compostion )
  • 依賴(lài) ( Dependency )
  • 前言:

    最近學(xué)校在上統(tǒng)一建模語(yǔ)言 UML ,也是畢業(yè)設(shè)計(jì)中需要用到。我感覺(jué)學(xué)會(huì) UML 圖對(duì)編程的作用是很大的,將需要做的東西抽象出來(lái),作圖,然后再進(jìn)行編碼,我覺(jué)得思路會(huì)比較清晰。所以打算把這個(gè)方面也好好掌握掌握。

    希望這篇文章能夠給大家?guī)?lái)些許收獲,讓大家趁興而歸。

    一、單個(gè)類(lèi)的類(lèi)圖

    一步一步來(lái),我們先學(xué)學(xué)如何使用 UML 圖來(lái)表示單個(gè)類(lèi)。

    我先把類(lèi)貼下面:

    package uml;/*** @Author: crush* @Date: 2021-09-30 15:00* version 1.0*/ public class Person {private String name;private Integer age;private static String school="某小學(xué)";public static String nationality="中國(guó)";public Person() {}public Person(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public static String getSchool() {return school;}public static void setSchool(String school) {Person.school = school;}public static String getNationality() {return nationality;}public static void setNationality(String nationality) {Person.nationality = nationality;}public void selfIntroduction(String name, Integer age, String school){System.out.println("做一個(gè)自我介紹,我的名字是:"+name+",今年"+age+"歲了,來(lái)自于"+school);} }

    這個(gè)類(lèi)還是非常簡(jiǎn)單的哈,接下來(lái)就是要如何用一個(gè)類(lèi)圖來(lái)進(jìn)行描述呢?

    如下圖:

    解釋

  • 上半部分是 Person 類(lèi)的屬性,下半部分是 Person 類(lèi)的方法

  • - name:String 描述的是:private String name;

    -號(hào):表示為私有屬性( private ),反過(guò)來(lái) + :就表示 public

    name:為屬性名稱(chēng)

    :xxx :是表示屬性的類(lèi)型的。此處為 String 類(lèi)型

  • -School:String="某幼兒園" :描述的是 private static String school="某小學(xué)";

    下劃線是表示此屬性為 static(靜態(tài)屬性)

    “某幼兒園” 表示有默認(rèn)值。 其他同上。

  • + getNationality():String 描述的是

    public static void setNationality(String nationality) {Person.nationality = nationality; }

    和上面基本一樣,+ 表示 public ,下劃線表示 static 修飾,getNationality() 表示方法名,String 表示返回值為String類(lèi)型。

  • 但是平時(shí)中,我們通常都是多個(gè)類(lèi)之間有關(guān)系,不是個(gè)孤零零的孤寡老人。

    二、多個(gè)類(lèi)之間的關(guān)系

    表達(dá)多個(gè)類(lèi)之間的關(guān)系有以下六種:

  • 泛化 ( Generalization ) —> 表述繼承關(guān)系 ( 三角箭頭的實(shí)線,箭頭指向父類(lèi) )
  • 實(shí)現(xiàn) ( Realization ) ( 三角箭頭的虛線,箭頭指向接口 )
  • 關(guān)聯(lián) ( Association ) ( 普通箭頭的實(shí)心線,指向被擁有者 )
  • 聚合 ( Aggregation ) ( 空心菱形的實(shí)心線,菱形指向整體 )
  • 組合 ( Compostion ) ( 實(shí)心菱形的實(shí)線,菱形指向整體)
  • 依賴(lài) ( Dependency ) ( 箭頭的虛線,指向被使用者 )
  • 三、繼承和實(shí)現(xiàn)的類(lèi)圖

    3.1、繼承

    【泛化關(guān)系】:是一種繼承關(guān)系,表示一般與特殊的關(guān)系,它指定了子類(lèi)如何特化父類(lèi)的所有特征和行為。例如:老虎是動(dòng)物的一種,即有老虎的特性也有動(dòng)物的共性

    1)代碼

    動(dòng)物類(lèi):

    public class Animal {private String name;private Integer age;public Animal() {}public Animal(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;} }

    貓類(lèi)繼承動(dòng)物類(lèi):

    public class Cat extends Animal {private String breeds;public Cat(String name, Integer age, String breeds) {super(name, age);this.breeds = breeds;}public String getBreeds() {return breeds;}public void setBreeds(String breeds) {this.breeds = breeds;}public void selfIntroduction(String name,Integer age,String breeds){System.out.println("我叫"+name+",是一只"+breeds+"品種的貓,今年"+age+"歲了,");} }

    我們用類(lèi)圖來(lái)表示這個(gè)關(guān)系。

    4)圖示

    箭頭要用對(duì),不然關(guān)系就完全不一樣拉。

    3.2、實(shí)現(xiàn)

    【實(shí)現(xiàn)關(guān)系】:是一種類(lèi)與接口的關(guān)系,表示類(lèi)是接口所有特征和行為的實(shí)現(xiàn).

    1) 代碼

    吃睡接口,我們?cè)僮寗?dòng)物類(lèi)來(lái)實(shí)現(xiàn)他兩。

    public interface Eat {void eat(); } public interface Sleep {void sleep(); } public class Animal implements Eat,Sleep{private String name;private Integer age;public Animal() {}public Animal(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic void eat() {System.out.println("吃東西");}@Overridepublic void sleep() {System.out.println("睡覺(jué)");} }

    2) 圖示

    四、關(guān)聯(lián)關(guān)系的類(lèi)圖

    【關(guān)聯(lián)關(guān)系】:是一種擁有的關(guān)系,它使一個(gè)類(lèi)知道另一個(gè)類(lèi)的屬性和方法;如:老師與學(xué)生,丈夫與妻子關(guān)聯(lián)可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒(méi)有箭頭,單向的關(guān)聯(lián)有一個(gè)箭頭。

    我們?cè)鎏硪粋€(gè)出身地的類(lèi),每個(gè)動(dòng)物都會(huì)有一個(gè)出生地的地方。

    我們將這個(gè)出生地和動(dòng)物關(guān)聯(lián)起來(lái)。

    4.1、代碼

    /*** @Author: crush* @Date: 2021-09-30 19:11* version 1.0* 出生地*/ public class Birthplace {private String birthplace;public Birthplace(String birthplace) {this.birthplace = birthplace;}public String getBirthplace() {return birthplace;}public void setBirthplace(String birthplace) {this.birthplace = birthplace;} }

    與動(dòng)物類(lèi)關(guān)聯(lián)起來(lái):

    public class Animal implements Eat,Sleep{private String name;private Integer age;private Birthplace birthplace;public Animal() {}public Animal(String name, Integer age, Birthplace birthplace) {this.name = name;this.age = age;this.birthplace = birthplace;}public Birthplace getBirthplace() {return birthplace;}public void setBirthplace(Birthplace birthplace) {this.birthplace = birthplace;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic void eat() {System.out.println("吃東西");}@Overridepublic void sleep() {System.out.println("睡覺(jué)");} }

    在自我介紹方法中增添輸出。

    public class Cat extends Animal {private String breeds;public Cat(String name, Integer age,Birthplace birthplace, String breeds) {super(name, age,birthplace);this.breeds = breeds;}public String getBreeds() {return breeds;}public void setBreeds(String breeds) {this.breeds = breeds;}public void selfIntroduction(String name,Integer age,String breeds,Birthplace birthplace){System.out.println("我叫"+name+",是一只"+breeds+"品種的貓,今年"+age+"歲了,出生于"+birthplace.getBirthplace());} }

    4.2、圖示

    五、聚合和組合關(guān)系的類(lèi)圖

    5.1、聚合

    聚合 ( Aggregation ) : 是整體與部分的關(guān)系,且部分可以離開(kāi)整體而單獨(dú)存在。如車(chē)和輪胎是整體和部分的關(guān)系,輪胎離開(kāi)車(chē)仍然可以存在。
    聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系;關(guān)聯(lián)和聚合在語(yǔ)法上無(wú)法區(qū)分,必須考察具體的邏輯關(guān)系。

    先說(shuō)說(shuō)我這個(gè)例子,我們?cè)賹?xiě)代碼。

    【例子】每臺(tái)車(chē)都會(huì)有四個(gè)輪胎和一個(gè)引擎,輪胎離開(kāi)車(chē)可以單獨(dú)存在的,引擎同樣也是。

    1)代碼

    public class Wheel {private String type;public Wheel(String type) {this.type = type;}public String getType() {return type;}public void setType(String type) {this.type = type;}public void move(){System.out.println("滾動(dòng)!!!");} } public class Engine {private String type;public Engine(String type) {this.type = type;}public String getType() {return type;}public void setType(String type) {this.type = type;}public void start(){System.out.println("啟動(dòng)引擎!!!");} } public class Car {private Wheel wheel;private Engine engine;public Car(Wheel wheel, Engine engine) {this.wheel = wheel;this.engine = engine;}public Wheel getWheel() {return wheel;}public void setWheel(Wheel wheel) {this.wheel = wheel;}public Engine getEngine() {return engine;}public void setEngine(Engine engine) {this.engine = engine;}public void go(){System.out.println("開(kāi)車(chē)出去浪;啊");} }

    用類(lèi)圖如何表示勒,接著往下看👇

    2)圖示

    5.2、組合

    組合 ( Composition ) : 是整體與部分的關(guān)系,但部分不能離開(kāi)整體而單獨(dú)存在。如公司和部門(mén)是整體和部分的關(guān)系,沒(méi)有公司就不存在部門(mén)。還有如人由頭和身體組成,沒(méi)有了人,頭和身體還咋存在勒。
    組合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系還要強(qiáng)的關(guān)系,它要求普通的聚合關(guān)系中代表整體的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期。

    1)代碼

    public class Body {private double size;public Body(double size) {this.size = size;}public double getSize() {return size;}public void setSize(double size) {this.size = size;} } public class Body {private double size;public Body(double size) {this.size = size;}public double getSize() {return size;}public void setSize(double size) {this.size = size;} } public class Person2 {private String name;private Head head;private Body body;public Person2(String name, Head head, Body body) {this.name = name;this.head = head;this.body = body;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Head getHead() {return head;}public void setHead(Head head) {this.head = head;}public Body getBody() {return body;}public void setBody(Body body) {this.body = body;}public void say(){System.out.println("我會(huì)說(shuō)話(huà)");} }

    2)圖示

    六、依賴(lài)關(guān)系的類(lèi)圖

    依賴(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)系使用帶箭頭的虛線來(lái)表示,箭頭從使用類(lèi)指向被依賴(lài)的類(lèi)。如人與手機(jī)的關(guān)系圖,人通過(guò)手機(jī)的語(yǔ)音傳送方法打電話(huà)。

    1、代碼

    public class Phone {public void callUp(){System.out.println("與人通話(huà)");} } public class Person3 {private String name;public Person3(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void callUp(Phone phone){System.out.println("使用手機(jī)打電話(huà)");phone.callUp();} // 下面這種方式也是依賴(lài)關(guān)系 // public void callUp(){ // Phone phone=new Phone(); // System.out.println("使用手機(jī)打電話(huà)"); // phone.callUp(); // } }

    2、圖示

    七、類(lèi)關(guān)系的強(qiáng)弱

    強(qiáng)弱關(guān)系:泛化 = 實(shí)現(xiàn) > 組合 > 聚合 > 關(guān)聯(lián) > 依賴(lài)

    另外我們常常說(shuō)的降低耦合性,也是降低類(lèi)與類(lèi)之間的關(guān)系。

    八、自言自語(yǔ)

    今天的文章就到這里了。

    你好,我是博主寧在春:主頁(yè)

    如若在文章中遇到疑惑,請(qǐng)留言或私信,或者加主頁(yè)聯(lián)系方式,都會(huì)盡快回復(fù)。

    如若發(fā)現(xiàn)文章中存在問(wèn)題,望你能夠指正,不勝感謝。

    如果覺(jué)得對(duì)你有所幫助的話(huà),請(qǐng)點(diǎn)個(gè)贊再走吧!

    總結(jié)

    以上是生活随笔為你收集整理的通过简单例子 | 快速理清 UML类图中六大关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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