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

举报
华章计算机 发表于 2019/07/22 10:48:03 2019/07/22
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一书中的第1章,第1.4节,[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.

1.4 统一建模语言简介

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

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

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

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

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

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

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

image.png

类之间的关系

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

  • 泛化和实现

  • 依赖

  • 关联、聚合和组合

 image.png

图 1-2

1.泛化

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

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

image.png

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

2.实现

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

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

3.依赖

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

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

             image.png

       图 1-4                                              图 1-5

4.关联

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

5.聚合

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

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

             image.png

       图 1-6                                          图 1-7

6.组合

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

image.png

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


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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