Passive data structure: Difference between revisions

Content deleted Content added
Add sections and fill out refs
 
(27 intermediate revisions by 22 users not shown)
Line 1:
{{Short description|Another term for record}}
In [[computer science]] and [[object-oriented programming]], a '''passive data structure''' ('''PDS''', not to be confused with IBM's [[partitioned data set]]s; also termed a '''plain old data structure''', or '''plain old data''' ('''POD''')), is a term for a [[Record (computer science)|record]], to contrast with objects. It is a [[data structure]] that is represented only as passive collections of [[Field (computer science)|field]] values ([[instance variable]]s), without using object-oriented features.<ref name ="psd">{{cite journal |last=Black |first=Paul E. |author2=Vreda Pieterse |title=passive data structure |journal=Dictionary of Algorithms and Data Structures |year=2007 |url=https://xlinux.nist.gov/dads/HTML/passiveDataStruc.html |accessdate=11 September 2014}}</ref>
{{confused|Partitioned data set}}
In [[computer science]] and [[object-oriented programming]], a '''passive data structure''' ('''PDS'''), not to be confused with IBM's [[partitioned data set]]s; also termed a '''plain old data structure''', or '''plain old data''' ('''POD''')), is a term for a [[Recordrecord (computer science)|record]], toin contrast with objects. It is a [[data structure]] that is represented only as passive collections of [[Fieldfield (computer science)|field]] values ([[instance variable]]s), without using object-oriented features.<ref name ="psd">{{cite journal |last=Black |first=Paul E. |author2=Vreda Pieterse |title=passive data structure |journal=Dictionary of Algorithms and Data Structures |year=2007 |url=https://xlinux.nist.gov/dads/HTML/passiveDataStruc.html |accessdate=11 September 2014}}</ref>
 
==Rationale==
Line 5 ⟶ 7:
 
==In C++==
A PDS type in [[C++]], or [[Plain Old C++ Object]], is defined as either a scalar type or a PDS class.<ref>{{cite book |author= Information Technology Industry Council |publisher= ISO/IEC |___location= Geneva |title= Programming languages — C++ |id= 14882:2003(E) |edition= Second |date= 2003-10-15}}</ref> A PDS class has no user-defined copy assignment operator, no user-defined destructor, and no non-static data members that are not themselves PDS. Moreover, a PDS class must be an aggregate, meaning it has no user-declared constructors, no private nor protected non-static data, no virtual base classes{{efn|A PDS class can have a base class whose first non-static data members differs.<ref>{{cite book |author= Bjarne Stroustrup |publisher= Pearson Education, Inc |___location= United States of America |title= The C++ programming language |isbn= 978-0-321-56384-2 |edition= Fourth |date= June 2013}}</ref>}} and no virtual functions.<ref>{{cite web |url=http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html |accessdate=6 December 2016 |title=C++ Language Note: POD Types |author=Walter E. Brown |publisher=[[Fermi National Accelerator Laboratory]] |date=September 29, 1999 |archive-url=https://web.archive.org/web/20161203130543/http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html |archive-date=3 December 2016 |url-status=dead }}</ref> The standard includes statements about how PDS must behave in C++. The <ttcode>type_traits</ttcode> library in the [[C++ Standard Library]], provides a functiontemplate named <ttcode>is_pod</ttcode> that can be used to determine whether a given type is a POD.<ref>{{cite web|url=http://www.cplusplus.com/reference/type_traits/is_pod/ |accessdate=6 December 2016 |title=is_pod C++ Reference |publisher=cplusplus.com}}</ref> In C++20 the notion of “plain old data” (POD) and by that <code>is_pod</code> is deprecated and replaced with the concept of “trivial” and “standard-layout” types.<ref>{{Cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0767r1.html|title=P0767R1: Deprecate POD|website=www.open-std.org|access-date=2020-01-20}}</ref>
 
In some contexts, C++ allows only PDS types to be used. For example, a <ttcode>union</ttcode> in C++98 cannot contain a class that has [[virtual function]]s or nontrivial constructors or destructors. This restriction is imposed because the compiler cannot determine which constructor or destructor should be called for a union. PDS types can also be used for interfacing with [[C (programming language)|C]], which supports only PDS.
 
==In Java==
In [[Java (programming language)|Java]], some developers consider that the PDS concept corresponds to a class with public data members and no methods (Java Code Conventions 10.1),<ref name=Oracle>{{cite web|url=http://www.oracle.com/technetwork/java/codeconventions-137265.html#177 |accessdate=6 December 2016 |title=Java Code Conventions 10.1 |publisher=Oracle}}</ref> i.e., a [[data transfer object]].<ref>{{cite web|url=http://www.oracle.com/technetwork/java/codeconventions-137265.html#177 |title=Java Language Data Structures |accessdate=6 December 2016 |publisher=Sun/Oracle Code Conventions |date=April 20, 1999}}</ref> Others would also include [[Plain Oldold Java Objectobject]]s (POJOs), a class that has methods but only getters and setters, with no logic, and [[Java BeansJavaBeans]] to fall under the PDS concept if they do not use event handling and do not implement added methods beyond getters and setters.{{Citation needed|date=February 2010}} However, POJOs and Java Beans have [[Encapsulationencapsulation (computer programming)|encapsulation]], and so violate the fundamental definition of PDS.
 
InRecords [[PHP]](introduced in Java 16, associatedin arrays2021) are shallowly immutable carriers of data without encapsulation, and stdClasstherefore objectsthey can also be considered PDS.
 
==In other languages==
In [[PHP]], associative arrays and <code>stdClass</code> objects can be considered PDS.{{citation needed|date=September 2019}}
 
Other structured data representations such as [[XML]] or [[JSON]] can also be used as a PDS if no significant semantic restrictions are used.
 
In [[Python (programming language)|Python]], dataclass module provides dataclasses - often used as behaviourless containers for holding data, with options for data validation. The dataclasses in Python, introduced in version 3.7, that provide a convenient way to create a class and store data values. The data classes use to save our repetitive code and provide better readability.<ref>{{cite web | url=https://djtechnews.in/what-are-dataclasses-in-python/ | title=What are Dataclasses in Python? - DJTECHNEWS | date=30 August 2023 }}</ref>
 
In [[C (programming language)|C]], structs are used in the same manner.
 
==See also==
* [[Plain Oldold CLR Objectobject]]
 
==Notes==
Line 21 ⟶ 33:
==References==
{{Reflist}}
 
==See also==
* [[Plain Old C++ Object]]
* [[Plain Old Java Object]]
* [[Plain Old CLR Object]]
* [[Record (computer science)]]
 
[[Category:C++]]