Programación Orientada a Objetos E.T.S.I. Telecomunicación Universidad de Málaga http://www.lcc.uma.es/
Contenido Introducción histórica Conceptos básicos de la Programación O. O. Conceptos avanzados de la Programación O.O. Programación Orientada a Objetos 2
Introducción Histórica Programación Orientada a Objetos 3
A B S T R A C C I Ó N O P E R A C I O N A L Evolución de los Lenguajes de 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 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 Orientada a Objetos 5
Conceptos Básicos de la Programación O.O. 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 Orientada a Objetos 7
VEHÍCULO ANIMAL PUNTO FIGURA (1,3) (2,2) (2,1) (5,2.5) 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 Orientada a Objetos 9
Instancia de una clase: Qué es un Objeto? 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 Orientada a Objetos 10
Implementador vs. 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 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 Orientada a Objetos 12
Definiendo la clase Punto Comportamiento INTERFAZ CLASE Punto MÉTODOS cambiar_x(e R nx); cambiar_y(e R ny); trasladar(e R dx,dy); R distancia(e Punto p); FIN Punto; 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 Orientada a Objetos 14
Implementando la clase Punto (I) 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 Orientada a Objetos 15
Implementando la clase Punto (II) 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 Orientada a Objetos 16
Usando 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 invocando a los métodos del interfaz de la clase Punto (comportamiento) 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 5 y=3 2 P Programación Orientada a Objetos 18
Relación de Composición la composición permite expresar 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 Orientada a Objetos 19
Implementando la Composición (I) INTERFAZ CLASE Segmento MÉTODOS trasladar(e R dx,dy); R longitud(); FIN Segmento; Programación Orientada a Objetos 20
Implementando la Composición (II) IMPLEMENTACIÓN CLASE Segmento ATRIBUTOS Punto Orig, Dest; MÉTODOS trasladar(e R dx,dy) INICIO Orig.trasladar(dx,dy); Dest.trasladar(dx,dy); FIN R longitud(); INICIO DEVOLVER Orig.distancia(Dest); FIN FIN Segmento; Programación Orientada a Objetos 21
Conceptos Avanzados de la Programación O.O. 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 Polígono FiguraCerrada Cuadrilátero Elipse Círculo Rectángulo Rombo Programación Orientada a Objetos 23
Herencia Padres / Ascendientes Una clase heredera proporciona los Punto atributos y métodos de la clase heredada, y puede añadir otros nuevos. Partícula 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 Hijos / Descendientes última. 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 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 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 Orientada a Objetos 27