コンピュータサイエンスとオブジェクト指向プログラミングにおいて、パッシブデータ構造(PDS)は、プレーンオールドデータ構造またはプレーンオールドデータ(POD)とも呼ばれ、オブジェクトとは対照的にレコードです。これは、オブジェクト指向機能を使用せずに、フィールド値(インスタンス変数)の受動的なコレクションとしてのみ表現されるデータ構造です。[1]
根拠
パッシブ データ構造は、データ操作と整合性の詳細なロジックが別の場所にあることを明示する必要があるシステム部分がある場合に適しています。PDS は、多くの場合、他のシステムや永続ストレージとの間で情報が移動され、システムの他の部分にある問題ドメイン ロジックが関係のないシステムの境界にあります。たとえば、PDS は、有効なオブジェクトに必要なセマンティック チェックと解釈がまだ適用されていないシステム部分で、外部データから構築されているオブジェクトのフィールド値を表すのに便利です。
C++の場合
C++の PDS 型、つまりPlain Old C++ Object は、スカラー型または PDS クラスとして定義されます。[2] PDS クラスには、ユーザー定義のコピー代入演算子、ユーザー定義のデストラクタ、および PDS ではない非静的データ メンバーはありません。さらに、PDS クラスは集約である必要があります。つまり、ユーザー宣言のコンストラクタ、プライベートまたは保護された非静的データ、仮想基底クラス[a]、および仮想関数はありません。[4]標準には、C++ での PDS の動作方法に関する記述が含まれています。C ++ 標準ライブラリtype_traitsのライブラリは、特定の型が POD であるかどうかを判断するために使用できる という名前のテンプレートを提供します。 [5] C++20 では、「プレーン オールド データ」(POD) という概念が非推奨となり、「トリビアル」および「標準レイアウト」型の概念に置き換えられました。[6]is_podis_pod
一部のコンテキストでは、C++ では PDS 型のみを使用できます。たとえば、 C++98 の には、仮想関数unionまたは重要なコンストラクタやデストラクタを持つクラスを含めることはできません。この制限は、コンパイラが共用体に対してどのコンストラクタまたはデストラクタを呼び出す必要があるかを判断できないために課せられます。PDS 型は、PDS のみをサポートする
Cとのインターフェイスにも使用できます。
ジャワ島
Javaでは、PDSの概念は、パブリックデータメンバーを持ちメソッドを持たないクラス(Javaコード規則10.1)[7] 、つまりデータ転送オブジェクトに対応すると考える開発者もいます。[8]また、ロジックがなくゲッターとセッターのみのメソッドを持つクラスであるプレーンオールドJavaオブジェクト(POJO)や、イベント処理を使用せずゲッターとセッター以外の追加メソッドを実装しないJavaBeansも、PDSの概念に該当すると考える人もいます。 [要出典] しかし、POJOとJava Beansはカプセル化されているため、PDSの基本的な定義に違反しています。
レコード(2021 年に Java 16 で導入)は、カプセル化されていない浅い不変のデータ キャリアであるため、PDS と見なすこともできます。
他の言語
PHPでは、連想配列とstdClassオブジェクトは PDS と見なすことができます。[引用が必要]
重大な意味的制限が使用されていない場合は、 XMLやJSONなどの他の構造化データ表現も PDS として使用できます。
Pythonでは、データクラスモジュールはデータクラスを提供します。これは、データ検証のオプションを備えた、データを保持するための動作のないコンテナとしてよく使用されます。Pythonのバージョン3.7で導入されたデータクラスは、クラスを作成してデータ値を格納する便利な方法を提供します。データクラスは、繰り返しのコードを保存し、読みやすさを向上させるために使用されます。[9]
Cでは、構造体は同様に使用されます。
参照
注記
- ^ PDSクラスは、最初の非静的データメンバーが異なる基本クラスを持つことができます。[3]
参考文献
- ^ Black, Paul E.; Vreda Pieterse (2007). 「パッシブデータ構造」。アルゴリズムとデータ構造の辞書。 2014年9月11日閲覧。
- ^ 情報技術産業協議会 (2003-10-15).プログラミング言語 - C++ (第 2 版). ジュネーブ: ISO/IEC. 14882:2003(E).
- ^ Bjarne Stroustrup (2013年6月). C++プログラミング言語(第4版). アメリカ合衆国: Pearson Education, Inc. ISBN 978-0-321-56384-2。
- ^ Walter E. Brown (1999年9月29日). 「C++言語ノート: POD型」. Fermi National Accelerator Laboratory . 2016年12月3日時点のオリジナルよりアーカイブ。 2016年12月6日閲覧。
- ^ 「is_pod C++ リファレンス」 cplusplus.com . 2016 年12 月 6 日閲覧。
- ^ 「P0767R1: POD を非推奨にする」www.open-std.org . 2020 年 1 月 20 日閲覧。
- ^ 「Java コード規則 10.1」 。Oracle。2016年12 月 6 日閲覧。
- ^ 「Java 言語データ構造」。Sun/Oracle コード規則。1999 年 4 月 20 日。2016 年12 月 6 日に閲覧。
- ^ 「Python のデータクラスとは? - DJTECHNEWS」。2023 年 8 月 30 日。
