白话讲解UML的4大关系:关联关系、泛化关系、依赖关系、实现关系

UML:统一建模语言。
作用:用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
符号图:
在这里插入图片描述

关联关系

关联:假设有A、B两个实体,A和B之间有某种联系(1:n、n:m、1:1)就属于关联
符号:一条实线(有些地方会在两端加上箭头),实体:实体
举例:学生可以读很多书,书可以供多个学生阅读,所以学生和书的关系属于多对多。“0…*”表示没有最低最高限制

在这里插入图片描述

特殊关联:聚合、组合

关联关系还有两种特殊的关联:聚合和组合

聚合:部分可脱离整体存在
符号:实线+空心菱形,部分:整体
举例:员工和公司之间的关系,员工属于公司的一部分,那么公司破产了倒闭了,员工可以脱离公司
不好理解??再来一句:我只是卑微的打工人,我是上班不是上天,公司没了我还在

在这里插入图片描述

组合:部分依附于整体而存在,换句话说就是部分不可以脱离整体
符号:实线+实心菱形
举例:人和心脏(这个人的心脏,不是别人的),心脏属于人的一部分,人没了,心脏也就没了

在这里插入图片描述
而聚合和组合的区别就是:相反的
在这里插入图片描述

泛化关系

泛化:这个词不知道怎么解释,可以把他倒过来理解就是子类和分类的关系,通常我们说子类继承父类,那么倒过来就是父类泛化子类,当然你也可以说父类被子类继承
符号:实线+空心三角
举例:猫、小狗和动物的关系,猫和小狗都有相似的特征,它们称为动物,那么也就是动物泛化猫or小狗

在这里插入图片描述

依赖关系

依赖:一个实体引用了另外一个实体的内容,当被依赖方的内容发生改变时会影响到另一方
符号:虚线+箭头,依赖:被依赖
举例:我和饭堂,我的行为有干饭,但是饭只有在饭堂才会,所以我的干饭行为依赖于饭堂,当饭堂没有西红柿炒蛋盖浇饭时,我就没得吃了,所以饭堂会影响我

在这里插入图片描述

实现关系

实现:xxx被xxx实现了,一般是值接口和类的关系,也就是类实现了接口
符号:虚线+三角
举例:有了类才有接口,假如我需要实现一个查询订单的接口,而订单包含用户信息、商品信息,那我需要写用户查询类和商品的查询类,通过调用这两个类实现了查询订单接口

### 泛化关系的概念及其在面向对象编程中的应用 #### 什么是泛化关系泛化是一种常见的建模工具,在统一建模语言(UML)中被广泛使用。它表示一种“is-a”的关系,即子类是父类的一个具体实例[^1]。这种关系通常通过继承机制来实现,尽管并非所有情况下都需要显式的继承。 #### 面向对象编程中的泛化关系示例 以下是几个具体的泛化关系的例子: 1. **动物与狗的关系** 假设有一个 `Animal` 类,而 `Dog` 是其子类。在这种场景下,`Dog` 继承自 `Animal` 并实现了更具体的行为。例如: ```java public class Animal { protected String name; public void makeSound() { System.out.println("Some generic sound"); } } public class Dog extends Animal { @Override public void makeSound() { System.out.println("Bark Bark!"); } } ``` 这里展示了如何通过继承实现泛化关系,其中 `Dog` 是 `Animal` 的特例[^1]。 2. **车辆与汽车的关系** 考虑一个更为复杂的层次结构,比如 `Vehicle` 和它的派生类 `Car`。这里同样体现了泛化的概念: ```cpp class Vehicle { public: virtual void drive() const { std::cout << "Driving a vehicle\n"; } }; class Car : public Vehicle { public: void drive() const override { std::cout << "Driving a car\n"; } }; ``` 3. **几何形状的抽象** 几何图形是一个经典的案例,展示了一个基类和多个子类之间的泛化关系。假设我们定义了一个名为 `Shape` 的抽象类以及两个派生类 `Circle` 和 `Rectangle`: ```python from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * (self.radius ** 2) class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height ``` 上述代码片段说明了如何利用 Python 中的继承特性表达泛化关系,并支持多态行为[^4]。 #### 泛化与其他 UML 关系的区别 除了泛化之外,还有其他几种重要的 UML 关系,如依赖关联实现。每种关系都有特定的应用场合。例如,依赖强调的是某个类的变化会影响另一个类的功能;关联则描述了对象之间较为持久的连接;而实现主要用于接口和其实现者之间的联系[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值