1:UML类图
25.1、什么是UML类图
描述类与类之间的关系
UML(Unified Modeling Language)类图是用于描述系统中的类、属性、方法和它们之间关系的一种图形化工具。类图是UML中最常用的图形化表示方法之一,用于表示软件系统的静态结构。下面是一些UML类图的常用元素:
- 类:类是描述系统中对象的属性和方法的模板。在UML类图中,类通常用矩形表示,类名位于矩形的顶部。
- 属性:属性是类的特征,描述了类实例的状态。在UML类图中,属性通常位于类名下方,并用一个名称和类型表示。
- 方法:方法是类的行为,描述了对象可以执行的操作。在UML类图中,方法通常位于类名下方,并用一个名称和参数列表表示。
- 关系(依赖):关系描述类之间的连接。在UML类图中,关系有多种类型,关系包括继承、实现、关联、聚合、组合、依赖。
-
继承关系(Inheritance):用于表示一个类继承自另一个类的属性和方法。继承关系用一个空心的箭头从子类指向父类。
-
实现关系(Realization):用于表示一个类实现了某个接口。实现关系用一个带虚线的箭头从实现类指向接口。
-
关联关系(Association):表示两个类之间存在某种联系。关联关系用一条线表示。就是一对多,多对一,1/n,是依赖关系的特例
-
聚合关系(Aggregation)(弱包含):用于表示“整体与部分”的关系,强调:整体和部分可以分开,例如一个车由引擎、轮胎和座椅组成。聚合关系用一条带空心菱形的线表示,菱形指向整体类。在java中就是类属性,用set方法赋值,是关联关系的特例
-
组合关系(Composition)(强包含):用于表示“严格的整体与部分”的关系,强调:整体和部分不可以分开。例如一个公司由员工、部门和经理组成,公司消失时,员工、部门和经理也不存在了。组合关系用一条带实心菱形的线表示,菱形指向整体类。在java中就是类属性直接用new赋值,
-
依赖关系(Dependency):在面向对象编程中,一个类可以使用另一个类的方法或属性,这个类就依赖于被使用的另一个类。不是那么绝对的,比如聚合也可以是依赖,以下就是依赖的范围。范围性很大包括了关联、组合、聚合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R0TFMRDo-1681809891094)(img/image-20230418145100358.png)]
-
- 接口:接口是一种抽象的类,只描述了类应该实现的方法,而不描述它们的实现方式。在UML类图中,接口通常用带有<>标记的矩形表示。
- 抽象类:抽象类是一种不能被实例化的类,只能被其他类继承。在UML类图中,抽象类通常用带有斜杠的矩形表示。
UML类图是一种强大的工具,可以帮助开发人员理解系统的结构和设计,同时也可以用于与其他人员交流和沟通。
25.2、PlantUML语法
这是一个插件,在IDEA搜索并下载,创建后缀名为puml的文件就行
- uml分类
-
语法:
+(public)、-(private)、#(protected)和 ~(package-private)。 箭头方向不要弄错,在默认情况下,类名位于箭头的左侧,属性/方法名称位于右侧。如 class A class B A --> B 在这个示例中,箭头从“A”指向“B”,表示“A”知道“B”的存在,但“B”并不知道“A”的存在。 还有一种情况就是A对象组合到B对象 B *-- A,有时需要根据语法来的 实现(implements):使用<|..来表示 继承(Inheritance):使用 <|-- 符号表示 聚合(Aggregation)(包含中):可以使用 o-- 符号表示聚合关系,箭头从整体对象指向部分对象。 组合(Composition)(包含强):可以使用 *-- 符号表示组合关系,箭头同样从整体对象指向部分对象。 关联(Association):可以使用 -- 符号表示关联关系。 如:1对多:"1" -- "n" 依赖(Dependency)(包含弱):依赖包括继承、实现、关联、聚合和组合:在 PlantUML 中,依赖关系可以用 -->/..>/<--> 符号来表示。在符号左侧的类或接口是依赖源(dependant),右侧的类或接口是依赖目标(dependency)。 内部类(InnerClass): ”+..“ ,如:Demo01 +.. ReceiveMsg:ReceiveMsg是Demo01的内部类 简单注释: UserDao <|.. UserDaoImpl:UserDaoImpl实现UserDao 复杂注释: note top of Demo01 * 依赖倒置原则:修改韩顺平视频中的java代码(发送信息) * @author xxl * @date 2023/4/17 end note
1)uml类图案例1,看注解
三层架构做演示 dao-->service-->controller
@startuml
class UserDto{
- String username
- String password
- int gender
+ UserDto(String username, String password, int gender)
}
interface UserDao {
+ findUserByName(String username)
+ UserDto login(String username, String password)
}
class UserDaoImpl {
+ findUserByName(String username)
+ UserDto login(String username, String password)
}
interface UserService {
+ findUserByName(String username)
+ UserDto login(String username, String password)
}
class UserServiceImpl {
- UserDao userDao;
+ findUserByName(String username)
+ UserDto login(String username, String password)
# setUser(UserDao usdao)
}
class UserController{
- UserService service
+ findUserByName(String username)
+ UserDto login(String username, String password)
}
class UserVo:VO对象用于前端展示所用的{
BaseVo v = new BaseVo
+ print(Print p)
}
class Print{
}
UserDao <|.. UserDaoImpl:UserDaoImpl实现UserDao UserDaoImpl实现UserDao
UserService <|.. UserServiceImpl UserServiceImpl实现UserService
UserVo --* BaseVo UserVo组合BaseVo
UserDao --o "返回实体类对象" UserDto UserDao聚合UserDto
UserServiceImpl --o UserDao UserServiceImpl聚合UserDao
UserController --o UserService UserController聚合UserService
UserController -- UserDaoImpl UserDaoImpl关联UserController
UserController --> UserDao UserController依赖UserDao
UserVo --|> UserDto UserVo继承UserDto
UserVo --> Print UserVo依赖Print
@enduml