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