簡述UML類圖

来源:http://www.cnblogs.com/wangjun253280916/archive/2016/04/17/5401508.html
-Advertisement-
Play Games

註:本文摘自劉偉老師的博客http://blog.csdn.net/lovelion/article/details/7838679,如有侵權,請聯繫本人! 1.類的UML圖示 在UML中,類使用包含類名、屬性和操作且帶有分隔線的長方形來表示,如定義一個Employee類,它包含屬性name、age ...


註:本文摘自劉偉老師的博客http://blog.csdn.net/lovelion/article/details/7838679,如有侵權,請聯繫本人!

1.類的UML圖示

  在UML中,類使用包含類名、屬性和操作且帶有分隔線的長方形來表示,如定義一個Employee類,它包含屬性nameageemail,以及操作modifyInfo(),在UML類圖中該類如圖1所示:

圖1 類的UML圖示

public class Employee {  
    private String name;  
    private int age;  
    private String email;  
      
    public void modifyInfo() {  
        ......  
    }  
}  

   在UML類圖中,類一般由三部分組成:

      (1) 第一部分是類名:每個類都必須有一個名字,類名是一個字元串。

      (2) 第二部分是類的屬性(Attributes):屬性是指類的性質,即類的成員變數。一個類可以有任意多個屬性,也可以沒有屬性。

      UML規定屬性的表示方式為:

 

可見性  名稱:類型 [ = 預設值 ]

 

      其中:

      “可見性”表示該屬性對於類外的元素而言是否可見,包括公有(public)、私有(private)和受保護(protected)三種,在類圖中分別用符號+-#表示。

‚      “名稱”表示屬性名,用一個字元串表示。

ƒ      “類型”表示屬性的數據類型,可以是基本數據類型,也可以是用戶自定義類型。

„      “預設值”是一個可選項,即屬性的初始值。

(3) 第三部分是類的操作(Operations):操作是類的任意一個實例對象都可以使用的行為,是類的成員方法。

      UML規定操作的表示方式為:

可見性  名稱(參數列表) [ : 返回類型]

      其中:

      “可見性”的定義與屬性的可見性定義相同。

      ‚“名稱”即方法名,用一個字元串表示。

      ƒ“參數列表”表示方法的參數,其語法與屬性的定義相似,參數個數是任意的,多個參數之間用逗號“,”隔開。

„      “返回類型”是一個可選項,表示方法的返回值類型,依賴於具體的編程語言,可以是基本數據類型,也可以是用戶自定義類型,還可以是空類型(void),如果是構造方法,則無返回類型。

      在類圖2中,操作method1的可見性為public(+),帶入了一個Object類型的參數par,返回值為空(void);操作method2的可見性為protected(#),無參數,返回值為String類型;操作method3的可見性為private(-),包含兩個參數,其中一個參數為int類型,另一個為int[]類型,返回值為int類型。

類圖操作說明示意圖

由於在Java語言中允許出現內部類,因此可能會出現包含四個部分的類圖,如圖3所示:

包含內部類的類圖

 

2.類與類之間的關聯關係

關聯(Association)關係是類與類之間最常用的一種關係,它是一種結構化關係,用於表示一類對象與另一類對象之間有聯繫,如汽車和輪胎、師傅和徒弟、班級和學生等等。在UML類圖中,用實線連接有關聯關係的對象所對應的類,在使用JavaC#C++等編程語言實現關聯關係時,通常將一個類的對象作為另一個類的成員變數。在使用類圖表示關聯關係時可以在關聯線上標註角色名,一般使用一個表示兩者之間關係的動詞或者名詞表示角色名(有時該名詞為實例對象名),關係的兩端代表兩種不同的角色,因此在一個關聯關係中可以包含兩個角色名,角色名不是必須的,可以根據需要增加,其目的是使類之間的關係更加明確。

      如在一個登錄界面類LoginForm中包含一個JButton類型的註冊按鈕loginButton,它們之間可以表示為關聯關係,代碼實現時可以在LoginForm中定義一個名為loginButton的屬性對象,其類型為JButton。如圖1所示:

關聯關係實例

 

      圖1對應的Java代碼片段如下:

public class LoginForm {  
  private JButton loginButton; //定義為成員變數  
  ……  
  }  
  
  public class JButton {  
      ……  
}  

 在UML中,關聯關係通常又包含如下幾種形式:

      (1) 雙向關聯

      預設情況下,關聯是雙向的。例如:顧客(Customer)購買商品(Product)並擁有商品,反之,賣出的商品總有某個顧客與之相關聯。因此,Customer類和Product類之間具有雙向關聯關係,如圖2所示:

2  雙向關聯實例

      圖2對應的Java代碼片段如下:

public class Customer {  
    private Product[] products;  
    ……  
}  
  
public class Product {  
    private Customer customer;  
    ……  
}  

      (2) 單向關聯

      類的關聯關係也可以是單向的,單向關聯用帶箭頭的實線表示。例如:顧客(Customer)擁有地址(Address),則Customer類與Address類具有單向關聯關係,如圖3所示:

單向關聯實例

      圖3對應的Java代碼片段如下:

public class Customer {  
    private Address address;  
    ……  
}  
  
public class Address {  
    ……  
}  

      (3) 自關聯

      在系統中可能會存在一些類的屬性對象類型為該類本身,這種特殊的關聯關係稱為自關聯。例如:一個節點類(Node)的成員又是節點Node類型的對象,如圖4所示:

自關聯實例

 

      圖4對應的Java代碼片段如下:

public class Node {  
    private Node subNode;  
    ……  
}  

  (4) 多重性關聯

      多重性關聯關係又稱為重數性(Multiplicity)關聯關係,表示兩個關聯對象在數量上的對應關係。UML中,對象之間的多重性可以直接在關聯直線上用一個數字或一個數字範圍表示。

      對象之間可以存在多種多重性關聯關係,常見的多重性表示方式如表1所示:

1  多重性表示方式列表

 

表示方式

多重性說明

1..1

表示另一個類的一個對象只與該類的一個對象有關係

0..*

表示另一個類的一個對象與該類的零個或多個對象有關係

1..*

表示另一個類的一個對象與該類的一個或多個對象有關係

0..1

表示另一個類的一個對象沒有或只與該類的一個對象有關係

m..n

表示另一個類的一個對象與該類最少m,最多n個對象有關係 (m≤n)

 

      例如:一個界面(Form)可以擁有零個或多個按鈕(Button),但是一個按鈕只能屬於一個界面,因此,一個Form類的對象可以與零個或多個Button類的對象相關聯,但一個Button類的對象只能與一個Form類的對象關聯,如圖5所示:

多重性關聯實例

      圖5對應的Java代碼片段如下:

public class Form {  
    private Button[] buttons; //定義一個集合對象  
    ……  
}  
  
public class Button {  
    ……  
}  

(5) 聚合關係

      聚合(Aggregation)關係表示整體與部分的關係。在聚合關係中,成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。UML中,聚合關係用帶空心菱形的直線表示。例如:汽車發動機(Engine)是汽車(Car)的組成部分,但是汽車發動機可以獨立存在,因此,汽車和發動機是聚合關係,如圖6所示:

6  聚合關係實例

      在代碼實現聚合關係時,成員對象通常作為構造方法、Setter方法或業務方法的參數註入到整體對象中,圖6對應的Java代碼片段如下:

public class Car {  
    private Engine engine;  
  
    //構造註入  
    public Car(Engine engine) {  
        this.engine = engine;  
    }  
      
    //設值註入  
public void setEngine(Engine engine) {  
    this.engine = engine;  
}  
……  
}  
  
public class Engine {  
    ……  
}  

(6) 組合關係

      組合(Composition)關係也表示類之間整體和部分的關係,但是在組合關係中整體對象可以控製成員對象的生命周期,一旦整體對象不存在,成員對象也將不存在,成員對象與整體對象之間具有同生共死的關係。在UML中,組合關係用帶實心菱形的直線表示。例如:人的頭(Head)與嘴巴(Mouth),嘴巴是頭的組成部分之一,而且如果頭沒了,嘴巴也就沒了,因此頭和嘴巴是組合關係,如圖7所示:

7  組合關係實例

      在代碼實現組合關係時,通常在整體類的構造方法中直接實例化成員類,圖7對應的Java代碼片段如下:

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

 

 

3.類與類之間依賴關係

   依賴(Dependency)關係是一種使用關係,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關係。大多數情況下,依賴關係體現在某個類的方法使用另一個類的對象作為參數。UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。例如:駕駛員開車,在Driver類的drive()方法中將Car類型的對象car作為一個參數傳遞,以便在drive()方法中能夠調用carmove()方法,且駕駛員的drive()方法依賴車的move()方法,因此類Driver依賴類Car,如圖1所示:

依賴關係實例

      在系統實施階段,依賴關係通常通過三種方式來實現,第一種也是最常用的一種方式是如圖1所示的將一個類的對象作為另一個類中方法的參數,第二種方式是在一個類的方法中將另一個類的對象作為其局部變數,第三種方式是在一個類的方法中調用另一個類的靜態方法。圖1對應的Java代碼片段如下:

public class Driver {  
    public void drive(Car car) {  
        car.move();  
    }  
    ……  
}  
  
public class Car {  
    public void move() {  
        ......  
    }  
    ……  
}  

 

 

4.類與類之間的泛化關係

 泛化(Generalization)關係也就是繼承關係,用於描述父類與子類之間的關係,父類又稱作基類或超類,子類又稱作派生類。UML中,泛化關係用帶空心三角形的直線來表示。在代碼實現時,我們使用面向對象的繼承機制來實現泛化關係,如在Java語言中使用extends關鍵字、在C++/C#中使用冒號“:”來實現。例如:Student類和Teacher類都是Person類的子類,Student類和Teacher類繼承了Person類的屬性和方法,Person類的屬性包含姓名(name)和年齡(age),每一個StudentTeacher也都具有這兩個屬性,另外Student類增加了屬性學號(studentNo)Teacher類增加了屬性教師編號(teacherNo)Person類的方法包括行走move()和說話say()Student類和Teacher類繼承了這兩個方法,而且Student類還新增方法study()Teacher類還新增方法teach()。如圖2所示:

2  泛化關係實例

      圖2對應的Java代碼片段如下:

//父類  
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() {  
        ……  
    }  
} 

 

5. 介面與實現關係

      在很多面向對象語言中都引入了介面的概念,如JavaC#等,在介面中,通常沒有屬性,而且所有的操作都是抽象的,只有操作的聲明,沒有操作的實現。UML中用與類的表示法類似的方式表示介面,如圖3所示:

3  介面的UML圖示

      介面之間也可以有與類之間關係類似的繼承關係和依賴關係,但是介面和類之間還存在一種實現(Realization)關係,在這種關係中,類實現了介面,類中的操作實現了介面中所聲明的操作。UML中,類與介面之間的實現關係用帶空心三角形的虛線來表示。例如:定義了一個交通工具介面Vehicle,包含一個抽象操作move(),在類Ship和類Car中都實現了該move()操作,不過具體的實現細節將會不一樣,如圖4所示:

4  實現關係實例

      實現關係在編程實現時,不同的面向對象語言也提供了不同的語法,如在Java語言中使用implements關鍵字,而在C++/C#中使用冒號“:”來實現。圖4對應的Java代碼片段如下:

public interface Vehicle {  
    public void move();  
}  
  
public class Ship implements Vehicle {  
    public void move() {  
        ……  
    }  
}  
  
public class Car implements Vehicle {  
    public void move() {  
        ……  
    }  
} 

 

1對應的Java代碼片段如下:

[java] view plain copy  
  1. public class Employee {  
  2.     private String name;  
  3.     private int age;  
  4.     private String email;  
  5.       
  6.     public void modifyInfo() {  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 思路: Python的實現 要點: ...
  • 一、選擇伺服器放在哪個區域 對於Google而言,不同的區域,搜索結果的就不同.一些英文關鍵詞, 你在中國用Google搜索,發現你網站的排名非產靠前,但是如果你在國外用Google, 你可能翻十頁都找不到你的網站. 我們做Google排名的排名效果不是讓我們自己看的, 而是讓我們的潛在客戶看的. ...
  • 外觀模式(Facade) 定義 外觀模式(Facade),為子系統中的一組介面提供一個一致的界面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 類圖 描述 Facade:外觀類,外觀類知道哪些子系統類負責處理請求,將用戶的請求代理給恰當的子系統對象。 Classes:子系統類,實現 ...
  • 數組概念 數組是存儲同一種數據類型多個元素的集合。也可以看成是一個容器。數組既可以存儲基本數據類型,也可以存儲引用數據類型。 數組的初始化 動態初始化:初始化時只指定數組長度,由系統為數組分配初始值。格式:數據類型[] 數組名 = new 數據類型[數組長度]; 數組長度其實就是數組中元素的個數。舉 ...
  • 一、什麼是nginx 是一個C語言開發的HTTP反向代理伺服器,性能非常高 一個俄羅斯的哥們開發的,官方提供的測試性能能夠達到5W的併發,我的天吶~,實際測試差不多是2W,而淘寶的牛人可以優化到200W 運行效率非常好,占用的資源也非常低,運行穩定 二、Nginx的應用場景 有哪些 1、http服務 ...
  • ![大話設計模式 抽象工廠模式 結構圖][1] 概述 抽象工廠模式(Abstract Factory)是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個介面,使客戶端在不必指定產品的具體的情況下,創建多個產品 ...
  • 一、首先先建立一個Web Project 二、然後在程式根目錄建立文件夾“DataBase”和“Doc”,分別存放資料庫文件和保存SQL語句,建完如下所示: 三、建立資料庫“dbHibernate”,保存到文件夾“DataBase”下 四、書寫SQL語句,創建“student”表 -- 資料庫名稱 ...
  • 消息通信組件Net分散式系統的核心中間件之一,應用與系統高併發,各個組件之間解耦的依賴的場景。本框架採用消息隊列中間件主要應用於兩方面:一是解決部分高併發的業務處理;二是通過消息隊列傳輸系統日誌。目前業界使用較多的消息隊列組件有RabbitMQ、ActiveMQ、MSMQ、kafka、zeroMQ等 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...