Brian的雜記
  • Introduction
  • Brian's 雜記
    • My Awesome API
    • FB 大頭貼
    • 硬體雜記
    • PHP
    • project
      • 模擬器
      • WAMP
    • WinMerge
    • 雜記
      • LINQ
      • 方法
      • Grid View
      • namespace
      • global
      • 物件導向
      • Excel
      • VS2017
      • single sign on
      • Master
      • Https
      • 憑證
      • 略過憑證不符
      • NLog
      • 團隊開發
      • .NET Core
      • 共用網路上的芳鄰
      • 爬蟲
      • NPOI
      • RSS
      • 多執行緒
      • 記憶體回收
      • 密碼學
        • BCrypt
        • AES
      • 主機環境建置
      • Session
      • Error
      • IIS 相關
      • 無障礙相關
      • 介面
        • 影像地圖
      • telnet
        • smtp
      • nslookup
      • 協助客戶解決問題
      • 驗證欄位
      • 網站管理
      • 工具整理
    • 正規表示法
    • 影像處理
    • IntelliJ Idea
    • 觀念
      • Clean Code
        • 命名
        • 函式
        • 註解
        • 編排
        • 物件及資料結構
        • 錯誤處理
        • 邊界
        • 單元測試
        • 類別
      • Java 程式風格
      • Design Pattern
        • 單例模式
      • 同步
      • 畫圖
        • ER-Model
        • 類別圖
        • Use Case
        • 有限狀態機
      • 資料 API 文件 分析
      • CORS & SSL
      • 利用DISC幫助溝通
      • OAS
    • 檔案上傳
      • FileStore
      • App Engine
      • Google Storage
    • OAuth vs Open ID
    • MIME
    • 虛擬桌面
    • 待看資料
    • Selenium
    • CDN
    • HTTP
    • 編碼
    • 2nd-ML100Days
      • jupyter
    • 微服務
      • 設計
        • 1 ~ 5
        • 6
        • 7
        • 8
        • 9
    • Gradle
    • Maven
    • Error
    • 批次檔 BAT
    • Kurento
    • WebSocket & WebRTC
  • 需求面能力
    • User Story
  • Google Cloud Platform
    • Compute Engine
  • Python
    • 基本語法
    • Pandas
    • 套件
    • Matplotlib
    • Encoder
    • jupyter
  • Java
    • Java
      • File
      • Exception
      • 物件導向觀念
      • 加密
      • HTTP
      • 集合
      • Stream()
      • Web
      • ResultSet
      • JDK6
      • JDK8
    • 讀取、複寫MP3 Tag
    • Log4j2
    • Servlet
      • 容器
    • JSP
    • JBOSS
    • JWT
    • PreparedStatement
    • Error
    • Spring
      • Spring Boot
        • @Value
        • Build
      • RequestParameter
      • Error
      • Autowired
      • JPA
      • FeignClient
      • WebSocket
      • thymeleaf
      • Security
      • Test
      • Scheduled
      • Redirect
    • IntelliJ
  • Linux
    • Linux
    • Shell Script
    • Cygwin(在Windows執行Linux指令)
  • 前端
    • HTML
      • Link
    • CSS
      • Position
      • padding color
      • display
    • JS
      • jQuery
        • Select2
      • fancybox
      • ES6
      • 效能
      • GoogleMap API
        • Marker
        • InfoWindow
      • 事件
      • CKEditor
      • TGOS
      • JSON
      • QRcode
      • 核心概念
        • 物件 變數 型別
          • number
          • String
          • boolean
          • null & undefined
          • Symbol
        • JS 物件概念
        • 深入理解JS 函式物件
        • 更多ES2015/ES6 全新語言特性
      • Promise
    • 效果應用
  • 資料庫
    • 注意事項
    • MariaDB
    • MySQL
      • inner join 和 join
      • 字串比對
      • 倒數資料
    • SQL
      • DDL 資料定義語言
      • DML 資料操縱語言
      • DCL 資料控制語言
      • TCL 交易控制語言
      • T-SQL
      • CTE
      • JOIN
    • Oracle
    • MSSQL 操作
      • 新增使用者
      • SQL 指令
      • Sequence
    • 差異比較
    • MyBatis
    • Workbench 操作
    • SQL Injection
  • 版本控制
    • Gitlab
      • sign up
      • sign in
      • add project
      • add members
    • SourceGit
      • install
    • SmartGit
      • install
      • operate
      • git 操作雜記
    • TortoiseGit
    • Git
    • TFS
    • SVN
  • Test
    • 軟體測試原則
    • 演算法
    • XMind
      • install
    • Jenkins
      • 建置
    • HTTPie
    • Postman
    • 測試驅動開發
    • 撰寫測試的觀念
    • 測試框架
    • IoC & DI
    • 隔絕相依性的方式
    • JUnit
    • NUnit
    • 習慣
    • 虛設常式
  • Angular
    • hello world
    • ng-options
    • ES6
    • Build & Conponect
    • HttpClient
    • 部署
  • ASP.NET Web Form
    • Chapter 2
      • 2-1
        • 小東西
    • 略過請求驗證
  • Go
Powered by GitBook
On this page
  • 類別名稱區隔
  • 屬性區隔
  • 可見性、存取範圍
  • 屬性名稱
  • 數量和順序性
  • 型態
  • 初始值
  • 底線 => static
  • 全大寫 + "_" => final
  • 想表達特別的屬性 << Stereotypes >>
  • 方法區隔
  • 存取範圍
  • 方法名稱
  • 參數
  • 回傳型態
  • 有加上底線,但方法名稱同類別名稱 => 建構式
  • 斜體字 => abstract
  • 關係
  • 類別層級的關係
  • 概括
  • 實現
  • 一般關係
  • 依賴
  • 多重

Was this helpful?

  1. Brian's 雜記
  2. 觀念
  3. 畫圖

類別圖

PreviousER-ModelNextUse Case

Last updated 5 years ago

Was this helpful?

參考資料:()

參考資料:()

類別名稱區隔

圖型都是長方形(有些比較特別的,介面會用圓形代替)

類別 直接呈現

抽象類別 右下角 {abstract}

介面 上方 << interface >>

UML制定了許多 Stereotypes "<< >>",EX: << interface >>

屬性區隔

< 存取範圍 > < 屬性名稱 > [ [ < 數量 > ] [ < 順序性 > ] ] : < 型態 > [ = < 初始值 > ]

可見性、存取範圍

+    public
-    private
#    protect
~    package
/    推導(可由其他屬性推導得出)
_    靜態

屬性名稱

使用Java程式語言中合法的識別字

數量和順序性

數字 : 確定的數量

  • : 0到多個

    0..* : 0到多個

    0..1 : 0到1個

    1..* : 1到多個

    n..m : 最少n個,最多m個

當屬性的數量是一個以上的時候,你可以使用順序性的宣告來表示這個屬性的值是否需要排序

Unordered : 不需要排序 Ordered : 需要排序

型態

屬性的資料型態,使用八種基本資料型態或類別名稱

初始值

可選擇性地宣告,為屬性宣告一個合法的初始值。

底線 => static

全大寫 + "_" => final

UML中並沒有關於 final 的表示方法,你可以依照 java 的命名慣例來判斷是否要加上 final 的宣告。

字母全大寫,字和字之間用 "_" 連接。

想表達特別的屬性 << Stereotypes >>

<< primary key >> -customerID : String

方法區隔

< 存取範圍 > < 方法名稱 > ( [ < 參數 > ] ) : < 回傳型態 >

存取範圍

同屬性存取範圍

方法名稱

同屬性名稱

參數

可選擇性地宣告,是一個使用逗號分隔的清單,使用下列的語法來宣告方法的參數 :

[ 種類 ] < 參數名稱 > : < 參數型態 >

種類 : 可選擇的宣告,在 java 實作上通常會省略,但如果特別加上 in 的宣告,則要宣告為 final 。

參數名稱 : 同屬性名稱

參數型態 : 同屬性型態

回傳型態

同屬性型態

有加上底線,但方法名稱同類別名稱 => 建構式

斜體字 => abstract

關係

外部連結

物件之間的基本關係。

泛化 (繼承 extends)

空心三角形 + 實線

Generalization

繼承的反方向,指父類別 具有 子類別 的共有功能。

子類別可視為父類別的特例,並可以增加新功能。

實現 (實作 implements)

空心三角形 + 虛線

指一個class 實現 interface 的功能。

依賴

燕尾箭頭 + 虛線

簡單理解為 A 使用了 B " ... uses a ..."

被依賴的物件只是被當作工具使用,並不持有對它的參照。

而這種使用關係是非常弱的,其具有偶然性、臨時性,但是B的變化會影響到A。

在程式碼方面,B會作為參數 放在 A 的某個 method。

關聯 (結合)

燕尾箭頭 + 實線

Association

在語意上指兩個 class、class & port 之間有一種強依賴關係。 "... has a ..."

關聯關係是指一個 class 之類知道另外一個類別的屬性、方法。 通常含有「知道」、「了解」的含意。

在程式碼層面,被關聯類別 以類別屬性的形式 出現在關聯類別中,也可能是關聯類別參照了一個 類別型為 被關聯類別 的全域變數。

範例: 上方 : 結合數量、結合關係 下方 : 結合角色

       1        own       1
ClassA  --------------------> ClassB
       GUI      Mathematical

數量: 同屬性數量

Java 在結合數量上的實作,可以使用下列幾種方法 : 0個 代表可以為 null 確定的數量可以使用陣列 or Collection 不確定的數量可以使用 Collection

<< local >>

public class ClassA {
       public void methodA() {
              ClassB b = new ClassB(); 
       }
}

生命週期只在區塊哩,彼此之間沒有直接關係。

<< parameter >>

public class ClassA {
       public void methodA(ClassB b) {
              ...
       }
}

透過參數來取得 ClassB,建立物件的責任在於呼叫 method 的類別。 這種情況有另外一種表示方式 將關聯的實線改成虛線,這樣就不用標記 << parameter >> 了。

<< create >>

public class ClassA {
       public ClassB getClassB() {
              return new ClassB(); 
       }
}

由 ClassA 來負責建立 ClassB,這種方法稱為 << Factory method >> 這是一種常見的 設計模式(Design Pattern)

<< delegate >>

public class ClassA {
       private ClassB b;
       public void methodA() {
              q.methodA();
       }
}

Delegate 是代理的意思,ClassA 扮演代理者,由ClassA 負責將方法的呼叫,轉為 ClassB 的method 呼叫。

聚合

空心菱形 + 實線

Aggregate

聚合 是表示 整體 與 部分 的特殊關聯關係。 是「弱」的包含(... own a ...) 成分類別不依靠聚合類別也可以單獨存在,聚合和成分各自具有生命週期。 部分 可以屬於多個整體物件,也可以為多個整體物件共用(sharable)。

EX:池塘&鴨子

聚合在 java 實作時,跟結合差不多,但要注意 "被擁有者" 一定會被建立

組成(組合)

實心菱形 + 實線

Composition 組成 是「強」的 整體與部分 的包含關係(... is a part of ...) 成分類別必須依靠合成類別而存在 整體和部分是不可分的,整體 的生命週期 就等同於 部分 的生命週期。

EX:汽車&化油器

是一種特殊情況的聚合關係,它跟聚合的差別在於方向的角度。 你可以 "把聚合視為 單向、把組合視為 雙向" 的結合關係。

因為組合的特性,另外有兩個狀況要注意

一個成員物件不能同時被兩個擁有者擁有

擁有者要負責成員的生命週期

在 java 技術中,物件的解構 deconstruct 是透過 GC Garbage collection 來完成。 但在一些特殊情況下,你可能需要覆寫 Object 類別中的 finalize 方法。

巢狀類別 Nested class

巢狀類別中有一個比較特別的情形是 匿名類別 Anonymous class,UML 並沒有特別制定的表示方法。

結合類別 - 表示集合容器型態

在討論聚合時使用的範例圖型,它所顯示的資訊還不夠詳細。

如果想要在圖型中顯示容器的種類,可以在兩個物件關聯的實線上,接出一條虛線,放容器的型態 (可參考詳細資料)

限定結合

最常見的情況是在使用 Map 的時候。

類別層級的關係

概括

空心箭頭 + 實線

實現

空心箭頭 + 虛線

一般關係

依賴

多重

https://zh.wikipedia.org/wiki/%E9%A1%9E%E5%88%A5%E5%9C%96
http://www.codedata.com.tw/java/umltutorial-02/