《设计模式解析》第一章 面向对象泛型 复习题

 

第一章             面向对象泛型 复习题

简答题

1. 叙述功能分解中使用的基本方法?

先定出要实现该功能,所需要的几个主要步骤,再对于每个步骤进行细分,将功能实现分解。

 

2. 导致需求变更的三个原因是什么?

a.用户开始对于需求的不明确,而随着项目的成型,有了进一步的需求。

b.开发者按照自己所认为的方式去开发,与用户所预期的不同。

c.一开始定义的需求不完善,后续需要添加其他需求。

 

3. 我提倡用责任而不是功能来思考。这意味着什么呢?请举出一个例

子。

         一个对象可能能够提供多种功能,但并非所有的功能都是他的责任。用责任来思考能够让一个对象做到:只关心他自己要做的事情,而不关心其他对象的行为方式。

         电脑有许多功能:接受键盘输入、处理数据、显示输出等。但电脑无需独自承担所有责任。他可以把输出的责任交给显示器,处理数据的责任交给CPU,这样,他就只需要告诉其他对象要“做什么”,而让他们自己处理要“怎么做”。

        

4. 给出耦合和内聚的定义。什么是紧耦合?

         内聚:一个类或组件之间关联的紧密程度。

         耦合:不同类或组件之间的紧密程度。

         紧耦合:不同的类或组件之间,又过于紧密的关联,导致一旦一个地方改变,会导致许多相关联的变化。

 

5. 对象接口的目的是什么?

         为类提供规约而不提供实现。定义了一系列的动作,但不具体定义其实现方式,留给实现类进行。

6. 给出类实例的定义。

         类的一个特例,包含了特定数据(状态)的类对象。

7. 类是一个对象行为的完整定义。这句话说明了对象的哪三个方面?

         对象是类的一个特例。对象中包含了操作该对象的行为方法。对象中包含了特定的状态。

8. 抽象类的作用是什么?

         用一个通用的形式,为一组相关的类提供了一个通用的类名,并定义了能够共用的方法。

9. 对象可能具有的三种主要可访问性是什么?

         Private,protect,public

10. 给出封装的定义,并举出一个行为封装的例子。

         封装:各种隐藏,包括了行为、实现、设计等隐藏。

11. 给出多态的定义,并举出一个多态的例子。

         使用基类的形式来引用其不同派生类的对象,并能够表现出派生类的行为。

12. 观察对象的三种视角是什么?

         实现、规约、概念

阐述题

1. 有时候,程序员使用“模块”来隔离不同区域的代码。这是应对需求变更的有效方式吗?为什么?

         答:使用“模块”,将不同功能块的代码进行分离。能够一降低系统的复杂度,如果设计得当,在模块内高内聚,模块间低耦合,这样,减少不同模块间的相互关联,使得系统更好维护,而必然能够在一定程度上的应对需求变更。但仅仅使用“模块”化,而没有对模块内的类进行好的设计,并不能很好的应对需求变更。

 

2. 将抽象类定义为不能实例化的类局限性很大,为什么呢?抽象类更好的(或者至少,另一种)理解方式是什么?

答:抽象类的这种定义仅仅是在实现视角来看待的。如果这么理解,仅仅了解抽象类在编码时的使用规约。而不能够了解他应该在合适用,会有何种作用,因此,在设计的时候,必然会导致使用方式的混淆。

         抽象类,是一组相关类的占位符。

 

3. 行为的封装是怎样帮助限制需求变更带来的影响的?它又怎样挽救程序员免于无意导致的副作用?

         将行为进行封装,这样,外界的调用者只需要通知对象执行某个行为,而无需知道该对象对于该行为的具体实现。这样,当该行为的实现方式变化时,则不会影响到调用者。

 

4. 接口怎样有助于保护对象不受其他对象变化的影响?

         接口,定义了成员的规约,而不提供具体的实现,其实现由具体的类提供。这样,外界只能调用暴露的接口,而对于具体的实现一无所知。这样,当对象变化的时候,只要接口仍然存在,就不会影响到其他对象。

 

5. 在一个系统中要使用教室作为描述对象。请从概念视角描述教室。

         教室所承担的责任有:提供桌椅,日光灯,黑板,讲台,并暴露给外界进出教室门的方式。

 

观点与应用题

1. 需求变更是系统开发人员所面临的最大挑战之一。请从你自己的亲身经历中找出一个支持这一说法的例子。

        

 

2. 功能分解方法在遇到需求变更时存在本质上的弱点。你同意这种说法吗?为什么?

由于主程序负责控制子程序,承受的责任太多了,必然导致职责混乱,负担太重。而当遇到需求变更时,一个细节的改动都可能导致整个项目的较大的变动。特别是某个步骤变化时,需要对这个函数或者模块进行修改。

 

3. 你认为应对需求变更的最佳方法是什么?

         与其抱怨总是变化的需求变更,不如做一些实质性的行为来应对需求变更,以不变应万变。我们很难知道具体变化的需求,但要多思考系统的有可能变化的部分,将变化的部分封装起来,进行可变的设计。

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值