En informática y programación orientada a objetos , una estructura de datos pasiva ( PDS ), también denominada estructura de datos antigua simple o datos antiguos simples ( POD ), es un registro , a diferencia de los objetos. Es una estructura de datos que se representa únicamente como colecciones pasivas de valores de campo ( variables de instancia ), sin utilizar funciones orientadas a objetos. [1]
Las estructuras de datos pasivas son apropiadas cuando hay una parte de un sistema donde se debe indicar claramente que la lógica detallada para la manipulación e integridad de los datos está en otra parte. Los PDS a menudo se encuentran en los límites de un sistema, donde la información se mueve hacia y desde otros sistemas o almacenamiento persistente y la lógica del dominio del problema que se encuentra en otras partes del sistema es irrelevante. Por ejemplo, PDS sería conveniente para representar los valores de campo de objetos que se están construyendo a partir de datos externos, en una parte del sistema donde aún no se aplican las comprobaciones semánticas y las interpretaciones necesarias para los objetos válidos.
Un tipo PDS en C++ , o un objeto simple y antiguo de C++ , se define como un tipo escalar o una clase PDS. [2] Una clase PDS no tiene un operador de asignación de copia definido por el usuario, ni un destructor definido por el usuario, ni miembros de datos no estáticos que no sean en sí mismos PDS. Además, una clase PDS debe ser un agregado, lo que significa que no tiene constructores declarados por el usuario, ni datos no estáticos privados ni protegidos, ni clases base virtuales [a] ni funciones virtuales. [4] El estándar incluye declaraciones sobre cómo debe comportarse PDS en C++. La type_traits
biblioteca de la biblioteca estándar de C++ proporciona una plantilla denominada is_pod
que se puede utilizar para determinar si un tipo determinado es un POD. [5] En C++20, la noción de “datos antiguos simples” (POD) is_pod
está obsoleta y reemplazada por el concepto de tipos “triviales” y de “diseño estándar”. [6]
En algunos contextos, C++ permite utilizar solo tipos de PDS. Por ejemplo, a union
en C++98 no puede contener una clase que tenga funciones virtuales o constructores o destructores no triviales. Esta restricción se impone porque el compilador no puede determinar qué constructor o destructor debe llamarse para una unión. Los tipos de PDS también se pueden usar para interactuar con C , que solo admite PDS.
En Java , algunos desarrolladores consideran que el concepto PDS corresponde a una clase con miembros de datos públicos y sin métodos (Convenciones del Código Java 10.1), [7] es decir, un objeto de transferencia de datos . [8] Otros también incluirían objetos Java antiguos (POJO), una clase que tiene métodos pero solo captadores y definidores, sin lógica, y JavaBeans que caen bajo el concepto PDS si no usan manejo de eventos y no implementan agregados. métodos más allá de captadores y definidores. [ cita necesaria ] Sin embargo, los POJO y Java Beans tienen encapsulación y, por lo tanto, violan la definición fundamental de PDS.
Los registros (introducidos en Java 16, en 2021) son portadores de datos superficialmente inmutables sin encapsulación y, por lo tanto, también pueden considerarse PDS.
En PHP , las matrices asociativas y los objetos stdClass pueden considerarse PDS. [ cita necesaria ]
Otras representaciones de datos estructurados, como XML o JSON, también se pueden utilizar como PDS si no se utilizan restricciones semánticas significativas.
En Python , el módulo dataclass proporciona clases de datos, que a menudo se utilizan como contenedores sin comportamiento para almacenar datos, con opciones para la validación de datos. Las clases de datos en Python, introducidas en la versión 3.7, proporcionan una manera conveniente de crear una clase y almacenar valores de datos. Las clases de datos se utilizan para guardar nuestro código repetitivo y proporcionar una mejor legibilidad. [9]
En C , las estructuras se utilizan de la misma manera.