stringtranslate.com

Estructura de datos pasiva

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 , en contraste 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 adecuadas cuando existe una parte de un sistema en la que se debe indicar claramente que la lógica detallada para la manipulación e integridad de los datos se encuentra en otra parte. Las estructuras de datos pasivas suelen encontrarse en los límites de un sistema, donde la información se está moviendo 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, las estructuras de datos pasivas serían convenientes 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 Plain Old C++ Object , 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 y ningún miembro 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, ningún dato no estático privado ni protegido, ninguna clase base virtual [a] y ninguna función virtual. [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á en desuso y reemplazada por el concepto de tipos "triviales" y "de diseño estándar". [6]

En algunos contextos, C++ permite utilizar únicamente tipos PDS. Por ejemplo, un unionen 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 se debe llamar para una unión. Los tipos 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 métodos agregados más allá de getters y setters. [ cita requerida ] Sin embargo, POJOs 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 otros idiomas

En PHP , las matrices y objetos asociativos stdClasspueden considerarse PDS. [ cita requerida ]

También se pueden utilizar otras representaciones de datos estructurados como XML o JSON como PDS si no se utilizan restricciones semánticas significativas.

En Python , el módulo dataclass proporciona clases de datos (que suelen utilizarse como contenedores sin comportamiento para almacenar datos, con opciones para la validación de datos). Las clases de datos de Python, introducidas en la versión 3.7, proporcionan una forma cómoda 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.

Véase también

Notas

  1. ^ Una clase PDS puede tener una clase base cuyos primeros miembros de datos no estáticos sean diferentes. [3]

Referencias

  1. ^ Black, Paul E.; Vreda Pieterse (2007). «Estructura de datos pasiva». Diccionario de algoritmos y estructuras de datos . Consultado el 11 de septiembre de 2014 .
  2. ^ Information Technology Industry Council (15 de octubre de 2003). Lenguajes de programación: C++ (segunda edición). Ginebra: ISO/IEC. 14882:2003(E).
  3. ^ 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.
  4. ^ Walter E. Brown (29 de septiembre de 1999). «Nota sobre el lenguaje C++: tipos de POD». Laboratorio Nacional del Acelerador Fermi . Archivado desde el original el 3 de diciembre de 2016. Consultado el 6 de diciembre de 2016 .
  5. ^ "Referencia de C++ de is_pod". cplusplus.com . Consultado el 6 de diciembre de 2016 .
  6. ^ "P0767R1: Desaprobar POD". www.open-std.org . Consultado el 20 de enero de 2020 .
  7. ^ "Convenciones del código Java 10.1". Oracle . Consultado el 6 de diciembre de 2016 .
  8. ^ "Estructuras de datos del lenguaje Java". Convenciones de código Sun/Oracle. 20 de abril de 1999. Consultado el 6 de diciembre de 2016 .
  9. ^ "¿Qué son las Dataclasses en Python? - DJTECHNEWS". 30 de agosto de 2023.