《数据结构与抽象: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,它表示本学期开设的所有课程。你需要添加的新关联有哪些?
相关文章
|
11天前
|
安全 Java 大数据
探索Java的奇妙世界:语言特性与实际应用
探索Java的奇妙世界:语言特性与实际应用
|
2天前
|
存储 缓存 算法
【C 言专栏】C 语言中的数据结构应用
【5月更文挑战第4天】本文探讨了C语言中的核心数据结构,包括数组、链表(单链表和双链表)、栈、队列、二叉树(如二叉搜索树和二叉堆)以及图结构。这些数据结构在程序设计中扮演着关键角色,如数组的快速访问、链表的动态管理、栈和队列的处理流程控制、树和图的复杂关系表示。理解并选择适当的数据结构可优化程序性能,而内存管理和算法优化则进一步提升效率。通过案例分析和展望未来发展趋势,本文旨在帮助读者深化对C语言数据结构的理解和应用。
【C 言专栏】C 语言中的数据结构应用
|
7天前
|
Java
Java语言---面向对象的三大特征之继承
Java语言---面向对象的三大特征之继承
|
7天前
|
存储 Java
Java语言--->数据类型转化以及运算符
本文讲述了Java中的基本数据类型转换和运算符。在转换中,布尔型除外的8种类型可通过默认或强制转换相互转化,如`byte-&gt;short-&gt;int-&gt;long-&gt;float-&gt;double`。默认转换发生在不同类型运算时,系统会转为更大容量类型。强制转换可能引起精度损失或溢出。运算符包括算术(如+可做加法或字符串拼接)、比较、逻辑和赋值运算符。比较运算符如`==`、`&lt;`等产生`boolean`结果,逻辑运算符`&&`、`||`具有短路效应。赋值运算符如`+=`简化了赋值过程。运算符的优先级也进行了简要说明。
|
7天前
|
Java 编译器 程序员
Java语言基础
Java语言基础概览:涵盖关键字(全小写,如`image.png`所示),保留字(如`goto`、`const`),标识符命名规则(避免数字开头和保留字),注释(单行`//`,多行`/*...*/`,及Javadoc注释)以及变量(按数据类型:byte, short, int, long, float, double, char, boolean,注意声明规则和默认类型)。
|
10天前
|
安全 算法 Java
写给Java开发的Go语言协程实践
写给Java开发的Go语言协程实践
15 0
|
11天前
|
存储 安全 Java
Java程序员必须掌握的数据结构:HashMap
HashMap底层原理实现是每个Java Boy必须掌握的基本技能,HashMap也是业务开发每天都需要遇到的好伙伴。如此基础且核心的底层数据结构,JDK也给其赋予了线程安全的功能,我们来看看~
25 1
Java程序员必须掌握的数据结构:HashMap
|
11天前
|
存储 安全 Java
Java并发编程中的高效数据结构:ConcurrentHashMap解析
【4月更文挑战第25天】在多线程环境下,高效的数据访问和管理是至关重要的。Java提供了多种并发集合来处理这种情境,其中ConcurrentHashMap是最广泛使用的一个。本文将深入分析ConcurrentHashMap的内部工作原理、性能特点以及它如何在保证线程安全的同时提供高并发性,最后将展示其在实际开发中的应用示例。
|
12天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
17天前
|
存储 供应链 Java
《Java 简易速速上手小册》第3章:Java 数据结构(2024 最新版)
《Java 简易速速上手小册》第3章:Java 数据结构(2024 最新版)
9 1