美文网首页
浅谈对象组合和继承

浅谈对象组合和继承

作者: 快乐的小梁同学 | 来源:发表于2016-04-22 16:15 被阅读1717次

导语:####


我们在职业生涯中,经常会听到同行的大牛说:“要针对接口编程,而不是针对实现编程”;“优先使用组合而不是继承”。那么今天我就来谈谈对象组合与继承。

    1. 继承和组合是什么
    1. 继承的优缺点
    1. 组合的优缺点

继承和组合是什么


类继承或子类化让我们可以使用其它类来定义类的实现(使用superClass来定义subClass的实现)。子类化常常被称为白箱复用(white-box reuse),因为superClass的内部描述与细节通常对子类可见。
对象组合要求被组合的对象具有良好的接口,并且通过从其他对象得到的引用在运行时运态定义。所以可以将对象组合到其他对象中,以构建更加复杂的功能。由于对象的内部细节对其他对象不可见,它们看上去为“黑箱”,这种类型的复用称为黑箱复用(black-box reuse)。
这就是我们常说的白箱复用和黑箱复用。

继承的优缺点


那么使用类继承或子类化都有些什么优缺点呢:
优点: 1,类继承简单粗爆,直观,关系在编译时静态定义。
2,被复用的实现易于修改,sub可以覆盖super的实现。
缺点:1,无法在运行时变更从super继承来的实现(也不一定是缺点)
2,sub的部分实现通常定义在super中。
3,sub直接面对super的实现细节,因此破坏了封装。
4,super实现的任何变更都会强制子类也进行变更,因为它们的实现联系在了一起。
5,如果在新的问题场景下继承来的实现已过时或不适用,所以必须重写super或继承来的实现。
由于在类继承中,实现的依存关系,对子类进行复用可能会有问题。有一个解决办法是,只从协议或抽象基类继承(子类型化),国为它们只对很少的实现,而协议则没有实现。

组合的优缺点


对象组合让我们同时使用多个对象,而每个对象都假定其他对象的接口正常运行。因此,为了在系统中正常运行,它们的接口都需要经过精心的设计。下面我就来说说他的优缺点
优点:1,不会破坏封装,因为只通过接口来访问对象;
2,减少实现的依存关系,因为实面是通过接口来定义的;
3,可以在运行时将任意对象替换为其他同类型的对象;
4,可以保持类的封装以专注于单一任务;
5,类和他的层次结构能保持简洁,不至于过度膨胀而无法管理;
缺点:1,涉及对象多;
2,系统的行为将依赖于不同对象间的关系,而不是定义于单个类中;
3,现成的组件总是不太够用,从而导致我们要不停的定义新对象。

结语:


尽管有以上缺点,对象组合仍然对系统设计有很多好处。我们可以通过在一些部分用类继承来克服这些缺点,使得利用已有组件创建新的组件较为容易。当然,该用类继承时 还是用类继承吧

相关文章

  • 浅谈对象组合和继承

    导语:#### 我们在职业生涯中,经常会听到同行的大牛说:“要针对接口编程,而不是针对实现编程”;“优先使用组合而...

  • 【python面试指北】3.类和面向对象

    面向对象编程 封装、继承、多态 组合与继承 优先使用组合(has a)而非继承(is a) 类变量和实例变量的区别...

  • [收藏文章]《Java编程思想》之重点笔记

    1、组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做。 组合技术...

  • 2.1.1 Python面向对象三大特性

    点击跳转笔记总目录 Python面向对象三大特性 1,继承 1,继承和组合 组合 继承 2,封装 2.0 私有变量...

  • C++中的继承

    继承的概念 类之间的两大关系:组合和继承: 组合关系的特点:将其它类的对象作为自己的成员使用当前类的对象与成员对象...

  • js的继承方式

    1 类式继承 子类的原型对象 2 构造函数继承 创建即继承 3 组合继承 (类式继承和构造函数...

  • JavaScript几种继承方式及其优缺点总结

    •借用构造函数 (又叫伪造对象或经典继承)•组合继承(也叫伪经典继承)•寄生组合式继承 ☞借用构造函数继承 原理:...

  • js的继承

    面向对象的继承方式有很多种,原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生式组合继承、深拷贝...

  • 学习笔记-为何说多用组合少用继承

    在面向对象的编程中,有一条非常经典的设计原则:组合优于继承,多用组合少用继承。什么不推荐使用继承?组合比继承有哪些...

  • JS中继承的方式

    讨论三种常用的继承方式: 组合继承 原型新对象继承 3 . 寄生继承

网友评论

      本文标题:浅谈对象组合和继承

      本文链接:https://www.haomeiwen.com/subject/pfrxrttx.html