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 término para un registro , para contrastar con los objetos. Es una estructura de datos que se representa solo como colecciones pasivas de valores de campo ( variables de instancia ), sin utilizar características orientadas a objetos. [1]
Razón fundamental
Las estructuras de datos pasivas son apropiadas cuando hay una parte de un sistema donde debe indicarse claramente que la lógica detallada para la manipulación e integridad de los datos está en otra parte. Los PDS se encuentran a menudo 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 los 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.
En C ++
Un tipo PDS en C ++ , o un objeto C ++ simple y antiguo , 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, ningún destructor definido por el usuario ni miembros de datos no estáticos que no sean ellos 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 con nombre 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 sin formato" (POD) y por eso is_pod
se desaprueba y se reemplaza con el concepto de tipos "trivial" y "diseño estándar". [6]
En algunos contextos, C ++ permite que solo se utilicen tipos de PDS. Por ejemplo, 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 utilizar 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 (Convenciones de código Java 10.1), [7] es decir, un objeto de transferencia de datos . [8] Otros también incluirían Plain old Java objects (POJOs), una clase que tiene métodos pero solo getters y setters, sin lógica, y JavaBeans para caer bajo el concepto PDS si no usan manejo de eventos y no implementan agregados. métodos más allá de getters y setters. [ cita requerida ] Sin embargo, los POJO y los Java Beans tienen encapsulación , por lo que violan la definición fundamental de PDS.
En otros idiomas
En PHP , las matrices asociativas y los objetos stdClass pueden considerarse PDS. [ cita requerida ]
Otras representaciones de datos estructurados, como XML o JSON , también se pueden utilizar como PDS si no se utilizan restricciones semánticas significativas.
Ver también
Notas
Referencias
- ^ Negro, Paul E .; Vreda Pieterse (2007). "estructura de datos pasiva" . Diccionario de algoritmos y estructuras de datos . Consultado el 11 de septiembre de 2014 .
- ^ Consejo de la Industria de Tecnología de la Información (2003-10-15). Lenguajes de programación - C ++ (Segunda ed.). Ginebra: ISO / IEC. 14882: 2003 (E).
- ^ Bjarne Stroustrup (junio de 2013). El lenguaje de programación C ++ (Cuarta ed.). Estados Unidos de América: Pearson Education, Inc. ISBN 978-0-321-56384-2.
- ^ Walter E. Brown (29 de septiembre de 1999). "Nota de lenguaje C ++: tipos de POD" . Laboratorio del Acelerador Nacional Fermi . Archivado desde el original el 3 de diciembre de 2016 . Consultado el 6 de diciembre de 2016 .
- ^ "Referencia de is_pod C ++" . cplusplus.com . Consultado el 6 de diciembre de 2016 .
- ^ "P0767R1: Dar de baja el 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 en lenguaje Java" . Convenciones de código Sun / Oracle. 20 de abril de 1999 . Consultado el 6 de diciembre de 2016 .