UML中类图的介绍与使用

汇总目录请点击访问:《设计模式目录汇总》
喜欢内容的话欢迎关注、点赞、收藏!感谢支持,祝大家祉猷并茂,顺遂无虞

类图

UML(Unified Modeling Language,统一建模语言)中的类图(Class Diagram)是一种静态结构图,它用于展示系统中的类(class)、接口(interface)、协作(collaboration)以及它们之间的静态结构和关系。

画类图的好处

类图是面向对象设计中的重要工具,它的主要优点包括:

  1. 提供系统的视觉表示:类图提供了系统的静态视图,可以清晰地展示系统中的类以及它们之间的关系。这对于理解和解释系统的结构和行为非常有帮助。

  2. 促进团队之间的沟通:类图是一种通用的语言,可以被所有的开发人员理解。通过类图,团队成员可以更好地理解系统的设计,并在设计的基础上进行讨论和改进。

  3. 帮助发现设计问题:通过创建类图,我们可以在早期发现设计上的问题,比如类之间的耦合过度,或者职责分配不清等问题。这可以在实际编码之前就避免这些问题,提高开发效率。

  4. 文档化系统:类图可以作为系统的一部分文档,为未来的维护和开发提供参考。通过查看类图,新的开发人员可以更快地理解系统的结构和行为。

  5. 辅助软件开发工具:许多现代的软件开发工具,如IDE,都支持从类图生成代码,或者从代码生成类图。这可以帮助开发人员更快地进行开发,并保持代码和设计的一致性。

在学习设计模式的过程中,一定要自己画类图,这样可以更好地理解设计模式的实现原理,并且在实际开发中能够更好地应用设计模式。

类图三元素

  1. 类(Class):类是类图的主要元素,通常用一个矩形表示。矩形分为三个部分:上部是类名,中部是属性,下部是方法。

  2. 接口(Interface):接口在类图中以一个带有《接口名》标签的矩形表示,或者用一个带有接口名的圆柱表示。

  3. 关系:类图中的关系包括关联(Association)、聚合(Aggregation)、组合(Composition)、继承(Inheritance)、实现(Implementation)和依赖(Dependency)。

六种关系

解释

  • 关联(Association):关联是类与类之间的一种链接,表示一个类知道另一个类的属性和方法。关联可以是单向的,也可以是双向的。关联在类图中以实线和箭头表示。

  • 聚合(Aggregation):聚合是一种特殊的关联,表示"整体和部分"的关系,部分可以脱离整体而独立存在。聚合在类图中以空心菱形和实线表示。

  • 组合(Composition):组合也是一种特殊的关联,表示"整体和部分"的关系,但部分不能脱离整体而独立存在。组合在类图中以实心菱形和实线表示。

  • 继承(Inheritance):继承表示一个类(子类)继承另一个类(父类)的属性和方法。继承在类图中以空心三角形和实线表示。

  • 实现(Implementation):实现表示一个类实现一个接口的方法。实现在类图中以空心三角形和虚线表示。

  • 依赖(Dependency):依赖表示一个类的实例在方法内部使用到另一个类的实例。依赖在类图中以虚线和箭头表示。

单个说明

1. 关联(Association)

代码

class Car {
   
    private Engine engine;
    public void start() {
   
        engine.start();
    }
}

class Engine {
   
    public void start() {
   
        // 启动发动机
    }
}

类图
在这里插入图片描述

在这个例子中,Car类与Engine类之间存在关联关系。Car类包含一个Engine类型的成员变量engine,并且在start方法中使用了enginestart方法。

注意: 在这个例子中,Engine类是一个独立的类,它与Car类没有直接的关联关系。

2. 聚合(Aggregation)

代码

class School {
   
    private List<Student> students;
    public void addStudent(Student student) {
   
        students.add(student);
    }
}

class Student {
   
    // 学生的属性和方法
}

类图
在这里插入图片描述

在这个例子中,School类与Student类之间存在聚合关系。School类包含一个List<Student>类型的成员变量students,并且提供了一个addStudent方法用于添加学生。

注意: 在这个例子中,Student类是一个独立的类,它与School类没有直接的关联关系。

3. 组合(Composition)

代码

class House {
   
    private List<Room> rooms;
    public House(List<Room> rooms) {
   
        this.rooms = rooms;
    }
}

class Room {
   
    // 房间的属性和方法
}

类图

在这里插入图片描述

在这个例子中,House类与Room类之间存在组合关系。House类包含一个List<Room>类型的成员变量rooms,并且在构造函数中初始化rooms

注意: 在这个例子中,Room类是一个独立的类,它与House类没有直接的关联关系。

4. 继承(Inheritance)

代码

class Animal {
   
    public void eat() {
   
        // 动物吃东西
    }
}

class Dog extends Animal {
   
    public void bark() {
   
        // 狗叫
    }
}

类图
在这里插入图片描述

在这个例子中,Dog类继承自Animal类,因此Dog类具有Animal类的eat方法。

注意:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码事漫谈

感谢支持,私信“已赏”有惊喜!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值