Fork me on GitHub UML类图笔记 - 冰路梦 | binglumeng
UML

UML类图笔记

Posted by 冰路梦 on 2016-12-30

UML類圖簡要語法

UML圖形中,使用最多的應該是UML類圖了,瞭解類圖的使用與結構。類:封裝了數據和行爲,具有相同屬性、操作、關係的對象的集合的總稱。

系統分析與設計階段,類分爲:實體類、控制類、邊界類。

  • 實體類:對應的是系統需求中的實體對象
  • 控制類:對應系統的執行邏輯和業務操作
  • 邊界類:對應系統的一些對外接口界面等

1、類圖

在UML中,類使用類名、屬性和操作放置與綫框内表示。Employee

employee

1
2
3
4
5
6
7
8
9
public class Employee{
private String name;
private int age;
private String email;
public void modifyInfo(){
...
}
}

説明:類圖中由三部分組成:

  • 類名:字符串形式的類名
  • 屬性:類的成員變量權限 名稱:類型 [ = 默認值]
  • 方法/函數:類的任意對象的行爲權限 名稱(參數列表) [ : 返回類型]

其中權限有三種:public、private、protected,對應的符號是+-#

demo

Java語言中有内部類,也就出現了第四部分

container

2、類圖之間關係

軟件系統中,類多不是孤立存在的,而存在多重關係

  • 關聯

    實綫鏈接表示關聯關係,Java中可以理解為,一個類中包含了另外一個類的對象,則兩者為關聯關係。

    contains

    1
    2
    3
    4
    5
    6
    7
    8
    public class LoginForm{
    private JButton loginButton;//定為成員變量
    ...
    }
    public class JButton{
    ...
    }
    • 雙向關聯

      默認情況下,關聯是雙向的,顧客與商品,學生與老師。

      shuangxiang

      1
      2
      3
      4
      5
      6
      7
      8
      public class Customer {
      private Product[] products;
      ...
      }
      public class Product {
      private Customer customer;
      ...
      }
    • 單向關聯

      單向關聯則用帶箭頭的實綫表示

    • 自關聯

      包含自身的關聯模式

      self

    • 多重關聯

      Multiplicity複雜的關聯關係,用數字對應方式表示

      | 表示方式 | 多重性説明 |
      | —- | ————————- |
      | 1..1 | 另一類的一個對象,衹與該類的一個對象 |
      | 0.. | 另一類的一個對象,與該類的0個或多個對象有關係 |
      | 1..
      | 另一類的一個對象,與該類的一個或多個對象有關係 |
      | 0..1 | 另一類的一個對象,沒有或衹與該類的一個對象有關係 |
      | m..n | 另一類的一個對象,與該類至少m,最多n個對象有關係 |

      示例,一個界面可有多個Button,一個Button衹能屬於一個或者不屬于任何界面。

      button

      1
      2
      3
      4
      5
      6
      7
      public class From{
      private Button[] buttons;//button的集合
      ...
      }
      public class Button{
      ...
      }
    • 聚合關係

      整體與部分的關係,成員可以不必以來整體存在,使用菱形箭頭實綫

      car

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      public class Car{
      private Engine engine;
      //構造函數
      public Car(Engine engine){
      this.engine = engine;
      }
      //set
      public void setEngine(Engine engine){
      this.engine = engine;
      }
      ...
      }
      public class Engine{
      ...
      }
    • 組合關係

      表示整體與部分,但是部分不能脫離整體存在,用實心菱形箭頭實綫表示

      human

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      public class Head{
      private Mouth mouth;
      public Head(){
      mouth = new mouth();//實例化成員類
      }
      ...
      }
      public class Mouth {
      ...
      }
  • 依賴關係

    使用虛綫表示依賴

    driver

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Driver {
    public void drive(Car car){
    car.move();
    }
    ...
    }
    public class Car{
    public void move(){
    ...
    }
    ...
    }
  • 汎化關係

    汎化關係也就是繼承關係,使用實綫空心三角箭頭表示

    person

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    //父类
    public class Person {
    protected String name;
    protected int age;
    public void move() {
    ……
    }
    public void say() {
    ……
    }
    }
    //子类
    public class Student extends Person {
    private String studentNo;
    public void study() {
    ……
    }
    }
    //子类
    public class Teacher extends Person {
    private String teacherNo;
    public void teach() {
    ……
    }
    }
  • 接口實現

    接口是沒有屬性的抽象方法的集合,實現使用虛綫空心三角箭頭表示,接口左上角有標志。

    interface

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public interface Vehicle {
    public void move();
    }
    public class Ship implements Vehicle {
    public void move() {
    ……
    }
    }
    public class Car implements Vehicle {
    public void move() {
    ……
    }
    }