什么是类图
定义系统中的类,描述类的内部结构(属性、方法等),表示类之间的关系(泛化、实现、依赖、关联、聚合、组合)。
UML表示类图
上图中左侧图形是一个常见的类图,
- 类名:在顶端存放;
- 属性部分:在中间存放,+ name: string => 可见性符号 属性名: 属性类型。
- 方法部分:在底部存放,+ exam(int,double) => 可见性符号 方法名(参数列表): 返回值类型
使用便签图形与虚线为类图添加注释
可见性
- “+”:表示公有 public
- “-”:表示私有 private
- “#”:受保护的 protected
- “~”:包内公有 package
属性语法
[可见性]属性名[:类型][=初始值][{属性字符串}] => + name: String = "tom" {readOnly}
中括号中描述的可有可无。
方法语法
[可见性]方法名[(参数列表)][:返回类型][{方法字符串}] => + calculateTotalPrice(quantity: int, pricePerUnit: double): double {static}
中括号中描述的可有可无。
泛化关系(继承关系)
一条带空心三角箭头的实线,从子类指向父类,或者子接口指向父接口
实现关系
实现用一条带三角箭头的虚线表示,从类指向实现的几接口
依赖关系
-
定义:依赖关系表示一个类的方法使用另一个类的对象作为参数、局部变量或返回值,或者在方法中调用另一个类的方法。
-
特点:依赖关系是一种较弱的关系,通常是临时性的。一个类的变化可能会影响到依赖它的类,但这种影响是间接的。
-
表示:通常用虚线箭头表示。
-
例子:学生和食堂,学生吃饭需要去食堂,食堂提供食物。
关联关系
-
定义:关联关系表示两个类之间存在某种关系,通常是通过成员变量来实现的。这种关系可以是单向的,也可以是双向的。
-
特点:关联关系中的对象通常是独立存在的,它们的生命周期不相互依赖。一个对象的创建和销毁不会直接影响另一个对象。
-
表示:通常用实线箭头表示。
-
例子:一个 Teacher 类包含多个 Student 类的对象,表示教师和学生之间的关系。
聚合关系
-
定义:聚合关系是一种特殊的关联关系,表示整体与部分的关系,但部分可以独立于整体存在。
-
特点:聚合关系强调的是整体与部分的关系,部分对象可以属于多个整体对象,或者可以独立存在* 。部分对象的生命周期可以独立于整体对象。
-
表示:通常用空心菱形表示。
-
例子: 一个 Department 类包含多个 Employee 类的对象,表示部门和员工之间的关系,员工可以独立于部门存在。
组合关系
-
定义:组合关系是一种强聚合关系,表示整体与部分之间的一种更强的关联。
-
特点:组合关系表示整体与部分的关系,部分对象的生命周期完全依赖于整体对象。如果整体对象被销毁,部分对象也会被销毁。部分对象不能独立存在,也不能被多个整体对象共享。
-
表示:通常用实心菱形表示。
-
例子:一个 Car 类包含一个 Engine 类的对象,表示汽车和引擎之间的关系,引擎的生命周期完全依赖于汽车。
关联关系和聚合关系的区别
在面向对象编程中,关系的类型(如关联关系和聚合关系)通常是根据对象之间的语义和生命周期来区分的。具体到 Department 和 Employee 以及 Teacher 和 Student 的例子,我们可以从以下几个方面来理解它们之间的关系类型:
Department 和 Employee
聚合关系:
-
整体与部分:Department 和 Employee 之间的关系可以被视为整体与部分的关系。一个 Department 包含多个 Employee,但 Employee 可以独立于 Department 存在。例如,一个 Employee 可以在多个 Department 之间转移,或者在没有 Department 的情况下继续存在。
-
生命周期独立:Employee 的生命周期不依赖于 Department。即使 Department 被销毁,Employee 仍然可以存在。
Teacher 和 Student
关联关系:
-
一般关系:Teacher 和 Student 之间的关系可以被视为一般的关联关系。一个 Teacher 可以教多个 Student,但这并不意味着 Student 是 Teacher 的一部分。Teacher 和 Student 是独立的实体,它们之间的关系是基于教学活动,而不是整体与部分的关系。
-
生命周期独立:Teacher 和 Student 的生命周期是独立的。一个 Teacher 的创建和销毁不会直接影响 Student,反之亦然。
总结
-
聚合关系:强调整体与部分的关系,部分对象的生命周期可以独立于整体对象。例如,Department 和 Employee。
-
关联关系:表示对象之间的一般关系,对象的生命周期独立。例如,Teacher 和 Student。
在实际编程中,选择合适的关系类型取决于具体的业务需求和对象之间的语义关系。理解这些关系有助于更好地设计类之间的关系,确保程序的正确性和可维护性。
总结
-
依赖关系:较弱的关系,临时性,一个类的变化可能影响依赖它的类。
-
关联关系:一般关系,对象独立存在,生命周期不相互依赖。
-
聚合关系:整体与部分的关系,部分对象可以独立存在。
-
组合关系:强聚合关系,部分对象的生命周期完全依赖于整体对象。