受動的なデータ構造

フリー百科事典ウィキペディアより

コンピューター サイエンスおよびオブジェクト指向プログラミングではパッシブ データ構造( PDS 、プレーン オールド データ構造またはプレーン オールド データPODとも呼ばれます) は、オブジェクトと対比するためのレコードの用語です。これは、オブジェクト指向機能を使用せずに、フィールド値 (インスタンス変数)のパッシブ コレクションとしてのみ表されるデータ構造です。[1]

根拠

パッシブ データ構造は、データ操作と整合性の詳細なロジックが別の場所にあることを明確に示す必要があるシステムの一部がある場合に適しています。PDS は、多くの場合、システムの境界で検出されます。ここでは、情報が他のシステムまたは永続ストレージとの間で移動され、システムの他の部分で検出される問題ドメイン ロジックは無関係です。たとえば、PDS は、有効なオブジェクトに必要なセマンティック チェックと解釈がまだ適用されていないシステムの一部で、外部データから構築されているオブジェクトのフィールド値を表すのに便利です。

C++

C++の PDS 型、またはPlain Old C++ Objectは、スカラー型または PDS クラスのいずれかとして定義されます。[2] PDS クラスには、ユーザー定義のコピー代入演算子、ユーザー定義のデストラクタ、およびそれ自体が PDS ではない非静的データ メンバーはありません。さらに、PDS クラスは集約である必要があります。つまり、ユーザーが宣言したコンストラクター、プライベートまたは保護された非静的データ、仮想基本クラス[a]および仮想関数はありません。[4]標準には、PDS が C++ でどのように動作する必要があるかについてのステートメントが含まれています。C++ 標準ライブラリtype_traitsライブラリは、特定の型が POD であるかどうかを判断するために使用できるという名前のテンプレートを提供します。[5]is_podC++20 では、「plain old data」(POD)is_podの概念は廃止され、「trivial」および「standard-layout」型の概念に置き換えられました。[6]

一部のコンテキストでは、C++ では PDS タイプのみを使用できます。たとえば、unionC++98の a には、仮想関数または非自明なコンストラクタまたはデストラクタを持つクラスを含めることはできません。この制限が課されるのは、共用体に対してどのコンストラクターまたはデストラクターを呼び出す必要があるかをコンパイラーが判断できないためです。PDS 型は、PDS のみをサポートする Cとのインターフェイスにも使用できます。

Javaで

Java では一部の開発者は、PDS の概念はパブリック データ メンバーを持ち、メソッドを持たないクラス (Java Code Conventions 10.1) [7]、つまりデータ転送オブジェクトに対応すると考えています。[8]その他には、プレーン オールド Java オブジェクト(POJO)、メソッドはあるがゲッターとセッターのみでロジックのないクラス、およびイベント処理を使用せず、追加を実装しない場合に PDS の概念に該当するJavaBeansも含まれます。ゲッターとセッターを超えたメソッド。[要出典] ただし、POJO と Java Bean はカプセル化されているため、PDS の基本的な定義に違反しています。

レコード (2021 年に Java 16 で導入) は、カプセル化されていないデータの浅い不変キャリアであるため、PDS と見なすこともできます。

他の言語で

PHP では連想配列と stdClass オブジェクトを PDS と見なすことができます。[引用が必要]

XMLJSONなどの他の構造化データ表現も、重要なセマンティック制限が使用されていなければ、PDS として使用できます。

Python では、 dataclass モジュールはデータクラスを提供します。これは、データを保持するための振る舞いのないコンテナーとしてよく使用され、データ検証のオプションを備えています

Cでは、構造体は同じ方法で使用されます。

も参照

注意事項

  1. ^ PDS クラスは、最初の非静的データ メンバーが異なる基本クラスを持つことができます。[3]

参考文献

  1. ^ ブラック、ポール E.; ヴレダ・ピーターセ (2007)。「パッシブデータ構造」 . アルゴリズムとデータ構造のディクショナリ2014年 9 月 11 日閲覧
  2. ^ 情報技術産業協議会 (2003-10-15). プログラミング言語 — C++ (第 2 版)。ジュネーブ: ISO/IEC。14882:2003(E)。
  3. ^ Bjarne Stroustrup (2013 年 6 月). C++ プログラミング言語(第 4 版)。アメリカ合衆国: Pearson Education, Inc. ISBN 978-0-321-56384-2.
  4. ^ ウォルター E. ブラウン (1999 年 9 月 29 日)。「C++ 言語ノート: POD 型」 . フェルミ国立加速器研究所2016 年 12 月 3 日にオリジナルからアーカイブされました2016年12月6日閲覧
  5. ^ "is_pod C++ リファレンス" . cplusplus.com 2016年12月6日閲覧
  6. ^ "P0767R1: POD の廃止" . www.open-std.org 2020-01-20取得
  7. ^ "Java コード規則 10.1" . オラクル2016年12月6日閲覧
  8. ^ "Java 言語データ構造" . Sun/Oracle コード規則。1999 年 4 月 20 日2016年12月6日閲覧