uml图的几种关系怎么表示
UML图的几种关系包括:
继承关系(Inheritance):用带空心三角形的实线箭头表示,箭头指向父类,表示子类继承父类的属性和方法。
实现关系(Implementation):用带空心三角形的虚线箭头表示,箭头指向接口,表示类实现接口的方法。
关联关系(Association):用带实心箭头的实线或虚线表示,箭头指向被关联的类,表示两个类之间有关联。
聚合关系(Aggregation):用带空心菱形的实线箭头表示,箭头指向被聚合的类,表示整体和部分之间的关系。
组合关系(Composition):用带实心菱形的实线箭头表示,箭头指向被组合的类,表示一个类是另一个类的组成部分。
依赖关系(Dependency):用带箭头的虚线表示,箭头指向被依赖的类,表示一个类依赖于另一个类。
uml类图几种关系的代码体现
UML 类图中的关系及其代码实现
继承 (Inheritance)
继承表示一种 "is-a" 的关系,在 Python 中可以通过 class
定义来体现这种父子类之间的关联。
class Animal:
def speak(self):
pass
class Dog(Animal): # Dog is an Animal
def speak(self):
return "Woof!"
子类可以重写父类的方法并调用其属性[^1]。
聚合 (Aggregation)
聚合是一种弱的 “has-a” 关系,意味着整体对象拥有部分对象但是不控制它们的生命期。这通常通过组合实例变量完成:
class Department:
def __init__(self, name):
self.name = name
self.employees = []
class Employee:
def __init__(self, id, department=None):
self.id = id
self.department = department
hr_dept = Department('HR')
emp1 = Employee(101, hr_dept)
print(emp1.department.name) # 输出 'HR'
这里员工可以在创建时被分配给部门,也可以之后再设置所属部门[^2]。
组合 (Composition)
组合也是一种强形式的 “has-a”,它暗示着当容器对象消失时组件也会随之销毁。Python 中可通过初始化参数传递依赖项:
from datetime import date
class Address:
def __init__(self, street, city):
self.street = street
self.city = city
class Person:
def __init__(self, name, birth_date, address_info):
self.name = name
self.birth_date = birth_date
self.address = Address(*address_info)
person = Person("Alice", date.today(), ("Main St.", "Wonderland"))
del person # 当删除Person对象时Address也被自动清理
此例子展示了地址作为人的组成部分而存在;如果人不存在,则该特定住址也无意义[^3]。
关联 (Association)
两个独立实体之间简单的双向或多向联系称为关联。此类连接可能涉及多个角色或方向上的导航权限。
class Teacher:
def teach(self):
print(f"{self} teaches.")
class Student:
teacher = None
@classmethod
def set_teacher(cls, tchr):
cls.teacher = tchr
t = Teacher()
Student.set_teacher(t)
s = Student()
if s.teacher:
s.teacher.teach() # 可能会打印出教师教课的信息
在这个场景下,学生和老师相互作用但彼此间并没有所有权的概念[^4]。
依赖 (Dependency)
依赖是指一个类使用另一个类的服务或接口的情况,通常是临时性的交互而不是长期持有对方引用。
def send_email(email_service, recipient, message):
email_service.send(recipient=recipient, content=message)
class EmailService:
def send(self, **kwargs):
print(f'Sending "{kwargs["content"]}" to {kwargs["recipient"]}.')
email_svc = EmailService()
send_email(email_svc, "example@example.com", "Hello!")
函数 send_email()
对象仅在其内部短暂地利用到了邮件服务的功能[^5]。
uml用例图的几种关系
UML用例图中的四种主要关系
1. 关联关系
关联关系表示参与者与用例之间或者不同用例之间的交互连接。这种关系表明某个参与者参与了特定的用例,或者是两个用例间存在某种形式的合作或依赖[^3]。
2. 包含关系
包含关系是一种强制性的组合方式,在此情况下,基本用例会无条件调用另一个被称为“被包含”的用例。这意味着每当执行该基本用例时,“被包含”部分总是会被触发并完成其定义的功能。在图形上表现为一条带有箭头的实线加上《include》标签,箭头方向指向被包含的用例[^2]。
graph TD;
A[基础用例] -->|<<include>>| B(被包含用例);
3. 扩展关系
扩展关系允许在一个已有基础上增加额外的行为逻辑而不改变原有结构。具体来说,如果某些条件下发生,则可以从外部引入一个新的用例来补充现有流程;反之则不会影响原过程正常运行。为了区分于其他类型的链接,在绘图时表示为带箭头的虚线加《extend》标记,并且箭头应指向作为目标的基础用例而非发起方即扩展者。
graph TD;
C[基础用例] -.->|<<extend>>| D{扩展用例};
4. 泛化关系
泛化指的是特殊化的过程——更具体的子类继承自更为通用的父类特性的同时还可以添加自己独有的属性和方法。对于用例而言,这意呸着一个特殊的用例可以继承一般性用例的所有特征,并在此之上进一步细化或修改。在图表里通常画成从特化的用例指向更加普遍的那个实体的一条直线,末端附有三角形符号代表继承的概念[^1]。
graph TD;
E[派生/特殊用例] -->|<<generalization>>| F[基类/通用用例];
相关推荐














