发布时间:2023-07-04 16:30
UML:Unified Modeling Language 【统一建模语言】
① 是一种用于软件系统分析和设计的工具。用于帮助软件开发人员进行思考和记录思路的结果。
② UML 本身是一套符号的规定。这些符号用于描述软件模型中的各个元素和他们之间的关系。比如类、接口、实现、泛化、依赖、组合、聚合等。
Composite 组合
Aggregation 聚合
Realization 实现
Generalization 泛化(继承)
Association 关联
Dependency 依赖(使用)
画 UML 图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理。
UML 图分类:
① 用例图(Use Case)
② 静态结构图:类图(描述类与类之间关系)、对象图、包图、组件图、部署图
③ 动态行为图:交互图(时序图与协作图)、状态图、活动图
用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。
类之间的关系有:依赖、泛化(继承)、实现、关联、聚合与组合。
画 UML 类图必然需要画图工具。在此,本人使用的是 Power Designer 工具。
本人是在电脑管家的【软件管理】中下载的…
public class Student {
private Double score;
private String name;
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
}
画出上面的 Student 类的 UML 类图。
至于类图如何添加,按照完成图慢慢琢磨即可,在此不做详细介绍。
依赖:假如在 A 类中使用到了 B 类,则说 A 类依赖 B 类。
出现以下几种情况都可以认为 A 类依赖 B 类。
① B 类是 A 类的成员属性
② B 类是 A 类的方法的返回类型
③ B 类是 A 类的方法接收的参数类型
④ B 类在 A 类的方法中被使用到
public class StudentService {
private StudentDao studentDao;
private void save(Student student) {
}
public StudentCard getStudentCard(Integer studentId) {
return new StudentCard();
}
public void modify() {
// 不符合迪米特法则
School school = new School();
}
}
public class School {
}
public class Student {
}
public class StudentCard {
}
public class StudentDao {
}
泛化:泛化就是继承。如果 A 类继承了 B 类,就说 A 和 B 存在泛化关系。
画出下图代码的 UML 类图。
public abstract class DaoSupport {
public void save(Object entity) {
}
public void delete(Object id) {
}
}
public class StudentService extends DaoSupport {
}
实现:如果 A 类实现 B 接口,就说 A 类与 B 接口之间存在实现关系。
画出下面代码的 UML 类图。
public interface PersonService {
void delete(Integer id);
}
public class PersonServiceImpl implements PersonService {
@Override
public void delete(Integer id) {
}
}
关联关系:类与类之间的联系。(一对一、一对多)
关联具有导航性:即双向关系或单向关系。
关系具有多重性:1(有且仅有一个);0…(0个或多个);0…1(0个或者一个);n…m(n到m个都可以);m…*(至少 m 个)
写出下面代码的 UML 类图。
public class Person1 {
private IdCard1 idCard;
}
/**
* 身份证
*/
/**
* 身份证
*/
public class IdCard1 {
}
单向一对一关系:① 一对一(一个人只有一个身份证,一个身份证也只对应一个人);② 单向(Person1 依赖了 IdCard1,但 IdCard1 没有依赖 Person1)
画出下面代码的 UML 类图。
public class Person2 {
private IdCard2 idCard2;
}
/**
* 身份证
*/
public class IdCard2 {
private Person2 person2;
}
双向一对一关系:① 一对一(一个人只有一个身份证,一个身份证也只对应一个人);② 双向(Person2 依赖了 IdCard2,IdCard2 也依赖 Person2)
聚合关系:表示整体和部分的关系,整体与部分可以分开。
聚合关系是关联关系的特例,因此也具有关联的导航性与多重性。
如:一台电脑(Computer)由键盘(Keyboard)、显示器(Monitor),鼠标(Mouse)等组成。但组成电脑的各个配件是可以从电脑上分离出来的。所以,Computer 与 Keyboard、Mouse、Monitor 之间是聚合关系。
画出下面代码的 UML 类图。
public class Keyboard {
}
public class Mouse {
}
public class Computer {
private Keyboard keyboard;
private Mouse mouse;
public Keyboard getKeyboard() {
return keyboard;
}
public Mouse getMouse() {
return mouse;
}
}
组合关系:整体与部分的关系,但是整体与部分不可以分开。
看下面的案例代码,并画出类图。
public class Computer {
/*
Computer 实例一创建,Mouse 和 Keyboard 实例就创建。
所以,Mouse 和 Keyboard 与 Computer 是不可分离的。
所以,Mouse 和 Keyboard 与 Computer 之间是组合关系。
*/
private Mouse mouse = new Mouse();
private Keyboard keyboard = new Keyboard();
}
public class Keyboard {
}
public class Mouse {
}
public class Person {
// Person 实例化,则 Head 必须实例化(组合)
private Head head = new Head();
// Phone 可以从 Person 中分离(聚合)
private Phone phone;
}
public class Phone {
}
public class Head {
}