Estructuras de Datos y Algoritmos

Anuncio
Contenidos
1
• Ciclo de vida del software
• Tipos Abstractos de Datos (TAD)
• Ejemplos de TAD
Estructuras de Datos y Algoritmos
• TAD Entero
• TAD Cadena de caracteres
• TAD Conjunto
Tema 2. Tipos Abstractos de Datos
• Especificación de TAD
• Programación Orientada a Objetos
Iván Cantador
Silvia Teresita Acuña, José R. Dorronsoro, Estrella Pulido
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Contenidos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
2
• Ciclo de vida del software
• Tipos Abstractos de Datos (TAD)
• Ejemplos de TAD
• TAD Entero
• TAD Cadena de caracteres
• TAD Conjunto
• Especificación de TAD
• Programación Orientada a Objetos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Ciclo de vida del software
• Componentes de una aplicación informática
• Hardware:
‐ Independiente de la aplicación
‐ “Estático”
• Software:
‐ Dependiente del problema que resuelve la aplicación
‐ (Muy) cambiante/dinámico
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
3
Ciclo de vida del software
4
Ciclo de vida del software
5
• Proceso de construcción de software
• Aplicación informática = solución automatizada a un problema o
necesidad
• Debido a su naturaleza cambiante, el software:
• es más complejo y por lo tanto más caro
• requiere en su desarrollo
‐ creatividad + ingenio + esfuerzo
‐ metodología Ingeniería del Software
Influencia de la solución en el problema/necesidad
Problema o
necesidad
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Ciclo de vida del software
Construcción de
software
Solución
software
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
6
Ciclo de vida del software
7
• Modelo de ciclo de vida
• Representación abstracta del ciclo de vida del software
• Ejemplo: modelo de ciclo de vida del software clásico o en cascada
Análisis
• Ciclo de vida
• Estados a través de los que un producto software desde que
comienza su construcción (el estado inicial es el problema o
necesidad del usuario) hasta que entra en operación (este
estado es el producto entregado) y finalmente es retirado (el
estado final es el sistema retirado)
Diseño
EDA
Implementación
Pruebas
Aceptación
Validación
Saltos menos frecuentes y más costosos
Mantenimiento
Fases de desarrollo
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
DESARROLLO CONTINUO
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Fase de uso
Ciclo de vida del software
8
• Análisis: ¿qué hace la aplicación?
Ciclo de vida del software
• Diseño: ¿cómo se va a hacer la aplicación?
• Tareas
• Tareas
‐ Descripción general completa del problema a resolver
‐ Definición de las especificaciones funcionales: qué hacer
‐ Especificación de los requisitos, i.e. condiciones informáticas de trabajo
de la aplicación
‐ Especificación de la E/S
‐ Descripción de los criterios de validación, i.e. la manera de comprobar
que la aplicación cumple las especificaciones y requisitos
‐ Análisis de factibilidad
‐ Definición de la arquitectura de la aplicación, siguiendo un enfoque
top-down: grandes módulos semi‐independientes e intercomunicados sub‐módulos … funciones elementales
‐ Definición de algoritmos
‐ Definición de estructuras de datos
‐ Definición de la interfaz de usuario: el analista hará de intermediario
entre el cliente (descripción funcional: datos y tareas) y el programador
(diseño: estructuras de datos y algoritmos)
• Resultados
• Resultados
‐ Conocimiento profundo del problema (por parte de los desarrolladores)
‐ Documento de especificación/requisitos y proto‐manual de usuario
‐ Documento de diseño (arquitectura, E/S, sub‐módulos, integración)
‐ Estimaciones económicas
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Ciclo de vida del software
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
10
• Implementación
Programación de la aplicación
Pruebas de módulos individuales
Pruebas de inter‐comunicación entre módulos
Modelo desarrollo+pruebas espiral creciente de complejidad y alcance
funcional
• Resultados
‐
‐
‐
‐
Ciclo de vida del software
11
• Pruebas post-instalación y validación
• Tareas
‐
‐
‐
‐
9
Código software de la aplicación
Documentación de la aplicación
Código software y datos de pruebas
Documentación de las pruebas
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
• Tareas
‐ Probar la aplicación completa (con usuarios)
‐ Certificar que la aplicación cumple los requisitos y especificaciones del
cliente
‐ Detectar y corregir “últimos” errores “finos” (los errores más gruesos se
detectaron en la fase de implementación)
• Mantenimiento
• Tareas
‐ Volver a cualquiera de las fases previas dentro del ciclo de vida del
software según problemas y necesidades obtenidas en la etapa de uso de
la aplicación
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Ciclo de vida del software
12
Ciclo de vida del software
• Sobre el diseño de software…
• Sobre las pruebas funcionales…
• Para proporcionar la solución software más apropiada a un
problema planteado, el ingeniero del software cuenta con:
• Casos de prueba
‐ Con datos normales
‐ Con datos extremos (pero “legítimos”)
‐ Con datos ilegales
• Control de excepciones
‐ Una aplicación informática siempre ha de responder
razonablemente ante sus datos, sin dar lugar a “cuelgues” o
“casques”
‐ Lo anterior lleva esfuerzo, traducido en código extra que en
general ronda el 50% del código de la aplicación
‐ Análisis y diseño descendentes: resolución efectiva del problema
mediante su descomposición en sub‐problemas más sencillos
(estrategia “Divide y Vencerás”)
‐ Modularidad: resolución de forma independiente los sub‐
problemas resultantes del análisis y diseño descendentes
‐ Abstracción funcional: modelización de los procesos de los
módulos de forma independiente a su implementación
‐ Abstracción de datos: modelización de los tipos de datos y
operaciones asociadas ocultando detalles internos de su
implementación
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Contenidos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
14
• Ciclo de vida del software
• Tipos Abstractos de Datos (TAD)
• Ejemplos de TAD
• TAD Entero
• TAD Cadena de caracteres
• TAD Conjunto
• Especificación de TAD
• Programación Orientada a Objetos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
13
Tipos Abstractos de Datos (TAD)
• Tipo de datos
• Conjunto de valores que puede tomar una variable o una
expresión
• Estructura de datos
• Disposición en memoria de las variables necesarias para
almacenar valores de uno o varios tipos de datos
• Tipo Abstracto de Datos (TAD)
• Estructura de datos con entidad propia (identidad definida) y
operaciones (primitivas) aplicables sobre ella
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
15
Tipos Abstractos de Datos (TAD)
16
• Todo TAD se definirá como un modelo abstracto de unos
objetos de datos y unas operaciones que manejan esos
objetos sin tener en cuenta su implementación
Tipos Abstractos de Datos (TAD)
17
• Abstracciones en un TAD
• TAD Número complejo: módulo, conjugado, suma, resta,
producto, cociente, …
• TAD Conjunto : tamaño, complemento, unión, intersección, …
• TAD Lista: visualización, inserción de un elemento, búsqueda de
un elemento, eliminación de un elemento, …
• TAD Grafo: creación de un grafo vacío, inserción de un nodo,
inserción de una arista, eliminación de un nodo, eliminación de
una arista, …
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
• Abstracción de los datos
‐ Encapsulamiento de los datos, sin permitir su acceso directo,
que se realizará sólo mediante funcionalidades definidas al
efecto
• Abstracción de las funcionalidades
‐ Definición de funciones primitivas, constituyendo la interfaz
de acceso y manejo de los datos internos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Tipos Abstractos de Datos (TAD)
18
Tipos Abstractos de Datos (TAD)
19
• Abstracciones en un TAD
• Abstracción de los datos
• Abstracción de las funcionalidades
funciones primitivas
interfaz pública
TAD
f5
f1
datos
f2
f4
• Abstracción de los datos
• Facilita la definición de nuevos tipos de datos, especificando sus
posibles valores y las operaciones que trabajen sobre ellos
‐ El acceso a los valores de dichos datos se realiza sólo
mediante las operaciones definidas sobre dicho tipo
abstracto de datos, sin preocuparnos de cómo son
representados y tratados internamente
f3
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Tipos Abstractos de Datos (TAD)
20
• Abstracción de las funcionalidades
• Permite la realización de determinadas acciones, sin
preocuparnos de cómo se hacen ni en qué tiempo
‐ Representan las operaciones más significativas, que no están
implementadas directamente en el lenguaje que se esté
utilizando
‐ Tienen normalmente una relación casi directa entre las
abstracciones funcionales obtenidas en el diseño
descendente (subproblemas) y los subprogramas
Contenidos
• Ciclo de vida del software
• Tipos Abstractos de Datos (TAD)
• Ejemplos de TAD
• TAD Entero
• TAD Cadena de caracteres
• TAD Conjunto
• Especificación de TAD
• Programación Orientada a Objetos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Ejemplos de TAD
21
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
22
TAD Entero
23
• TAD Entero
• Número entero (de tamaño no limitado)
• TAD Cadena de caracteres
• Lista ordenada de caracteres
• TAD Conjunto
• Colección de objetos no repetidos
• Otros TAD…
•
•
•
•
•
TAD Lista enlazada
TAD Pila
TAD Cola
TAD Árbol binario de búsqueda
TAD Grafo
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
• Datos
• Número entero (de tamaño no limitado): ℤ
• Funciones primitivas
•
•
•
•
crear: Entero crear(int valor)
comparar: int comparar(Entero a, Entero b)
cambiarSigno: Entero cambiarSigno(Entero a)
sumar: Entero sumar(Entero a, Entero b)
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
TAD Entero
24
TAD Entero
25
• Funciones primitivas
• crear (en lo que sigue, asumimos su existencia, la sustituimos
por = y omitimos su invocación al pasar enteros como
argumentos de entrada a funciones
• comparar (en lo que sigue, asumimos su existencia)
• cambiarSigno (en lo que sigue, asumimos su existencia)
• sumar (en lo que sigue, asumimos su existencia)
Entero restar(Entero a, Entero b)
n = cambiarSigno(b);
/* n = crear(cambiarSigno(b)); */
r = sumar(a, n);
devolver r;
Entero multiplicar(Entero a, Entero b)
...
• Funciones primitivas adicionales, que se pueden obtener
usando las anteriores
Entero dividir(Entero a, Entero b)
...
• restar
• multiplicar
• dividir
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
TAD Entero
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
26
Entero multiplicar(Entero a, Entero
/*
Entero p = a;
Entero i = 1;
/*
mientras comparar(i, b) < 0
p = sumar(p, a);
/*
i = sumar(i, 1);
devolver p;
b)
p = crear(a) */
i = crear(1) */
i = sumar(i, crear(1)) */
Entero dividir(Entero a, Entero b)
/* c = crear(0) */
Entero c = 0;
a = restar(a, b);
mientras comparar(a, 0) >= 0
c = sumar(c, 1);
/* c = sumar(c, crear(1)) */
a = restar(a, b);
devolver c;
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
TAD Cadena de caracteres
• Datos
• Colección finita de caracteres pertenecientes a un alfabeto ⅀
s = [c1 c2 … cn] ci ∈ ⅀
n = longitud(s) ≥ 0
Si n = 0 ⇒ S = ∅
• Funciones primitivas
•
•
•
•
CCInicializar
CCVacia
CCInsertar
CCExtraer
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
27
TAD Cadena de caracteres
28
TAD Cadena de caracteres
29
• CCInicializar
• CCVacia
• Prototipo: status CCInicializar(CC s)
• Descripción: inicializa una cadena de caracteres, “creando”
espacio en memoria para ella y dejando la cadena “vacía”
• Entrada: cadena s
• Salida: ok si la inicialización se realiza con éxito, error en caso
contrario (habría que especificar en qué casos se producen
errores)
• Prototipo: boolean CCVacia(CC s)
• Descripción: comprueba si una cadena de caracteres está o
no vacía
• Entrada: cadena s
• Salida: verdadero si S = ∅, falso en caso contrario
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
TAD Cadena de caracteres
• CCInsertar
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
30
TAD Cadena de caracteres
• CCExtraer
• Prototipo: status CCInsertar(CC s, car c, pos p)
• Descripción: inserta un carácter dado en una posición
determinada de una cadena (que queda modificada)
• Entrada: cadena s, carácter c a insertar, posición p en la que
insertar c
• Salida: ok si la inserción se realiza con éxito, error en caso
contrario (habría que especificar en qué casos se producen
errores)
• Prototipo: status CCExtraer(CC s, car c, pos p)
• Descripción: extrae el carácter situado en una posición
determinada de una cadena (que queda modificada)
• Entrada: cadena s, variable c donde guardar el carácter
extraído, posición p del carácter a extraer
• Salida: ok si la extracción se realiza con éxito, error en caso
contrario (habría que especificar en qué casos se producen
errores)
s = [c1 c2 … cp‐1, cp, … cn] s = [c1 c2 … cp‐1, c, cp, … cn]
s = [c1 c2 … cp‐1, cp, … cn] s = [c1 c2 … cp‐1, cp+1, … cn]
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
31
TAD Cadena de caracteres
32
TAD Cadena de caracteres
33
• Funciones primitivas
•
•
•
•
CCInicializar: status CCInicializar(CC s)
CCVacia: boolean CCVacia(CC s)
CCInsertar: status CCInsertar(CC s, car c, pos p)
CCExtraer: status CCExtraer(CC s, car c, pos p)
/* Versión 1: sin control de excepciones */
status CCReemplazar(CC s, car c, pos p)
car t;
CCExtraer(s, t, p):
CCInsertar(s, c, p):
devolver ok;
• Funciones primitivas adicionales, que se pueden obtener
usando las anteriores
• CCReemplazar: status CCReemplazar(CC
• CCLongitud: int CCLongitud(CC s)
s, car c, pos p)
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
TAD Cadena de caracteres
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
34
/* Versión 2: con control de excepciones, pero sin recuperación
de la cadena original en caso de error (al insertar) */
status CCReemplazar(CC s, car c, pos p)
car t;
Si CCExtraer(s, t, p) == ok
Si CCInsertar(s, c, p) == ok
devolver ok;
devolver error;
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
TAD Cadena de caracteres
/* Versión 3: asumir que en el TAD, tras K extracciones de S
se pueden realizar hasta K inserciones en S sin error */
status CCReemplazar(CC s, car c, pos p)
car t;
Si CCExtraer(s, t, p) == ok
CCInsertar(s, c, p)
devolver ok;
devolver error;
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
35
TAD Cadena de caracteres
36
CCInicializar: status CCInicializar(CC s)
CCVacia: boolean CCVacia(CC s)
CCInsertar: status CCInsertar(CC s, car c, pos p)
CCExtraer: status CCExtraer(CC s, car c, pos p)
int longitud = 0;
Mientras CCVacia(s) == falso
CCExtraer(s, c, 0);
CCInsertar(s2, c, 0);
longitud = longitud + 1;
• Funciones primitivas adicionales, que se pueden obtener
usando las anteriores
• CCReemplazar: status CCReemplazar(CC
• CCLongitud: int CCLongitud(CC s)
37
/* Versión 1: sin control de excepciones */
int CCLongitud(CC s)
car c;
CC s2;
CCInicializar(s2);
• Funciones primitivas
•
•
•
•
TAD Cadena de caracteres
Mientras CCVacia(s2) == falso
CCExtraer(s2, c, 0);
CCInsertar(s, c, 0);
s, car c, pos p)
devolver longitud;
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
TAD Cadena de caracteres
/* Versión 2: con control de excepciones */
int CCLongitud(CC s)
car c;
CC s2;
Si CCInicializar(s2) == error
devolver -1;
int longitud = 0;
Mientras CCVacia(s) == falso
CCExtraer(s, c, 0);
Si CCInsertar(s2, c, 0) == error
CCInsertar(s, c, 0);
Mientras CCVacia(s2) == falso
CCExtraer(s2, c, 0);
CCInsertar(s, c, 0);
devolver -2;
longitud = longitud + 1;
Mientras CCVacia(s2) == falso
CCExtraer(s2, c, 0);
CCInsertar(s, c, 0);
devolver longitud;
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
38
TAD Conjunto
39
• Datos
• Colección de objetos pertenecientes a un universo de objetos
⅀= (o1, o2, …, on)
⅀
• (Una) Forma de representación
• Conjunto c = array[1, …, n] de Booleanos, en los que el elemento
i‐ésimo es verdadero si y sólo si oi ∈ c
• Ejemplo:
⅀ = {a, b, c, d, e, f, g}
A = {a, d, f, g}
B = {b, c}
a
b
c
d
e
f
g
1
0
0
1
0
1
1
a
b
c
d
e
f
g
0
1
1
0
0
0
0
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
TAD Conjunto
40
• Colección de objetos pertenecientes a un universo de objetos
⅀= (o1, o2, …, on)
• Funciones primitivas
status insertar(Conjunto c, objeto o)
int i = clave(o);
c[i] = verdadero;
devolver ok;
int clave(objeto o) /* Asumimos su existencia */
booleano contiene(Conjunto c, objeto o)
status insertar(Conjunto c, objeto o)
status eliminar(Conjunto c, objeto o)
status union(Conjunto a, Conjunto b, Conjunto r)
status interseccion(Conjunto a, Conjunto b, Conjunto r)
status diferencia(Conjunto a, Conjunto b, Conjunto r)
status eliminar(Conjunto c, objeto o)
int i = clave(o);
c[i] = falso;
devolver ok;
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
TAD Entero
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
42
/* Versiones sin control de excepciones */
status union(Conjunto a, Conjunto b, Conjunto r)
para i=0 hasta n
c[i] = a[i] OR b[i]
devolver ok;
status interseccion(Conjunto a, Conjunto b, Conjunto r)
para i=0 hasta n
c[i] = a[i] AND b[i]
devolver ok;
status diferencia(Conjunto a, Conjunto b, Conjunto r)
para i=0 hasta n
c[i] = a[i] AND NOT b[i]
devolver ok;
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
41
/* Versiones sin control de excepciones */
booleano contiene(Conjunto c, objeto o)
int i = clave(o);
devolver c[i] == verdadero;
• Datos
•
•
•
•
•
•
•
TAD Entero
Contenidos
43
• Ciclo de vida del software
• Tipos Abstractos de Datos (TAD)
• Ejemplos de TAD
• TAD Entero
• TAD Cadena de caracteres
• TAD Conjunto
• Especificación de TAD
• Programación Orientada a Objetos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Especificación de TAD
44
Especificación de TAD
45
• Implicaciones de los TAD
• Desde el punto de vista del desarrollador del TAD:
¿cómo implementar el TAD?
‐ Definir la estructura de datos
‐ Definir (implementar) las funciones primitivas
• Desde el punto de vista del usuario del TAD:
¿cómo usar el TAD?
‐ Trabajar sobre los prototipos y documentación de las
funciones primitivas
• Objetivos de los TAD
• Encapsulamiento (aislamiento) de los datos internos,
permitiendo su acceso y procesamiento mediante primitivas
• Definición de interfaces, ocultando la implementación interna
de las funcionalidades
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Tipos Abstractos de Datos (TAD)
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
46
Especificación de TAD
47
• Ventajas de usar TAD
• Facilidad de implementación, permitiendo el desarrollo paralelo
de las diferentes componentes de una aplicación
• Facilidad de depuración de errores, pues se pueden aislar las
pruebas de componentes concretas de una aplicación
• Facilidad de cambios, debido a que hay menos dependencias
fuertes entre las componentes de una aplicación
• Facilidad de reutilización, ya que componentes de una
aplicación proporcionan funcionalidades independientes
• Inconvenientes de usar TAD
• Consecuencias de usar TAD
• Facilidad de reutilización y extensión del código al poseer mayor
‐ modularidad (primitivas = “ladrillos”)
‐ portabilidad
Abstracción de los datos y de las funcionalidades
Programación orientada a objetos
• Esfuerzo adicional en la etapa de diseño, en la que el proceso
de abstracción del TAD puede ser complicado
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Contenidos
48
• Ciclo de vida del software
• Tipos Abstractos de Datos (TAD)
• Ejemplos de TAD
Programación Orientada a Objetos
• La evolución de los lenguajes de programación tiende a
introducir más abstracciones
• TAD Entero
• TAD Cadena de caracteres
• TAD Conjunto
• Especificación de TAD
• Programación Orientada a Objetos
Lenguajes
de bajo nivel
Lenguajes
estructurados
Lenguajes
orientados a objetos
(Lenguajes máquina,
ensamblador)
(Fortran, COBOL,
Pascal, C, …)
(Smalltalk, C++,
Java, …)
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Programación Orientada a Objetos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
50
Programación Orientada a Objetos
• En C:
typedef struct {
double x, y;
} Complejo;
• La evolución de los lenguajes de programación tiende a
introducir más abstracciones
• Soporte para uso de TAD
‐ Lenguajes estructurados (tipos de datos definidos por el
usuario): datos y operaciones se mantienen separados
‐ Lenguajes orientados a objetos (clases): datos y operaciones
constituyen una unidad
double modulo( Comlejo c ) {
return sqrt(c.x*c.x + c.y*c.y);
}
• En Java:
public class Complejo {
private double x, y;
public Complejo( double x, double y ) {
this.x = x;
this.y = y;
}
public double modulo() {
return Math.sqrt(this.x*this.x + this.y*this.y);
}
}
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
49
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
51
Programación Orientada a Objetos
52
• En C:
Programación Orientada a Objetos
53
• Al programar en C, pensamos en funciones:
typedef struct {
double x, y;
} Complejo;
• Acciones que se realizan sobre objetos (argumentos) de entrada
accion(objeto)
double modulo( Comlejo c ) {
return sqrt(c.x*c.x + c.y*c.y);
}
Complejo c = {1,2};
double m = modulo(c);
• En Java:
public class Complejo {
private double x, y;
• Al programar en Java, pensamos en clases:
public Complejo( double x, double y ) {
this.x = x;
this.y = y;
}
• Objetos que realizan acciones
objeto.accion()
public double modulo() {
return Math.sqrt(this.x*this.x + this.y*this.y);
}
Complejo c = new Complejo(1,2);
double m = c.modulo();
}
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Programación Orientada a Objetos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
54
Programación Orientada a Objetos
55
• Al programar en C, pensamos en funciones:
• Acciones que se realizan sobre objetos (argumentos) de entrada
accion(objeto)
Complejo c = {1,2};
double m = modulo(c);
• Al programar en Java, pensamos en objetos:
• Objetos que realizan acciones
• Los 3 pilares de la Programación Orientada a Objetos (POO)
• Encapsulamiento
• Herencia
• Polimorfismo
objeto.accion()
Complejo c = new Complejo(1,2);
double m = c.modulo();
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Programación Orientada a Objetos
56
Programación Orientada a Objetos
57
• Encapsulamiento en Java
• Los 3 pilares de la POO
public class Persona {
// Atributos
private String nombre;
private int edad;
• Encapsulamiento
// Constructor
public Persona( String nombre, int edad ) {
this.nombre = nombre;
this.edad = edad;
}
// Metodos
public void setEdad( int edad ) {
this.edad = edad;
}
public String getNombre() {
return this.nombre;
}
public int getEdad() {
return this.edad;
}
}
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Programación Orientada a Objetos
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
58
Programación Orientada a Objetos
59
• Herencia en Java
• Los 3 pilares de la POO
• Herencia
public class Cliente extends Persona {
// Atributos
protected String nombreEmpresa;
protected String telefonoContacto;
public class Persona {
// Atributos
protected String nombre;
protected int edad;
// Constructor
public Cliente( String nombre, int edad,
String empresa, String telefono ) {
super(nombre, edad);
this.nombreEmpresa = empresa;
this.telefonoContacto = telefono;
}
// Constructor
public Persona( String nombre, int edad ) {
this.nombre = nombre;
this.edad = edad;
}
// Metodos
public void setEdad( int edad ) {
this.edad = edad;
}
// Metodos
public String getEmpresa() {
return this.nombreEmpresa;
}
public String getNombre() {
return this.nombre;
}
public int getEdad() {
return this.edad;
}
public String getTelefono() {
return this.telefonoContacto;
}
}
}
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Programación Orientada a Objetos
60
• Los 3 pilares de la POO
• Polimorfismo
Estructuras de Datos y Algoritmos
Tema 2. Tipos Abstractos de Datos
Iván Cantador
Silvia Teresita Acuña, José R. Dorronsoro, Estrella Pulido
Escuela Politécnica Superior
Estructura de Datos y Algoritmos
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Universidad Autónoma de Madrid
Descargar