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