我们什么时候应该封装代码才能成为"Class"?

When should we encapsulate codes to be a "Class"?

本文关键字:能成为 Class 代码 什么时候 封装 我们      更新时间:2023-10-16

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

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

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

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

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

  1. 您需要存储一些由相关数据项组成的状态,并且...
  2. 您需要在此状态
  3. 上施加一些不变量,或者为此状态提供一些替代接口。

如果你只有建议 1,那么你可能只需要一个结构。请参阅类应强制实施不变量。

您可以使用大多数语言编写无类代码。在Java中,你只会使用static方法,没有其他方法。

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

当你发现你需要类(通常是对象)的class和实例的那一刻,就是你在编码中成长的那一刻。使用class,您可以将许多字段绑定在一起(与structs一样),但在这里您也可以将methods附加到它们。您现在正在使用具有结构功能的对象。

一旦这一步完成,你会发现一个全新的编程世界,你把这些对象放在其他对象中,或者放入queue中进行传输,或者放在maps和sets中进行存储,然后你发现mapsetqueue本身就是一个具有自己class的对象。

总之 - 只用process工作就像用沙子盖房子一样。与struct一起工作就是用棍子建造你的房子。使用classes 可以让你实例化object并将它们作为实体进行操作 - 用石头建造你的房子 - 然后你可以离开你迄今为止一直在辛苦的过程,开始考虑你的系统架构。