2

私は現在、通信システムを設計していて、OOP アプローチについてアドバイスを求めています。

これは非常に単純です。シリアル ポートからデータを取得し、そのデータをメッセージに分割してから、それらのメッセージをコードの残りの部分で使用できるものに解析します。たとえば、メッセージは「LightSensorReport」であり、複数のセンサーから収集されたデータが含まれています。この場合のデータは単なる整数値ですが、データがより複雑な場合もあります。

したがって、シリアル ポートはストリーム インターフェイスを実装するクラスと考えています。ストリームを解析するクラスは、そのストリームからデータを取り出し、メッセージの境界がどこにあるかを把握し、メッセージのバイナリ データを「LightSensorReport」などのオブジェクトに変換する別のクラスにそれらのメッセージを送信します。

私の質問は、その最終的なデータ クラスと、それが実際に何であるか (この場合は "LightSensorReport") について考えたことから生まれました。私にとって、それは完全なオブジェクトではありません。状態しかありませんが、そのデータに対して何もしません (つまり、実際にはデータ構造です)。これはにおいですか?これは良いOOPに適合しますか?

LightSensorReport を単なるデータにする理由は、まさにそれです。それはデータのみです。それ自体では実際には何もしませんが、他のクラスがそれを使用します (たとえば、別のクラスが別のプロトコル形式にシリアル化する必要がある場合があります。LightSensorReport は何も知らないため、この責任を LightSensorReport に課しません)。バイナリ プロトコルについて)。

では、この種のクラスは優れた OOP 設計に適合するのでしょうか、それとも私が何か間違った方法で考えている兆候なのでしょうか?

4

1 に答える 1

2

あなたのアプローチはまったく問題ありません。あなたにとって、LightSensorReport はデータをまとめてカプセル化するオブジェクトです。OOP で作成したクラスに動作を追加する必要はありませんが、オブジェクトはパラダイムが提供するものであり、データのカプセル化にも適用されます。さらに、エンティティを取得したら、将来それに動作を追加できます。

一部の言語では、作成したオブジェクトの動作が既に定義されています。たとえば Java では、LightSensorReport クラスでメソッドを定義しなくても、スーパークラスの Object からメソッドを継承するため、最後に動作します。

于 2013-11-17T09:55:25.457 に答える