同学去美国了,发来了一道题,这种题在我们学校是不可能有的,声明我们也是211学校,感到有点悲哀。
题目如下:
Part A:      
Inheritance is a powerful concept, but is also one of the most abused
concepts in OOP. Give an example where inheritance is a reasonable choice.
Explain why you think it is a good choice in your example. Then give
an example where delegation rather than inheritance is a better choice.
Again explain why you think it is a good choice in your example.
Feel free to use any language you like for your examples.YOUR ANSWER CAN GO HERE OR IN A SEPARATE FILE IN THE HW1 DIRECTORYPart就是比较委托和继承的例子

解决方案 »

  1.   

    no body can understander?
    i am feel so sadder!
      

  2.   

    make sure you can speak chinese fluently first  -_-#
      

  3.   

    sorry,there is something worng。
      

  4.   

    这东西我记得在《Java与模式》里有讲到。
      

  5.   

    《Java与模式》P658
    很多面向对象的设计专家从1986年就开始警告继承关系被滥用的可能。有一些面向对象的编程语言,如SELF语言,甚至将类的继承从语言的功能中取消掉,改为完全使用委派。
    其他的设计师虽然不提倡彻底取消继承,但无一例外地鼓励在设计中尽可能使用委派关系代替继承关系。比如在[GOF95]一书中,状态模式、策略模式、装饰模式、桥梁模式以及抽象工厂模式均是将依赖于继承的实现转换为基于对象的组合和聚合的实现,这些模式的要点就是使用委派关系代替继承关系。
      

  6.   

    sure ,there is something worng
      

  7.   

    类 A 如果仅仅需要使用类 B 中部分或者是少数的方法时,可以取消类 A 与类 B 的继承关系,采用委托方法间接进行调用。从委托关系上面来看,类 A 与类 B 并不存在明显的继承关系。根据《重构》 11.11 一节上的说明,JDK 中也存在滥用继承的例子,比如 java.util.Stack 继承自 java.util.Vector,《重构》一书建议其应使用委托调用,而不是继承。在《重构》一书的 11.11、11.12 节详细说明了何时应采用委托替代继承,何时应采用继承替代委托。
      

  8.   

    使用到少数方法,应采用委托代替继承这一个概念本身就是比较模糊的,很难定量进行分析什么是少数。也正因为如此在实际的开发过程中很难区分到底是使用委托好,还是使用继承好。从 Stack extends Vector 的例子中就能看出这一点,Stack 从 Vector 中继承过来的 set, setElementAt, removeElementAt, remove, insertElementAt 等方法与 Stack 的特性很难粘到边,因此《重构》一书认为这样的继承在 JDK 类库中是一种滥用。我认为如果两个类之类的继承关系很弱,并不是要到非继承不可的时候时,就不考虑使用继承,而应优先考虑使用委托调用。
      

  9.   

    委托,就是你从空白开始,选择要偶合的东西
    继承,就是把所有东西全先放进来,再把要修改的修改,把要去掉(屏蔽)的去掉。
    如果100个东西里,你只是要5个,那么用委托。
    如果你是要95个,那么就用继承,当然,也可以用委托,只不过多写95行 ....Combine()
      

  10.   

    public class EdwinAction extends ActionSupport {
      继承,当有优良血统工具包的时候,自身功能又有35%以上的功能重叠
      就用继承,但是父类的信息输入和子类要有歧义的一致性。
    }委托在信息请求上要有父子集的一致性。所以委托是一种严格模式,没有继承使用方便。所以JDK的工具包也有继承层次过多的情况。个人感觉,未必对!
      

  11.   

    tij里提到过继承泛滥的问题,也给出了类似“能使用组合,就别使用继承”。
    在一些时候是组合代替了继承,之后又用代理等方式作中间人,破开了组合。
      

  12.   

    呵呵,这题目没感觉到有什么。这个在很多书在讲面向对象编程的前面都会讲到。随便到处一找都有。就是为了告诉你,什么时候才用继承(一般是在逻辑关系上是可以继承的时候),什么时候用关联(聚集?组合?很多时候你不用分清,只要知道是关联就行),为了避免滥用继承。楼主没好好学习吧。学Java的时候,老师就布置过作业,每个人要翻译一篇有关面向对象的文章。