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 考察你或你的公司购买的一种厂商宣称为“面向对象”的软件。软件的哪些特性声明厂商是“面向对象”的?你认为厂商的宣称恰当吗?如果是这样,你得益于产品吹捧的哪些面向对象特性?
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。