《数据结构与抽象:Java语言描述(原书第4版)》一P.4.3 统一建模语言

简介:

本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第1章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

P.4.3 统一建模语言

图P-4中的用例图是更强大表示法的一部分,这个表示法称为统一建模语言(Unified Modeling Language,UML)。设计人员使用UML来说明软件系统中必需的类及它们的关系。UML能给出复杂系统的整体视图,比用自然语言或程序设计语言描述更有效。例如,英语可能有二义性,而Java代码提供更多的细节。给出明确的类之间的交互图,是UML的强项之一。
除了用例图之外,UML还能提供图,类图将每个类的描述放在类似于CRC卡的方框中。方框内包含类名、它的属性(attribute)(数据域)和操作(operation)(方法)。例如,图P-7显示了类CourseSchedule的方框。一般地,方框中省略了构造方法、get方法和set方法等公共操作。
随着设计的进展,当你描述一个类时你可以提供更多的细节。表示域或方法的可见性时,可以在其名字前加上一个符号,+用于公有的,-用于私有的,而#用于保护的。还可以在域、参数或返回值后加上一个冒号(:),然后写上它的数据类型。因此,在图P-7中可以有如下的数据域
image

而方法如下
image

在UML中表示接口非常类似于表示类的方式,只是要在名字前加上<>。接口Measurable的表示如图P-8所示。

image

自测题10 附录C中给出的类Name的类图是什么样的?

在类图中,线连接了类的方框,表示类之间的关系,包括继承层次。例如,图P-9中的类图表示类Undergrad
Student和GradStudent都继承自Student类。空心箭头指向父类。在UML中,父类Student称为UndergradStudent
和GradStudent的泛化(generalization)。如果类实现了一个接口,则从类到接口画一条有空心箭头的虚线。

image


关联(association)是两个不同类的对象之间的关系。一般地,关联是称为协作的CRC卡。例如,类Student、CourseSchedule和Course之间存在的关系。图P-10表示UML如何用箭头表示这些关系。例如,类CourseSchedule
和Course之间的箭头,表示类CourseSchedule的对象和类Course的对象之间的关系。这个箭头指向Course,表示职责。所以,CourseSchedule对象应该能告诉我们它包含的课程,但Course对象不能告诉我们它属于哪个课程表。UML称这种表示为可导航性(navigability)。


image

这种特殊的关联称为单向的(unidirectional),因为它的箭头指向一个方向。两端都有箭头的线表示的关联称为双向的(bidirectional)。例如,Student对象能找到它的课程表,而CourseSchedule对象能找到它所属的学生。可以假定不带箭头的线表示的关联的可导航性,在设计的当前阶段尚未确定。
每个箭头的末端都是数字。在CourseSchedule和Course之间的箭头的前端,你看见标注为0..10。这个符号表示每个CourseSchedule对象与0~10门课程关联。这个箭头的另一端是星号。它的含义与记号0..∞是一样的。每个Course对象可以与许多课程表相关联——或者一个都不关联。类图还表示一个Student对象和一个CourseSchedule对象之间的关系。箭头两端的这个记号称为关联的基数(cardinality)或多样性(multiplicity)。

自测题11 将图P-9和图P-10合成为一个类图。然后添加类AllCourses,它表示本学期开设的所有课程。你需要添加的新关联有哪些?
相关文章
|
29天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
82 1
|
30天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
1天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
6天前
|
存储 供应链 Java
《Java 简易速速上手小册》第3章:Java 数据结构(2024 最新版)
《Java 简易速速上手小册》第3章:Java 数据结构(2024 最新版)
6 1
|
7天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
7天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
146 10
|
12天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
13天前
|
Java API
编码的奇迹:Java 21引入有序集合,数据结构再进化
编码的奇迹:Java 21引入有序集合,数据结构再进化
16 0
|
23天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
15 1
Java语言打印九九乘法表(详解)
|
29天前
|
XML 存储 算法
Java数据结构与算法-java数据结构与算法(五)
Java数据结构与算法-java数据结构与算法
48 0