¿Qué son los tipos de datos abstractos?

Un tipo de datos abstractos ( ADT ) es básicamente una descripción lógica o una especificación de componentes de los datos y las operaciones permitidas, que es independiente de la implementación.

Los ADT son un concepto teórico en informática, utilizado en el diseño y análisis de algoritmos, estructuras de datos y sistemas de software, y no se corresponden con características específicas de los lenguajes de computadora.

Puede haber miles de formas en que se puede implementar un ADT determinado, incluso cuando el lenguaje de codificación permanece constante. Cualquier implementación de este tipo debe cumplir con la descripción de contenido y comportamiento del ADT.

Ejemplos

Por ejemplo, los enteros son un ADT, definido como los valores 0, 1, −1, 2, 2, …, y por las operaciones de suma, resta, multiplicación y división, junto con mayor que, menor que, etc., que son independientes de cómo los enteros son representados por la computadora. Por lo general, los enteros se representan como números binarios, la mayoría de las veces como complemento de dos, pero pueden ser decimales codificados en binario o en complemento de uno, pero el usuario se abstrae de la elección concreta de representación y simplemente puede usar los datos como enteros.

Otro ejemplo puede ser una lista, con componentes que son el número de elementos y el tipo de elementos. Las operaciones permitidas son insertar un elemento, eliminar un elemento, verificar si hay un elemento presente, imprimir la lista, etc. Internamente, podemos implementar la lista usando una matriz o una lista vinculada, y por lo tanto, el usuario se abstrae de la implementación concreta.
Mire esto para las dos implementaciones anteriores de la lista ADT: CS13002 Programación y estructuras de datos

¿Por qué ADT?

Para gestionar la complejidad de los problemas y el proceso de resolución de problemas, se utilizan abstracciones para permitir que el usuario se concentre en el “panorama general” sin perderse en los detalles. Al crear modelos del dominio del problema, el usuario puede enfocarse eficientemente en el proceso de resolución de problemas.

Ventajas

  • Encapsulación: el usuario no necesita ningún conocimiento técnico de cómo funciona la implementación para usar el ADT. De esta forma, la implementación puede ser compleja, pero se encapsulará en una interfaz simple cuando se use realmente.
  • Localización del cambio: el código que usa un objeto ADT no tendrá que editarse si se cambia la implementación del ADT, ya que cualquier cambio en la implementación debe cumplir con las propiedades y habilidades especificadas en la definición de ADT.
  • Flexibilidad: diferentes implementaciones de un ADT pueden ser más eficientes en diferentes situaciones y es posible usar cada una en la situación en la que son preferibles. Por lo tanto, esta flexibilidad aumenta la eficiencia general.
  • Código fácil de entender y reutilizable.

Implementación

Los lenguajes modernos orientados a objetos, como C ++ y Java, admiten la implementación de ADT en forma de clase. Puede usar struct en C para lo mismo.
Consulte este código C ++ de muestra para la implementación de números complejos ADT: Ideone.com

Preguntas más frecuentes

¿Cuál es la diferencia entre un ADT y una estructura de datos?
En pocas palabras, ADT es más lógico descripción, mientras que una estructura de datos es real, algo concreto.

aquí:

Definición:

Un tipo de datos abstracto es un tipo con operaciones asociadas, pero cuya representación está oculta. Ejemplos comunes de tipos de datos abstractos son los tipos primitivos integrados en Haskell, Integer y Float. Haskell admite la definición de tipos de datos abstractos a través del sistema de módulos. En muchos casos, no es necesario ocultar completamente la representación de los datos, por lo que es suficiente una definición de tipo de datos normal. Además, los tipos parametrizados se pueden ver como una especie de tipo abstracto, porque dejan algunas partes del tipo de datos sin definir o abstractas.

Ejemplo:

1) árbol

Aquí hay un ejemplo de un tipo de datos parametrizado .

Árbol de datos a = Cero
El | Nodo {left :: Tree a,
valor :: a,
derecha :: Árbol a}

Este tipo es abstracto porque deja algunos aspectos de su estructura sin definir, que debe proporcionar el usuario del tipo de datos. Esta es una forma débil de tipo de datos abstractos.

En este ejemplo, el tipo de elementos contenidos en el árbol se deja abierto. Por ejemplo, un usuario de este tipo de datos podría usarlo así:

three_number_tree :: Tree Integer
three_number_tree = Nodo (Nodo Nil 1 Nil) 2 (Nodo Nil 3 Nil)

El usuario aquí completa el tipo de elementos del árbol (

Entero

) Un usuario diferente podría especificar un tipo diferente para ese parámetro. Esta flexibilidad es lo que permite que este tipo se use en muchos contextos diferentes. Diferentes tipos de datos abstractos dejan diferentes partes del resumen de datos.

Por el contrario, un tipo de datos concreto es uno que no proporciona tal flexibilidad.

El ejemplo anterior utiliza la parametrización para lograr la abstracción, al tiempo que expone la estructura de los datos a sus usuarios.

2) Pila

Un tipo de datos abstracto más tradicional oculta completamente la estructura interna, o representación, de los datos. El siguiente ejemplo ilustra esta forma más tradicional de tipo de datos abstractos.

Podemos implementar una pila polimórfica simple usando una lista sin decirle al consumidor nada sobre su funcionamiento interno. El módulo solo exporta el constructor de tipos (pero no el constructor de datos) y las funciones:

pila de módulos (Stack, empty, isEmpty, push, top, pop) donde

vacío :: apilar un
isEmpty :: Pila a -> Bool
push :: a -> Stack a -> Stack a
arriba :: Pila a -> a
pop :: Pila a -> (a, Pila a)

newtype Stack a = StackImpl [a] – opaco!
vacío = StackImpl []
isEmpty (StackImpl s) = nulo s
push x (StackImpl s) = StackImpl (x: s)
top (StackImpl s) = cabeza s
pop (StackImpl (s: ss)) = (s, StackImpl ss)

Si luego decide cambiar la implementación de la pila, la API no cambia. También puede estar seguro de que el usuario no puede modificar “sus” estructuras de datos dentro del tipo de datos abstracto.

para más visitas una vez: tipo de datos abstractos

Tipo de datos abstractos:

Un tipo de datos puede considerarse abstracto cuando se define en términos de operaciones en él, y su implementación está oculta (de modo que siempre podamos reemplazar una implementación por otra por, por ejemplo, razones de eficiencia, y esto no interferirá con nada en el programa).

Un tipo de datos abstractos o ADT (a veces denominado tipo de datos abstractos ) es un modelo matemático de una estructura de datos. Describe un contenedor que contiene un número finito de objetos donde los objetos pueden estar asociados a través de una relación binaria dada.

Las operaciones que se pueden realizar en el contenedor pueden ser básicas ( por ejemplo , insertar, eliminar, etc. ) o pueden basarse en la relación ( por ejemplo , dado un objeto (posiblemente ya en el contenedor), encuentre el siguiente objeto más grande).

Enlace útil para Microsoft Dot Net:

Nueva actualización de Dot Net PDF DESCARGAR

Dot Net Interview preguntas y respuestas

Tutoriales de Dot Net para principiantes y profesionales

Abstracción de Java

Es un proceso de ocultar detalles de implementación y mostrar solo la funcionalidad al usuario.

En Java tenemos dos tipos de métodos.

i) Métodos concretos (Los métodos que tienen cuerpo)

Ejemplo:
public void add () {
Declaraciones
———
——–
———
}

ii) Métodos abstractos (Los métodos que no tienen cuerpo)

Ex:

public void add ();
————————————————-
si conocemos el nombre del método, pero no conocemos la funcionalidad del método, entonces buscamos métodos abstractos.

> La clase Java contiene métodos 100% concretos

> Clase abstracta contiene uno o más métodos abstractos.

Ejemplo:

Clase 1 (que tiene 10 métodos)

(10 métodos son métodos concretos)

Es una clase de Java
————————-
Clase 2 (que tiene 10 métodos)

(5 métodos concretos y 5 métodos abstractos)

Clase abstracta
Clase 3 (que tiene 10 métodos)

(10 métodos son métodos abstractos)

Clase abstracta
———————————-
HeroHonda de clase pública extiende Bike {

@Anular
mango vacío público () {
System.out.println (“Las bicicletas tienen manija”);
}
@Anular
asiento público vacío () {
System.out.println (“Las bicicletas tienen asiento”);
}
public static void main (String [] args) {
HeroHonda obj = nuevo HeroHonda ();
obj.handle ();
obj.engine ();
obj.seat ();
}
——————————————-
Interfaces en Java
> La interfaz es un bloque de definición de tipo Java que es 100% abstracto.

> Todos los métodos de la interfaz son públicos y abstractos por defecto.

> Los modificadores estáticos y finales no están permitidos para los métodos de interfaz.

> En las interfaces, las variables deben inicializarse en el momento de la declaración.

Ejemplo:

int a; // Incorrecto

int a = 10; // correcto

> En las interfaces las variables son públicas estáticas finales por defecto.

> La interfaz se usará usando la palabra clave “implements”.
——————————————–
Ejemplo:
clase pública Ejemplo2 implementa Ejemplo1 {

@Anular
public void add () {
System.out.println (“Adición”);
}

@Anular
public void sub () {
System.out.println (“Resta”);
}
public static void main (String [] args) {
Ejemplo2 abc = nuevo Ejemplo2 ();
abc.add ();
abc.sub ();
}
}
——————————————————–
De Clase (Clase concreta o Clase abstracta) a Clase, usamos la palabra clave “extiende”

i) De la clase concreta a la subclase: podemos acceder directamente a los métodos de la superclase.

ii) De la clase abstracta a la subclase: implemente todos los métodos abstractos y luego podremos acceder a todos los métodos.
———————————————-
De la interfaz a la clase, usamos la palabra clave “implementos”

De la interfaz a la clase: implemente todos los métodos y accesos.

Un tipo de datos abstractos (ADT) es una clase abstracta. No se puede instanciar (en un lenguaje de programación ideal) y es útil solo cuando se extiende.

Son como las interfaces de Java . Puede especificar las características generales de su clase, pero puede usarla solo como base para otras clases (que pueden ser abstractas u concretas).

Ejemplo:

Suponga que tiene una clase base llamada Animal que supone utilizar como base para Gato, Perro, etc. En este caso, la clase Animal en sí misma es inútil pero ayuda significativamente en la estructuración de la herencia. Animal es un ADT.

Los tipos de datos abstractos son como el tipo de datos definido por el usuario en el que podemos realizar funciones sin saber qué hay dentro del tipo de datos y cómo se realizan las operaciones en ellos. Como la información no está expuesta es abstraída. p.ej.

La pila y la cola no son un tipo de datos, son una forma de implementar una estructura de datos, pero se llaman como TIPO DE DATOS abstracto porque podemos hacer operaciones en el tipo de datos solo no en la función, aquí en la pila y la cola podemos hacer operaciones como pop, push , poner en cola etc. y su RESUMEN porque no se nos da información sobre lo que hay dentro de la pila o la cola, aquí llamamos a la función para hacer operaciones sin saber qué cosas hay en la pila o la cola, las funciones sabrán qué hay dentro y harán el trabajo cuando se llama. como no se proporciona toda la información, solo se proporciona la información requerida, por lo que su resumen (no concreto)

¿Qué es un ADT o un tipo de datos abstractos?

Es una definición abstracta o contrato que la API tiene que obedecer y prometerle al usuario que entregará lo que dice. Hay dos cosas en una API que se pueden considerar bastante independientes entre sí. Con el contrato y la implementación, tratamos principalmente de escribir un contrato antes de proporcionar una implementación.

Esto es bueno por dos razones, primero: definimos el objetivo y, por lo tanto, sellamos el requisito (con un alcance menor para los cambios) incluso antes de comenzar la implementación; segundo, aclaramos nuestras intenciones al usuario de la API y les damos una pista de lo que pueden esperar.

El ADT debe ser tal que pueda manejar todo tipo de variaciones en la estructura de datos, por ejemplo, si defino un ADT para Tree, debe ser capaz de manejar Binary Tree, N-ary Tree, Red-Black Tree, AVL Tree , Montón, etc.

Para obtener más información, visite la publicación del blog Estructura de datos jerárquicos – Árbol ADT – Techie Me

Los tipos de datos abstractos son tipos de datos que definen las características básicas que se requieren para esos tipos de datos, por ejemplo: –
Mapas, que se utiliza para crear HashMaps
Lista, que se utiliza para crear ArrayList u otro tipo de tipos de datos de lista.
estos son con respecto a Java

La definición de un tipo de datos junto con sus operaciones se denominan Tipo de datos abstractos. Algunos de los ADT comunes son Lista enlazada, Pila, Cola, Árboles.

Considere Stack, su tipo de datos subyacente puede ser una matriz o una lista vinculada y las operaciones son pop (devuelve el elemento más alto y elimina), empuje (agregue el valor dado en la parte superior).

Y el tipo de datos abstractos es una definición genérica del tipo de miembros y operadores para el conjunto. Tales números enteros, una pila, etc. No es una instancia real, sino el tipo genérico del que podría hacer instancia.