stringtranslate.com

Contenedor (tipo de datos abstractos)

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 que sigue 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 adecuada para cualquier escenario determinado.

Las estructuras de datos de contenedor 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 tipo 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 valor único almacenan cada objeto de forma independiente. Se puede acceder a los objetos directamente, mediante una construcción de bucle del lenguaje (por ejemplo, for loop ) o con un iterador .

Un contenedor asociativo utiliza una matriz , un mapa o un diccionario asociativo, compuesto por 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 clases.

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 , 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 resulta en un tedioso proceso de escribir y mantener una colección de contenedores para cada tipo de elemento. [3] : 274–276 

Muchos tipos elementales (por ejemplo, enteros o números 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, por supuesto, que 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 es universalmente asignable por cualquier otro (por ejemplo, clase de objeto raíz).
Abatimiento ;
sustitución de clase
Los tres enfoques anteriores se utilizan para lenguajes débilmente tipados; estos suelen implicar herencia y polimorfismo compartido por tipos.
Tipos de unión (lenguaje C/C++)
Permite almacenar tipos de datos de diferentes tamaños; Sin embargo, es difícil garantizar qué tipo se almacena en una unión al recuperarlo y se debe seguir cuidadosamente.
Conversión de tipo
Plantillas o genéricos
Garantiza la reutilización y la seguridad tipográfica; Puede pensarse como una herencia inversa. Sin embargo, este enfoque puede requerir la implementación de una especialización de plantilla que, supuestamente, es un proceso que requiere mucho tiempo dado que los tipos difieren en sus métodos. [3] : 281 

Ver también

Referencias

  1. ^ Paul E. Black (ed.), entrada para estructura de datos en Diccionario de algoritmos y estructuras de datos . 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, Timoteo (1997). Una introducción a la programación orientada a objetos (2ª ed.). Lectura, Massachusetts: Addison-Wesley. ISBN 0-201-82419-1. OCLC  34788238.

enlaces externos