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 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 Programación Lenguajes Máquina / Ensamblador FORTRAN PASCAL MODULA-2 ADA Direcciones de Memoria, Registros Variables de Tipos Predef., Arrays Definición de Tipos, Punteros Tipos Abstractos de Datos A B S T R A C C I Ó N D E D A T O S Métodos, Mensajes Lenguajes Orientados a Objetos Clases, Objetos Programación Modular. Programación Orientada a 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 FIGURA (1,3) (2,2) (2,1) (5,2.5) 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 Clase R x,y; Punto trasladar(a,b) distancia(pto) Atributos = Estado Propio Métodos = Comportamiento Común Objetos (Punto) x= 2 y= 3 (Punto) x= 5 y= 7 (Punto) x= -1 y= 4 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) Estado IMPLEMENTACIÓN CLASE Punto ATRIBUTOS R x,y; 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 FIN Punto; acceso total a otros objetos de la misma clase Programación Modular. Programación Orientada a Objetos 16
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 P Programación Modular. Programación Orientada a Objetos 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 R x,y; Punto trasladar(a,b) distancia(pto) Segmento Punto Orig, Ext; 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 Distintos tipos de herencia: simple / múltiple estricta selectiva Pentágono de implementación/de interfaz FiguraCerrada Polígono Elipse Cuadrilátero Círculo Rectángulo Rombo Programación Modular. Programación Orientada a Objetos 23
Herencia Padres / Ascendientes Punto Partícula Hijos / Descendientes Una clase heredera proporciona los atributos y métodos de la clase heredada, y puede añadir otros nuevos. La clase heredera puede modificar el comportamiento heredado (por ejemplo, redefiniendo algún método heredado). La herencia es transitiva. Los objetos de una clase que hereda de 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 R perímetro( ); Suma de distancias entre puntos consecutivos Resultado = 4*lado Cuadrado R lado; R perimetro( ); Programación Modular. Programación Orientada a Objetos 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