本书提供了《软件工程理论与实践》课程中各章节的重要习题解答,由许家珆编写。它旨在帮助学生加深对软件开发流程的理解和应用。
习
1. 与传统程序设计模式中的过程调用相比,消息传递机制有何本质区别?
答: (1) 消息传递必须给出信道的信息,通常要指出明显的接收方。
(2) 由于接受方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一 接受方发送同样的信息,可因接受方的当前状态不同而得到不同的结果。
(3) 消息传递可以是异步的,发送方可以不必等待接收方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。
2.阐述面向对象的特征,并做简要解释。
答: (1) 对象唯一性。 每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。
(2) 分类性。 是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。
(3) 继承性。 是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。
(4) 多态性。 指的是相同的操作或函数,过程作用于多种类型的对象上,并获得不同的结果。
3.Coad方法主要由面向对象分析OOA和面向对象设计OOD组成。OOA方法分析过程和构造OOA概念模型的顺序由5个层次构成,请简述这5个层次。
答: (1) 发现类及对象。描述如何发现类及对象,从应用领域开始识别类及对象,形成整个应用的基础,然后据此分析系统的责任。
(2) 识别结构。该阶段分为两个步骤。第一,识别“一般-特殊”结构,该结构捕获了识别出的类的层次结构;第二,识别“整体-部分”结构,该结构用来表示一个对象如何成为另一个对象的一部分以及多个对象如何组装成更大的对象。
(3) 定义主题。主题由一组类及对象组成,用于将类及对象模型划分为更大的单位,便于理解。
(4) 定义属性。其中包括定义类的实例(对象)之间的实例连接。
(5) 定义服务。其中包括定义对象之间的消息连接。
4.面向对象程序设计有哪些优点?
答:开发时间短、效率高、可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性 ,可以在应用程序中大量采用成熟的类库,从而缩短开发时间,并使程序更易于维护、更新和升级。继承和封装使得应用程序的修改带来的影响更加局部化。
5.比较面向对象方法与结构化方法的特点。
答:分析是问题抽象(做什么),设计是问题求解(怎么做),实现是问题的解(结果)。任何方法学对客观世界的抽象和求解过程都是如此。在问题抽象阶段,结构化方法以功能为主导,按数据变换的过程寻找问题节点,对问题进行分解。因此与面向对象方法强调的对象模型不同,描述数据变换的功能模型成为结构化方法的重点。
由于理解过程的不同,在设计上,结构化方法学产生自顶向下、层次清晰的系统架构;而面向对象的方法能够映射到数据库结构中,很容易实现程序和数据结构的封装。在软件工程的基本原则中有“形式化”一条,即对问题世界的抽象结论应该以图形语言(如UML)表述出来。
6.当重要的对象被发现后,通过一组互相关联的模型详细表示类之间的关系和对象的行为,这些模型从四个不同的侧面描述了软件体系结构、静态逻辑、动态逻辑以及物理特性。试描述一下这四种特性。
答:静态逻辑模型描述实例化(类成员关系)、关联、聚集(整体/部分)及一般化(继承)等关系。动态逻辑模型通过一组协同的对象,对象间消息的有序序列和参与对象可见性定义来描绘系统运行时的行为。静态物理模型通过模块表示代码布局;而动态物理模型则描述软件的过程和线程结构。
习题五答案
1. 下列不是建模元素的是(D)。
A) 关联 B) 聚合 C) 依赖 D) 笔记
2. UML具有扩展性,常见的扩展机制有(BCD)。
A) 修饰 B) 版类 C) 加标签值 D) 约束
3. UML支持的建模方式包括(ABD)。
A) 静态建模 B) 动态建模 C) 模块化建模 D) 功能建模
4. 下列可用于动态建模的是(ACD)。
A) 状态图 B) 类图 C) 序列图 D) 活动图
5