UML类图中的关系

UML类图中的关系分为四种:泛化关系、依赖关系、关联关系、实现关系;关联关系又可以细化为聚合和组合

 

1. 泛化(Generalization)

泛化是父类和子类之间的关系,子类继承父类的所有结构和行为。在子类中可以增加新的结构和行为,也可以覆写父类的行为。UML图中实现使用一条带有空心三角箭头的实线指向基类。如下

                                                      

2. 依赖(Dependencies

   依赖关系是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。它只将模型元素本身连接起来而不需要用一组实例来表达它的意思。它表示了这样一种情形,提供者的某些变化会要求或指示依赖关系中客户的变化。
依赖用一个从客户指向提供者的虚箭头表示,用一个构造型的关键字来区分它的种类,通常情况下,依赖关系体现在某个类的方法使用另一个类作为参数或是某个类的方法里定义并使用了另一个类的实例。
UML图中实现使用一条带有箭头的虚线指向被依赖的类。如下

               

3. 关联(Association

关联是一种结构化的关系,指一种对象和另一种对象有联系。给定有关联的两个类,可以从一个类的对象得到另一个类的对象。关联有两元关系和多元关系。两元关系是指一种一对一的关系,多元关系是一对多或多对一的关系。一般用实线连接有关联的同一个类或不同的两个类。当你想要表示结构化关系时使用关联,如果几个类元的实例之间有联系,那么这几个类元之间的语义关系即关联。关联描述了系统中对象或实例之间的离散连接。关联将一个含有两个或多个有序表的类元,在允许复制的情况下连接起来。最普通的关联是一对类元之间的二元关联。关联的实例之一是链。每个链由一组对象(一个有序列表)构成,每个对象来自于相应的类。二元链包含一对对象。关联带有系统中各个对象之间关系的信息。当系统执行时,对象之间的连接被建立和销毁。关联关系是整个系统中使用的“胶粘剂”,如果没有它,那么只剩下不能一起工作的孤立的类。在关联中如果同一个类出现不止一次,那么一个单独的对象就可以与自己关联。如果同一个类在一个关联中出现两次,那么两个实例就不必是同一个对象,通常的情况都如此。二元关联用一条连接两个类的连线表示。聚集表示部分与整体关系的关联,它用端点带有空菱形的线段表示,空菱形与聚集类相连接。组成是更强形式的关联,整体有管理部分的特有的职责,它用一个实菱形物附在组成端表示。每个表示部分的类与表示整体的类之间有单独的关联,但是为了方便起见,连线结合在一起,现在整组关联就像一棵树。

关联关系是通过类的成员变量 来实现的                         

    3.1聚合(Aggregation)

聚合是一种特殊的关联。它描述了“hasa”关系,表示整体对象拥有部分对象。

关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。聚合是较强的关联关系,强调的是整体与部分 之间的关系。

与关联关系一样,聚合关系也是通过类的成员变量来实现的。      

                     图 12: 一个聚合关联的例子

 

3.2 组合(Composition)

组合是聚合的一种形式,它具有更强的拥有关系,强调整体与部分的生命周期是一致的。整体负责部分的生命周期的管理。如果整体被销毁,部分也必须跟着一起被销毁,如果所有者被复制,部分也必须一起被复制。

与关联关系一样,组合关系也是通过类的成员变量来实现的。

 

     图 13: 一个组合关系的例子

 

4. 实现(Realization)

实现关系指定两个实体之间的一个合约。换言之,一个实体定义一个 合约 ,而另一个实体保证履行该 合约 。其实就是接口和实现接口的类之间的关系。

 

          图 10:Professor类和Student类实现Person接口的类图实例
### UML 关系的含义与用法 UML中的关系包括依赖、泛化(继承)、实现、关联、聚合和组合。以下是这些关系的具体含义和用法: #### 1. 依赖关系(Dependency) 依赖关系表示一个的变化会影响另一个。这种关系通常通过使用某个的操作或属性来体现。在UML中,依赖关系用带箭头的虚线表示,箭头指向被依赖的[^1]。 ```plaintext A -> B (A依赖于B) ``` #### 2. 泛化关系(Generalization) 泛化关系即继承关系,表示子是父的一种特殊形式。子继承父的所有属性和方法,并可以添加新的属性和方法或重写父的方法。在UML中,泛化关系用带空心三角形的实线箭头表示,箭头指向父[^2]。 ```plaintext 子 --|> 父 ``` #### 3. 实现关系(Realization) 实现关系表示接口和实现该接口的之间的关系实现了接口所定义的行为。在UML中,实现关系用带空心三角形的虚线箭头表示,箭头指向接口[^3]。 ```plaintext --|> 接口 ``` #### 4. 关联关系(Association) 关联关系表示两个之间存在某种逻辑连接。它可以是一对一、一对多或多对多的关系。关联关系通常用一条实线连接两个,并可以在线上标注角色名称和多重性[^4]。 ```plaintext A --- B (A与B有关联) ``` #### 5. 聚合关系(Aggregation) 聚合关系是关联关系的一种特例,表示整体与部分的关系,是一种“弱拥有”的关系。聚合关系中的整体和部分可以独立存在,且由不同的模块管理。在UML中,聚合关系用空心菱形加实线箭头表示,箭头指向整体。 ```plaintext 整体 <>--- 部分 ``` #### 6. 组合关系(Composition) 组合关系也是整体与部分的关系,但它是“强拥有”的关系。部分不能独立于整体存在,一旦整体被销毁,部分也会随之销毁。在UML中,组合关系用实心菱形加实线箭头表示,箭头指向整体。 ```plaintext 整体 *--- 部分 ``` ### 示例代码 以下是一个简单的UML关系示例代码,展示了泛化、实现、关联、聚合和组合的关系: ```python # 泛化关系示例 class Animal: def speak(self): pass class Dog(Animal): # 子Dog继承父Animal def speak(self): return "Woof!" # 实现关系示例 from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Circle(Shape): # Circle实现Shape接口 def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 # 关联关系示例 class Student: def __init__(self, name): self.name = name class Course: def __init__(self, title): self.title = title self.students = [] def add_student(self, student): self.students.append(student) # 聚合关系示例 class Department: def __init__(self, name): self.name = name self.courses = [] def add_course(self, course): self.courses.append(course) # 组合关系示例 class University: def __init__(self, name): self.name = name self.departments = [] def add_department(self, department): self.departments.append(department) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值