CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

如何理解“多用合成/聚合关系,少用继承”?

楼主w8u(晌马)2003-11-04 08:38:44 在 C/C++ / C++ 语言 提问

我在看《JAVA与模式》,看到了开闭原则一章,其中提到,“多用合成/聚合关系,少用继承”,我一时不能理解。  
   
  有能举例说明的吗?分别分析同一个实体,两种不同的设计间的区别。 问题点数:100、回复次数:4Top

1 楼buzhiming99(不知名)回复于 2003-11-04 10:14:58 得分 25

合成/聚合更有灵活性,看看书后面介绍的模式,很多都利用合成来提高灵活度Top

2 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2003-11-04 11:35:10 得分 25

继承是一种类与类之间的静态和持续关系。  
  一旦一个类从另一个类继承,它们之间的关系就不能改变。这样就没法在运行过程中改变这种关系,更要命的是,如果你要修改超类,那么所有用到其子类的地方都要作出修改,并重新测试Top

3 楼leyt(思维机器)回复于 2003-11-04 16:32:20 得分 20

关注Top

4 楼plainsong(短歌)()回复于 2003-11-04 17:29:41 得分 30

继承有两种目的,一种是衍生类继承基类的接口并重新实现(override),这样可以用操作基类的代码操作衍生类,也就是常说的IS-A的概念。另一种是衍生类的实现要用到基类的实现,继承是为了利用基类的代码而不是为了体现IS-A,这时用继承不如用组合更好。  
   
  比如一个矩阵的实现:  
  class   Matrix:   public   std::vector<vector<double>   >;  
  其实说Matrix   是一个vector并不确切,这里主要是为了复用vector的功能,不如改为  
  class   Matrix  
  {  
      std::vector<vector<double>   >   data;  
      ...  
  };  
  更好。Top

相关问题

  • 请问有人可以用JAVA来说明UML中的聚合和合成吗?
  • 合成与继承(回答了马上给分)
  • 谁能对比说一下这几个概念? 实现继承/接口继承 , 容器/聚合 ?
  • public继承的理解问题。
  • 程序员的一天的郁闷之四(类的继承跟类的合成)
  • 不太理解private方式的继承,达人请进入
  • 当需要将两个类合成一个类时,什么情况下采用多继承?
  • 当需要将两个类合成一个类时,什么情况下采用多继承?
  • ===== 如何理解类的继承关系中的 父类和子类 ======
  • 关于java的访问控制和继承,这段话怎么理解?

关键词

  • 聚合
  • vector
  • 继承
  • 类
  • 合成
  • 衍生
  • 关系
  • matrix
  • 实现

得分解答快速导航

  • 帖主:w8u
  • buzhiming99
  • Polarislee
  • leyt
  • plainsong

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo