UML基本介紹
- UML–Unified modeling language UML(統一建模語言),是一種用於軟件系統分析和設計的語言工具,它用於幫助軟件開發人員進行思考和記錄思路的結果
- UML本身是一套符號的規定,就像數學符號和化學符號一樣,這些符號用於描述軟件模型中的各個元素和他們之間的關係,比如類、接口、實現、泛化、依賴、組合、聚合等
- 使用UML來建模。常用的工具有Rational Rose,也可以使用一些插件來建模如eclipse中的AmaterasUML,idea中的PlantUML等
UML圖
畫UML圖和寫文章差不多,都是把自己的思想描述給別人看,關鍵在於思路和條理,UML圖分類:
- 用例圖(use case)
- 靜態結構圖:類圖、對象圖、包圖、組件圖、部署圖
- 動態行爲圖:交互圖(時序圖與協作圖)、狀態圖、活動圖
說明:類圖是描述類與類之間的關係的,是UML圖中最核心的
UML類圖
- 用於描述系統中類(對象)本身的組成和類(對象)之間的各種靜態關係
- 類之間的關係:依賴、泛化(繼承)、實現、關聯、聚合與組合
- 類圖簡單舉例:
public class Person{
private Integer id;
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
對應類圖如下:
@startuml
class Person {
private Integer id;
private String name;
public void setName(String name)
public String getName()
}
@enduml
類圖-依賴關係(Dependence)
只要是在類中用到了對方,那麼他們之間就存在依賴關係。如果沒有對方,連編譯都通過不了。
示例:
public class PersonServiceBean {
private PersonDao personDao;
public void save(Person person){}
public IDCard getIDCard(Integer personid){
return null;
}
public void modify(){
Department department=new Department();
}
}
public class PersonDao {
}
public class Person {
}
public class IDCard {
}
public class Department {
}
類圖:
@startuml
class PersonServiceBean {
private PersonDao personDao;
public void save(Person person)
public IDCard getIDCard(Integer personid)
public void modify()
}
class PersonDao{}
class Person{}
class IDCard{}
class Department{}
PersonDao <.. PersonServiceBean:依賴關係
Person <.. PersonServiceBean:依賴關係
IDCard <.. PersonServiceBean:依賴關係
Department <.. PersonServiceBean:依賴關係
@enduml
小結:以下情形都可以使用依賴關係
- 類中用到了對方
- 類的成員屬性
- 方法的返回類型
- 方法接收的參數類型
- 方法中使用到
類圖-泛化關係(generalization)
泛化關係實際上就是繼承關係,他是依賴關係的特例
示例:
public abstract class DaoSupport {
public void save(Object entity){
}
public void delete(Object id){
}
}
public class PersonServiceBean extends DaoSupport{
}
類圖:
@startuml
abstract class DaoSupport {
public void save(Object entity)
public void delete(Object id)
}
class PersonServiceBean
DaoSupport <|-- PersonServiceBean:泛化關係
@enduml
小結:
- 泛化關係實際上就是繼承關係
- 如果A類繼承了B類,我們就說A和B存在泛化關係
類圖-實現關係(Implementation)
實現關係實際上就是A類實現B類,他是依賴關係的特例
public interface PersonService {
public void delete(Integer id);
}
public class PersonServiceBean implements PersonService{
@Override
public void delete(Integer id) {
}
}
類圖:
@startuml
interface PersonService {
public void delete(Integer id);
}
class PersonServiceBean{
public void delete(Integer id);
}
PersonService <|.. PersonServiceBean:實現關係
@enduml
類圖-關聯關係(Association)
關聯關係實際上就是類與類之間的聯繫,他是依賴關係的特例
關聯具有導航性:即雙向關係或單向關係
關係具有多重性:如“1”(表示有且僅有一個),“0…”(表示0個或者多個),“0,1”(表示0個或者一個),“n…m”(表示n到m個都可以),“m…”(表示至少m個)
單向一對一關係:
public class Person{
private IDCard card;
}
public class IDCard{}
類圖:
@startuml
class Person {
private IDCard card;
}
class IDCard
Person"1"-->"1"IDCard:單向一對一
@enduml
雙向一對一關係:
public class Person{
private IDCard card;
}
public class IDCard{
private Person person;
}
類圖:
@startuml
class Person {
private IDCard card;
}
class IDCard{
private Person person;
}
Person"1"<-->"1"IDCard:雙向一對一
@enduml
類圖-聚合關係(Aggregation)
聚合關係(Aggregation)表示的整體和部分的關係,整體與部分可以分開,聚合關係是關聯關係的特例,所有他具有關聯的導航性與多重性。
如:一臺電腦由鍵盤(keyboard)、顯示器(monitor),鼠標等組成;組成電腦的各個配件是可以從電腦上分離出來的,使用帶空心菱形的實線來表示:
public class Computer {
private Monitor monitor;
private Mouse mouse;
private Keyboard keyboard;
public void setMonitor(Monitor monitor) {
this.monitor = monitor;
}
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setKeyboard(Keyboard keyboard) {
this.keyboard = keyboard;
}
}
public class Keyboard {
}
public class Monitor {
}
public class Mouse {
}
類圖:
@startuml
class Computer {
private Monitor monitor;
private Mouse mouse;
private Keyboard keyboard;
public void setMonitor(Monitor monitor)
public void setMouse(Mouse mouse)
public void setKeyboard(Keyboard keyboard)
}
class Monitor
class Mouse
class Keyboard
Computer o-- Monitor:聚合關係
Computer o-- Mouse:聚合關係
Computer o-- Keyboard:聚合關係
@enduml
類圖-組合關係(Composition)
組合關係:也是整體和部分的關係,但是整體與部分不可以分開。
示例:Person與IDCard、head,那麼head和Person就是組合,IDCard和Person就是聚合。
但是如果在程序中Person實體定義了對IDCard進行級聯刪除,即刪除Person時連同IDCard一起刪除,那麼IDCard和Person就是組合了。
public class Person {
private IDCard card;
private Head head=new Head();
}
public class IDCard {
}
public class Head {
}
類圖:
@startuml
class Person {
private IDCard card;
private Head head=new Head();
}
class Head {
}
class IDCard {
}
Person o-- IDCard:聚合關係
Person *-- Head:組合關係
@enduml