SlideShare una empresa de Scribd logo
Módulo 1: Tipos de Datos Abstractos TDA
NAC
Modalidad de estudios: Virtual
Mg. Luis Fernando Aguas Bucheli
+593 984015184
@Aguaszoft
Laguas@uisrael.edu.ec
Zeuszoft@protonmail.com
Objetivos del encuentro:
1. Adquirir los conceptos básicos relacionados con la
programación
2. Reconocer las características de la programación
3. Conocer la historia de la progrmación
Módulo Nro. 1
Frase Motivacional
Cuando te encuentres a ti mismo al
lado de la mayoría, es tiempo de
parar y reflexionar
(Mark Twain)
NAC © aguaszoft@outlook.es 4
Tipos de datos
• Los tipos de datos están clasificados en:
• Enteros, booleanos, String, Applets.
• Un tipo de dato especifica:
• El rango de valores que pueden tener; y,
• Las operaciones que se pueden realizar
• Algunos errores comunes son:
• Tratar de aplicar operaciones que no son del tipo de dato; o,
• Considerar que todos necesitan la misma cantidad de
memoria.
NAC © aguaszoft@outlook.es 5
Tipos primitivos en JAVA
• Java provee 8 tipos primitivos:
• boolean
• char, byte, short, int, long
• float, double
• Cada tipo primitivo tiene
• Un conjunto de valores
• Una representación de dato
• Un conjunto de operaciones
• El programador no puede cambiar ninguno de los
elementos antes mencionados.
NAC © aguaszoft@outlook.es 6
Evolución a TAD
• TIPO DE DATOS:
• Conjunto de valores que puede tomar una variable,
un parámetro o una expresión.
• TIPO ABSTRACTO DE DATOS:
• Dominio abstracto de valores junto con las
operaciones aplicables sobre el mismo.
• ESTRUCTURA DE DATOS:
• Disposición en memoria de los datos necesarios
para almacenar valores de un TDA.
NAC © aguaszoft@outlook.es 7
TAD : Ejemplo
• TAD:
• Enteros
• Tipo de datos:
• Tipo integer de Pascal, o tipo int de Java
• Estructura de datos:
• Representación mediante enteros de 16 bits, 32
bits, listas de dígitos (enteros largos), etc.
NAC © aguaszoft@outlook.es 8
TDA Conceptos
• Abstracción
• Abstraer es extraer y agrupar.
• Es un método de resolución de problemas, que consiste en
destacar los detalles importantes y dejar a un lado los
irrelevantes.
• TAD (TIPO ABSTRACTO DE DATOS)
• Es un conjunto de valores y operaciones definidas sobre
ellos mediante una especificación independiente de
cualquier implementación.
NAC © aguaszoft@outlook.es 9
Diseño mediante abstracciones
• En el diseño de programas basado en el uso
de abstracciones, se trata de:
1. Identificar los subproblemas.
2. Especificación abstracta de cada uno de ellos.
3. Implementar cada abstracción.
4. Verificación del programa.
NAC © aguaszoft@outlook.es 10
Mecanismos de abstracción
• Para llevar a cabo la abstracción los
lenguajes nos proporcionan
mecanismos:
• Módulos
• Clases ***
• Generalidad
• Ocultamiento
• Encapsulación ***
NAC © aguaszoft@outlook.es 11
TDA Encapsulamiento
• Encapsulamiento
• Es agrupar el código y los datos que maneja éste para
mantenerlos protegidos frente a cualquier interferencia y
mal uso.
• Ventajas del encapsulamiento
• Facilidad de modificación.
• Reutilización de código
• El TDA se ve como una caja negra que se manipula
como unidad básica y se desconoce su estructura
interna.
NAC © aguaszoft@outlook.es 12
Tipos de abstracción
• Abstracción funcional  rutina  función.
• Los lenguajes como Fortran, Cobol, Basic, Pascal, C, C++,
permiten implementar funciones.
• Una función tiene un nombre y parámetros.
• Cumplen una labor específica.
• Abstracción de datos  TDA.
• Implica abstraer los datos y las operaciones que pueden ser
ejecutadas sobre ellos.
• Por ejemplo los tipos de datos básicos (enteros, reales,
booleanos, caracteres)
• Los lenguajes de programación Pascal, C, C++ permiten tipos
de datos definidos por el programador o tipos de datos
estructurados.
NAC © aguaszoft@outlook.es 13
La abstracción depende del lenguaje
• La evolución de los lenguajes de programación
tiende a introducir cada vez más abstracciones.
Lenguajes
de bajo nivel
(Basic, Fortran,
Ensamblador, …)
Lenguajes
estructurados
(Pascal, C,
Modula, ADA, …)
Lenguajes
orientados a objetos
(Smalltalk, C++,
Java, Eiffel, …)
NAC © aguaszoft@outlook.es 14
La abstracción depende del lenguaje
• Soporte de TAD:
• Lenguajes estructurados
• (tipos definidos por el usuario): Los datos y las
operaciones van aparte.
• Es necesario copiar las funciones
• Lenguajes orientados a objetos
• (clases): Los datos y las operaciones constituyen una
unidad.
• Se puede reutilizar las clases
NAC © aguaszoft@outlook.es 15
Ejemplos TDA
• class alumno {
• int edad;
• char [] = new char[25];
• }
• class empleado {
• char [] = new char [50];
• int edad;
• int hijos;
• }
NAC © aguaszoft@outlook.es 16
Especificaciones informales.
• La descripción de una abstracción se realiza con un
lenguaje natural.
• Notación de especificación:
Partes que debe tener la especificación,
Significado y tipo de cada parte,
Partes que pueden ser opcionales, ...
NAC © aguaszoft@outlook.es 17
TAD - Especificación de atributos
• Para cada atributos debemos indicar:
• Nombre.
• Identificador del atributo
• Descripción.
• Para que se lo a utilizar
• Características.
• Propiedades características
• Valores no admitidos.
• Restricciones de dominio
NAC © aguaszoft@outlook.es 18
TAD – Especificación de métodos
• Para cada método deberemos indicar:
• Parámetros.
• Explicando el significado de cada uno.
• Valor de retorno.
• Describe el valor que devuelve el método en el caso que devuelva algo.
• Precondiciones.
• Son los requisitos que deben cumplir los parámetros para que el método
se comporte como se describe en la especificación. Si no se cumplen
estas condiciones, no se garantiza ningún tipo de resultado.
• Efecto.
• Describe el resultado que se produce cuando se realiza una llamada
correcta.
• Excepciones.
• Describe el comportamiento cuando se da una circunstancia
extraordinaria.
NAC © aguaszoft@outlook.es 19
Clasificación de los métodos
• Método Constructor
• Permite generar una nueva instancia de una clase u objeto.
• Método Observación
• Permite visualizar el estado de los atributos del objeto.
• Método Modificación
• Permite de manera controlada modificar los atributos del
objeto.
NAC © aguaszoft@outlook.es 20
Ej.: Especificación TAD fecha
TAD fecha
• Nombre fecha
• //Si se utiliza más de uno será separados por comas
• Descripción:
• Para almacenar una fecha del calendario (día, mes y año)
• Separador ‘/’ entre día, mes y año.
• Características:
• Valores no admitidos:
• Meses de enero, marzo, mayo, julio, octubre y diciembre con
número de días mayores que 31.
• Mes de febrero no bisiesto con número de días mayor que 28.
• Mes de febrero bisiesto con número de días mayor que 29.
• Resto de meses con número de días mayor que 30.
• Tampoco se admiten números negativos ni el cero*/
NAC © aguaszoft@outlook.es 21
Método constructor TAD fecha
• fecha crear (int d, int m, int an);
• Parámetros:
• d es el número del día, m es el número del mes y an es el número del
año.
• Valor de retorno:
• una fecha con los valores deseados.
• Precondiciones:
• d, m y an tienen que ser mayores o iguales a cero.
• Efecto:
• Devolverá una fecha inicializada con el día d, el mes m y el año an.
• Excepciones:
• Si los parámetros conforman una fecha no válida de acuerdo con los
valores no admitidos en el tipo.
NAC © aguaszoft@outlook.es 22
Método observador TAD fecha
• Nombre
• int verdia (fecha a);
• Parámetros:
• una fecha a.
• Valor de retorno:
• un número entero que es el día almacenado.
• Precondiciones:
• ninguna
• Efecto:
• Devolverá el número del día almacenado en la fecha a.
• Excepciones:
• Ninguna
NAC © aguaszoft@outlook.es 23
Método modificador TAD fecha
• Nombre
• fecha pondia (fecha a, int d);
• Parámetros:
• una fecha a y un número de día d.
• Valor de retorno:
• una fecha con valores.
• Precondiciones:
• d tiene que ser mayor o igual a cero.
• Efecto:
• Devolverá una fecha con los valores de la fecha a poniendo como día el valor del
parámetro d.
• Excepciones:
• Si la fecha modificada genera una fecha no válida, de acuerdo con los valores no
admitidos en el tipo, la fecha devuelta será la misma fecha a no cambiando el
día.
NAC © aguaszoft@outlook.es 24
• Las especificaciones en lenguaje natural son
ambiguas e imprecisas.
• Especificaciones formales: definen un TAD o
una operación de manera precisa, utilizando un
lenguaje matemático.
• Ventajas de una especificación formal:
• Prototipado. Las especificaciones formales pueden
llegar a ser ejecutables.
• Corrección del programa. Verificación automática y
formal de que el programa funciona correctamente.
• Reusabilidad. Posibilidad de usar la especificación
formal en distintos ámbitos.
Especificaciones formales.
NAC © aguaszoft@outlook.es 25
La descripción formal constará de cuatro partes:
• NOMBRE. Nombre genérico del TAD.
• CONJUNTOS. Conjuntos de datos que intervienen
en la definición.
• SINTAXIS. Signatura de las operaciones definidas.
• <nombre_operación> : <conj_dominio>  <conj_resultado>
• SEMÁNTICA. Indica el significado de las
operaciones.
Especificaciones formales: notación
NAC © aguaszoft@outlook.es 26
• Los distintas notaciones formales difieren en la
forma de definir la semántica:
• Método axiomático o algebraico. Se establece el
significado de las operaciones a través de relaciones
entre operaciones (axiomas). Significado implícito de las
operaciones.
• Método constructivo u operacional. Se define cada
operación por sí misma, independientemente de las
otras. Significado explícito de las operaciones.
Métodos de especificación formal
NAC © aguaszoft@outlook.es 27
• Supongamos un TAD, T.
• Tipos de operaciones
• Constructores. Conjunto mínimo de operaciones del
TAD, a partir del cual se puede obtener cualquier valor
del tipo T.
c1:  T, c2: V  T, c3: V1x...xVn  T
• Modificación. A partir de un valor del tipo obtienen otro
valor del tipo T, y no son constructores.
m1: T  T, m2: TxV  T, m3: TxV1x...xVn  T
• Consulta. Devuelven un valor que no es del tipo T.
o1: T  V, o2: TxV  V’, o3: TxV1x...xVn  Vn+1
Método axiomático.
NAC © aguaszoft@outlook.es 28
• NOMBRE Booleano
• CONJUNTOS B conjunto de valores booleanos,
U conjunto universal.
• SINTAXIS
verdadero :  B ; falso :  B ; Not : B  B ;
And : B×B  B ; Or : B×B  B ; Si : B×B  B ;
• SEMÁNTICA para todo b en B y u1 y u2 en U
1. Not (verdadero)=falso
2. Not (falso)=verdadero
3. And (verdadero,b)=b
4. ...
Método axiomático:
Ej. TAD Booleano
NAC © aguaszoft@outlook.es 29
• Una especificación es completa si de cualquier
expresión se puede encontrar otra más sencilla,
con operaciones de construcción.
• Una especificación es correcta si a partir de una
expresión sólo se puede obtener un resultado final.
• ¿Cómo garantizar que una especificación es
completa y correcta?
• Definir los axiomas suficientes para relacionar las
operaciones de modificación y consulta con los
constructores.
• No incluir axiomas que se puedan deducir de otros
existentes.
Método axiomático.
NAC © aguaszoft@outlook.es 30
• Se diferencia del axiomático en la semántica.
• Para cada operación, se establecen las
precondiciones y las postcondiciones.
• Precondición: Relación que se debe cumplir con
los datos de entrada para que la operación se
pueda aplicar.
• Postcondición: Relaciones que se cumplen
después de ejecutar la operación. No debe incluir
detalles de implementación.
Método constructivo.
NAC © aguaszoft@outlook.es 31
Notación
• Para cada operación
<nombre>:
• Precondición:
pre-<nombre> (<param_entrada>)::= <condición_lógica>
• Postcondición:
post-<nombre> (<param_entrada>;<param_salida>)::=
<condición_lógica>
Método constructivo - notación
NAC © aguaszoft@outlook.es 32
• Ejemplo: operación máximo, que tiene como
entrada dos números reales y da como salida
el mayor de los dos.
• SINTAXIS
máximo: R x R  R
• SEMANTICA
pre-máximo (x, y) ::= true
post-máximo (x, y; r) ::= (r  x)  (r  y)  (r=x 
r=y)
Método constructivo - Ejemplo
NAC © aguaszoft@outlook.es 33
Implementando un TDA
• Para implementar un ADT, necesita escoger:
• Una representación de datos
• Debe permitir representar todos los posibles valores del TDA
• Debe ser privada
• Un algoritmo para cada una de las operaciones
• Debe ser consistente con la representación
• Todas las operaciones adicionales deben ser privadas
NAC © aguaszoft@outlook.es 34
Contracto e implementación en Java
• Expresa el contrato como una clase es declarada,
expone solamente:
• Campos publicos
• Encabezados de constructores y métodos
• (Esto debe ser descrito en comentarios tipo javadoc)
• Expresa la implementación como una declaración
complementaria de clase.
NAC © aguaszoft@outlook.es 35
Ejemplo
• Descripción general de clase
public class Die {
// Cada valor es un die (singular de dado) con n lados,
// numerados de 1 a n, con una cara expuesta
• Constructor
public Die(int numeroDeLados)
// construye un die con cara de 1 a numeroDeLados
• Accessor
int lastRoll()
// retorna el resultado del lanzamiento previo
• Transformador (mutacion)
int roll()
// retorna el resultado de un nuevo lanzamiento
}
NAC © aguaszoft@outlook.es 36
Implementación
import java.util.*;
public class Die {
private int numeroDeLados;
private static Random random = new Random();
private int lado;
public Die(int numeroDeLados) {
this.numeroDeLados = numeroDeLados;
lado = roll(); //constructor en un estado valido
}
NAC © aguaszoft@outlook.es 37
Resumen
• Un Tipo de dato describe los valores,
representaciones, y operaciones
• Un ADT (Abstract Data Type) describe los valores y
operaciones, pero no las representaciones
• Un ADT debe proteger los datos y mantenerlos validos
• Todos los datos deben ser private
• El acceso a los datos debe ser vía métodos
• Un ADT debe proveer:
• Un contracto
• Un conjunto de operaciones necesario y suficiente
NAC © aguaszoft@outlook.es 38
Clase complejo con constructor
public class Complejo
{
private double real;
private double imag;
public Complejo()
{ real=0.0;
imag=0.0; }
public Complejo(double real, double imag){ this.real=real;
this.imag=imag; }
//otras funciones miembro
}
NAC © aguaszoft@outlook.es 39
Mostrar complejo
// Presentar en forma de String
public String toString()
{
if(imag>0) return new
String((double)Math.round(100*real)/100+ " +
"+(double)Math.round(100*imag)/100+"*i"); return new
String((double)Math.round(100*real)/100+ " -
"+(double)Math.round(-100*imag)/100+"*i"); }
NAC © aguaszoft@outlook.es 40
Complejo en forma polar
public double modulo() {
return Math.sqrt(real*real+imag*imag);
}
public double argumento() {
double angulo=Math.atan2(imag, real); if(angulo<0)
angulo=2*Math.PI+angulo; return angulo*180/Math.PI;
}
NAC © aguaszoft@outlook.es 41
EJERCICIOS
• Especificar el TDA LISTA
• Considerar los datos
• Lista L
• Posicion p
• Elemento e
• Considerar los métodos
• Makenull
• Insert
• Delete
• Print
• El resto de métodos como tarea
GRACIAS

Más contenido relacionado

PPT
clases de herramientas lorenita
PDF
Introducción a la programación y la informática. Tema 3
PPT
Sistemas jerárquicos
PDF
ALP Unidad 2: Representación de la información en datos simples y estructuras...
PPTX
Algoritsmos unefa
PPTX
Clase 01 290615
clases de herramientas lorenita
Introducción a la programación y la informática. Tema 3
Sistemas jerárquicos
ALP Unidad 2: Representación de la información en datos simples y estructuras...
Algoritsmos unefa
Clase 01 290615

Similar a 1-NAC-TDA Estructuras de Datos (20)

PDF
Jyoc java-cap19 tad (tipos abstractos de datos)
PPTX
Tema1Instrucciones-DeclaracionAsignacion.pptx
PDF
Estructura de datos power point
PPTX
Benita ppp unidad 1
PPTX
PPT
Abstraccion ppt
PPT
Abstracción de datos
PPTX
Estructuras de Datos - Presentación.pptx
PDF
Tema1 (2)
PPTX
tipos de datos abtractos para estudiantes .pptx
PDF
Tipos de datos abstractos
PPSX
Abstracción de datos
PPTX
POO Unidad 2 con Java temario de unidad sobre clases, herencia, métodos.pptx
PPTX
Diapositiva estructura de datos unidad 1
PDF
Estructuras de datos_dinamicas_definicion_e_implementacion_
PDF
Estructuras de datos_dinamicas_definicion_e_implementacion_
PDF
Ed java
PDF
Ed java
PDF
02-Def Basicas Estructuras PRESENTACION de Datos.pdf
PPT
ED 02 1_tda
 
Jyoc java-cap19 tad (tipos abstractos de datos)
Tema1Instrucciones-DeclaracionAsignacion.pptx
Estructura de datos power point
Benita ppp unidad 1
Abstraccion ppt
Abstracción de datos
Estructuras de Datos - Presentación.pptx
Tema1 (2)
tipos de datos abtractos para estudiantes .pptx
Tipos de datos abstractos
Abstracción de datos
POO Unidad 2 con Java temario de unidad sobre clases, herencia, métodos.pptx
Diapositiva estructura de datos unidad 1
Estructuras de datos_dinamicas_definicion_e_implementacion_
Estructuras de datos_dinamicas_definicion_e_implementacion_
Ed java
Ed java
02-Def Basicas Estructuras PRESENTACION de Datos.pdf
ED 02 1_tda
 
Publicidad

Más de Luis Fernando Aguas Bucheli (20)

PPTX
EFC-ISW-Luis Fernando Aguas.pptx
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
Publicidad

Último (20)

PDF
Diseño y Utiliación del HVAC Aire Acondicionado
PDF
Presentacion_Resolver_CEM_Hospitales_v2.pdf
PPTX
TRABAJOS DE ALTO RIESGO ELEC - LOTO.pptx
PPTX
PROCESOS DE REGULACION DE CRECIMIENTO.pptx
PDF
MODULO 1 Base Legal Nacional y sus aplicaciones.pdf
PPTX
Investigacioncientificaytecnologica.pptx
PDF
Clase 2 de abril Educacion adistancia.pdf
PPTX
TOPOGRAFÍA - INGENIERÍA CIVIL - PRESENTACIÓN
PDF
SISTEMAS DE PUESTA A TIERRA: Una introducción a los fundamentos de los sistem...
PPTX
TRABAJOS DE ALTO RIESGO IZAJE Y CALIENTE.pptx
PDF
BROCHURE SERVICIOS CONSULTORIA ISOTEMPO 2025
PDF
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
PPTX
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
PPTX
Cómo Elaborar e Implementar el IPERC_ 2023.pptx
PPTX
DEBL Presentación PG 23.pptx [Autoguardado].pptx
PDF
silabos de colegio privado para clases tema2
PDF
alimentos de bebidas45rtrtytyurrrr 1.pdf
PDF
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria
PPTX
Identificacion de Peligros mediante GTC 45
PDF
EVALUACIÓN 1_REFERENCIAPIR_FASE 1_2024.pdf
Diseño y Utiliación del HVAC Aire Acondicionado
Presentacion_Resolver_CEM_Hospitales_v2.pdf
TRABAJOS DE ALTO RIESGO ELEC - LOTO.pptx
PROCESOS DE REGULACION DE CRECIMIENTO.pptx
MODULO 1 Base Legal Nacional y sus aplicaciones.pdf
Investigacioncientificaytecnologica.pptx
Clase 2 de abril Educacion adistancia.pdf
TOPOGRAFÍA - INGENIERÍA CIVIL - PRESENTACIÓN
SISTEMAS DE PUESTA A TIERRA: Una introducción a los fundamentos de los sistem...
TRABAJOS DE ALTO RIESGO IZAJE Y CALIENTE.pptx
BROCHURE SERVICIOS CONSULTORIA ISOTEMPO 2025
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
Cómo Elaborar e Implementar el IPERC_ 2023.pptx
DEBL Presentación PG 23.pptx [Autoguardado].pptx
silabos de colegio privado para clases tema2
alimentos de bebidas45rtrtytyurrrr 1.pdf
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria
Identificacion de Peligros mediante GTC 45
EVALUACIÓN 1_REFERENCIAPIR_FASE 1_2024.pdf

1-NAC-TDA Estructuras de Datos

  • 1. Módulo 1: Tipos de Datos Abstractos TDA NAC Modalidad de estudios: Virtual Mg. Luis Fernando Aguas Bucheli +593 984015184 @Aguaszoft Laguas@uisrael.edu.ec Zeuszoft@protonmail.com
  • 2. Objetivos del encuentro: 1. Adquirir los conceptos básicos relacionados con la programación 2. Reconocer las características de la programación 3. Conocer la historia de la progrmación Módulo Nro. 1
  • 3. Frase Motivacional Cuando te encuentres a ti mismo al lado de la mayoría, es tiempo de parar y reflexionar (Mark Twain)
  • 4. NAC © aguaszoft@outlook.es 4 Tipos de datos • Los tipos de datos están clasificados en: • Enteros, booleanos, String, Applets. • Un tipo de dato especifica: • El rango de valores que pueden tener; y, • Las operaciones que se pueden realizar • Algunos errores comunes son: • Tratar de aplicar operaciones que no son del tipo de dato; o, • Considerar que todos necesitan la misma cantidad de memoria.
  • 5. NAC © aguaszoft@outlook.es 5 Tipos primitivos en JAVA • Java provee 8 tipos primitivos: • boolean • char, byte, short, int, long • float, double • Cada tipo primitivo tiene • Un conjunto de valores • Una representación de dato • Un conjunto de operaciones • El programador no puede cambiar ninguno de los elementos antes mencionados.
  • 6. NAC © aguaszoft@outlook.es 6 Evolución a TAD • TIPO DE DATOS: • Conjunto de valores que puede tomar una variable, un parámetro o una expresión. • TIPO ABSTRACTO DE DATOS: • Dominio abstracto de valores junto con las operaciones aplicables sobre el mismo. • ESTRUCTURA DE DATOS: • Disposición en memoria de los datos necesarios para almacenar valores de un TDA.
  • 7. NAC © aguaszoft@outlook.es 7 TAD : Ejemplo • TAD: • Enteros • Tipo de datos: • Tipo integer de Pascal, o tipo int de Java • Estructura de datos: • Representación mediante enteros de 16 bits, 32 bits, listas de dígitos (enteros largos), etc.
  • 8. NAC © aguaszoft@outlook.es 8 TDA Conceptos • Abstracción • Abstraer es extraer y agrupar. • Es un método de resolución de problemas, que consiste en destacar los detalles importantes y dejar a un lado los irrelevantes. • TAD (TIPO ABSTRACTO DE DATOS) • Es un conjunto de valores y operaciones definidas sobre ellos mediante una especificación independiente de cualquier implementación.
  • 9. NAC © aguaszoft@outlook.es 9 Diseño mediante abstracciones • En el diseño de programas basado en el uso de abstracciones, se trata de: 1. Identificar los subproblemas. 2. Especificación abstracta de cada uno de ellos. 3. Implementar cada abstracción. 4. Verificación del programa.
  • 10. NAC © aguaszoft@outlook.es 10 Mecanismos de abstracción • Para llevar a cabo la abstracción los lenguajes nos proporcionan mecanismos: • Módulos • Clases *** • Generalidad • Ocultamiento • Encapsulación ***
  • 11. NAC © aguaszoft@outlook.es 11 TDA Encapsulamiento • Encapsulamiento • Es agrupar el código y los datos que maneja éste para mantenerlos protegidos frente a cualquier interferencia y mal uso. • Ventajas del encapsulamiento • Facilidad de modificación. • Reutilización de código • El TDA se ve como una caja negra que se manipula como unidad básica y se desconoce su estructura interna.
  • 12. NAC © aguaszoft@outlook.es 12 Tipos de abstracción • Abstracción funcional  rutina  función. • Los lenguajes como Fortran, Cobol, Basic, Pascal, C, C++, permiten implementar funciones. • Una función tiene un nombre y parámetros. • Cumplen una labor específica. • Abstracción de datos  TDA. • Implica abstraer los datos y las operaciones que pueden ser ejecutadas sobre ellos. • Por ejemplo los tipos de datos básicos (enteros, reales, booleanos, caracteres) • Los lenguajes de programación Pascal, C, C++ permiten tipos de datos definidos por el programador o tipos de datos estructurados.
  • 13. NAC © aguaszoft@outlook.es 13 La abstracción depende del lenguaje • La evolución de los lenguajes de programación tiende a introducir cada vez más abstracciones. Lenguajes de bajo nivel (Basic, Fortran, Ensamblador, …) Lenguajes estructurados (Pascal, C, Modula, ADA, …) Lenguajes orientados a objetos (Smalltalk, C++, Java, Eiffel, …)
  • 14. NAC © aguaszoft@outlook.es 14 La abstracción depende del lenguaje • Soporte de TAD: • Lenguajes estructurados • (tipos definidos por el usuario): Los datos y las operaciones van aparte. • Es necesario copiar las funciones • Lenguajes orientados a objetos • (clases): Los datos y las operaciones constituyen una unidad. • Se puede reutilizar las clases
  • 15. NAC © aguaszoft@outlook.es 15 Ejemplos TDA • class alumno { • int edad; • char [] = new char[25]; • } • class empleado { • char [] = new char [50]; • int edad; • int hijos; • }
  • 16. NAC © aguaszoft@outlook.es 16 Especificaciones informales. • La descripción de una abstracción se realiza con un lenguaje natural. • Notación de especificación: Partes que debe tener la especificación, Significado y tipo de cada parte, Partes que pueden ser opcionales, ...
  • 17. NAC © aguaszoft@outlook.es 17 TAD - Especificación de atributos • Para cada atributos debemos indicar: • Nombre. • Identificador del atributo • Descripción. • Para que se lo a utilizar • Características. • Propiedades características • Valores no admitidos. • Restricciones de dominio
  • 18. NAC © aguaszoft@outlook.es 18 TAD – Especificación de métodos • Para cada método deberemos indicar: • Parámetros. • Explicando el significado de cada uno. • Valor de retorno. • Describe el valor que devuelve el método en el caso que devuelva algo. • Precondiciones. • Son los requisitos que deben cumplir los parámetros para que el método se comporte como se describe en la especificación. Si no se cumplen estas condiciones, no se garantiza ningún tipo de resultado. • Efecto. • Describe el resultado que se produce cuando se realiza una llamada correcta. • Excepciones. • Describe el comportamiento cuando se da una circunstancia extraordinaria.
  • 19. NAC © aguaszoft@outlook.es 19 Clasificación de los métodos • Método Constructor • Permite generar una nueva instancia de una clase u objeto. • Método Observación • Permite visualizar el estado de los atributos del objeto. • Método Modificación • Permite de manera controlada modificar los atributos del objeto.
  • 20. NAC © aguaszoft@outlook.es 20 Ej.: Especificación TAD fecha TAD fecha • Nombre fecha • //Si se utiliza más de uno será separados por comas • Descripción: • Para almacenar una fecha del calendario (día, mes y año) • Separador ‘/’ entre día, mes y año. • Características: • Valores no admitidos: • Meses de enero, marzo, mayo, julio, octubre y diciembre con número de días mayores que 31. • Mes de febrero no bisiesto con número de días mayor que 28. • Mes de febrero bisiesto con número de días mayor que 29. • Resto de meses con número de días mayor que 30. • Tampoco se admiten números negativos ni el cero*/
  • 21. NAC © aguaszoft@outlook.es 21 Método constructor TAD fecha • fecha crear (int d, int m, int an); • Parámetros: • d es el número del día, m es el número del mes y an es el número del año. • Valor de retorno: • una fecha con los valores deseados. • Precondiciones: • d, m y an tienen que ser mayores o iguales a cero. • Efecto: • Devolverá una fecha inicializada con el día d, el mes m y el año an. • Excepciones: • Si los parámetros conforman una fecha no válida de acuerdo con los valores no admitidos en el tipo.
  • 22. NAC © aguaszoft@outlook.es 22 Método observador TAD fecha • Nombre • int verdia (fecha a); • Parámetros: • una fecha a. • Valor de retorno: • un número entero que es el día almacenado. • Precondiciones: • ninguna • Efecto: • Devolverá el número del día almacenado en la fecha a. • Excepciones: • Ninguna
  • 23. NAC © aguaszoft@outlook.es 23 Método modificador TAD fecha • Nombre • fecha pondia (fecha a, int d); • Parámetros: • una fecha a y un número de día d. • Valor de retorno: • una fecha con valores. • Precondiciones: • d tiene que ser mayor o igual a cero. • Efecto: • Devolverá una fecha con los valores de la fecha a poniendo como día el valor del parámetro d. • Excepciones: • Si la fecha modificada genera una fecha no válida, de acuerdo con los valores no admitidos en el tipo, la fecha devuelta será la misma fecha a no cambiando el día.
  • 24. NAC © aguaszoft@outlook.es 24 • Las especificaciones en lenguaje natural son ambiguas e imprecisas. • Especificaciones formales: definen un TAD o una operación de manera precisa, utilizando un lenguaje matemático. • Ventajas de una especificación formal: • Prototipado. Las especificaciones formales pueden llegar a ser ejecutables. • Corrección del programa. Verificación automática y formal de que el programa funciona correctamente. • Reusabilidad. Posibilidad de usar la especificación formal en distintos ámbitos. Especificaciones formales.
  • 25. NAC © aguaszoft@outlook.es 25 La descripción formal constará de cuatro partes: • NOMBRE. Nombre genérico del TAD. • CONJUNTOS. Conjuntos de datos que intervienen en la definición. • SINTAXIS. Signatura de las operaciones definidas. • <nombre_operación> : <conj_dominio>  <conj_resultado> • SEMÁNTICA. Indica el significado de las operaciones. Especificaciones formales: notación
  • 26. NAC © aguaszoft@outlook.es 26 • Los distintas notaciones formales difieren en la forma de definir la semántica: • Método axiomático o algebraico. Se establece el significado de las operaciones a través de relaciones entre operaciones (axiomas). Significado implícito de las operaciones. • Método constructivo u operacional. Se define cada operación por sí misma, independientemente de las otras. Significado explícito de las operaciones. Métodos de especificación formal
  • 27. NAC © aguaszoft@outlook.es 27 • Supongamos un TAD, T. • Tipos de operaciones • Constructores. Conjunto mínimo de operaciones del TAD, a partir del cual se puede obtener cualquier valor del tipo T. c1:  T, c2: V  T, c3: V1x...xVn  T • Modificación. A partir de un valor del tipo obtienen otro valor del tipo T, y no son constructores. m1: T  T, m2: TxV  T, m3: TxV1x...xVn  T • Consulta. Devuelven un valor que no es del tipo T. o1: T  V, o2: TxV  V’, o3: TxV1x...xVn  Vn+1 Método axiomático.
  • 28. NAC © aguaszoft@outlook.es 28 • NOMBRE Booleano • CONJUNTOS B conjunto de valores booleanos, U conjunto universal. • SINTAXIS verdadero :  B ; falso :  B ; Not : B  B ; And : B×B  B ; Or : B×B  B ; Si : B×B  B ; • SEMÁNTICA para todo b en B y u1 y u2 en U 1. Not (verdadero)=falso 2. Not (falso)=verdadero 3. And (verdadero,b)=b 4. ... Método axiomático: Ej. TAD Booleano
  • 29. NAC © aguaszoft@outlook.es 29 • Una especificación es completa si de cualquier expresión se puede encontrar otra más sencilla, con operaciones de construcción. • Una especificación es correcta si a partir de una expresión sólo se puede obtener un resultado final. • ¿Cómo garantizar que una especificación es completa y correcta? • Definir los axiomas suficientes para relacionar las operaciones de modificación y consulta con los constructores. • No incluir axiomas que se puedan deducir de otros existentes. Método axiomático.
  • 30. NAC © aguaszoft@outlook.es 30 • Se diferencia del axiomático en la semántica. • Para cada operación, se establecen las precondiciones y las postcondiciones. • Precondición: Relación que se debe cumplir con los datos de entrada para que la operación se pueda aplicar. • Postcondición: Relaciones que se cumplen después de ejecutar la operación. No debe incluir detalles de implementación. Método constructivo.
  • 31. NAC © aguaszoft@outlook.es 31 Notación • Para cada operación <nombre>: • Precondición: pre-<nombre> (<param_entrada>)::= <condición_lógica> • Postcondición: post-<nombre> (<param_entrada>;<param_salida>)::= <condición_lógica> Método constructivo - notación
  • 32. NAC © aguaszoft@outlook.es 32 • Ejemplo: operación máximo, que tiene como entrada dos números reales y da como salida el mayor de los dos. • SINTAXIS máximo: R x R  R • SEMANTICA pre-máximo (x, y) ::= true post-máximo (x, y; r) ::= (r  x)  (r  y)  (r=x  r=y) Método constructivo - Ejemplo
  • 33. NAC © aguaszoft@outlook.es 33 Implementando un TDA • Para implementar un ADT, necesita escoger: • Una representación de datos • Debe permitir representar todos los posibles valores del TDA • Debe ser privada • Un algoritmo para cada una de las operaciones • Debe ser consistente con la representación • Todas las operaciones adicionales deben ser privadas
  • 34. NAC © aguaszoft@outlook.es 34 Contracto e implementación en Java • Expresa el contrato como una clase es declarada, expone solamente: • Campos publicos • Encabezados de constructores y métodos • (Esto debe ser descrito en comentarios tipo javadoc) • Expresa la implementación como una declaración complementaria de clase.
  • 35. NAC © aguaszoft@outlook.es 35 Ejemplo • Descripción general de clase public class Die { // Cada valor es un die (singular de dado) con n lados, // numerados de 1 a n, con una cara expuesta • Constructor public Die(int numeroDeLados) // construye un die con cara de 1 a numeroDeLados • Accessor int lastRoll() // retorna el resultado del lanzamiento previo • Transformador (mutacion) int roll() // retorna el resultado de un nuevo lanzamiento }
  • 36. NAC © aguaszoft@outlook.es 36 Implementación import java.util.*; public class Die { private int numeroDeLados; private static Random random = new Random(); private int lado; public Die(int numeroDeLados) { this.numeroDeLados = numeroDeLados; lado = roll(); //constructor en un estado valido }
  • 37. NAC © aguaszoft@outlook.es 37 Resumen • Un Tipo de dato describe los valores, representaciones, y operaciones • Un ADT (Abstract Data Type) describe los valores y operaciones, pero no las representaciones • Un ADT debe proteger los datos y mantenerlos validos • Todos los datos deben ser private • El acceso a los datos debe ser vía métodos • Un ADT debe proveer: • Un contracto • Un conjunto de operaciones necesario y suficiente
  • 38. NAC © aguaszoft@outlook.es 38 Clase complejo con constructor public class Complejo { private double real; private double imag; public Complejo() { real=0.0; imag=0.0; } public Complejo(double real, double imag){ this.real=real; this.imag=imag; } //otras funciones miembro }
  • 39. NAC © aguaszoft@outlook.es 39 Mostrar complejo // Presentar en forma de String public String toString() { if(imag>0) return new String((double)Math.round(100*real)/100+ " + "+(double)Math.round(100*imag)/100+"*i"); return new String((double)Math.round(100*real)/100+ " - "+(double)Math.round(-100*imag)/100+"*i"); }
  • 40. NAC © aguaszoft@outlook.es 40 Complejo en forma polar public double modulo() { return Math.sqrt(real*real+imag*imag); } public double argumento() { double angulo=Math.atan2(imag, real); if(angulo<0) angulo=2*Math.PI+angulo; return angulo*180/Math.PI; }
  • 41. NAC © aguaszoft@outlook.es 41 EJERCICIOS • Especificar el TDA LISTA • Considerar los datos • Lista L • Posicion p • Elemento e • Considerar los métodos • Makenull • Insert • Delete • Print • El resto de métodos como tarea