1. Programación Orientada a
Objetos
Departamento de Lenguajes y
Ciencias de la Computación
E.T.S.I. Informática
Universidad de Málaga
2. 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
4. Evolución de los Lenguajes de
A
B
S
Programación A
B
S
T
Lenguajes Direcciones de T
R
Instrucciones R
A Máquina / Memoria, A
C Máquina
C Ensamblador Registros C
I C
Ó Variables de
Expresiones, FORTRAN
I
N Tipos Predef., Ó
Funciones
O Arrays N
P
E Definición de D
R
Estr. Control, PASCAL Tipos, E
A Subprogramas
C Punteros
D
I
O Ocultamiento Tipos A
N MODULA-2 T
Información, Abstractos de
A ADA O
L Interfaces Datos S
Métodos, Lenguajes Clases,
Mensajes Orientados a Objetos
Objetos
Programación Modular. Programación Orientada a Objetos 4
5. 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
6. Conceptos básicos de la
programación orientada a objetos
Programación Modular. Programación Orientada a Objetos 6
7. 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
8. VEHÍCULO
ANIMAL
PUNTO
(1,3)
(5,2.5)
FIGURA (2,2)
(2,1)
Programación Modular. Programación Orientada a Objetos 8
9. ¿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
10. ¿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
11. 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
12. Un ejemplo: la clase Punto
Punto Atributos = Estado Propio
Clase
R x,y;
trasladar(a,b) Métodos = Comportamiento Común
distancia(pto)
(Punto)
x= -1
y= 4
Objetos (Punto)
x= 2
y= 3 (Punto)
x= 5
y= 7
Programación Modular. Programación Orientada a Objetos 12
13. 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
14. 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
15. Implementación de la clase Punto (1)
IMPLEMENTACIÓN CLASE Punto
ATRIBUTOS
Estado R x,y;
MÉTODOS
cambiar_x(E R nx)
INICIO
x = nx; // x == éste.x
acceso al FIN
argumento cambiar_y(E R ny)
implícito INICIO
y = ny; // y == éste.y
FIN
Programación Modular. Programación Orientada a Objetos 15
16. 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
de la misma clase 16
FIN Punto;
Programación Modular. Programación Orientada a Objetos
17. 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
18. 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
P
y=3
Programación Modular. Programación Orientada a Objetos 18
19. 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) trasladar(a,b)
distancia(pto) longitud()
Programación Modular. Programación Orientada a Objetos 19
20. 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
21. 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
22. Conceptos avanzados de la
programación orientada a objetos
Programación Modular. Programación Orientada a Objetos 22
23. Herencia
• Posibilidad de reutilizar código FiguraCerrada
• Algo más que:
• incluir ficheros, o
• importar módulos Polígono Elipse
• Distintos tipos de herencia:
• simple / múltiple
Pentágono Cuadrilátero Círculo
• estricta
• selectiva
• de implementación/de interfaz
Rectángulo Rombo
Programación Modular. Programación Orientada a Objetos 23
24. Herencia
Padres / Ascendientes
• Una clase heredera proporciona los
Punto 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) .
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
25. 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
26. Herencia y Redefinición
• En la herencia las clases herederas pueden heredar
un método o servicio, y luego redefinirlo,
modificando su implementación.
Suma de distancias entre
Polígono puntos consecutivos Cuadrado
R lado;
R perímetro( ); R perimetro( );
Resultado = 4*lado
Programación Modular. Programación Orientada a Objetos 26
27. 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