2

我目前正在设计一个通信系统,并且想对我的 OOP 方法提出一些建议。

这非常简单——它从串行端口取出数据,将数据分成消息,然后将这些消息解析成其余代码可以使用的东西。例如,一条消息可能是“LightSensorReport”,其中包含从多个传感器收集的数据;这种情况下的数据只是整数值,但有些情况下数据更复杂。

所以,我认为串口是一个实现流接口的类。然后,我用于解析流的类负责从该流中取出数据,确定消息边界的位置,然后将这些消息发送到另一个类,该类将消息的二进制数据转换为诸如“LightSensorReport”之类的对象。

我的问题来自对最终数据类的思考以及它实际上是什么——在这种情况下是“LightSensorReport”。对我来说,它并不完全是一个对象——它只有状态,但它对该数据没有任何作用(所以它实际上是一个数据结构)。这是气味吗?这符合良好的 OOP 吗?

我制作 LightSensorReport 只是数据的理由就是——它只是数据。它自己并没有真正做任何事情,但其他类会使用它(例如,另一个类可能必须将它序列化为不同的协议格式;我不会把这个责任放在 LightSensorReport 上,因为它什么都不知道关于二进制协议)。

那么,这种类是否适合良好的 OOP 设计,或者它是否表明我正在以错误的方式思考某些事情?

4

1 回答 1

2

你的方法非常好。对您来说,LightSensorReport 是一个内聚地封装数据的对象。您不必为在 OOP 中创建的类添加行为,但对象是范式为您提供的,它也适用于封装数据。此外,一旦你有了你的实体,你就可以在未来向它添加行为。

某些语言已经在您创建的对象中定义了行为。例如,在 Java 中,即使您没有在 LightSensorReport 类中定义方法,它也会从超类 Object 中继承方法,因此最终会有行为。

于 2013-11-17T09:55:25.457 回答