• Markdown类图之继承、实现、关联、依赖、组合、聚合总结(十五)


    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

    优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

    人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

    更多原创,欢迎关注:Android系统攻城狮

    欢迎关注Android系统攻城狮

    1.前言

    本篇目的:理解Markdown类图之继承、实现、关联、依赖、组合、聚合的区别?以及如何使用。

    2.Markdown类图继承、实现、关联、依赖、组合、聚合的定义

    1. 继承(Inheritance):一种类与类之间的关系,表示一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承可以实现代码的重用和扩展。

    2. 实现(Implementation):一种类与类之间的关系,表示一个类实现了另一个类定义的接口或协议。实现关系用于描述类之间的约定和契约,确保实现类具有指定的方法和行为。

    3. 关联(Association):一种类与类之间的关系,表示两个类之间的联系和连接。关联关系是对象之间最普遍和常见的关系,可以是单向的、双向的、一对一的、一对多的、多对多的。

    4. 依赖(Dependency):一种类与类之间的关系,表示一个类在执行过程中需要另一个类的协助或依赖。依赖关系通常以参数、返回值、局部变量等方式表现。

    5. 组合(Composition):一种类与类之间的关系,表示一个类由其他类组合而成,并且组合的类不能独立存在。组合关系是一种强关联关系,一旦组合的类不存在,则整个类也不存在。

    6. 聚合(Aggregation):一种类与类之间的关系,表示一个类包含其他类的实例,而这些实例可以独立存在。聚合关系是一种弱关联关系,即使聚合的类不存在,包含类仍然可以存在。

    区分这些类关系的关键在于理解它们的语义和用途。继承和实现关系是针对类之间的继承和接口实现关系,关联和依赖关系描述了类之间的联系和依赖关系,组合和聚合关系描述了类之间的整体与部分的关系。在设计类之间的关系时,需要根据实际需求和语义来选择适合的关系类型。

    3.类图中的符号表示

    在这里插入图片描述

    4.Markdown类图继承、实现、关联、依赖、组合、聚合应用实例

    1. 继承(Inheritance):表示一个类可以继承另一个类的属性和方法。继承关系用于实现类的层次结构和代码的重用。子类继承父类的属性和方法,并可以扩展或重写它们。示例代码:

    class Animal {
        // 父类Animal的属性和方法
    }
    
    class Dog extends Animal {
        // 子类Dog继承了父类Animal的属性和方法,并可以扩展或重写它们
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2. 实现(Implementation):表示一个类实现了另一个类定义的接口或协议。实现关系用于描述类之间的约定和契约,确保实现类具有指定的方法和行为。示例代码:

    interface Drawable {
        void draw();
    }
    
    class Circle implements Drawable {
        // 类Circle实现了接口Drawable的方法draw()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3. 关联(Association):表示两个类之间的连接和关系。关联关系可以是单向的、双向的,一对一的、一对多的或多对多的。关联关系通常是通过类之间的字段或参数来实现。示例代码:

    class Car {
        // 类Car与类Engine之间存在关联关系,Car拥有一个Engine
        private Engine engine;
    }
    
    • 1
    • 2
    • 3
    • 4

    4. 依赖(Dependency):表示一个类在执行过程中需要另一个类的协助或依赖。依赖关系通常是通过类之间的方法参数或局部变量来实现。示例代码:

    class Car {
        // 类Car依赖于类Engine的方法start()
        public void start(Engine engine) {
            engine.start();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5. 组合(Composition):表示一个类由其他类组合而成,并且组合的类不能独立存在。组合关系是一种强关联关系,一旦组合的类不存在,则整个类也不存在。示例代码:

    class Car {
        // 类Car由类Engine组合而成,Car拥有一个Engine
        private Engine engine;
    }
    
    • 1
    • 2
    • 3
    • 4

    6. 聚合(Aggregation):表示一个类包含其他类的实例,而这些实例可以独立存在。聚合关系是一种弱关联关系,即使聚合的类不存在,包含类仍然可以存在。示例代码:

    class Department {
        // 类Department包含多个类Employee的实例,Employee可以独立存在
        private List<Employee> employees;
    }
    
    • 1
    • 2
    • 3
    • 4

    5.说明

    举例说明:

    1.继承:
    定义:是一种继承关系,表示子类继承父类的所有特征和行为。
    表示:使用带三角箭头的实线,箭头指向父类。
    
    示例:
    Animal <|-- Person
    Animal <|-- Dog
    
    
    2.实现
    定义:类实现接口或者抽象类,表示类是接口所有特征和行为的实现
    表示:带三角箭头的虚线,箭头指向接口或抽象类。
    示例:
    Person <|.. Man
    Person <|.. Woman
    
    
    
    3.组合
    定义:是一种整体与部分的关系,但部分不能离开整体而单独存在,随整体的创建而创建,称为强聚合(也属于关联关系的一种),要求代表整体的对象负责代表部分的对象的生命周期。
    表示:带实心菱形的实线,实心菱形指向整体。
    
    示例:
    Company *-- Department
    
    4.聚合
    定义:是一种整体与部分的关系,且部分可以离开整体而单独存在,是关联关系的一种,强关联关系。关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
    表示:带空心菱形的实现,空心菱形指向整体。
    
    示例:
    Car *-- Wheel
    
    5.关联
    定义:是一种拥有的关系,它使一个类知道另一个类的属性和方法;关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
    表示:带普通箭头的实心线,指向被拥有者。
    示例:老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
    
    
    示例:
    Teacher -- Student
    Student <-- Course
    
    6.依赖
    定义:是一种使用关系,即一个类的实现需要另一个类的协助。(一个公司可以有一个或多个员工,但一个员工只能为一家公司工作。)
    表示:带普通箭头的虚线,箭头指向被使用者。
    
    示例:
    Oxygen <.. Animal
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
  • 相关阅读:
    红队专题-新型webshell的研究
    Java工具类Hutool使用
    JAVA毕业设计的工资管理系统计算机源码+lw文档+系统+调试部署+数据库
    9月25日星期一,今日早报简报微语报早读
    反射修改jsessionid实现Session共享
    SJ/T 11294-2018 防静电地坪涂料检测
    求两个递增链表的交集
    Gatekeeper代码导读
    uview的input框,clear没反应的问题
    Android Binder 是怎么实现进程间通信
  • 原文地址:https://blog.csdn.net/u010164190/article/details/133748191