Java设计模式及实践》—1.4 统一建模语言简介

网友投稿 689 2022-05-30

1.4 统一建模语言简介

统一建模语言(Unified Modeling Language,UML)可以帮助我们表示软件的结构:不同的模块、类和对象如何相互交互,以及它们之间的关系是什么。

UML经常与面向对象的设计结合使用,但它具有更广泛的适用范围。然而这超出了本书的范围,因此,下面我们将重点介绍与本书相关的UML功能。

在UML中,我们可以定义系统的结构和行为,并且可以通过图表可视化全部或者部分模型。有两种类型的图表:

结构图用于表示系统的结构。有许多类型的结构图,但我们只讨论类图。对象图、包图和组件图均类似于类图。

行为图用于描述系统的行为。交互图是行为图的子集,用于描述系统的不同组件之间的控制流和数据流。在行为图中,顺序图广泛用于面向对象的设计中。

类图是面向对象设计和开发阶段中使用最多的图类型。类图是一种结构图,用于说明类的结构及类之间的关系。如图1-1所示。

类图对于描述类在应用程序中的结构非常有用。大多数时候,仅仅查看结构就足以了解类如何交互,但有时这还不够。对于这些情况,我们可以使用行为图和交互图,其中顺序图用于描述类和对象的交互。让我们使用顺序图来显示Car对象和Vehicle对象如何在继承和多态示例中进行交互,如图1-2所示。

类之间的关系

在面向对象编程中,除了代表基本概念的继承关系之外,还有一些其他类关系可以帮助我们建模和开发复杂的软件系统:

泛化和实现

依赖

关联、聚合和组合

图 1-2

1.泛化

继承也被称为Is-A关系,因为从另一个类继承而来的类能够被当成父类来使用。

当一个类表示多个类的共享特征时,这称为泛化,例如,Vehicle是Bike、Car和Truck的泛化。类似地,当一个类表示一般类的特殊实例时,这称为特化,因此Car是Vehicle的特化,如图1-3所示。

在UML术语中,描述继承的关系称为泛化。

2.实现

如果说泛化是面向对象中继承概念对应的UML中的术语,则UML中的实现表示面向对象编程中类的接口实现。

我们假设创建了一个名为Lockable的接口,该接口仅由可以锁定的Vehicle实现。在这种情况下,为Car类实现Lockable的图1-3将如图1-4所示。

3.依赖

依赖是最通用的UML关系类型之一。它用于定义一个类以某种方式依赖于另一个类,而另一个类可能依赖于或不依赖于第一个类。依赖关系有时被称为Uses-A关系。

通常,在面向对象的编程语言中,依赖关系用于描述一个类在方法的声明中是否包含第二个类的参数,或者说它只是通过方法将第二个类传递给其他类,而不是使用方法来创建第二个类的实例。如图1-5所示。

图 1-4                                              图 1-5

4.关联

关联表示两个实体之间的关系。有两种类型的关联:组合和聚合。通常,关联关系由箭头表示,如图1-6所示。

5.聚合

聚合是一种特殊类型的关联。如果将继承看作Is-A关系,则可以将聚合视为Has-A关系。

《Java设计模式及实践》—1.4 统一建模语言简介

聚合用于描述以下情况中两个或多个类之间的关系:一个类在逻辑上包含另一个类,但所包含的类的实例又可以独立于第一个类在其上下文之外生存,或者可以被其他的类所引用。例如,部门与教师间存在Has-A关系,每位教师必须属于部门,但如果部门不再存在,教师仍然可以处于活动状态,如图1-7所示。

图 1-6                                          图 1-7

6.组合

顾名思义,一个类是另一个类的组成部分就称两者间存在组合关系。这有点类似于聚合,不同之处在于当主类不再存在时,依赖类不再存在。例如,房子(House)由房间(Room)组成,但如果房子被销毁,房间就不再存在,如图1-8所示。

实际上,尤其是在具有垃圾回收器的Java等语言中,组合和聚合之间的界限并不是很清晰。对象不必手动销毁,当它们不再被引用时,它们会被垃圾回收器自动销毁。因此,从编码的角度来看,我们不需要真正关心处理的是组合还是聚合关系,但是如果我们想要在UML中有一个定义良好的模型,考虑这一点就很重要了。

Java UML

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:工业互联网电商平台,快速实现工业产业智能制造场景
下一篇:数据虚拟化:从“收集”到“连接”的革命
相关文章