类间关系和参数方向

举报
码乐 发表于 2025/03/31 15:35:29 2025/03/31
【摘要】 1 简介在面向对象编程 (OOP) 中,类是用于创建对象的蓝图或模板。对象是类的实例,每个类定义一组属性(数据成员)和方法(函数或过程),从该类创建的对象将拥有这些属性。属性表示对象的特征或属性,而方法则定义对象可以执行的行为或作用。类名称: 类的名称通常写在类框的顶部隔间中,并居中加粗。属性:属性(也称为属性或字段)表示类的数据成员。它们列在类框的第二个隔间中,通常包括可见性(例如,p...

1 简介

在面向对象编程 (OOP) 中,类是用于创建对象的蓝图或模板。

对象是类的实例,每个类定义一组属性(数据成员)和方法(函数或过程),从该类创建的对象将拥有这些属性。
属性表示对象的特征或属性,而方法则定义对象可以执行的行为或作用。

  • 类名称:

      类的名称通常写在类框的顶部隔间中,并居中加粗。
    
  • 属性:

    属性(也称为属性或字段)表示类的数据成员。它们列在类框的第二个隔间中,通常包括可见性(例如,public、private)和每个属性的数据类型。

  • 方法:

    方法(也称为函数或作)表示类的行为或功能。它们列在类框的第三个隔间中,包括每个方法的可见性(例如,public、private)、返回类型和参数。

  • 可见性表示法:

可见性表示法指示属性和方法的访问级别。常见的可见性表示法包括:

    +对于 public(对所有类可见)
		-对于 private(仅在类中可见)
		#对于 protected (对 subclasses 可见)
		~对于 Package 或 Default Visibility(对同一 Package 中的类可见)

2 参数方向

在类图中,参数方向性是指通过方法参数指示类之间的信息流。它有助于指定参数是 input、output 还是两者兼而有之。此信息对于了解在方法调用期间如何在对象之间传递数据至关重要。

类图中使用了三个主要的参数方向性表示法:

  • In (Input) (输入):

输入参数是在方法调用期间从调用对象 (客户端) 传递到被调用对象 (服务器) 的参数。
它由一个指向接收类(拥有该方法的类)的箭头表示。

  • Out (输出):

输出参数是在方法执行后从被调用对象 (server) 传递回调用对象 (client) 的参数。
它由指向接收类以外的箭头表示。

  • InOut (输入和输出):

InOut 参数同时用作输入和输出。它将信息从调用对象传送到被调用对象,反之亦然。
它由指向和远离接收类的箭头表示。

3 类间关系

在类图中,类之间的关系描述了类在系统内如何连接或相互交互。在面向对象的建模中,有几种类型的关系,每种关系都有特定的用途。

以下是类图中的一些常见关系类型

  • 组合 Composition

image.png

组合是一种更强的聚合形式,表示更重要的所有权或依赖关系。在组合中,零件类不能独立于整个类而存在。构图由整个类侧面的填充菱形表示。

比如 数字通讯录应用程序。
通讯录是整体,每个通讯录条目都是一个部分。每个联系人条目都完全由联系人簿拥有和管理。
如果联系人簿被删除或销毁,则所有关联的联系人条目也会被删除。

因为联系人条目的存在完全取决于联系人簿的存在。如果没有联系人簿,各个联系人条目将失去其意义,无法独立存在。

  • 聚合 Aggregation

1743405704430.jpg

聚合是一种特殊的关联形式,表示“整体-部分”关系。它表示一个类 (整体) 包含另一个类 (部分) 或由另一个类 (部分) 组成的更强关系。聚合由整个类侧面的菱形表示。在这种关系中,子类可以独立于其父类存在。

比如公司可以被视为整体,而员工是部分。员工属于公司,公司可以有多个员工。但是,如果公司不复存在,员工仍然可以独立存在。

  • 关联 Association

image.png

关联表示两个类之间的双向关系。它指示一个类的实例连接到另一个类的实例。关联通常表示为连接类的实线,可选箭头指示关系的方向。

比如一个用于管理库的简单系统。在这个系统中,我们有两个主要实体: Book 和 Library .每个 Library 包含多个 Book,并且每个 Book 都属于一个特定的 Library。

因此 Library 和 Book 之间的这种关系可以表示为一种关联。

“Library” 类可以被视为源类,因为它包含对 “Book” 类的多个实例的引用。

  • 定向关联 Directed Association

image.png

UML 类图中的有向关联表示两个类之间的关系,其中关联具有方向,指示一个类以特定方式与另一个类相关联。

在有向关联中,将向关联线添加一个箭头以指示关系的方向。箭头从启动关联的类指向作为关联目标或受关联影响的类。
当关联具有特定的流或方向性时,将使用定向关联,例如指示哪个类负责启动关联或哪个类依赖于另一个类。

比如在订课系统中“Teacher” 类与 University 系统中的 “Course” 类相关联。定向关联箭头可能从 “Teacher” 类指向 “Course” 类,指示教师与特定课程关联或教授特定课程。

其中 源类是 “Teacher” 类。“教师”班级通过教授特定课程来启动协会。
目标类是 “Course” 类。“Course” 类受关联影响,因为它是由特定的教师教授的。

  • 使用依赖 (依赖项)Usage(Dependency)

image.png

UML 类图中的使用依赖关系表示一个类(客户端)利用或依赖另一个类(供应商)来执行某些任务或访问某些功能。client 类依赖于 supplier 类提供的服务,但不拥有或创建它的实例。

在 UML 类图中,使用依赖关系通常由一条从 Client 端类指向 supplier 类的箭头虚线表示。
箭头指示依赖项的方向,表明 client 类依赖于 supplier 类提供的服务。

比如 “Car”类依赖于“FuelTank”类来管理燃料消耗。

此时“Car” 类可能需要访问 “FuelTank” 类的方法或属性,以检查燃油水平、重新加注燃油或监控燃油消耗。
在这种情况下,“Car” 类对 “FuelTank” 类具有使用依赖性,因为它利用其服务来执行与燃料管理相关的某些任务。

  • 依赖 Dependency

image.png

当一个类依赖于另一个类时,两个类之间存在依赖关系,但这种关系不如关联或继承那么牢固。它表示类之间更松散耦合的连接。依赖项通常用虚线箭头表示。

比如一个 Person 依赖于 Book 的场景。

Person 类:表示阅读书籍的个人。Person 类依赖于 Book 类来访问和读取内容。
Book 类:表示包含要由人员阅读的内容的书籍。Book 类是独立的,可以在没有 Person 类的情况下存在。

比如Person 类依赖于 Book 类,因为它需要访问书籍才能阅读其内容。但是,Book 类不依赖于 Person 类;它可以独立存在,并且不依赖于 Person 类来实现其功能。

  • 泛化(继承) Generalization

1743405641779.png

继承表示类之间的“is-a”关系,其中一个类(子类或子类)继承另一个类(超类或父类)的属性和行为。
继承由一条实线表示,实线带有一个封闭的空心箭头,从子类指向超类。

比如在银行账户的例子中,我们可以使用泛化来表示不同类型的账户,例如活期账户、储蓄账户和信用账户。

Bank Account 类用作所有类型银行账户的通用表示,而子类 (Current Account、Savings Account、Credit Account) 表示继承和扩展基类功能的专用版本。

  • 实现(接口实现) Realization

1743405818862.jpg

Realization 表示类实现接口的功能。它通常用于类实现接口定义的作的情况。
实现由一条虚线表示,虚线带有一个从实现类指向接口的开放箭头。

让我们考虑一个场景,其中 “Person” 和 “Corporation” 都实现了 “Owner” 接口。

所有者接口:此接口现在包括“acquire(property)”和“dispose(property)”等方法,用于表示与获取和处置财产相关的作。

Person 类 (Realization):Person 类实现 Owner 接口,为 “acquire(property)” 和 “dispose(property)” 方法提供具体实现。例如,一个人可以获得房屋的所有权或处置汽车。
Corporation 类 (Realization):同样,Corporation 类也实现了 Owner 接口,为 “acquire(property)” 和 “dispose(property)” 方法提供了特定的实现。例如,公司可以获得房地产的所有权或处置公司车辆。

比如 Person 和 Corporation 类都实现了 Owner 接口,这意味着它们为接口中定义的 “acquire(property)” 和 “dispose(property)” 方法提供了具体的实现。

3 类图的使用场景和步骤

类图表示系统的类、属性、方法和关系,提供其体系结构的清晰视图。它们显示了类之间的各种关系,例如关联和继承,帮助利益相关者了解组件连接性。
类图充当团队成员和利益相关者之间交流的可视化工具,弥合技术和非技术受众之间的差距。它们通过说明设计来指导开发人员进行编码,确保设计和实际实现之间的一致性。许多开发工具允许从类图生成代码,从而减少手动错误并节省时间。

  • 类图的用途

使用类图的主要场景:

这是唯一可以适当描述 OOP 概念各个方面的 UML。
正确设计和分析应用程序可以更快、更高效。
它是部署和组件图的基础。
它结合了正向工程和逆向工程。

  • 绘制类图的步骤

绘制类图涉及可视化系统的结构,包括类、类的属性、方法和关系。以下是绘制类图的步骤:

第 1 步:确定类:

首先确定系统中的类。类表示对象的蓝图,应封装相关的属性和方法。

第 2 步:列出属性和方法:

对于每个类,列出其属性 (属性、字段) 和方法 (函数、作) 。包括数据类型和可见性(公共、私有、受保护)等信息。

第 3 步:确定关系:

确定类之间的关系。常见关系包括关联、聚合、组合、继承和依赖关系。了解这些关系的性质和多重性。

第 4 步:创建类框:

为每个标识的类绘制一个矩形(类框)。将类名放在框的顶部隔间中。将框划分为属性和方法的隔间。

第 5 步:添加属性和方法:

在每个类框中,列出其各自区间中的属性和方法。使用可见性表示法(+ 表示 public,– 表示私有,# 表示受保护,~ 表示 package/default)。

第 6 步:绘制关系:

绘制线条以表示类之间的关系。使用箭头指示关联或依赖关系的方向。不同的线型或符号可用于各种关系。

步骤 7:标签关系:

如果需要,使用 multiplicity 和 role names 标记关系。多重性表示关系中涉及的实例数,角色名称阐明关系中每个类的角色。

第 8 步:审查和优化:

查看您的类图,以确保它准确地表示系统的结构和关系。根据反馈和要求根据需要优化关系图。

【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。