目录
一、前言
二、什么是类图
三、类图的要素
1、类(Class)
2、接口(Interface)
3、关联(Association)
4、继承(Inheritance)
5、依赖(Dependency)
6、聚合(Aggregation)和组合(Composition)
四、类图的应用
1、系统设计
2、沟通和交流
3、代码生成
4、重构和优化
五、六大类间关系
1、泛化(继承)
2、实现(Realization)
3、关联(Association)
4、聚合(Aggregation)
5、组合(Composition)
6、依赖(Dependency)
六、类和对象
七、总结
一、前言
在面向对象设计中,类图是最常用的工具之一,用于表现类、接口、关联、继承等在软件系统中的结构和关系。本文将深入探讨类图的定义、要素、关系以及如何应用类图指导面向对象设计。
二、什么是类图
类图是面向对象建模中最常用的图表之一,用于表示类、接口、关联、继承等在软件系统中的结构和关系。它们为开发人员提供了一种高层次的视图,有助于更好地理解和沟通系统的设计。
三、类图的要素
1、类(Class)
类是对象模型中的基本构建块,表示一组具有相似属性和行为的对象。它由类名、属性和方法组成。
2、接口(Interface)
接口定义了一组方法签名,任何类都可以实现这些方法,以满足特定的契约。
3、关联(Association)
关联表示类之间的连接,反映了它们之间的关系。关联可以是双向的、单向的,也可以具有多重性和角色。
4、继承(Inheritance)
继承表示一个类从另一个类派生,并继承了父类的属性和方法。它支持代码重用和层次结构的建立。
5、依赖(Dependency)
依赖表示一个类在实现中使用了另一个类,但不是紧密耦合的关系。一个类的变化可能会影响到依赖的类。
6、聚合(Aggregation)和组合(Composition)
聚合表示整体与部分之间的关系,组合是一种更强的聚合关系,整体和部分的生命周期是紧密相关的。
四、类图的应用
1、系统设计
通过绘制类图,可以设计和规划系统的结构,定义类和其关系。
2、沟通和交流
类图提供了一种可视化的方式来沟通设计思想,使开发团队在设计阶段保持一致。
3、代码生成
类图可以用于生成代码框架,从而加速开发过程,降低错误率。
4、重构和优化
分析类图可以帮助发现系统中的问题,并进行重构和优化
五、六大类间关系
强弱关系:继承>实现>组合>聚合>关联>依赖
1、泛化(继承)
类的继承结构表现在UML中为:泛化(generalize)与实现(realize):
继承关系为 is-a的关系;两个对象之间如果可以用 is-a 来表示,就是继承关系:(..是..)
eg:自行车是车、猫是动物
泛化关系用一条带空心箭头的直接表示;如下图表示(A继承自B)
eg:汽车在现实中有实现,可用汽车定义具体的对象;汽车与SUV之间为泛化关系;
注:最终代码中,泛化关系表现为继承非抽象类
class SUV extends SmallCar{
@Override
public void drive() {
print("Go To Paris");
}
}
2、实现(Realization)
实现关系用一条带空心箭头的虚线表示;
eg:”车”为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(汽车还是自行车),才 可以用来定义对象(”车”这个类在C++中用抽象类表示,在JAVA中有接口这个概念,更容易理解)
注:最终代码中,实现关系表现为继承抽象类;
class SmallCar implements Car{
@Override
public void drive() {
}
}
3、关联(Association)
关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;
比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;
关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;
注:在最终代码中,关联对象通常是以成员变量的形式实现的;
public class Passenger {
private Ticket ticket;
}
4、聚合(Aggregation)
聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成;
聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成;
与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如, 部门撤销了,人员不会消失,他们依然存在;
public class People {
private Person p1;
private Person p2;
}
5、组合(Composition)
组合关系用一条带实心菱形箭头直线表示,如下图表示A组成B,或者B由A组成;
与聚合关系一样,组合关系同样表示整体由部分构成的语义;比如公司由多个部门组成;
但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 公司不存在了,部门也将不存在了;
public class Company {
private Department a;
public Company(){
a = new Department();
}
}
6、依赖(Dependency)
依赖关系是用一套带箭头的虚线表示的;如下图表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系;
与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;
显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;
注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性;
abstract class Animal{
public live(Oxygen oxygen, Water water){
}
}
六、类和对象
对象是描述客观世界中某个具体的实体,而类是对一类具有相同特征的对象的描述。对象是类的实例。在UML中类可表示为一个划分为三个格子的长方形,第一个格子包含类名,中间的格子包含类的属性,最后个格子包含类的操作。如下图:
+表示public
-表示private
#表示protected
~表示default,也就是包权限
_下划线表示static
斜体表示抽象
七、总结
类图是面向对象设计的重要工具,它们为软件系统的结构和关系提供了可视化表示。通过了解类图的元素和关系,开发人员可以更好地进行系统设计、沟通和交流,从而创建高质量和易维护的软件系统。