繁体   English   中英

使用继承VS。 C ++中的正交类

[英]Using Inheritance Vs. Orthogonal Classes in C++

在C ++中为各种应用程序编写类时,最好使用正交类(相互不依赖的类),或者最好继承。 我之所以这么问是因为,我注意到很多问题,其中有两个或三个不交互的类,而其他人可能有3个通过继承链接的类。

这是不是更偏向于在时间和地点都存在的地方,还是人们似乎更喜欢继承(从我所见)的原因?

通常,当系统的某些部分看到不同类中的通用性时,可以使用继承,这些类可以抽象为通用基类。 如果您在类的设计中没有此方面,则可以将类分开。 因此,使用哪个不是问题,课程使用更多的马。

我认为当你说

正交类(互不依赖的类)

您实际上的意思是它们不是通过继承而是通过组合而联系在一起的。 请注意,这确实是另一种依赖关系,尽管不如继承强。

通常人们到面向对象的设计更喜欢继承组成(见这个这个这个 )由于通过关系,这有助于避免类似问题的联接器规定的不太严格水平脆基类

然而,没有灵丹妙药。 去收集经验并自己决定。

这取决于项目的需求以及如何将需求转换为设计。

您正在谈论面向对象编程的三种不同原理。

单一责任 -

  • 班级应该只承担一项责任,只有一个改变的理由。 这也被称为具有高“内聚力”。
  • 另一种看待它的方式是,对耦合的依赖(对其他类别的依赖)应最小,最好是齐尔奇。

在这种情况下,正交类或独立类是有意义的

继承 -

  • 当您想重用某些类的功能并从中创建一个新类时,继承就会浮现。 换句话说,如果您想扩展类功能。 如果您想保持类的某些功能完整并添加新功能或属性,则不必重写类定义,而只需从现有类继承并创建一个新类即可。 继承属性的类称为超级/基类。 继承的类是派生类。 如果“ B”继承自“ A”,那么我们说“ B”与“ A”类似。 'A'是基类'B'派生

组成

  • 组合表示类可以将另一个类型的对象作为其成员。如果类A的类型为类'B',则该类为成员。 在“ A”和“ B”之间存在一个组成关系。 'A'-有-'B'。

看例子

可以说我有一个班级家里有房间家里有家具家里有电子产品

单一责任示例

尽管家具和电子产品属于家庭,但它们彼此完全独立。 一个改变不会影响另一个。 因此,两者之间存在松散耦合,并且它们在很大程度上正交。

继承示例 Home还具有客房,床房

因此,客房将从客房床继承

Class GuestRoom : public Room { }

Class BedRoom : public Room { }

构成示例

房间将配备家具和电子产品

class Room { 
   vector<furniture> furniture_vec;
   vector<electronics> electronics_vec;
    .
  // other members
}

在尝试设计应用程序时,还有其他面向对象的原理会出现。 阅读一本有关OOP原理的好书,并查看一些示例,可以进一步阐明这些概念。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM