類與類圖
1) 類(Class)封裝了數據和行爲,是面向對象的重要組成部分,它是具備相同屬性、操做、關係的對象集合的總稱。
2) 在系統中,每一個類具備必定的職責,職責指的是類所擔任的任務,即類要完成什麼樣的功能,要承擔什麼樣的義務。一個類能夠有多種職責,設計得好的類通常只有一種職責,在定義類的時候,將類的職責分解成爲類的屬性和操做(即方法)。
3) 類的屬性即類的數據職責,類的操做即類的行爲職責
依賴關係(Dependence):假設A類的變化引發了B類的變化,則說名B類依賴於A類。 編程語言
• 依賴關係(Dependency) 是一種使用關係,特定事物的改變有可能會影響到使用該事物的其餘事物,在須要表示一個事物使用另外一個事物時使用依賴關係。
大多數狀況下,依 賴關係體如今某個類的方法使用另外一個類的對象做爲參數。
• 在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。
- public class Driver
- {
- public void drive(Car car)
- {
- car.move();
- }
- ……
- }
- public class Car
- {
- public void move()
- {
- ......
- }
- ……
- }
依賴關係有以下三種狀況: this
1、A類是B類中的(某中方法的)局部變量; spa
2、A類是B類方法當中的一個參數; 設計
3、A類向B類發送消息,從而影響B類發生變化; orm
2、泛化關係(Generalization) 對象
泛化關係(Generalization):A是B和C的父類,B,C具備公共類(父類)A,說明A是B,C的通常化(歸納,也稱泛化) 繼承
• 泛化關係(Generalization)也就是繼承關係,也稱爲「is-a-kind-of」關係,泛化關係用於描述父類與子類之間的關係,父類又稱做基類或超類,子類又稱做派生類。
在UML中,泛 化關係用帶空心三角形的直線來表示。
•
在代碼實現時,使用面向對象的繼承機制來實現泛化關係,如在
Java
語言中使用
extends
關鍵字、在
C++/C#
中使用冒號「:」來實現。
- 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()
- {
- ……
- }
- }
在UML當中,對泛化關係有三個要求: 接口
1、子類與父類應該徹底一致,父類所具備的屬性、操做,子類應該都有; 生命週期
2、子類中除了與父類一致的信息之外,還包括額外的信息;
3、可使用父類的實例的地方,也可使用子類的實例;
關聯關係(Association):類之間的聯繫,如客戶和訂單,每一個訂單對應特定的客戶,每一個客戶對應一些特定的訂單,再如籃球隊員與球隊之間的關聯(下圖所示)。
![](http://static.javashuo.com/static/loading.gif)
其中,關聯兩邊的"employee"和「employer」標示了二者之間的關係,而數字表示二者的關係的限制,是關聯二者之間的多重性。一般有「*」(表示全部,不限),「1」(表示有且僅有一個),「0...」(表示0個或者多個),「0,1」(表示0個或者一個),「n...m」(表示n到m個均可以),「m...*」(表示至少m個)。
• 關聯關係(Association) 是類與類之間最經常使用的一種關係,它是一種結構化關係,
用於表示一類對象與另外一類對象之間有聯繫。
•
在
UML
類圖中,
用實線鏈接有關聯的對象所對應的類
,在使用
Java
、
C#
和
C++
等編程語言實現關聯關係時,
一般將一個類的對象做爲另外一個類的屬性
。
•
在使用類圖表示關聯關係時能夠
在關聯線上標註角色名
。
1) 雙向關聯: 默認狀況下,關聯是雙向的。
- public class Customer
- {
- private Product[] products;
- ……
- }
- public class Product
- {
- private Customer customer;
- ……
- }
2 )
單向關聯:
類的關聯關係也能夠是
單向的
,單向關聯用
帶箭頭的實線
表示.
- public class Customer
- {
- private Address address;
- ……
- }
-
- public class Address
- {
- ……
- }
3) 自關聯: 在系統中可能會存在
一些類的屬性對象類型爲該類自己,這種特殊的關聯關係稱爲自關聯。
- public class Node
- {
- private Node subNode;
- ……
- }
4)
重數性關聯: 重數性關聯關係又稱爲
多重性關聯關係
(Multiplicity),表示一個類的對象與另外一個類的對象鏈接的個數。在UML中多重性關係能夠直接在關聯直線上增長一個數字表示與之對應的另外一個類的對象的個數。
表示方式 |
多重性說明 |
1..1 |
表示另外一個類的一個對象只與一個該類對象有關係 |
0..* |
表示另外一個類的一個對象與零個或多個該類對象有關係 |
1..* |
表示另外一個類的一個對象與一個或多個該類對象有關係 |
0..1 |
表示另外一個類的一個對象沒有或只與一個該類對象有關係 |
m..n |
表示另外一個類的一個對象與最少m、最多n個該類對象有關係 (m<=n) |
- public class Form
- {
- private Button buttons[];
- ……
- }
- public class Button
- {
- …
- }
聚合關係(Aggregation):表示的是總體和部分的關係,總體與部分 能夠分開.
• 聚合關係(Aggregation) 表示一個
總體與部分的關係。一般在定義一個總體類後,再去分析這個總體類的組成結構,從而找出一些成員類,該總體類和成員類之間就造成了聚合 關係。
•
在聚合關係中,
成員類是總體類的一部分
,即成員對象是總體對象的一部分,可是成員對象能夠脫離總體對象獨立存在。
在
UML
中,聚合關係用帶空心菱形的直線表示。
- public class Car
- {
- private Engine engine;
- public Car(Engine engine)
- {
- this.engine = engine;
- }
-
- public void setEngine(Engine engine)
- {
- this.engine = engine;
- }
- ……
- }
- public class Engine
- {
- ……
- }
如:電話機包括一個話筒
電腦包括鍵盤、顯示器,一臺電腦能夠和多個鍵盤、多個顯示器搭配,肯定鍵盤和顯示器是能夠和主機分開的,主機能夠選擇其餘的鍵盤、顯示器組成電腦;
組合關係(Composition):也是總體與部分的關係,可是總體與部分不能夠分開.
•
組合關係
(Composition)也表示類之間總體和部分的關係,可是組合關係中
部分和總體具備統一的生存期。一旦總體對象不存在,部分對象也將不存在,部分對象與總體對象之 間具備
同生共死的關係。
• 在組合關係中,成員類是總體類的一部分,並且總體類能夠控制成員類的生命週期,即成員類的存在依賴於總體類。
在
UML
中,組合關係用帶實心菱形的直線表示。
- public class Head
- {
- private Mouth mouth;
- public Head()
- {
- mouth = new Mouth();
- }
- ……
- }
-
- public class Mouth
- {
- ……
- }
如:公司和部門,部門是部分,公司是總體,公司A的財務部不可能和公司B的財務部對換,就是說,公司A不能和本身的財務部分開; 人與人的心臟.
![](http://static.javashuo.com/static/loading.gif)
實現關係(Implementation):是用來規定接口和實線接口的類或者構建結構的關係,接口是操做的集合,而這些操做就用於規定類或者構建的一種服務。
• 接口之間也能夠有與類之間關係相似的繼承關係和依賴關係,可是接口和類之間還存在一種實現關係(Realization),在這種關係中,類實現了接口,類中的操做實現了接口中所 聲明的操做。
在
UML
中,類與接口之間的實現關係用帶空心三角形的虛線來表示。
- public interface Vehicle
- {
- public void move();
- }
- public class Ship implements Vehicle
- {
- public void move()
- {
- ……
- }
- }
- public class Car implements Vehicle
- {
- public void move()
- {
- ……
- }
- }