stringtranslate.com

Contenedor (tipo de datos abstracto)

En informática , un contenedor es una clase o una estructura de datos [1] [2] cuyas instancias son colecciones de otros objetos. En otras palabras, almacenan objetos de forma organizada siguiendo reglas de acceso específicas.

El tamaño del contenedor depende de la cantidad de objetos (elementos) que contiene. Las implementaciones subyacentes (heredadas) de varios tipos de contenedores pueden variar en tamaño, complejidad y tipo de lenguaje, pero en muchos casos brindan flexibilidad para elegir la implementación correcta para cualquier escenario determinado.

Las estructuras de datos contenedores se utilizan comúnmente en muchos tipos de lenguajes de programación .

Función y propiedades

Los contenedores se pueden caracterizar por las siguientes tres propiedades:

Se espera que las clases contenedoras implementen métodos similares a CRUD para hacer lo siguiente:

A veces los contenedores se implementan junto con iteradores .

Tipos

Los contenedores pueden clasificarse como contenedores de valor único o contenedores asociativos .

Los contenedores de un solo valor almacenan cada objeto de forma independiente. Se puede acceder a los objetos directamente, mediante una construcción de bucle del lenguaje (por ejemplo, bucle for ) o con un iterador .

Un contenedor asociativo utiliza una matriz , un mapa o un diccionario asociativo, compuesto de pares clave-valor, de modo que cada clave aparece como máximo una vez en el contenedor. La clave se utiliza para encontrar el valor, el objeto, si está almacenado en el contenedor. Los contenedores asociativos se utilizan en lenguajes de programación como plantillas de clase.

Los tipos de datos abstractos de contenedor incluyen:

Las estructuras de datos comunes utilizadas para implementar estos tipos abstractos incluyen:

Contenedores gráficos

Los kits de herramientas de widgets también utilizan contenedores, que son widgets especiales para agrupar otros widgets, como ventanas o paneles . Aparte de sus propiedades gráficas, tienen el mismo tipo de comportamiento que las clases contenedoras, ya que mantienen una lista de sus widgets secundarios y permiten agregar, eliminar o recuperar widgets entre sus hijos.

En lenguajes tipados estáticamente

Las abstracciones de contenedores se pueden escribir en prácticamente cualquier lenguaje de programación, independientemente de su sistema de tipos. [3] : 273  Sin embargo, en lenguajes de programación orientados a objetos fuertemente tipados puede resultar algo complicado para un desarrollador escribir contenedores homogéneos reutilizables.

Debido a las diferencias en los tipos de elementos, esto da como resultado un proceso tedioso de escritura y mantenimiento de una colección de contenedores para cada tipo de elemento. [3] : 274–276 

Muchos tipos elementales (por ejemplo, números enteros o flotantes) son inherentemente incompatibles entre sí debido al tamaño de memoria que ocupan y su significado semántico y, por lo tanto, requieren contenedores diferentes (a menos que, por supuesto, sean mutuamente compatibles o convertibles). [3] : 274–276  Los lenguajes de programación modernos ofrecen varios enfoques para ayudar a resolver el problema: [3] : 274–281 

Tipo básico universal
Un tipo que puede asignarse universalmente por cualquier otro (por ejemplo, la clase de objeto raíz).
Abatido ;
Sustitución de clases
Los tres enfoques anteriores se utilizan para lenguajes débilmente tipados; estos generalmente implican herencia y polimorfismo compartidos por los tipos.
Tipos de unión (lenguaje C/C++)
Permite almacenar tipos de datos de distintos tamaños; sin embargo, es difícil garantizar qué tipo se almacena en una unión al momento de la recuperación y se debe seguir cuidadosamente.
Conversión de tipos
Plantillas o genéricos
Garantiza la reutilización y la seguridad de tipos; puede considerarse como una herencia inversa. Sin embargo, este enfoque puede requerir la implementación de una especialización de plantillas , lo que se considera un proceso que consume mucho tiempo dado que los tipos difieren en sus métodos. [3] : 281 

Véase también

Referencias

  1. ^ Paul E. Black (ed.), entrada para estructura de datos en Dictionary of Algorithms and Data Structures . Instituto Nacional de Estándares y Tecnología de EE. UU . . 15 de diciembre de 2004. Consultado el 4 de octubre de 2011.
  2. ^ Estructura de datos de entrada en la Encyclopædia Britannica (2009) Entrada en línea Consultado el 4 de octubre de 2011.
  3. ^ abcde Budd, Timothy (1997). Introducción a la programación orientada a objetos (2.ª ed.). Reading, Mass.: Addison-Wesley. ISBN 0-201-82419-1.OCLC 34788238  .

Enlaces externos