En informática y programación orientada a objetos , una estructura de datos pasiva ( PDS ), también denominada estructura de datos simple o datos 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 características de la programación orientada a objetos. [ 1 ]
Razón fundamental
Las estructuras de datos pasivas (PDS, por sus siglas en inglés) son apropiadas cuando existe una parte del sistema donde se debe indicar claramente que la lógica detallada para la manipulación e integridad de los datos se encuentra en otro lugar. Las PDS suelen encontrarse en los límites de un sistema, donde la información se transfiere desde y hacia 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, una PDS sería conveniente para representar los valores de los campos de objetos que se construyen a partir de datos externos, en una parte del sistema donde aún no se aplican las comprobaciones e interpretaciones semánticas necesarias para validar los objetos.
En C++
Un tipo PDS en C++ , u objeto C++ simple , se define como un tipo escalar o una clase PDS. [ 2 ] Una clase PDS no tiene operador de asignación de copia definido por el usuario, ni destructor definido por el usuario, ni miembros de datos no estáticos que no sean 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 o 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_traitsbiblioteca en la Biblioteca estándar de C++ proporciona una plantilla llamada is_podque se puede usar para determinar si un tipo dado es un POD. [ 5 ] En C++20, la noción de "datos simples" (POD) y por eso is_podestá obsoleta y reemplazada por el concepto de tipos "triviales" y de "diseño estándar". [ 6 ]
En algunos contextos, C++ solo permite el uso de tipos PDS. Por ejemplo, unionen C++98, una unión no puede contener una clase con 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 PDS también se pueden usar para interactuar con C++ , que solo admite PDS.
En Java
En Java , algunos desarrolladores consideran que el concepto PDS corresponde a una clase con miembros de datos públicos y sin métodos (Java Code Conventions 10.1), [ 7 ] es decir, un objeto de transferencia de datos . [ 8 ] Otros también incluirían los objetos Java simples (POJO), una clase que tiene métodos pero solo getters y setters, sin lógica, y los JavaBeans para que caigan dentro del concepto PDS si no usan manejo de eventos y no implementan métodos adicionales más allá de los getters y setters. Sin embargo, los POJO y los 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 (Sistemas de Datos Personales).
En otros idiomas
En PHP , los arrays y stdClassobjetos asociativos pueden considerarse PDS (Sistemas de Datos de Penganza).
También se pueden utilizar otras representaciones de datos estructurados, como XML o JSON, como PDS si no se aplican restricciones semánticas significativas.
En Python , el módulo `dataclass` proporciona clases de datos, que se utilizan a menudo 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, ofrecen una forma práctica de crear una clase y almacenar valores de datos. Se utilizan para ahorrar código repetitivo y mejorar la legibilidad. [ 9 ]
En C , las estructuras se utilizan de la misma manera.
Véase también
Notas
Referencias
- ↑ Black, Paul E.; Vreda Pieterse (2007). "estructura de datos pasiva" . Diccionario de algoritmos y estructuras de datos . Recuperado el 11 de septiembre de 2014 .
- ↑ Consejo de la Industria de Tecnologías de la Información (15 de octubre de 2003). Lenguajes de programación — C++ (Segunda edición). Ginebra: ISO/IEC. 14882:2003(E).
- ↑ Bjarne Stroustrup (junio de 2013). El lenguaje de programación C++ (cuarta edición). Estados Unidos de América: Pearson Education, Inc. ISBN 978-0-321-56384-2.
- ↑ Walter E. Brown (29 de septiembre de 1999). "Nota sobre el lenguaje C++: Tipos POD" . Laboratorio Nacional de Aceleradores Fermi . Archivado del original el 3 de diciembre de 2016. Consultado el 6 de diciembre de 2016 .
- ↑ "is_pod C++ Reference" . cplusplus.com . Consultado el 6 de diciembre de 2016 .
- ↑ "P0767R1: Desaprobar POD" . www.open-std.org . Consultado el 20 de enero de 2020 .
- ↑ "Convenciones de código Java 10.1" . Oracle . Consultado el 6 de diciembre de 2016 .
- ↑ "Estructuras de datos del lenguaje Java" . Convenciones de código Sun/Oracle. 20 de abril de 1999. Consultado el 6 de diciembre de 2016 .
- ↑ "¿Qué son las Dataclasses en Python? - DJTECHNEWS" . 30 de agosto de 2023.
- C++
- Tipos de datos compuestos