天天看點

02-設計模式 UML類圖

UML 基本介紹

  1. UML(統一模組化語言),是一種用于軟體系統分析和設計的語言工具,它用于幫助軟體開發人員進行思考和記錄思路的結果
  2. UML本身是一套符号的規定, 就像數學符号和化學符号一樣,這些符号用于描述軟體模型中的各個元素和他們之間的關系,比如
  1. 接口
  2. 實作
  3. 泛化(繼承)
  4. 依賴
  5. 組合
  6. 聚合
02-設計模式 UML類圖
  1. 使用UML來模組化,常用的工具有Rational Rose, 也可以用一些插件來模組化

UML模組化插件(Eclipse版)

自行參考老師的模組化工具

02-設計模式 UML類圖
02-設計模式 UML類圖

UML模組化插件(IDEA版)

因為現在開發中大多數都是使用的IDEA,雖然視訊中使用的是Eclipse, 但是我還是使用IDEA來寫

在這個給大家推薦一個很好用的UML插件

安裝PlantUML

​​https://www.yuque.com/jieshou-r0wj4/gtydap/me3gmz​​

安裝直接參考連結安裝就可以,我單獨寫了一篇,就不在這裡再寫了

這個插件功能非常強大,不止可以用來畫類圖和根據類直接解析成圖還可以畫

02-設計模式 UML類圖

我們這裡隻說Class 類圖

符号,關系

參考官網 類圖符号

​​https://plantuml.com/zh/class-diagram​​

我這裡隻寫一下關系符号

文法 描述 樣式
(--)代表直線(..)代表虛線 關系描述 圖樣式
A --|> B 繼承
02-設計模式 UML類圖
A ..|> B 實作
02-設計模式 UML類圖
A ..> B 依賴
02-設計模式 UML類圖
A --> B 關聯
02-設計模式 UML類圖
A --o B 聚合
02-設計模式 UML類圖
A --* B 組合
02-設計模式 UML類圖

其他文法直接看上面的連結, 裡面有詳細寫 文法

UML 圖

畫圖其實和寫文章差不多,都是把自己的思想描述表達出來,關鍵是在于思路和條理

分類

用例圖 use case
靜态結構圖 類圖, 對象圖, 包圖, 元件圖, 部署圖
動态行為圖 互動圖(時序圖與協作圖), 狀态圖, 活動圖

說明:

  1. 類圖是描述類與類之間的關系, 是UML 圖中最核心的, 同樣也是設計模式中的核心

UML 類圖

基本介紹

  1. 用于描述系統中的類(對象)本身的組成和類(對象)之間的各種靜态關系
  2. 類之間的關系:依賴, 繼承, 實作, 關聯, 聚合 和 組合

示例

代碼形式

package com.dance.design.uml.demo;

public class Person {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}      

在這裡教一個小技巧, 我們寫完代碼後不需要手動去畫類圖,可以直接使用PlantUML Parser解析出來

在類上點選

02-設計模式 UML類圖
02-設計模式 UML類圖

起一個名字點選生成,就可以得到類圖了

02-設計模式 UML類圖

是不是非常Nice

依賴關系

隻要是在類中用到了對方, 那麼他們之間就存在依賴關系,如果沒有對方,編譯都通不過

代碼

package com.dance.design.uml.dep;

public class PersonServiceBean {
    private PersonDao personDao;

    public void savePerson(Person person){}

    public IDCard getIDCard(Integer personId){ return new IDCard(); }

    public void modify(){
        Department department = new Department();
    }
}
class PersonDao{}
class IDCard{}
class Person{}
class Department{}      

類圖

02-設計模式 UML類圖

這個生成出來隻有類圖,沒有依賴關系, 自己去寫關系,通過上面說的符号,關系

我這裡寫一遍後面就直接貼圖了

@startuml
class com.dance.design.uml.dep.PersonServiceBean {
- PersonDao personDao
+ void savePerson(Person)
+ IDCard getIDCard(Integer)
+ void modify()
}
class com.dance.design.uml.dep.PersonDao {
}
class com.dance.design.uml.dep.IDCard {
}
class com.dance.design.uml.dep.Person {
}
class com.dance.design.uml.dep.Department {
}
com.dance.design.uml.dep.PersonServiceBean ..> com.dance.design.uml.dep.PersonDao
com.dance.design.uml.dep.PersonServiceBean ..> com.dance.design.uml.dep.IDCard
com.dance.design.uml.dep.PersonServiceBean ..> com.dance.design.uml.dep.Person
com.dance.design.uml.dep.PersonServiceBean ..> com.dance.design.uml.dep.Department
@enduml      
02-設計模式 UML類圖

OK了

小結

  1. 類中用到了對方
  2. 如果是類的成員屬性
  3. 如果是方法的傳回類型
  4. 如果是方法接收的參數類型
  5. 方法中有使用到

泛化(繼承)關系

泛化其實就是繼承, 是依賴關系的一種特殊情況

代碼

package com.dance.design.uml.ext;

public abstract class AbstractPerson {
    public void save(){}

    public void delete(){}
}
class Person extends AbstractPerson{
    
}      

類圖

剛才在點選IDEA的時候發現IDEA其實預設是帶了Diagrams這個類圖插件的,這個也挺好用的直接就能顯示,但是好像不能修改,但是可以控制方法,構造,接口這些是不是展示,感覺也挺好的, 有喜歡的可以去試試, 這裡我們還是用PlantUML吧

02-設計模式 UML類圖
02-設計模式 UML類圖

哦~原來繼承關系是可以自動解析出來的, 但是依賴就不行了

然後又回去看了看 Diagrams 發現居然可以展示依賴關系,上面有個小按鈕, 還有組合關系居然也顯示出來了, 而且也能編輯修改,突然感覺PlantUML不香了

02-設計模式 UML類圖

而且還可以控制是否展示方法,啥的

02-設計模式 UML類圖

emm, 我們還是以PlantUML來寫吧, 工作中自然是哪個好用 用哪個(然後我在後面其實都貼了Diagrams的圖)

小結

  1. 泛化就是繼承
  2. 我感覺這個名詞絕對是個坑, 繼承就繼承白, 還泛化, 面試的時候肯定會有點蒙

實作關系

就是A類實作了B接口, 其實也是依賴的一種特殊情況

代碼

package com.dance.design.uml.impl;

public interface PersonService {
    void save();
}
class PersonServiceImpl implements PersonService{
    @Override
    public void save() {
        System.out.println("實作");
    }
}      

類圖

02-設計模式 UML類圖

沒錯, 我粘貼了Diagrams的圖

但是突然發現兩個一起使用會更好,如果是單個類檔案的話,Diagrams會更好, 但是如果是包的話PlantUML會更好

02-設計模式 UML類圖
02-設計模式 UML類圖

有對比才有傷害

感覺PlantUML有點不好,就是在解析的時候不解析依賴關系, 其他的都很好,哎後面還是用PlantUML吧(渣男本難)

小結

實作關系其實 沒什麼好說的,這個是在開發中最常用的 接口+impl

關聯關系

關聯關系其實就是類與類之間的關聯

常見的關聯關系其實就是表設計時候的關系

關系 描述
1 對 1 一個人 一張身份證
1 對 多 一個公司下好多部門
多 對 多 一個部門下好多人, 一個人又存在于多個部門

關聯具有導航性, 就是方向 1 -> 1 是單向的 如果是 1 <-> 1就是雙向的

關系具有多重性

  • 1 表示有且僅有1個
  • 0... 表示0個或多個
  • 0,1 表示0個或者1個
  • n...m 表示n個到m個都可以
  • m...* 表示至少m個

一對一

代碼

package com.dance.design.uml.gl.onevone;

public class Person {
    /**
     * 身份證
     */
    private IDCard idCard;
}
class IDCard{}      

類圖

02-設計模式 UML類圖

一對多

代碼

package com.dance.design.uml.gl.onevduo;

import java.util.List;

public class Gx {
    /**
     * 多部門
     */
    private List<Department> departments;
}
class Department{}      

類圖

02-設計模式 UML類圖

多對多

代碼

package com.dance.design.uml.gl.duovduo;

import java.util.List;

public class Person {
    private List<Department> departments;
}
class Department{
    private List<Person> personList;    
}      

當然開發中不會這麼寫,一般都會用中間表,這裡隻是寫樣例

類圖

02-設計模式 UML類圖

聚合關系

基本介紹

聚合關系表示的是整體和部分的關系, 整體和部分可以分開, 聚合關系是關聯關系的特例, 是以他具有關聯的導航性和多重性

一台電腦由鍵盤, 顯示器, 滑鼠等部件組成; 組成電腦的各個配件是可以從電腦上分離出來的, 使用實線-空心菱形表示

代碼

package com.dance.design.uml.gl.jh;

public class Computer {
    public Mouse mouse;
    public Keyword keyword;
    public View view;
}
class Mouse{}
class Keyword{}
class View{}      

類圖

02-設計模式 UML類圖

組合關系

基本介紹

組合關系: 也是整體與部分的關系, 但是整體和部分不可以分開

在我們看來, 桌上型電腦, 滑鼠和鍵盤和顯示器, 都是可以從主機上分離的, 是以他們是聚合關系, 但是如果是筆記本的話,顯然自帶鍵盤, 顯示器都是不可分離的, 隻有滑鼠可以分離(觸控闆不可以), 這時顯示器和電腦是組合關系,鍵盤和電腦是組合關系, 滑鼠和電腦是聚合關系

代碼

package com.dance.design.uml.gl.jh;

public class Computer {
    public Mouse mouse;
    private Keyword keyword = new Keyword();
    private View view = new View();
}
class Mouse{}
class Keyword{}
class View{}      

類圖