Advertisement

UML类图和关系--idea使用PlantUML插件画类图

阅读量:

UML类图和关系

[

注释:资料基于尚硅谷设计模式课程中的UML应用进行了归纳与汇总。目前采用Eclipse的插件进行图形化绘制操作。同时,在本项目中将采用Java Workbench(JWb)结合PlantUML技术自动生成类图模型。

UML被称为Unified Modeling Language(简称UML)(统一建模语言),它是软件系统分析与设计的一种手段。
它帮助软件开发人员进行思考与记录其想法的过程及其产物。
作为一套规范性符号体系。
类似于数学中的符号体系与化学中的元素符号体系。
例如类接口实现泛化依附组合聚合等。

类图 - 依赖关系(Dependence)

只要是在类中用到了对方 ,那么他们之间就存在依赖关系。

应用案例

Java代码
复制代码
    public class PersonDao{}
    public class IDCard{}
    public class Person{}
    public class Department{}
    
    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();
    }
    }
UML类图 + PlantUML代码
在这里插入图片描述
复制代码
    @startuml
     
    class PersonDao
    class IDCard
    class Person 
    class Department
    class PersonServiceBean{
    - PersonDao personDao
    + void save(Person person)
    + IDCard getIDCard(Integer personid)
    + void modify()
    }
    PersonDao <.. PersonServiceBean
    IDCard <.. PersonServiceBean
    Person <.. PersonServiceBean
    Department <.. PersonServiceBean
         
    @enduml

小结

  1. 该类引用了另一个类
  2. 如果是该类的成员属性
  3. 如果该方法返回的是类型
  4. 该方法接收的是参数类型
  5. 在该方法中使用了局部变量

类图 - 泛化关系(generalization)

泛化关系实际上就是继承关系,他是依赖关系的特例

应用案例

Java代码
复制代码
    public abstract class DaoSupport {
    public void save(Object entity) {
    }
    public void delete(Object id) {
    }
    }
    public class PersonServiceBean extends DaoSupport{}
UML类图 + PlantUML代码
在这里插入图片描述
复制代码
     @startuml
     
    abstract class DaoSupport{
       + void save(Object entity)
       + void delete(Object id)
    }
    class PersonServiceBean
    
    DaoSupport <|-- PersonServiceBean
    
    @enduml

小结

  1. 派生关系本质上相当于继承关系。
  2. 当A类从B类中继承时, 我们可以说A和B之间存在泛化关系。

类图—实现关系(Implementation)

实现关系实际上就是A类实现B接口,他是依赖关系的特例

应用案例

Java代码
复制代码
    public interface PersonService {
    	public void delete(Interger id);
    }
    public class PersonServiceBean implements PersonService {
    public void delete(Integer id) {
    }
    }
UML类图 + PlantUML代码
在这里插入图片描述
复制代码
    @startuml
    interface PersonService
    class PersonServiceBean
    
    PersonService <|... PersonServiceBean
    @enduml

类图—关联关系(Association)

  1. 关联关系本质上说就是两类之间的关联 ,它是依赖关系的一种表现形式。
  2. 关联具有方向性 ,即它可能表现为双向或单向的关系。
  3. 关系的表现形式具有多样性:
    • “1” 表示单一实例;
    • “0…” 表示零个或多个;
    • “0,1” 表示零个或一个;
    • “n…m” 表示从n到m的数量都有可能;
    • “m…*” 则意味着至少有m个实例。

应用案例

Java代码
复制代码
    public class Person {
    private IDCard idCard;
    }
    public class IDCard {
    private Person person;
    }
UML类图 + PlantUML代码
在这里插入图片描述
复制代码
    @startuml
    class Person{
    - IDCard idCard
    }
    class IDCard{
    - Person person
    }
    Person <-- IDCard
    Person --> IDCard
    @enduml

类图—聚合关系(Aggregation)

聚合关系描述为整体与部分之间的联系 ,它表明整体与其组成部分之间存在明确区分聚合关系作为关联关系的一个特例 ,不仅具备良好的导航性和多级属性 。

应用案例

一台电脑由键盘板(keyboard panel)、显示装置(monitor unit),以及鼠标组件等构成;能够从电脑上分离出来的所有组件都具备独立的功能特性,并通过带空心菱形的实线标注其连接关系:

Java代码
复制代码
    public class Monitor {
    }
    public class Mouse {
    }
    public class Computer {
    private Mouse mouse;//鼠标可以和Computer分离
    private Monitor monitor;//显示器可以和Computer分离
    
    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }
    
    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }
    }
UML类图 + PlantUML代码
在这里插入图片描述
复制代码
    @startuml
    class Monitor
    class Mouse
    class Computer{
       - Monitor Monitor
       - Mouse mouse
    }
    Computer o-- Monitor
    Computer o-- Mouse
     
    @enduml

小结

当一个A类依赖于B类时,并非意味着在构建A时必须同时构建B。换句话说,在创建对象的过程中无需立即构建其依赖的对象类型(并不是同生共死 )。因此它们属于聚合关系

类图—组合关系(Composition)

组合关系:也是整体与部分的关系,但是整体与部分不可以分开

让我们来看另一个案例,在程序设计中,在定义实体时我们引入了三个关键概念:Person以及相关的身份信息表IDCard,并引入了一个用于管理头部信息的表Head。通过这种方式,在这种架构下它们之间形成了组合关系;同时,在这种架构下另一个部分则实现了聚合关系

应用案例1

Java代码
复制代码
    public class IDCard{}
    public class Head{}
      
    public class Person{
    //IDCard并不是必须存在/实例化/创建的,是聚合关系
    private IDCard idCard;
    //Person 类创建的时候,Head类就会被实例化那么他们是同生共死的关系,他们就是组合关系
    private Head head = new Head();
    }
UML类图 + PlantUML代码
在这里插入图片描述
复制代码
    @startuml
    
    class IDCard
    class Head
    class Person{
       - IDCard idCard
       - Head head = new Head()
    }
      
    Person o-- IDCard
    Person *-- Head
      
    @enduml

应用案例2

Java代码
复制代码
    public class Mouse {}
    public class Monitor {}
    
    ///Computer被创建时,Mouse和Monitor会马上被new/实例化出来,组合关系
    public class Computer {
    private Mouse mouse = new Mouse();//鼠标和Computer不能分离
    private Monitor monitor = new Monitor();//显示器和Computer不能分离
    
    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }
    
    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }
    }
UML类图 + PlantUML代码
在这里插入图片描述
复制代码
    @startuml
    
    class Monitor
    class Mouse
    class Computer{
    - Monitor Monitor = new Monitor()
    - Mouse mouse = new Mouse)(
    }
      
    Computer *-- Monitor
    Computer *-- Mouse
      
    @enduml

全部评论 (0)

还没有任何评论哟~