设计模式UML——类图简单了解

简介: 设计模式UML——类图简单了解

文章目录:


1.UML基本介绍

2.UML类图

2.1 类关系——依赖

2.2 类关系——泛化

2.3 类关系——实现

2.4 类关系——关联

2.5 类关系——聚合

2.6 类关系——组合

1.UML基本介绍


1.    UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。

2.    UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如下图:

上面的截图就是一个UML类图的案例,只不过这是在eclipse中的,下面的类图我会在IDEA中使用。

UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,UML图分类:👇👇👇

1.    用例图 (use case)

2.    静态结构图:  类图、对象图、包图、组件图、部署图

3.    动态行为图:  交互图(时序图与协作图)、状态图、活动图

类图是描述类与类之间的关系的,是UML图中最核心的。

2.UML类图


用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。

类之间的关系:  依赖、泛化(继承)、实现、关联、聚合与组合。


2.1 类关系——依赖

只要是在类中用到了对方,那么他们之间就存在依赖关系。   来看下面的代码

package com.szh.uml.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();
  }
}
package com.szh.uml.dependence;
public class PersonDao {
}
package com.szh.uml.dependence;
public class Person {
}
package com.szh.uml.dependence;
public class IDCard {
}
package com.szh.uml.dependence;
public class Department {
}

上面的代码中,PersonServiceBean类中用到了DepartmentPerson等这几个类,那么我们就可以说PersonServiceBean类与它们几个类之间存在依赖关系。

1.    类中用到了对方

2.    类的成员属性

3.    方法的返回类型

4.    方法接收的参数类型

5.    方法体内部使用到

依赖的符号就是虚线 + 一个箭头。


2.2 类关系——泛化

泛化实际上就是继承,它是依赖关系的一种特例。

如果A类继承了B类,那么我们就可以说 AB 之间存在泛化关系。

package com.szh.uml.generalization;
public abstract class DaoSupport {
  public void save(Object entity) {
  }
  public void delete(Object id) {
  }
}
package com.szh.uml.generalization;
public class PersonServiceBean extends DaoSupport {
}

继承就不再多说了,这里需要指出的一点是:IDEA中的泛化符号不太一样,一般来说,泛化的符号应该是实线 + 一个空心三角形,而IDEA中则是下图这样。

2.3 类关系——实现

实现关系其实就是面向接口而言,它和泛化一样,也是依赖关系的一种特例。

如果A类实现了接口B,那么我们就可以说AB之间存在实现关系。

package com.szh.uml.implementation;
public interface PersonService {
  public void delete(Integer id);
}
package com.szh.uml.implementation;
public class PersonServiceBean implements PersonService{
  @Override
  public void delete(Integer id) {
    System.out.println("delete..");
  }
}

实现接口这个也不再多说了。这里需要指出的一点是:IDEA中的实现符号不太一样,一般来说,实现的符号应该是虚线 + 一个空心三角形,而IDEA中则是下图这样。


2.4 类关系——关联


关联关系实际上就是类与类之间的联系,他是依赖关系的特例。关联具有导航性:  即双向关系或单向关系。

关系具有多重性:  “1”(表示有且仅有一个)“0...”(表示0个或者多个),“01”(表示0个或者一个)“n.….m”(表示n m个都可以), "m.….*”(表示至少m个)

package com.szh.uml.association1;
/**
 *
 */
public class Person {
    private IDCard card;
}
package com.szh.uml.association1;
/**
 *
 */
public class IDCard {
}

这里我们的理解就是Person类表示人,IDCard类表示身份证类,一个人只有一个身份证号、一个身份证号只属于一个人,所以它俩之间就存在着一对一的关联关系。  关联的符号就是实线 + 一个箭头。

下图是单向的关联关系,当我们在IDCard类中声明了Person类的成员变量时,这二者之间的关联关系就转换成了双向。(图中还有组合符号,我们后面会说)


2.5 类关系——聚合


聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。

:  一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示。

package com.szh.uml.aggregation;
public class Computer {
  private Mouse mouse;
  private Monitor monitor;
  public void setMouse(Mouse mouse) {
    this.mouse = mouse;
  }
  public void setMonitor(Monitor monitor) {
    this.monitor = monitor;
  }
}
package com.szh.uml.aggregation;
public class Monitor {
}
package com.szh.uml.aggregation;
public class Mouse {
}

聚合的符号一般来说应该是实线 + 空心菱形,组合的符号则是实线 + 实心菱形,IDEA中聚合、组合的符号都是下图这样。


2.6 类关系——组合

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

再看一个案例:在程序中我们定义实体: PersonIDCardHead,那么 Head Person 就是组合, IDCard Person就是聚合。

但是如果在程序中 Person实体中定义了对IDCard进行级联删除,即删除Person时连同IDCard 一起删除,那么IDCard Person就是组合了。

package com.szh.uml.composition;
public class Computer {
  private Mouse mouse = new Mouse();
  private Monitor monitor = new Monitor();
  public void setMouse(Mouse mouse) {
    this.mouse = mouse;
  }
  public void setMonitor(Monitor monitor) {
    this.monitor = monitor;
  }
}
package com.szh.uml.composition;
public class Monitor {
}
package com.szh.uml.composition;
public class Mouse {
}
package com.szh.uml.composition;
public class Person {
    private IDCard card;
    private Head head = new Head();
}
package com.szh.uml.composition;
public class Head {
}
package com.szh.uml.composition;
public class IDCard {
}

相关文章
|
3月前
|
Java uml
使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实
该博客文章通过UML类图和Java代码示例,展示了如何使用工厂方法模式设计一个支持加法、减法、乘法和除法运算的计算机程序,并严格按照类图设计实现程序。
|
3月前
|
Java uml
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
该博客文章展示了如何使用简单工厂模式设计一个程序,该程序能够根据用户输入的运算符(加、减、乘、除)对两个数进行计算,并提供了相应的UML类图和Java源码实现。
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
|
5月前
|
应用服务中间件 uml
【UML】软件工程中常用图:类图、部署图、时序图、状态图
【UML】软件工程中常用图:类图、部署图、时序图、状态图
567 1
|
2月前
|
设计模式 Java 测试技术
Java设计模式-UML与设计原则(1)
Java设计模式-UML与设计原则(1)
|
3月前
|
数据可视化 Java uml
精通UML:从类图到序列图的实战指南
【8月更文第23天】统一建模语言(Unified Modeling Language, UML)是一种用于软件工程的标准图形化语言,它提供了一套工具来帮助开发团队可视化、构造和文档化软件系统。在UML中,类图和序列图是最常用也是最重要的两种图。类图用于描述系统的静态结构,而序列图则用于表示对象之间的交互和系统的动态行为。
153 5
|
3月前
|
设计模式 uml
设计模式常用的UML图------类图
这篇文章介绍了UML中类图的基本概念和用途,详细解释了类与接口、类之间的关系,包括继承、实现、组合、聚合、关联和依赖等六种关系,并展示了它们在类图中的表示方法。
设计模式常用的UML图------类图
|
3月前
|
uml
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
311 0
|
5月前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
40 2
|
5月前
|
设计模式 数据可视化 程序员
设计模式学习心得之前置知识 UML图看法与六大原则(上)
设计模式学习心得之前置知识 UML图看法与六大原则(上)
44 0
|
5月前
|
测试技术 uml
【UML】详解UML类图
【UML】详解UML类图
103 0