Download Programación Orientada a Objetos - Departamento de Lenguajes y
Document related concepts
Transcript
Programación Orientada a Objetos Departamento de Lenguajes y Ciencias de la Computación E.T.S.I. Informática Universidad de Málaga Contenido • Introducción histórica • Conceptos básicos de la Programación O. O. • Conceptos avanzados de la Programación O.O. Programación Modular. Programación Orientada a Objetos 2 Introducción Histórica Programación Modular. Programación Orientada a Objetos 3 Evolución de los Lenguajes de Programación A B S T R A C C I Ó N O P E R A C I O N A L Instrucciones Máquina Expresiones, Funciones Estr. Control, Subprogramas Ocultamiento Información, Interfaces Métodos, Mensajes Lenguajes Máquina / Ensamblador Direcciones de Memoria, Registros FORTRAN Variables de Tipos Predef., Arrays PASCAL Definición de Tipos, Punteros MODULA-2 ADA Lenguajes Orientados a Objetos Programación Modular. Programación Orientada a Objetos Tipos Abstractos de Datos A B S T R A C C I Ó N D E D A T O S Clases, Objetos 4 Evolución de los Lenguajes Orientados a Objetos • • • • • • Simula (Nygaard, 60s) Smalltalk (Xerox PARC, 70s) Eiffel (Meyer, 80s) C++ (Stroustrup, 80s) Java (Sun Microsystems, 90s) C# (Microsoft, 00s) Programación Modular. Programación Orientada a Objetos 5 Conceptos básicos de la programación orientada a objetos Programación Modular. Programación Orientada a Objetos 6 Clases y Objetos • CLASE = SUBPROGRAMAS + VARIABLES ! Criterio de Modularización ! Estado + Comportamiento ! Entidad estática ! Clase ≈ Tipo • OBJETO = Instancia de una CLASE ! ! ! ! Entidad dinámica Cada objeto tiene su propio estado Objetos de una misma clase comparten un comportamiento Objeto ≈ Variable Programación Modular. Programación Orientada a Objetos 7 VEHÍCULO ANIMAL PUNTO (1,3) FIGURA (2,2) (5,2.5) (2,1) Programación Modular. Programación Orientada a Objetos 8 ¿Qué es una Clase? Caja negra que oculta en su implementación: – Atributos: variables que codifican el estado de una instancia de la clase (objeto) – Métodos: subprogramas que describen el comportamiento de un objeto de la clase Una clase es semejante a un tipo: – Atributos: estructura de datos – Métodos: operaciones sobre el tipo Programación Modular. Programación Orientada a Objetos 9 ¿Qué es un Objeto? Instancia de una clase: – Cada objeto de una clase tiene su propia copia de los atributos (estado propio) – Todos los objetos de una clase comparten los mismos métodos (comportamiento común) Programación Modular. Programación Orientada a Objetos 10 Implementador frente a Usuario • Las clases son cajas negras con – Interfaz (uso) – Implementación (funcionamiento) • El implementador se encarga de definir el interfaz y de desarrollar la implementación • El usuario empleará los objetos de la clase exclusivamente a través del interfaz Programación Modular. Programación Orientada a Objetos 11 Un ejemplo: la clase Punto Punto Clase Atributos = Estado Propio R x,y; Métodos = Comportamiento Común trasladar(a,b) distancia(pto) Objetos (Punto) x= 2 y= 3 (Punto) x= -1 y= 4 (Punto) x= 5 y= 7 Programación Modular. Programación Orientada a Objetos 12 Definición de la clase Punto INTERFAZ CLASE Punto MÉTODOS cambiar_x(E R nx); Comportamiento cambiar_y(E R ny); trasladar(E R dx,dy); R distancia(E Punto p); FIN Punto; Programación Modular. Programación Orientada a Objetos 13 Definición de Métodos • El objeto afectado no aparece como argumento del método: trasladar(E R dx,dy); • En realidad, el objeto afectado es un argumento de entrada/salida implícito llamado éste: ALGORITMO trasladar(ES Punto éste, E R dx,dy); Programación Modular. Programación Orientada a Objetos 14 Implementación de la clase Punto (1) IMPLEMENTACIÓN CLASE Punto ATRIBUTOS R x,y; Estado acceso al argumento implícito MÉTODOS cambiar_x(E R nx) INICIO x = nx; // x == éste.x FIN cambiar_y(E R ny) INICIO y = ny; // y == éste.y FIN Programación Modular. Programación Orientada a Objetos 15 Implementación de la clase Punto (2) trasladar(E R dx,dy) INICIO x = x+dx; y = y+dy; FIN R distancia(E Punto p) INICIO DEVOLVER sqrt(pow(x-p.x,2) + pow(y-p.y,2)) FIN acceso total a otros objetos FIN Punto; de la misma clase 16 Programación Modular. Programación Orientada a Objetos Uso de la clase Punto • El usuario declara objetos como cualquier otra variable: Punto p1, p2; • Como usuario, no se puede acceder a la parte privada de los objetos: p1.X = 2; Error • El usuario sólo puede manipular un Punto a invocando a los métodos del interfaz de la clase Punto (comportamiento) Programación Modular. Programación Orientada a Objetos 17 Invocación de Métodos • Los métodos se invocan mediante paso de mensajes: P.trasladar(4,-1) = trasladar(P,4,-1) • El objeto P es el receptor del mensaje: trasladar(4,-1) (Punto) x=1 y=3 Programación Modular. Programación Orientada a Objetos P 18 Relación de Composición • la composición permite expresar a una relación de tipo “está compuesto por” • Por ejemplo, un segmento está compuesto por dos puntos: origen y extremo Punto Segmento R x,y; Punto Orig, Ext; trasladar(a,b) distancia(pto) trasladar(a,b) longitud() Programación Modular. Programación Orientada a Objetos 19 Implementación de la Composición (1) INTERFAZ CLASE Segmento MÉTODOS trasladar(E R dx,dy); R longitud(); FIN Segmento; Programación Modular. Programación Orientada a Objetos 20 Implementación de la Composición (2) IMPLEMENTACIÓN CLASE Segmento ATRIBUTOS Punto Orig, Dest MÉTODOS trasladar(E R dx,dy) INICIO Orig.trasladar(dx,dy) Ext.trasladar(dx,dy) FIN R longitud(); INICIO DEVOLVER Orig.distancia(Ext) FIN FIN Segmento; Programación Modular. Programación Orientada a Objetos 21 Conceptos avanzados de la programación orientada a objetos Programación Modular. Programación Orientada a Objetos 22 Herencia • Posibilidad de reutilizar código • Algo más que: • incluir ficheros, o • importar módulos FiguraCerrada Elipse Polígono • Distintos tipos de herencia: • • • • simple / múltiple Pentágono estricta selectiva de implementación/de interfaz Cuadrilátero Rectángulo Programación Modular. Programación Orientada a Objetos Círculo Rombo 23 Herencia Padres / Ascendientes • Una clase heredera proporciona los atributos y métodos de la clase heredada, Punto y puede añadir otros nuevos. • La clase heredera puede modificar el comportamiento heredado (por ejemplo, redefiniendo algún método heredado) . Partícula • La herencia es transitiva. • Los objetos de una clase que hereda de Hijos / Descendientes otra pueden verse como objetos de esta última. Programación Modular. Programación Orientada a Objetos 24 Herencia Múltiple • Existen lenguajes con herencia múltiple, lo que permite que una clase reutilice la funcionalidad ofrecida por varias clases. Pensionista TrabajadorActivo MedioPensionista Programación Modular. Programación Orientada a Objetos 25 Herencia y Redefinición • En la herencia las clases herederas pueden heredar un método o servicio, y luego redefinirlo, modificando su implementación. Polígono Suma de distancias entre puntos consecutivos Cuadrado R lado; R perímetro( ); Resultado = 4*lado Programación Modular. Programación Orientada a Objetos R perimetro( ); 26 Polimorfismo sobre los datos • Una variable puede referirse a objetos de clases distintas de la que se ha declarado. • La restricción dada por la herencia, permite construir estructuras con elementos de naturaleza distinta, pero con un comportamiento común: Programación Modular. Programación Orientada a Objetos 27