0
点赞
收藏
分享

微信扫一扫

【系统架构】深入理解类图


目录

一、前言

二、什么是类图

三、类图的要素

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之间为泛化关系;

【系统架构】深入理解类图_类图_02

 注:最终代码中,泛化关系表现为继承非抽象类

class SUV extends SmallCar{
 
  @Override
  public void drive() {
     print("Go To Paris");
    }
}

2、实现(Realization)

实现关系用一条带空心箭头的虚线表示;

eg:”车”为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(汽车还是自行车),才 可以用来定义对象(”车”这个类在C++中用抽象类表示,在JAVA中有接口这个概念,更容易理解)

【系统架构】深入理解类图_关联关系_03

 注:最终代码中,实现关系表现为继承抽象类;

class SmallCar implements Car{
 
   @Override
   public void drive() {
 
 }
}

3、关联(Association)

关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;

比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;

关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;

【系统架构】深入理解类图_聚合关系_04

 注:在最终代码中,关联对象通常是以成员变量的形式实现的;

public class Passenger {
 
   private Ticket ticket;
}

4、聚合(Aggregation)

聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成;

【系统架构】深入理解类图_关联关系_05

聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成;

与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如, 部门撤销了,人员不会消失,他们依然存在;

public class People {
 
   private Person p1;
 
   private Person p2;
 
}

5、组合(Composition)

组合关系用一条带实心菱形箭头直线表示,如下图表示A组成B,或者B由A组成;

【系统架构】深入理解类图_关联关系_06

与聚合关系一样,组合关系同样表示整体由部分构成的语义;比如公司由多个部门组成;

但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 公司不存在了,部门也将不存在了;

public class Company {
 
   private Department a;
 
   public Company(){
      a = new Department();
   }
}

6、依赖(Dependency)

依赖关系是用一套带箭头的虚线表示的;如下图表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系;

【系统架构】深入理解类图_关联关系_07

 与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;

显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;

注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性;

abstract class Animal{
   public live(Oxygen oxygen, Water water){
   }
}

六、类和对象

对象是描述客观世界中某个具体的实体,而类是对一类具有相同特征的对象的描述。对象是类的实例。在UML中类可表示为一个划分为三个格子的长方形,第一个格子包含类名,中间的格子包含类的属性,最后个格子包含类的操作。如下图:

【系统架构】深入理解类图_uml_08

+表示public
-表示private  
#表示protected 
~表示default,也就是包权限  
_下划线表示static  
斜体表示抽象

七、总结

类图是面向对象设计的重要工具,它们为软件系统的结构和关系提供了可视化表示。通过了解类图的元素和关系,开发人员可以更好地进行系统设计、沟通和交流,从而创建高质量和易维护的软件系统。 

举报

相关推荐

0 条评论