TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
TEMARIO DE CURSO
PROGRAMACIÓN JAVA SE
CAPÍTULO 19
T.A.D.
(TIPOS ABSTRACTOS DE DATOS)
© Iñaki Martín
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
NOTA: Ante nada, decir que los TAD no son materia específica de una asignatura de programación, sino de asignaturas de
Estructuras de datos. Por ello, pertenece a los capitulos 40 en adelante, orientados hacia estas temáticas no estrictamente
JAVA.
• Abstraer consiste en centrarse sólo en la parte principal y esencial de los problemas, dejando así
a un lado todos los detalles insignificantes o menos importantes.
• Un buen ejemplo de la capacidad humana para la abstracción es la elaboración y lectura de un
mapa. Al dibujar nuestro mapa de carreteras, podemos reflejar en él los elementos principales, los
que tienen utilidad para su interpretación, como por ejemplo las autopistas, carreteras nacionales,
gasolineras, etc. Otros datos como (museos, parques) no aparecen ya que se consideran
innecesarios para nuestro tipo de mapa.
• Una gran ventaja de la abstracción es que nos permite dividir los problemas en partes
independientes y solucionar cada una por separado.
TAD - Definición
ABSTRACCION
2
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• En los inicios de la informática, los programadores se comunicaban con las máquinas en binario,
lo cual era un trabajo extremadamente largo y complicado.
• Al cabo de un tiempo apareció el código ensamblador, cuyos nemotécnicos facilitaron el trabajo
de los programadores al evitar que tuviesen que recordar las secuencias de unos y ceros que
formaban cada instrucción. Estos nemotécnicos constituyeron la primera escala de abstracción
de la era informática.
• Más tarde llegaron los lenguajes de alto nivel y con ellos las macroinstrucciones. Gracias a estos
lenguajes, los programadores pudieron comenzar a escribir software genérico, es decir, podían
programar sin preocuparse de la arquitectura de la máquina sobre la que iba a correr el
programa.
• En definitiva, la abstracción iba creciendo a medida que lo hacía la complejidad de los lenguajes y
de los sistemas, permitiendo el surgir de instrucciones de control, repetitivas, procedimientos y
funciones, los módulos y posteriormente los tipos abstractos de datos.
TAD - Definición
Abstraccion y programacion
3
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• En la programación, la abstracción puede aplicarse de dos modos distintos dando lugar a la
abstracción funcional y la abstracción de datos.
• Abstracción funcional: aparece al pensar de manera abstracta las operaciones que
necesitamos para resolver un problema. Este tipo de abstracción nos permite definir
operaciones nuevas en una aplicación que anteriormente carecía de ellas. La abstracción
funcional fue la primera en aparecer ya que es fácil de llevar a la práctica debido a que su
implementación es posible en la gran mayoría de los lenguajes de programación. Suele
corresponderse con el uso de procedimientos o funciones.
• Abstracción de datos (= Clase): surge cuando se abstrae el significado de los diferentes tipos
de datos que aparecen en nuestro problema. Este tipo de abstracción nos permite crear
nuevos tipos de datos pensando en los posibles valores que pueden tomar y en las
operaciones que los manipulan. Como cabe esperar, estas operaciones serán a su vez
abstracciones funcionales.
• La abstracción de datos es más reciente que la funcional, ya que los primeros lenguajes de
programación no ofrecían demasiadas facilidades para su uso. Los lenguajes de programación
modernos (sobre todo la POO) ofrecen herramientas y mecanismos para implementar abstracción
de datos y, por lo tanto, TAD (clases, interfaces, objetos, herencia, genéricos. . . )
TAD - Definición
Abstraccion funcional y abstraccion de datos
4
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• Se debe diferenciar claramente entre los datos, los tipos de datos y los tipos abstractos de datos.
• Los datos son los valores que manejamos en la resolución de un problema, tanto los valores
de entrada, como los de proceso y los de salida. Es decir, los datos son información y por lo
tanto distinguimos varios tipos de datos.
• Un tipo de dato se puede definir como un conjunto de valores y un conjunto de
operaciones definidas por esos valores. Clasificar los datos en distintos tipos aporta muchas
ventajas, como por ejemplo indicarle al compilador la cantidad de memoria que debe reservar
para cada instancia dependiendo del tipo de dato al que pertenezca.
• Los tipos de datos abstractos van más allá; son creados por el usuario, y extienden la
función de un tipo de dato ocultando la implementación de las operaciones definidas por el
usuario. Esta capacidad de ocultamiento nos permite desarrollar software reutilizable y
extensible, lo cual veremos más adelante cuando hablemos de modularidad.
TAD - Definición
Datos, tipos de datos predefinidos y tipos de datos abstractos
5
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• Un tipo de datos definido por el programador se denomina tipo abstracto de datos (TAD) para
distinguirlo de los tipos predefinidos de datos.
• Los tipos abstractos de datos están formados por los datos (estructuras de datos) y las
operaciones (procedimientos o funciones) que se realizan sobre esos datos.
• El conjunto de operaciones definidas sobre el TAD debe ser cerrado, es decir, sólo se debe
acceder a los datos mediante las operaciones abstractas definidas sobre ellos. La
abstracción de datos sólo permite acceder a ellos de manera controlada.
• Las estructuras de los TAD se componen de dos partes: la interfaz y la implementación.
★ en la interfaz se declaran las operaciones y los datos,
★ la implementación contiene el código fuente de las operaciones y lo mantiene oculto al
usuario.
• Las principales ventajas que nos aportan los TAD son las siguientes
1. Mejoran la conceptualización y hacen más claro y comprensible el código.
2. Hacen que el sistema sea más robusto.
3. Reducen el tiempo de compilación.
4. Permiten modificar la implementación sin que afecte al interfaz público.
5. Facilitan la extensibilidad.
TAD - Definición
TAD. Definición
6
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• La construcción de un TAD consta de dos fases: la especificación (formal e informal) y la
implementación.
• Especificación: Implica que las características de un TAD no deben depender de su realización
concreta, sino solamente de cómo queremos que sea su comportamiento. Puede ser informal
(lenguaje natural) o formal (algebraica)
• Para la especificación de un tipo abstracto de datos en lenguaje natural (especificación informal)
hemos de seguir el siguiente esquema:
‣ Tipo de datos: Nombre del tipo (Lista de operaciones)
‣ Valores: Descripción de los posibles valores
‣ Operaciones: Descripción de cada operación
• Primero indicaremos el nombre del TAD y citaremos todas las operaciones definidas. En el
apartado valores describiremos los posibles valores de los datos de este tipo, pero lo haremos
desde un punto de vista abstracto, sin pensar en la posible realización concreta. Finalmente en el
apartado operaciones haremos una descripción de cada una de las operaciones definidas sobre
el TAD. En la especificación informal, habitualmente hacemos referencia a conceptos con los
cuales el lector está familiarizado (como por ejemplo conceptos matemáticos).
TAD - Definición
Construir un TAD
Especificación: especificación informal
Especificación
7
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• La especificación formal nos permite definir conceptos de manera mucho más precisa. Para ello
utilizaremos este esquema:
‣ Tipo: Nombre del tipo de datos
‣ Sintaxis: Forma de las operaciones
‣ Semántica: Significado de las operaciones
• En el apartado sintaxis proporcionamos el tipo de datos de entrada y de salida de cada una de las
funciones definidas sobre el TAD, mientras que en semántica describiremos sus
comportamientos. Sin embargo, ésta vez lo haremos siguiendo unas normas algebraicas básicas.
TAD - Definición
Ejemplo de espedificaciones (un TAD de un Conjunto):
Especificación: especificación formal
8
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• En la implementación del TAD lo que hacemos es elegir la forma en que se van a representar los
distintos valores que tomarán los datos. También seleccionaremos la manera en que se realizarán
las operaciones. Para esta elección debemos tener en cuenta que todas las operaciones se
realicen de la forma más eficiente posible, aunque con la práctica veremos que la mayoría de las
veces una implementación facilita mucho algunas operaciones mientras que complica otras.
• Dada una especificación de un TAD podemos tener muchas implementaciones válidas
TAD - Definición
Implementación
• La programación modular descompone un programa en un pequeño número de abstracciones
independientes unas de otras pero fáciles de conectar entre sí.
• La programación modular sigue el criterio de ocultación de información: si no se necesita algún
tipo de información, no se debe tener acceso a ella.
• La modularidad es un aspecto muy importante en los TAD, ya que es el reflejo de la
independencia de la especificación y la implementación. Es la demostración de que un TAD
puede funcionar con diferentes implementaciones.
• Además de esto, la programación modular ofrece otras ventajas, como por ejemplo un mejor
reparto del trabajo y una detección de fallos mucho mejor.
Modularidad
9
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• Los tipos abstractos de datos básicos se clasifican habitualmente, atendiendo a su estructura, en
lineales y no lineales.
• Listas
★ Forma de almacenar elementos que consiste en colocarlos en una lista lineal en la que cada
elemento tiene una referencia de cual es el elemento siguiente
★ Las listas se utilizan habitualmente para guardar elementos del mismo tipo y se caracterizan
porque pueden contener un número indeterminado de elementos y porque siguen un orden
explícito.
• Colas
★ Una cola es una lista en la que los elementos se insertan por un extremo (llamado fondo) y
se suprimen por el otro (llamado frente).
★ En esta estructura de datos el primer elemento que entra es el primero en salir (FIFO). Es un
tipo de dato muy común tanto dentro de la informática como en la vida real.
• Pilas
★ Una pila es una estructura de datos en la cual todas las inserciones y las eliminaciones se
realizan por el mismo extremo, denominado cima de la pila. En una pila, el último elemento
en entrar es el primero en salir (LIFO), al contrario de lo que pasa en las colas.
TAD - Definición
TAD más habituales
TAD Lineales
10
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• Árboles
★ El árbol es un TAD que organiza sus elementos (nodos) de forma jerárquica. Si una rama va
del nodo a al nodo b, entonces a es el padre de b. Todos los nodos tienen un padre, excepto
el nodo principal, denominado raíz del árbol.
• Árboles binarios de búsqueda
★ El árbol binario de búsqueda es una variación del TAD árbol. Se trata de aquellos árboles
binarios (cada nodo tiene dos hijos como máximo) en los cuales todos los datos del
subárbol izquierdo son menores que los datos del nodo, y los datos del subárbol derecho son
mayores que los datos del nodo.
• Grafos
★ Si los árboles binarios representan datos entre los cuales existe una jerarquía, los grafos, sin
embargo, se utilizan para representar relaciones arbitrarias entre datos. En su
representación, cada elemento de problema forma un nodo. La relación entre nodos forma
una arista que puede ser dirigida o bidireccional (no dirigida).
• Conjuntos
★ Grupos de datos de identica naturaleza, sin orden preestablecido. Suelen implementar
algunas operaciones básicas: unión, intersección, diferencia, inserción, borrado, búsqueda...
TAD - Definición
TAD No Lineales
11
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• En Java un TAD consiste en una jerarquía de clases e interfaces.
• Los interfaces especifican el qué, y las clases implementan el cómo
• El interfaz no incluye constructores, ni métodos heredados de Object como toString, equals, etc.
• La descripción de lo que hace cada método del interfaz debe documentarse
‣ Ya sea en lenguaje natural usando Javadoc
‣ Ya sea en lenguaje formal usando lógica formal
TAD en JAVA
Implementar un TAD en JAVA
12
TemariodecursoJavaSE©IñakiMartín

19.- TAD (tipos abstractos de datos)
• Imaginemos que queremos crear un TAD para representar un numero complejo, pero que nuestro
TAD nos valga para las dos representaciones que tiene (binomio o polar)
‣ Como hay dos formas de representar complejos, el interfaz ofrece getters para ambas
representaciones
‣ Los métodos suma, resta y conj reciben como parámetro cualquier clase que implemente el
interfaz IComplejo
‣ Cuando se implemente la interfaz en clases, el uso de getters en estas deben comparar con
cualquier objeto que implemente el interfaz IComplejo (ver que el parámetro del método, y su
devolución, son objetos de la interfaz):
TAD en JAVA
interface IComplejo {
public double getReal(); // Devuelve la parte real
public double getImaginaria(); // Devuelve la parte imaginaria
public double getModulo(); // Devuelve el modulo
public double getArgumento(); // Devuelve el argumento
public IComplejo suma(IComplejo c); // Devuelve un IComplejo sumando ’c’
public IComplejo resta(IComplejo c); // Devuelve un IComplejo restando ’c’
public IComplejo conj(IComplejo c); // Devuelve un IComplejo conjugando ’c’
}
Ejemplo: definir un TAD para un numero complejo:
public IComplejo suma(IComplejo c) {
if (c == null) {
throw new IllegalArgumentException();
}
return new ComplejoCart(this.real + c.getReal(),
this.imaginaria + c.getImaginaria());
}
13

Más contenido relacionado

PPTX
Ventajas y desventajas de moprosoft
PDF
ESPRESIONES REGULARES
DOCX
Métrica de punto de función y lineas de codigo
PPTX
Trabajo Final Sistemas Operativos
PPTX
Procedimientos almacenados
PPTX
TRIGGERS O DISPARADORES
PDF
Transacciones
Ventajas y desventajas de moprosoft
ESPRESIONES REGULARES
Métrica de punto de función y lineas de codigo
Trabajo Final Sistemas Operativos
Procedimientos almacenados
TRIGGERS O DISPARADORES
Transacciones

La actualidad más candente (20)

PPTX
Mecanismos de exclusion mutua y algoritmos
PPT
diagrama de casos de uso del negocio y del sistema
PPTX
Arquitecturas de pizarra o repositório
DOCX
Componentes y evolucion del modelado de negocios(investigacion)
PPTX
Unidad III procedimientos
DOCX
Investigacion unidad 3
PPTX
Sistemas operativos procesos
DOCX
control de concurrencia
PPTX
Monitoreo sql server
PDF
automatas finitos
DOCX
Ejemplos acid
PPTX
Taller de Base de Datos - Unidad 6 SQL procedural
PPTX
Registros de control y estados de la CPU
PPT
Español estructurado
PPTX
Cualidades de un lenguaje de programación
PPTX
Taller de Base de Datos - Unidad 7 Conectividad
PDF
Tutorial de JFLAP
PPTX
MODELO DE PROCESOS DEL SOFTWARE
PPTX
INTEGRIDAD DE ENTIDAD E INTEGRIDAD REFERENCIAL EN SQL SERVER Y ACCESS
PDF
Unidad1 2 Lenguajes y automatas
Mecanismos de exclusion mutua y algoritmos
diagrama de casos de uso del negocio y del sistema
Arquitecturas de pizarra o repositório
Componentes y evolucion del modelado de negocios(investigacion)
Unidad III procedimientos
Investigacion unidad 3
Sistemas operativos procesos
control de concurrencia
Monitoreo sql server
automatas finitos
Ejemplos acid
Taller de Base de Datos - Unidad 6 SQL procedural
Registros de control y estados de la CPU
Español estructurado
Cualidades de un lenguaje de programación
Taller de Base de Datos - Unidad 7 Conectividad
Tutorial de JFLAP
MODELO DE PROCESOS DEL SOFTWARE
INTEGRIDAD DE ENTIDAD E INTEGRIDAD REFERENCIAL EN SQL SERVER Y ACCESS
Unidad1 2 Lenguajes y automatas
Publicidad

Similar a Jyoc java-cap19 tad (tipos abstractos de datos) (20)

PDF
Tema1 (2)
PPTX
tipos de datos abtractos para estudiantes .pptx
DOC
PDF
1.1 tda
PPTX
Estructuta de datos
PDF
Estructura de datos pdf
PPTX
Estructurade datos
PPT
PRINCIPIOS DEL DISEÑO DE ESTRUCTURAS DE DATOS
PPT
Modelo Dinamico
PDF
Tipos abstractos de datos
DOCX
Primera unidad de_estructura_de_datos_juana_contreras_pelaez_isc_3_semestre_a
PPTX
Diapositiva estructura de datos unidad 1
PPTX
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
PDF
PDF
Tipos de datos abstractos
PDF
02-Def Basicas Estructuras PRESENTACION de Datos.pdf
PPTX
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
PPTX
SEGUNDA CLASE - EVIVALENCIA para estudiantes.pptx
PPTX
Estructuras de Datos - Presentación.pptx
PPTX
estructuradedatospresentacion- primera parte
Tema1 (2)
tipos de datos abtractos para estudiantes .pptx
1.1 tda
Estructuta de datos
Estructura de datos pdf
Estructurade datos
PRINCIPIOS DEL DISEÑO DE ESTRUCTURAS DE DATOS
Modelo Dinamico
Tipos abstractos de datos
Primera unidad de_estructura_de_datos_juana_contreras_pelaez_isc_3_semestre_a
Diapositiva estructura de datos unidad 1
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Tipos de datos abstractos
02-Def Basicas Estructuras PRESENTACION de Datos.pdf
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
SEGUNDA CLASE - EVIVALENCIA para estudiantes.pptx
Estructuras de Datos - Presentación.pptx
estructuradedatospresentacion- primera parte
Publicidad

Más de Jyoc X (20)

PDF
Jyoc java-cap23 j unit
PDF
Jyoc java-cap22 seguridad
PDF
Jyoc java-cap21 jse avanzado
PDF
Jyoc java-cap20 listas, colas y pilas
PDF
Jyoc java-cap18 swing y java fx
PDF
Jyoc java-cap17 persistencia. nio
PDF
Jyoc java-cap15 persistencia. ficheros xml, j son y pdf
PDF
Jyoc java-cap14 persistencia. ficheros corrientes
PDF
Jyoc java-cap13 recursividad
PDF
Jyoc java-cap12 excepciones
PDF
Jyoc java-cap11 colecciones
PDF
Jyoc java-cap10 clases complementarias y enumerados
PDF
Jyoc java-cap08 principios poo
PDF
Jyoc java-cap07 clases y objetos
PDF
Jyoc java-cap06 la clase string
PDF
Jyoc java-cap05 metodos (funciones)
PDF
Jyoc java-cap04 vectores (arrays)
PDF
Jyoc java-cap03 bucles
PDF
Jyoc java-cap02 bifurcaciones
PDF
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap23 j unit
Jyoc java-cap22 seguridad
Jyoc java-cap21 jse avanzado
Jyoc java-cap20 listas, colas y pilas
Jyoc java-cap18 swing y java fx
Jyoc java-cap17 persistencia. nio
Jyoc java-cap15 persistencia. ficheros xml, j son y pdf
Jyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap13 recursividad
Jyoc java-cap12 excepciones
Jyoc java-cap11 colecciones
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap08 principios poo
Jyoc java-cap07 clases y objetos
Jyoc java-cap06 la clase string
Jyoc java-cap05 metodos (funciones)
Jyoc java-cap04 vectores (arrays)
Jyoc java-cap03 bucles
Jyoc java-cap02 bifurcaciones
Jyoc java-cap01 tipos de datos y entrada-salida

Último (20)

PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
PDF
Estrategia de apoyo valentina lopez/ 10-3
PPT
Protocolos de seguridad y mecanismos encriptación
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PPTX
Reconocimiento-Automatico-de-Placas-Vehiculares-con-IA.pptx
PDF
capacitación de aire acondicionado Bgh r 410
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
DOCX
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
PPTX
Control de calidad en productos de frutas
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PDF
TRABAJO DE TECNOLOGIA.pdf...........................
PDF
Taller tecnológico Michelle lobo Velasquez
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PDF
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
DOCX
Guía 5. Test de orientación Vocacional 2.docx
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
Estrategia de apoyo valentina lopez/ 10-3
Protocolos de seguridad y mecanismos encriptación
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Reconocimiento-Automatico-de-Placas-Vehiculares-con-IA.pptx
capacitación de aire acondicionado Bgh r 410
informe_fichas1y2_corregido.docx (2) (1).pdf
Presentacion de Alba Curso Auditores Internos ISO 19011
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
Control de calidad en productos de frutas
Estrategia de Apoyo de Daylin Castaño (5).pdf
TRABAJO DE TECNOLOGIA.pdf...........................
Taller tecnológico Michelle lobo Velasquez
Mecanismos-de-Propagacion de ondas electromagneticas
Historia Inteligencia Artificial Ana Romero.pptx
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
Guía 5. Test de orientación Vocacional 2.docx

Jyoc java-cap19 tad (tipos abstractos de datos)

  • 1. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) TEMARIO DE CURSO PROGRAMACIÓN JAVA SE CAPÍTULO 19 T.A.D. (TIPOS ABSTRACTOS DE DATOS) © Iñaki Martín Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
  • 2. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) NOTA: Ante nada, decir que los TAD no son materia específica de una asignatura de programación, sino de asignaturas de Estructuras de datos. Por ello, pertenece a los capitulos 40 en adelante, orientados hacia estas temáticas no estrictamente JAVA. • Abstraer consiste en centrarse sólo en la parte principal y esencial de los problemas, dejando así a un lado todos los detalles insignificantes o menos importantes. • Un buen ejemplo de la capacidad humana para la abstracción es la elaboración y lectura de un mapa. Al dibujar nuestro mapa de carreteras, podemos reflejar en él los elementos principales, los que tienen utilidad para su interpretación, como por ejemplo las autopistas, carreteras nacionales, gasolineras, etc. Otros datos como (museos, parques) no aparecen ya que se consideran innecesarios para nuestro tipo de mapa. • Una gran ventaja de la abstracción es que nos permite dividir los problemas en partes independientes y solucionar cada una por separado. TAD - Definición ABSTRACCION 2
  • 3. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • En los inicios de la informática, los programadores se comunicaban con las máquinas en binario, lo cual era un trabajo extremadamente largo y complicado. • Al cabo de un tiempo apareció el código ensamblador, cuyos nemotécnicos facilitaron el trabajo de los programadores al evitar que tuviesen que recordar las secuencias de unos y ceros que formaban cada instrucción. Estos nemotécnicos constituyeron la primera escala de abstracción de la era informática. • Más tarde llegaron los lenguajes de alto nivel y con ellos las macroinstrucciones. Gracias a estos lenguajes, los programadores pudieron comenzar a escribir software genérico, es decir, podían programar sin preocuparse de la arquitectura de la máquina sobre la que iba a correr el programa. • En definitiva, la abstracción iba creciendo a medida que lo hacía la complejidad de los lenguajes y de los sistemas, permitiendo el surgir de instrucciones de control, repetitivas, procedimientos y funciones, los módulos y posteriormente los tipos abstractos de datos. TAD - Definición Abstraccion y programacion 3
  • 4. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • En la programación, la abstracción puede aplicarse de dos modos distintos dando lugar a la abstracción funcional y la abstracción de datos. • Abstracción funcional: aparece al pensar de manera abstracta las operaciones que necesitamos para resolver un problema. Este tipo de abstracción nos permite definir operaciones nuevas en una aplicación que anteriormente carecía de ellas. La abstracción funcional fue la primera en aparecer ya que es fácil de llevar a la práctica debido a que su implementación es posible en la gran mayoría de los lenguajes de programación. Suele corresponderse con el uso de procedimientos o funciones. • Abstracción de datos (= Clase): surge cuando se abstrae el significado de los diferentes tipos de datos que aparecen en nuestro problema. Este tipo de abstracción nos permite crear nuevos tipos de datos pensando en los posibles valores que pueden tomar y en las operaciones que los manipulan. Como cabe esperar, estas operaciones serán a su vez abstracciones funcionales. • La abstracción de datos es más reciente que la funcional, ya que los primeros lenguajes de programación no ofrecían demasiadas facilidades para su uso. Los lenguajes de programación modernos (sobre todo la POO) ofrecen herramientas y mecanismos para implementar abstracción de datos y, por lo tanto, TAD (clases, interfaces, objetos, herencia, genéricos. . . ) TAD - Definición Abstraccion funcional y abstraccion de datos 4
  • 5. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • Se debe diferenciar claramente entre los datos, los tipos de datos y los tipos abstractos de datos. • Los datos son los valores que manejamos en la resolución de un problema, tanto los valores de entrada, como los de proceso y los de salida. Es decir, los datos son información y por lo tanto distinguimos varios tipos de datos. • Un tipo de dato se puede definir como un conjunto de valores y un conjunto de operaciones definidas por esos valores. Clasificar los datos en distintos tipos aporta muchas ventajas, como por ejemplo indicarle al compilador la cantidad de memoria que debe reservar para cada instancia dependiendo del tipo de dato al que pertenezca. • Los tipos de datos abstractos van más allá; son creados por el usuario, y extienden la función de un tipo de dato ocultando la implementación de las operaciones definidas por el usuario. Esta capacidad de ocultamiento nos permite desarrollar software reutilizable y extensible, lo cual veremos más adelante cuando hablemos de modularidad. TAD - Definición Datos, tipos de datos predefinidos y tipos de datos abstractos 5
  • 6. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • Un tipo de datos definido por el programador se denomina tipo abstracto de datos (TAD) para distinguirlo de los tipos predefinidos de datos. • Los tipos abstractos de datos están formados por los datos (estructuras de datos) y las operaciones (procedimientos o funciones) que se realizan sobre esos datos. • El conjunto de operaciones definidas sobre el TAD debe ser cerrado, es decir, sólo se debe acceder a los datos mediante las operaciones abstractas definidas sobre ellos. La abstracción de datos sólo permite acceder a ellos de manera controlada. • Las estructuras de los TAD se componen de dos partes: la interfaz y la implementación. ★ en la interfaz se declaran las operaciones y los datos, ★ la implementación contiene el código fuente de las operaciones y lo mantiene oculto al usuario. • Las principales ventajas que nos aportan los TAD son las siguientes 1. Mejoran la conceptualización y hacen más claro y comprensible el código. 2. Hacen que el sistema sea más robusto. 3. Reducen el tiempo de compilación. 4. Permiten modificar la implementación sin que afecte al interfaz público. 5. Facilitan la extensibilidad. TAD - Definición TAD. Definición 6
  • 7. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • La construcción de un TAD consta de dos fases: la especificación (formal e informal) y la implementación. • Especificación: Implica que las características de un TAD no deben depender de su realización concreta, sino solamente de cómo queremos que sea su comportamiento. Puede ser informal (lenguaje natural) o formal (algebraica) • Para la especificación de un tipo abstracto de datos en lenguaje natural (especificación informal) hemos de seguir el siguiente esquema: ‣ Tipo de datos: Nombre del tipo (Lista de operaciones) ‣ Valores: Descripción de los posibles valores ‣ Operaciones: Descripción de cada operación • Primero indicaremos el nombre del TAD y citaremos todas las operaciones definidas. En el apartado valores describiremos los posibles valores de los datos de este tipo, pero lo haremos desde un punto de vista abstracto, sin pensar en la posible realización concreta. Finalmente en el apartado operaciones haremos una descripción de cada una de las operaciones definidas sobre el TAD. En la especificación informal, habitualmente hacemos referencia a conceptos con los cuales el lector está familiarizado (como por ejemplo conceptos matemáticos). TAD - Definición Construir un TAD Especificación: especificación informal Especificación 7
  • 8. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • La especificación formal nos permite definir conceptos de manera mucho más precisa. Para ello utilizaremos este esquema: ‣ Tipo: Nombre del tipo de datos ‣ Sintaxis: Forma de las operaciones ‣ Semántica: Significado de las operaciones • En el apartado sintaxis proporcionamos el tipo de datos de entrada y de salida de cada una de las funciones definidas sobre el TAD, mientras que en semántica describiremos sus comportamientos. Sin embargo, ésta vez lo haremos siguiendo unas normas algebraicas básicas. TAD - Definición Ejemplo de espedificaciones (un TAD de un Conjunto): Especificación: especificación formal 8
  • 9. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • En la implementación del TAD lo que hacemos es elegir la forma en que se van a representar los distintos valores que tomarán los datos. También seleccionaremos la manera en que se realizarán las operaciones. Para esta elección debemos tener en cuenta que todas las operaciones se realicen de la forma más eficiente posible, aunque con la práctica veremos que la mayoría de las veces una implementación facilita mucho algunas operaciones mientras que complica otras. • Dada una especificación de un TAD podemos tener muchas implementaciones válidas TAD - Definición Implementación • La programación modular descompone un programa en un pequeño número de abstracciones independientes unas de otras pero fáciles de conectar entre sí. • La programación modular sigue el criterio de ocultación de información: si no se necesita algún tipo de información, no se debe tener acceso a ella. • La modularidad es un aspecto muy importante en los TAD, ya que es el reflejo de la independencia de la especificación y la implementación. Es la demostración de que un TAD puede funcionar con diferentes implementaciones. • Además de esto, la programación modular ofrece otras ventajas, como por ejemplo un mejor reparto del trabajo y una detección de fallos mucho mejor. Modularidad 9
  • 10. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • Los tipos abstractos de datos básicos se clasifican habitualmente, atendiendo a su estructura, en lineales y no lineales. • Listas ★ Forma de almacenar elementos que consiste en colocarlos en una lista lineal en la que cada elemento tiene una referencia de cual es el elemento siguiente ★ Las listas se utilizan habitualmente para guardar elementos del mismo tipo y se caracterizan porque pueden contener un número indeterminado de elementos y porque siguen un orden explícito. • Colas ★ Una cola es una lista en la que los elementos se insertan por un extremo (llamado fondo) y se suprimen por el otro (llamado frente). ★ En esta estructura de datos el primer elemento que entra es el primero en salir (FIFO). Es un tipo de dato muy común tanto dentro de la informática como en la vida real. • Pilas ★ Una pila es una estructura de datos en la cual todas las inserciones y las eliminaciones se realizan por el mismo extremo, denominado cima de la pila. En una pila, el último elemento en entrar es el primero en salir (LIFO), al contrario de lo que pasa en las colas. TAD - Definición TAD más habituales TAD Lineales 10
  • 11. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • Árboles ★ El árbol es un TAD que organiza sus elementos (nodos) de forma jerárquica. Si una rama va del nodo a al nodo b, entonces a es el padre de b. Todos los nodos tienen un padre, excepto el nodo principal, denominado raíz del árbol. • Árboles binarios de búsqueda ★ El árbol binario de búsqueda es una variación del TAD árbol. Se trata de aquellos árboles binarios (cada nodo tiene dos hijos como máximo) en los cuales todos los datos del subárbol izquierdo son menores que los datos del nodo, y los datos del subárbol derecho son mayores que los datos del nodo. • Grafos ★ Si los árboles binarios representan datos entre los cuales existe una jerarquía, los grafos, sin embargo, se utilizan para representar relaciones arbitrarias entre datos. En su representación, cada elemento de problema forma un nodo. La relación entre nodos forma una arista que puede ser dirigida o bidireccional (no dirigida). • Conjuntos ★ Grupos de datos de identica naturaleza, sin orden preestablecido. Suelen implementar algunas operaciones básicas: unión, intersección, diferencia, inserción, borrado, búsqueda... TAD - Definición TAD No Lineales 11
  • 12. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • En Java un TAD consiste en una jerarquía de clases e interfaces. • Los interfaces especifican el qué, y las clases implementan el cómo • El interfaz no incluye constructores, ni métodos heredados de Object como toString, equals, etc. • La descripción de lo que hace cada método del interfaz debe documentarse ‣ Ya sea en lenguaje natural usando Javadoc ‣ Ya sea en lenguaje formal usando lógica formal TAD en JAVA Implementar un TAD en JAVA 12
  • 13. TemariodecursoJavaSE©IñakiMartín
 19.- TAD (tipos abstractos de datos) • Imaginemos que queremos crear un TAD para representar un numero complejo, pero que nuestro TAD nos valga para las dos representaciones que tiene (binomio o polar) ‣ Como hay dos formas de representar complejos, el interfaz ofrece getters para ambas representaciones ‣ Los métodos suma, resta y conj reciben como parámetro cualquier clase que implemente el interfaz IComplejo ‣ Cuando se implemente la interfaz en clases, el uso de getters en estas deben comparar con cualquier objeto que implemente el interfaz IComplejo (ver que el parámetro del método, y su devolución, son objetos de la interfaz): TAD en JAVA interface IComplejo { public double getReal(); // Devuelve la parte real public double getImaginaria(); // Devuelve la parte imaginaria public double getModulo(); // Devuelve el modulo public double getArgumento(); // Devuelve el argumento public IComplejo suma(IComplejo c); // Devuelve un IComplejo sumando ’c’ public IComplejo resta(IComplejo c); // Devuelve un IComplejo restando ’c’ public IComplejo conj(IComplejo c); // Devuelve un IComplejo conjugando ’c’ } Ejemplo: definir un TAD para un numero complejo: public IComplejo suma(IComplejo c) { if (c == null) { throw new IllegalArgumentException(); } return new ComplejoCart(this.real + c.getReal(), this.imaginaria + c.getImaginaria()); } 13