我们什么时候应该将代码封装为“类”?

时间:2013-12-27 21:32:21

标签: c++ class oop encapsulation

到目前为止,我回顾了我的代码,发现我很少写class。或者,换句话说,我没有看到使用它们的价值。我的意思是,几乎编码中的所有内容,只需编写函数并根据函数将它们分组到不同的.h/.cpp文件中,我就可以在不使用类的情况下解决它们。

即使在我参与了几个项目之后,我仍然感觉不到这样做的紧迫性,因为没有重大挑战,进展顺利。我主要使用C ++(有时是MATLAB)。

请注意,我确实使用了struct,我知道结构和类对C ++没有太大的区别。但我只使用struct进行数据存储(将数据组合在一起)。数据不需要流量控制(即维护或保护内部状态的getter / setter),也不需要开始获取任何主要功能。

也许我错过了关于 OOP 的基本知识。那么我们何时应该使用类封装我们的代码?有人可以分享你的意见吗?

2 个答案:

答案 0 :(得分:5)

在C ++中,structclass只是相同,除了使用不同的默认访问修饰符。 struct成员默认为public,而class成员默认为private。如果我们将C ++中的类视为具有封装数据成员的class和公开显示与该数据相关的功能的公共成员函数,那么以下是您想要使用类的一些好建议:

  1. 您需要存储一些由相关数据项组成的状态,并且......
  2. 您需要在此状态下强加一些不变量,或者为此状态提供一些替代接口。
  3. 如果你只有建议1,那么你可能只想要一个结构。请参阅Classes Should Enforce Invariants

答案 1 :(得分:4)

您可以使用大多数语言编写无类代码。在Java中,您只需使用static方法,而不是其他任何方法。

使用C / C ++ struct将值组绑定到一个单元中,以形成可以单独创建和操作的单个组件。

您发现需要class es和类实例(通常是对象)的那一刻就是您在编码中成长的那一刻。使用class,您可以将多个字段绑定在一起(与struct s一样),但在此您也可以将method附加到其中。您现在正在处理具有功能结构的对象。

完成该步骤后,您会发现一个全新的编程世界,您可以将这些对象放在其他对象中,或放入queue进行传输,或者放在mapset中存储,然后您发现mapset以及queue本身就是一个拥有自己class的对象。

总而言之 - 与process合作就像用沙子建造房屋一样。与struct合作正在用棍棒建造你的房子。使用class es允许你实例化object并将它们作为实体操纵 - 用石头建造你的房子 - 然后你可以离开你到目前为止工作的过程并开始考虑你系统的架构。