UML笔记 之 事物和关系
简介
什么是UML?
UML(Unified Modeling Language,统一建模语言),不是编程语言,是一种标准化的、通用的可视化建模语言,用于对软件系统进行规约、构造、可视化和文档化。它的核心思想是用图形化的方式来描述软件系统的结构和行为。是面向对象软件的标准化建模语言。
UML的目的和作用?
沟通工具 | 为开发人员、分析师、测试人员和客户之间提供统一的交流语言。 |
蓝图作用 | 在编码之前,通过模型来设计和理解系统,降低风险和复杂性。 |
文档化 | 生成系统设计和架构的正式文档。 |
支持全过程 | 适用于从需求分析到系统设计的整个软件开发过程。 |
UML的组成和分类
1、由三个基本模块组成:事物、关系和图
事物:是对模型中最具有代表性的成分的抽象
关系:把事物结合在一起
图:聚集了相关事物
2、UML中有四种事物
结构事物、行为事物、分组事物、注释事物
3、UML中有4种关系
依赖、关联、泛化和实现
4、UML 2.0提供了13种图
(1)分别是类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、组合结构图、部署图、包图、交互概览图和计时图
(2)其中序列图、通信图、交互概览图和计时图均被称为交互图
(3)在实际项目中,最常用的是类图、用例图、序列图、活动图和状态图
5、UML 画图工具
在线免费工具 Draw.io
未命名绘图 - draw.io
事物
结构事物
是UML模型的静态部分,描述概念和物理元素
结构事物包含:
类 | Class |
接口 | Interface |
协作 | Collaboration |
用例 | Use Case |
主动类 | Active Class |
构件 | Component |
制品 | Artifact |
结点 | Node |
行为事物
是UML模型的动态部分,描述了跨越时间和空间的行为。
行为事物包含:
交互 | Interaction |
状态机 | State Machine |
活动 | Activity |
分组事物
是UML模型的组织部分。最主要的分组事物是包,结构事物、行为事物甚至其他分组事物都可以放进包内。
注释事物
是UML模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。
关系
在UML类图中,常见的有以下几种关系:
- 泛化(Generalization):继承的关系,实线带三角形箭头,指向父类。
- 实现(Realization):实现的关系,虚线带三角形箭头,指向接口。
- 关联(Association):拥有的关系,实线带普通箭头,指向被拥有者。
- 聚合(Aggregation):整体与部分的关系。实线带空心菱形,指向整体。
- 组合(Composition):整体与部分的关系,但不能离开整体而单独存在。实线实心菱形,指向整体。
- 依赖(Dependency):使用的关系,即一个类的实线需要另一个类的协助。虚线普通箭头,指向被使用者。
依赖关系
定义
是一种最微弱、临时性的使用关系。如果一个类A的某个行为偶然地、临时地引用了另一个类B,那么类A就依赖于类B。
核心思想
一个类的变化会影响到依赖它的另一个类。
何时使用
当一个类的方法需要短暂地使用另一个类的对象时。
代码表现
1、另一个类的对象作为方法参数
public class MyMath
{public int Add(int a,int b){return a + b;}
}public class Exam
{public void CaculateAdd(MyMath myMath,int a,int b){var result = myMath.Add(a,b);Console.WriteLine(result); }
}
2、另一个类的对象作为方法内的局部变量
public class MyMath
{public int Add(int a,int b){return a + b;}
}public class Exam
{public void CaculateAdd(int a,int b){//在方法内部创建局部变量MyMath myMath = new MyMath();var result = myMath.Add(a,b);Console.WriteLine(result); }
}
3、调用另一个类的静态方法
public class MyMath
{public static int Add(int a,int b){return a + b;}
}public class Exam
{public void CalculateAdd(int a,int b){var result = MyMath.Add(a,b);Console.WriteLine(result); }
}
UML表示
关联关系
定义
是一种比依赖更强、长期且稳定的拥有关系。它表示一个类对象与另一个类对象之间存在结构上的永久性或长期性的连接。
代码表现
1、一个类的对象作为另一个类的成员变量
public class MyMath
{public int Add(int a,int b){return a + b;}
}public class Exam
{public MyMath myMath;public Exam(){myMath = new MyMath(); }public void CalculateAdd(int a,int b){var result = myMath.Add(a,b);Console.WriteLine(result); }
}
UML表示
聚合关系和组合关系是关联关系的两种特殊形式
聚合关系
定义
表示"整体-部分"关系,但部分可以独立于整体存在
代码表现
// 部分 - 可以独立存在
public class Professor
{public string Name { get; set; }public Professor(string name){Name = name;Console.WriteLine($"Professor {name} created");}public void Teach(){Console.WriteLine($"Professor {Name} is teaching");}
}// 整体 - 包含部分
public class University
{public string Name { get; set; }// 聚合关系:教授列表 - 教授可以独立于大学存在public List<Professor> Professors { get; set; }public University(string name){Name = name;Professors = new List<Professor>();Console.WriteLine($"University {name} created");}public void AddProfessor(Professor professor){Professors.Add(professor);Console.WriteLine($"Added {professor.Name} to {Name}");}
}
UML表示
组合关系
定义
比聚合更强的"整体-部分"关系,部分不能独立于整体存在,生命周期完全绑定。
// 部分 - 不能独立存在
public class Room
{public string RoomNumber { get; set; }public string Type { get; set; }public Room(string number, string type){RoomNumber = number;Type = type;Console.WriteLine($"Room {number} ({type}) created");}
}// 整体 - 控制部分的生命周期
public class Building
{public string Name { get; set; }// 组合关系:房间列表 - 房间不能独立于建筑存在public List<Room> Rooms { get; private set; }public Building(string name){Name = name;Rooms = new List<Room>();// 组合关系:整体创建时创建部分CreateDefaultRooms();Console.WriteLine($"Building {name} created with {Rooms.Count} rooms");}private void CreateDefaultRooms(){// 建筑控制房间的创建Rooms.Add(new Room("101", "Office"));Rooms.Add(new Room("102", "Conference"));Rooms.Add(new Room("201", "Laboratory"));}public void AddRoom(string roomNumber, string type){// 建筑负责创建新的房间Rooms.Add(new Room(roomNumber, type));}
}
UML表示
泛化关系
定义
即面向对象中的继承,它表示父类和子类之间的关系。
核心思想
子类是对父类的特化,继承父类的所有结构和行为,并可以添加自己特有的属性和方法。
代码表现
public class MyMath
{public int Add(int a,int b){return a + b;}
}public class Exam: MyMath{public void CalculateAdd(int a,int b){var result = Add(a,b);Console.WriteLine(result); }
}
UML表示
实现关系
定义
描述一个类实现一个接口所定义的操作。它指定了“类必须做什么”,但不指定如何做。
核心思想
一个类负责具体实现接口中声明的所有抽象方法。
代码表现
public interface IMathLogic
{public int Add(int a,int b);public int Multiply(int a, int b);
}public class Exam: IMathLogic{public int Add(int a,int b){return a+b;}public int Multiply(int a, int b){return a * b;}
}
UML表示
总结
关系 | 英文 | 核心语义 | 代码关键词 |
---|---|---|---|
依赖 | Dependency | 临时使用 | 局部变量、参数、静态调用 |
关联 | Association | 长期拥有 | 成员变量 |
泛化 | Generalization | 是一种 | 继承父类 |
实现 | Realization | 能做什么 | 实现接 |