prueba

no1 no1

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!