《UML面向对象设计基础》—第1章1.11节习题

1.11 习题
UML面向对象设计基础
①(a)重写机器人hominoid-navigation算法,使其更健壮。

(b)你能发现在Grid中定义的操作insertHominoid(hom:Hominoid,location:Square,out insertOK:Boolean)中的问题吗?

② 对象知道自己的句柄吗?如果知道的话,对象如何表示其句柄?

③ 为什么在消息参数中很少使用相同的参数名既作为输入参数又作为输出参数?假设参数表示具有句柄的对象。

④ 在 1.5.3节中,我说过“在纯面向对象环境中,不需要数据。”换言之,一切都是对象(对变量操作的封装),操作本身通过实现操作的变量指向对象。但确实存在一些数据“归根到底”就是数据。因此,任何东西确实都是对象吗?整数和实数及其成千上万的实例也是对象?如何创建它们?

⑤ 实例操作可能涉及一个类变量。然而在纯面向对象环境中,类操作不能直接涉及对象内的实例变量。为什么?

⑥ 执行1.7节的Glider.New,创建了多少对象?

⑦ 面向对象程序是如何进行初始化的?

⑧ 关掉计算机时,对所有的对象会有什么影响?

⑨ 关掉计算机时,对所有的类会有什么影响?

⑩ 你能想出某种语言如C++中有关面向对象的健壮的封装机制的一种简单方法吗?

11.tif Peter Wegner 在一篇顶级论文中,将环境划分为对象结构(object-structured)、基于对象(object-based)、基于类(object-class)或面向对象(object-oriented)几个范畴。第一个范畴只具有封装和状态保持特性;第二个范畴增加了对象标识特性;第三个范畴增加了类的概念;最后一个范畴增加了继承和本章提到的其他特性。判断你目前使用的语言最接近这四个范畴中的哪一种。

12.tif 我在本章中曾提到过Java语言支持单继承但不支持多继承。因为类修饰符extends最多扩展一个其他类。但类内部implements(实现)许多接口。因此,我的说法正确吗?如果你熟悉Java语言,请解释一下Java语言中,继承机制中的extends和implements之间的区别。

13.tif 请你选择一种面向对象编程语言重写机器人伪代码。

14.tif 考察你或你的公司购买的一种厂商宣称为“面向对象”的软件。软件的哪些特性声明厂商是“面向对象”的?你认为厂商的宣称恰当吗?如果是这样,你得益于产品吹捧的哪些面向对象特性?

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2024-10-23 04:34:26

《UML面向对象设计基础》—第1章1.11节习题的相关文章

《UML面向对象设计基础》—第1章1.5节消息

1.5 消息 UML面向对象设计基础 对象通过消息请求另一个对象执行活动.许多消息还具有将信息从一个对象传送给另一个对象的作用.大多数老前辈都将消息列为重要的面向对象特性. 消息(message)是发送对象obj1向目标对象obj2发送请求的载体,申请对象obj2的一个方法. 本节对消息特性进行了剖析,描述了消息参数的特点,发送消息对象的角色,接收消息对象的角色及消息的三种类型. 1.5.1 消息结构 消息由几个含义组成,每个含义在面向对象设计中都十分重要.实际上,本书从头到尾会多次用到消息的特

《UML面向对象设计基础》—第1章1.7节继承

1.7 继承UML面向对象设计基础如果你写了一个类C,后来又发现一个类D 除一些额外的属性和操作外与类C几乎是一样的,你会怎么办呢?一种办法是简单地复制C的所有属性和操作,然后将其放到D中.但这种方法不仅增加了额外的工作,而且复制本身也存在维护的麻烦.更好的方法是让类D向类C"请求使用其操作",这种方法称为继承(inheritance). 继承(从C到D)是指类D在类C中隐式地定义其每个属性和操作,就好象 这些属性和操作是在类D本身中定义一样. C称为D的超类.D称为C的子类. 换言之

《UML面向对象设计基础》—第1章1.12节答案

1.12 答案UML面向对象设计基础①(a) 有两个建议:一是假设START方块完全被墙包围,二是假设某人在方格中忘记标记FINISH方块.修改算法处理这两种情况以及其他任何你考虑到的异常情况,如没有对advanceOK是否为真安全检查. (b)该操作中的问题是:Grid对象中的insertHominoid操作需要location:Square (Hominoid对象的开始位置)的信息吗? 应该使用该信息告诉Homoid对象它的初始位置,但Homoid没有定义setLocation操作!因此,不

《UML面向对象设计基础》—第1章1.10节本章小结

1.10 本章小结 UML面向对象设计基础 因为"面向对象"在英语中就没有绝对优势的定义,因此,针对面向对象定义的特性从来就没有一致的意见.我本人认为以下特性对面向对象是至关重要的:封装.信息/实现隐藏.状态保持.对象标识.消息.类.继承.多态性及一般性. 面向对象的封装产生一个由表示对象状态的属性及其操作组成的软件结构("对象"),用实现的术语讲,就是操作的方法处理保持对象状态的变量.封装确保对对象内部信息的任何修改(或访问)都必须通过对象的操作. 信息/实现隐藏

《UML面向对象设计基础》—第1章1.9节一般性

1.9 一般性 UML面向对象设计基础 一般性(genericity)指一个或多个类内部使用的类C的结构,仅在运行时(即示例类C的对象时)才提供. 说明一般概念的最好方式是讲述一个不堪回首的故事.当时我还是一名大学生,学习一门数据结构(Data Structures)的课程101.有一个学期,Rossini 教授给我们留了一项作业,设计和编程整数有序平衡二叉树(见图1.22).平衡二叉树的主要特点是所有的叶子在同层上拉平. 在往树中插入另一个整数(如5 ,见图1.23)之前,一切顺利.插入整数5

《UML面向对象设计基础》—第2章2.4节面向对象的益处

2.4 面向对象的益处 UML面向对象设计基础 本节的题目既迎合愤世嫉俗者又符合盲从者. 一些反对者可能会说面向对象没有什么优点:它仅是一种流派或是一场从西方一些地区引发起的全球性阴谋.而一些激进派则宣称面向对象是一流的并且是所有软件成功的唯一途径.面向对象不仅适用于Windows系统,而且还适用于无所不能的分布式Web体系结构. 这两种说法都太极端.作者认为面向对象是有用的,但不能神化,它还不够完美,其特定实用程序依赖于在软件开发过程中的使用方法. 没有一种有价值的软件工程方法可以成为"当年时

《UML面向对象设计基础》—第2章2.1节面向对象的起源

第2章 面向对象简史 UML面向对象设计基础 前面讨论了面向对象的固有特性,现在来看一下面向对象是如何适用于软件开发的广阔领域. 当听说Wolfgang Pauli教授提出一种新的基本粒子(μ介子,μ- meson或muon)时,Isidor I .Rabi教授曾经立即予以反驳:"谁承认这种说法?"鉴于此事例,我在本章开头部分列出一些对面向对象有贡献的人士.下面将面向对象置于社会环境中,讨论对这种软件方法的看法.然后,将面向对象置于工程环境中,将面向对象与电子学做一个类比.最后,阐述面

《UML面向对象设计基础》—第2章2.2节面向对象的成熟期

2.2 面向对象的成熟期 UML面向对象设计基础 本节介绍软件工业如何促进面向对象时代的真正到来. 老生物学家们常爱发表这样的言论:个体生物重演了生物发展史.其含义是个体生物胚胎的发展通常演绎着生物整体发展的进化过程(如人类胚胎的发育过程).当然在时间上存在很大的差异.个体生物的发展可能只有几个月,而整体生物却世代繁衍. 尽管老生物学家的说法无庸置疑,但在软件工程中却出现了一种新观点:面向对象软件工程的历史重演了传统软件工程的历史.当然在时间跨度上也存在很大的差异.形成成熟的过程和数据库结构花费

《UML面向对象设计基础》—第2章2.5节本章小结

2.5 本章小结 UML面向对象设计基础 在面向对象中有一种说法,即面向对象构件与电子集成电路有些类似.至少在软件中有机会象现代电子工程师那样构造系统:可以通过预制构件的连接实现有效的抽象.但为了实现这一点,首先必须标识正确的软件抽象,然后以构造的方式进行联接. 要想掌握"软件集成电路"的技术,就必须广泛而深入地研究面向对象."面向对象"是一个术语,融合了从20世纪60年代到现在许多软件研究者的思想.但并非所有人都赞成这个观点.一些激进派认为面向对象是对过去的一个完