25.02.2013 Views

prueba

no2

no2

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!