Passive data structure: Difference between revisions

Content deleted Content added
m Joffan moved page Plain old data structure to Passive data structure: real descriptive name as opposed to "nickname"
complete rename process with updates.
Line 4:
}}
 
In [[object-oriented programming]], '''plainand old[[computer data structure''' ('''PODS''')science]], ora '''plainpassive olddata datastructure''' ('''PODPDS''') is a term for a [[Record (computer science)|record]], to contrast with objects. That is, a PODSPDS 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. In [[computer science]], this is known as '''passive data structure'''.<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=http://www.nist.gov/dads/HTML/passiveDataStruc.html|accessdate=11 September 2014}}</ref> It is also known as a '''plain old data structure''', or '''plain old data'''.
 
Plain oldPassive data structures are appropriate when there is a part of a system where it should be clearly indicated that the detailed logic for data manipulation and integrity are elsewhere. PODSsPDSs are often found at the boundaries of a system, where information is being moved to and from other systems or persistent storage and the problem ___domain logic that is found in other parts of the system is not relevant. For example, PODSPDS would be convenient for representing the field values of objects that are being constructed from external data, in a part of the system where the semantic checks and interpretations needed for valid objects have not yet been applied.
 
A PODSPDS type in [[C++]] is defined as either a scalar type or a PODSPDS class.<ref>{{cite book | author = Information Technology Industry Council | publisher = ISO/IEC | ___location = Geneva | title = Programming languages — C++ | id = 14882:2003(E) | edition = Second edition | date = 2003-10-15 }}</ref> A PODSPDS class has no user-defined copy assignment operator, no user-defined destructor, and no non-static data members that are not themselves PODSPDS. Moreover, a PODSPDS class must be an aggregate, meaning it has no user-declared constructors, no private nor protected non-static data, no base classes and no virtual functions.<ref>[http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html "C++ Language Note: POD Types"], by Walter E. Brown, [[Fermi National Accelerator Laboratory]], September 29, 1999; last updated November 29, 1999.</ref> The standard includes statements about how PODSPDS must behave in C++. The <tt>type_traits</tt> library in the [[C++ Standard Library]], provides a function known as <tt>is_pod</tt> that can be used to determine whether a given type is a POD.<ref>[http://www.cplusplus.com/reference/type_traits/is_pod/ is_pod &mdash; C++ Reference]</ref>
 
In certain contexts, C++ allows only PODSPDS types to be used. For example, a <tt>union</tt> 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. PODSPDS types can also be used for interfacing with [[C (programming language)|C]], which supports only PODSPDS.
 
In [[Java (programming language)|Java]], some developers consider that the PODSPDS concept corresponds to a class with public data members and no methods (Java Code Conventions 10.1),[http://www.oracle.com/technetwork/java/codeconventions-137265.html#177] i.e., a [[data transfer object]].<ref>[http://www.oracle.com/technetwork/java/codeconventions-137265.html#177 "Java Language Data Structures"], Sun/Oracle Code Conventions from April 20, 1999.</ref> Others would also include [[POJO]]s (a class that has methods but only getters and setters, with no logic) and [[Java Beans]] to fall under the PODSPDS concept if they do not use event handling and do not implement additional methods beyond getters and setters.{{Citation needed|date=February 2010}} However, [[POJO]]s and [[Java Beans]] do have encapsulation and so violate the fundamental definition of PODSPDS.
 
In [[PHP]] associated arrays and stdClass objects can be considered PODSPDS.
 
Other structured data representations such as [[XML]] or [[JSON]] can also be used as a PODSPDS if no significant semantic restrictions are used.
 
==References==