01.11.2014 Views

conceptos de de la programación orientada a objetos

conceptos de de la programación orientada a objetos

conceptos de de la programación orientada a objetos

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Introducción (I)<br />

CONCEPTOS DE POO<br />

• La <strong>programación</strong> <strong>orientada</strong> a <strong>objetos</strong> es un paradigma <strong>de</strong><br />

<strong>programación</strong> que utiliza <strong>objetos</strong> que se comunican a través <strong>de</strong><br />

mensajes para <strong>la</strong> solución <strong>de</strong> problemas.<br />

• Algunos lenguajes <strong>de</strong> <strong>programación</strong> orientados a <strong>objetos</strong> (or<strong>de</strong>n<br />

cronológico)<br />

• Simu<strong>la</strong>: 1967 (antece<strong>de</strong>nte <strong>de</strong> todos, por Dahl, Myhrhaug y Nygard)<br />

• Smalltalk: 1980 (lenguaje poo puro <strong>de</strong>sarrol<strong>la</strong>do en Xerox Palo Alto<br />

Reasearch Center Learning Research Group)<br />

• Eiffel: ‘80 (por Bertrand Meyer, orientado a <strong>objetos</strong> y con técnicas<br />

<strong>de</strong> verificación <strong>de</strong> programas y herramientas <strong>de</strong> ingeniería)<br />

• C++: 1983-1990 (por Bjarne Stroustrup)<br />

• Object Pascal: 1986 (esqueleto simplificado <strong>de</strong> lenguaje poo por<br />

<strong>de</strong>sarrol<strong>la</strong>dores <strong>de</strong> Apple Computer y Nik<strong>la</strong>us Wirth)<br />

• LISP/CLOS: 1988 (diseñado por un comité presidido por Daniel<br />

Bobrow a partir <strong>de</strong> <strong>la</strong> ACM Lisp and Fuctional Programming<br />

Conference <strong>de</strong> 1986)<br />

• Java: 1995, 1997, 1998 (objeto <strong>de</strong> este curso)<br />

Programación Orientada a Objetos 1


Objetos (I)<br />

CONCEPTOS DE POO<br />

• Los <strong>objetos</strong> <strong>de</strong>l mundo real comparten tres características:<br />

• estado o estructura: por ejemplo, en un coche el nº <strong>de</strong> marchas, <strong>la</strong><br />

velocidad actual, <strong>la</strong> marcha actual, etc...<br />

• comportamiento: por ejemplo, un coche pue<strong>de</strong> arrancar, acelerar,<br />

frenar, cambiar marcha, etc....<br />

• i<strong>de</strong>ntidad: aquello que distingue a un objeto <strong>de</strong> todos los <strong>de</strong>más, por<br />

ejemplo, si <strong>la</strong> estructura <strong>de</strong> una persona es su nombre y edad, es<br />

posible que haya dos juanes <strong>de</strong> 20 años que no son <strong>la</strong> misma persona.<br />

• Los <strong>objetos</strong> software también tienen esas características:<br />

• estado: se almacena en un conjunto <strong>de</strong> variables.<br />

• comportamiento: se implementa con métodos. Un método es una<br />

función (subrutina, subprograma, procedimiento).<br />

• i<strong>de</strong>ntidad: garantizada por los sistemas <strong>de</strong> poo.<br />

Un objeto es una agrupación <strong>de</strong> variables y métodos distinguible<br />

<strong>de</strong> todos los <strong>de</strong>más (i<strong>de</strong>ntidad propia) <strong>de</strong>s<strong>de</strong> su creación.<br />

Programación Orientada a Objetos 2


Objetos (II)<br />

CONCEPTOS DE POO<br />

• Los <strong>objetos</strong> software se utilizan para:<br />

• representar <strong>objetos</strong> <strong>de</strong>l mundo real.<br />

• en un juego <strong>de</strong> carreras <strong>de</strong> coches, los coches <strong>de</strong>l mundo real se podrían<br />

representar mediante <strong>objetos</strong> software.<br />

• en una aplicación <strong>de</strong> dibujo, <strong>la</strong>s figuras geométricas (polígonos, rectas,...)<br />

se podrían representar mediante <strong>objetos</strong> software.<br />

• en una aplicación <strong>de</strong> gestión <strong>de</strong> personal <strong>de</strong> una empresa, los<br />

trabajadores <strong>de</strong> <strong>la</strong> empresa se podrían representar mediante <strong>objetos</strong><br />

software.<br />

• representar <strong>conceptos</strong> abstractos.<br />

• en interfaces gráficas <strong>de</strong> usuario, es habitual representar con <strong>objetos</strong><br />

(l<strong>la</strong>mados eventos) <strong>la</strong>s acciones realizadas por el usuario (ratón y<br />

tec<strong>la</strong>do).<br />

• en un entorno <strong>de</strong> simu<strong>la</strong>ción e i<strong>de</strong>ntificación <strong>de</strong> <strong>la</strong> estructura<br />

tridimensional <strong>de</strong> una proteína, <strong>la</strong>s posibles estructuras candidatas (no se<br />

correspon<strong>de</strong>n con ningún objeto real) podrían represantarse mediante<br />

<strong>objetos</strong>.<br />

Programación Orientada a Objetos 3


Objetos (III)<br />

CONCEPTOS DE POO<br />

• Representación visual <strong>de</strong> un objeto software.<br />

Métodos<br />

(comportamiento)<br />

Variables<br />

(estado)<br />

Programación Orientada a Objetos 4


Mensajes (I)<br />

CONCEPTOS DE POO<br />

• Una aplicación <strong>orientada</strong> a <strong>objetos</strong> se compone <strong>de</strong> múltiples<br />

<strong>objetos</strong> que se comunican mediante mensajes.<br />

• Si un objeto A quiere que un objeto B ejecute uno <strong>de</strong> sus<br />

métodos, el objeto A le envía un mensaje al objeto B.<br />

mensaje<br />

objeto A<br />

objeto B<br />

• Cada mensaje tiene tres componentes:<br />

• el objeto <strong>de</strong>stinatario <strong>de</strong>l mensaje<br />

• el nombre <strong>de</strong>l método a ejecutar<br />

• los parámetros (si existen) <strong>de</strong>l método<br />

Programación Orientada a Objetos 5


Mensajes (II)<br />

CONCEPTOS DE POO<br />

• Por ejemplo, en un juego <strong>de</strong> or<strong>de</strong>nador <strong>de</strong> carreras <strong>de</strong> coches,<br />

cada piloto se comunica con su coche.<br />

Mensaje sin parámetros<br />

arrancar<br />

piloto<br />

coche<br />

Mensaje con parámetros<br />

cambiar marcha (2)<br />

piloto<br />

coche<br />

Programación Orientada a Objetos 6


C<strong>la</strong>ses (I)<br />

CONCEPTOS DE POO<br />

• Los <strong>objetos</strong> <strong>de</strong>l mundo real se pue<strong>de</strong>n agrupar en tipos (c<strong>la</strong>ses)<br />

(personas, coches, or<strong>de</strong>nadores, <strong>la</strong>vadoras, aviones, etc) <strong>de</strong><br />

manera que los <strong>objetos</strong> <strong>de</strong> <strong>la</strong> misma c<strong>la</strong>se tienen <strong>la</strong> misma<br />

estructura (estado) y el mismo comportamiento, aunque el estado<br />

<strong>de</strong> dos <strong>objetos</strong> pue<strong>de</strong> ser distinto.<br />

• Los <strong>objetos</strong> software también se pue<strong>de</strong>n agrupar en c<strong>la</strong>ses<br />

utilizando un criterio simi<strong>la</strong>r: los <strong>objetos</strong> <strong>de</strong> <strong>la</strong> misma c<strong>la</strong>se<br />

comparten estado y comportamiento.<br />

• En terminología <strong>orientada</strong> a <strong>objetos</strong>, un objeto concreto <strong>de</strong> una<br />

c<strong>la</strong>se es una instancia <strong>de</strong> <strong>la</strong> c<strong>la</strong>se.<br />

Una c<strong>la</strong>se es un patrón o prototipo que <strong>de</strong>fine <strong>la</strong>s variables y<br />

los métodos comunes a todos los <strong>objetos</strong> <strong>de</strong> un cierto tipo.<br />

Programación Orientada a Objetos 7


C<strong>la</strong>ses (II)<br />

CONCEPTOS DE POO<br />

• Las variables en <strong>la</strong>s que se almacena el estado <strong>de</strong> un objeto, se<br />

l<strong>la</strong>man variables <strong>de</strong> instancia.<br />

• Los métodos que implementan el comportamiento <strong>de</strong> un objeto se<br />

l<strong>la</strong>man métodos <strong>de</strong> instancia.<br />

Programación Orientada a Objetos 8


C<strong>la</strong>ses (III)<br />

CONCEPTOS DE POO<br />

• Por ejemplo, <strong>la</strong> c<strong>la</strong>se Coche <strong>de</strong>c<strong>la</strong>ra <strong>la</strong>s<br />

variables <strong>de</strong> instancia necesarias para<br />

almacenar el Nº <strong>de</strong> marchas, <strong>la</strong><br />

velocidad actual, y <strong>la</strong> marcha actual.<br />

La c<strong>la</strong>se también <strong>de</strong>c<strong>la</strong>ra y proporciona<br />

<strong>la</strong> implementación <strong>de</strong> los métodos <strong>de</strong><br />

instancia que permiten arrancar,<br />

acelerar, frenar y cambiar <strong>de</strong> marcha.<br />

arrancar<br />

cambiar <strong>de</strong><br />

marcha<br />

acelerar<br />

Coche<br />

frenar<br />

Nº <strong>de</strong> marchas<br />

velocidad actual<br />

marcha actual<br />

Después <strong>de</strong> crear <strong>la</strong> c<strong>la</strong>se Coche se pue<strong>de</strong>n crear los <strong>objetos</strong> <strong>de</strong> <strong>la</strong> c<strong>la</strong>se.<br />

Cada instancia <strong>de</strong> <strong>la</strong> c<strong>la</strong>se tiene su propia copia <strong>de</strong> todas <strong>la</strong>s variables <strong>de</strong><br />

instancia <strong>de</strong>finidas en <strong>la</strong> c<strong>la</strong>se.<br />

cambiar <strong>de</strong><br />

marcha<br />

Nº <strong>de</strong> marchas =5<br />

velocidad actual =80<br />

cambiar <strong>de</strong><br />

marcha<br />

Nº <strong>de</strong> marchas =4<br />

velocidad actual =120<br />

arrancar<br />

frenar<br />

marcha actual =3<br />

arrancar<br />

frenar<br />

marcha actual = 4<br />

acelerar<br />

acelerar<br />

coche 1 coche 2<br />

Programación Orientada a Objetos 9


C<strong>la</strong>ses (IV)<br />

CONCEPTOS DE POO<br />

• Variables <strong>de</strong> c<strong>la</strong>se: <strong>la</strong>s c<strong>la</strong>ses, a<strong>de</strong>más <strong>de</strong> <strong>de</strong>finir <strong>la</strong>s variables <strong>de</strong><br />

instancia, también pue<strong>de</strong>n <strong>de</strong>finir variables <strong>de</strong> c<strong>la</strong>se, que<br />

contienen información común para todas <strong>la</strong>s instancias <strong>de</strong> <strong>la</strong> c<strong>la</strong>se.<br />

Si un objeto modifica el valor <strong>de</strong> una variable <strong>de</strong> c<strong>la</strong>se, esta<br />

modificación afecta a todos los <strong>objetos</strong> <strong>de</strong> <strong>la</strong> c<strong>la</strong>se.<br />

• Por ejemplo, en una aplicación <strong>de</strong> facturación, <strong>la</strong> c<strong>la</strong>se Factura pue<strong>de</strong><br />

tener una variable <strong>de</strong> c<strong>la</strong>se con el IVA que se aplica a <strong>la</strong>s facturas, ya<br />

que este valor es común a todos los <strong>objetos</strong> <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Factura, y no<br />

sería eficiente que cada uno <strong>de</strong> los <strong>objetos</strong> <strong>de</strong> <strong>la</strong> c<strong>la</strong>se tuviera una<br />

copia.<br />

• Si en una aplicación se quiere contabilizar el número <strong>de</strong> instancias que<br />

hay <strong>de</strong> una <strong>de</strong>terminada c<strong>la</strong>se, se pue<strong>de</strong> utilizar una variable <strong>de</strong> c<strong>la</strong>se.<br />

Por ejemplo, <strong>la</strong> c<strong>la</strong>se Ventana <strong>de</strong> una iterfaz gráfica pue<strong>de</strong> <strong>de</strong>c<strong>la</strong>rar<br />

variables <strong>de</strong> c<strong>la</strong>se para almacenara el número <strong>de</strong> ventanas visibles, el<br />

tamaño por omisión y el tamaño máximo <strong>de</strong> cualquier ventana.<br />

Programación Orientada a Objetos 10


C<strong>la</strong>ses (V)<br />

CONCEPTOS DE POO<br />

• Métodos <strong>de</strong> c<strong>la</strong>se: son métodos que afectan a <strong>la</strong> c<strong>la</strong>se en sí, y a<br />

los cuales se pue<strong>de</strong> acce<strong>de</strong>r directamente <strong>de</strong>s<strong>de</strong> <strong>la</strong> c<strong>la</strong>se en<br />

oposición al acceso a los métodos <strong>de</strong> instancia, que se realiza<br />

siempre a través <strong>de</strong> los <strong>objetos</strong><br />

• Es importante seña<strong>la</strong>r que para invocar un método <strong>de</strong> c<strong>la</strong>se no es<br />

necesario haber creado ningún objeto que reciba como mensaje una<br />

invocación <strong>de</strong> ese método.<br />

• Para usar un método <strong>de</strong> instancia, por el contrario, se necesita<br />

obligatoriamente que se cree un objeto <strong>de</strong> <strong>la</strong> c<strong>la</strong>se que reciba el<br />

mensaje <strong>de</strong> ese método.<br />

• Por ejemplo, en <strong>la</strong> c<strong>la</strong>se Factura se podrían tener métodos para consultar<br />

y modificar el valor <strong>de</strong>l IVA aplicable a <strong>la</strong>s facturas, ya que este valor<br />

tiene sentido en sí mismo y no está condicionado a <strong>la</strong> existencia <strong>de</strong><br />

<strong>objetos</strong> <strong>de</strong> <strong>la</strong> c<strong>la</strong>se.<br />

Programación Orientada a Objetos 11


CONCEPTOS DE POO<br />

Conceptos fundamentales <strong>de</strong>l mo<strong>de</strong>lo <strong>de</strong> <strong>objetos</strong><br />

MODELO DE OBJETOS<br />

ABSTRACCIÓN<br />

ENCAPSULAMIENTO<br />

HERENCIA<br />

POLIMORFISMO<br />

Hay cuatro <strong>conceptos</strong> fundamentales en el paradigma <strong>de</strong><br />

orientación a <strong>objetos</strong>: abstracción, encapsu<strong>la</strong>miento,<br />

herencia y polimorfismo.<br />

Programación Orientada a Objetos 12


Abstracción<br />

CONCEPTOS DE POO<br />

• La abstracción consiste en extraer los aspectos esenciales <strong>de</strong><br />

una entidad e ignorar sus propieda<strong>de</strong>s acci<strong>de</strong>ntales, es una<br />

herramienta en el proceso <strong>de</strong> creación <strong>de</strong>l mo<strong>de</strong>lo a partir <strong>de</strong> un<br />

problema real que está <strong>de</strong>terminada por los siguientes factores:<br />

• I<strong>de</strong>ntificación <strong>de</strong> c<strong>la</strong>ses: los <strong>conceptos</strong> que tienen entidad en sí<br />

mismos, no <strong>de</strong>pen<strong>de</strong>n <strong>de</strong> otros, se pu<strong>de</strong>n <strong>de</strong>scribir, compren<strong>de</strong>r y<br />

analizar pue<strong>de</strong>n abstraerse como una c<strong>la</strong>se.<br />

• El objetivo <strong>de</strong>l mo<strong>de</strong>lo:<br />

• <strong>de</strong>termina tanto el grado <strong>de</strong> <strong>de</strong>talle como <strong>la</strong> información relevante.<br />

• Ejemplos:<br />

– Aplicación <strong>de</strong> macroeconomía: los empleados <strong>de</strong> una empresa pue<strong>de</strong>n no ser<br />

importantes como individuos porque sólo interese su comportamiento global<br />

como p<strong>la</strong>ntil<strong>la</strong>; habrá una c<strong>la</strong>se p<strong>la</strong>ntil<strong>la</strong> pero no una c<strong>la</strong>se persona.<br />

– Aplicación <strong>de</strong> nóminas: necesita manipu<strong>la</strong>r <strong>la</strong> información <strong>de</strong> cada persona <strong>de</strong><br />

manera in<strong>de</strong>pendiente; habrá una c<strong>la</strong>se persona<br />

– Con el mismo grado <strong>de</strong> <strong>de</strong>talle <strong>de</strong> <strong>la</strong> aplicación <strong>de</strong> nóminas, los antece<strong>de</strong>ntes<br />

clínicos <strong>de</strong> una persona son irrlevantes en una aplicación <strong>de</strong> préstamo<br />

bibliotecario pero fundamentales en una aplicación hospita<strong>la</strong>ria <strong>de</strong> ayuda al<br />

diagnóstico <strong>de</strong> enfermeda<strong>de</strong>s; en ambas aplicaciones habrá una c<strong>la</strong>se persona<br />

pero sólo <strong>la</strong> segunda tendrá variables miembro para antece<strong>de</strong>ntes clínicos.<br />

Programación Orientada a Objetos 13


Encapsu<strong>la</strong>miento (I)<br />

CONCEPTOS DE POO<br />

“El encapsu<strong>la</strong>miento es el proceso <strong>de</strong> almacenar en un mismo compartimento<br />

los elementos <strong>de</strong> una abstracción que constituyen su estructura y su<br />

comportamiento; sirve para separar <strong>la</strong> interfaz contractual <strong>de</strong> una<br />

abstracción y su imp<strong>la</strong>ntación” (Booch)<br />

• Cada c<strong>la</strong>se “firma un contrato con el exterior” comprometiéndose<br />

a exhibir un <strong>de</strong>terminado comportamiento, pero cómo lo consigue<br />

queda oculto o encapsu<strong>la</strong>do en el interior <strong>de</strong> <strong>la</strong> c<strong>la</strong>se.<br />

“La abstracción y el encapsu<strong>la</strong>miento son <strong>conceptos</strong> complementarios: <strong>la</strong><br />

abstracción se centra en el comportamiento observable <strong>de</strong> un objeto,<br />

mientras que el encapsu<strong>la</strong>miento se centra en <strong>la</strong> implementación que da<br />

lugar a ese comportamiento” (Booch).<br />

Programación Orientada a Objetos 14


Encapsu<strong>la</strong>miento (II)<br />

CONCEPTOS DE POO<br />

• Una <strong>de</strong> <strong>la</strong>s gran<strong>de</strong>s ventajas <strong>de</strong>l encapsu<strong>la</strong>miento es que posibilita<br />

que <strong>la</strong> implementación <strong>de</strong> un objeto se pueda cambiar sin afectar<br />

a <strong>la</strong>s aplicaciones que lo utilizan.<br />

• Ejemplo:<br />

• Supongamos que <strong>la</strong> c<strong>la</strong>se Pi<strong>la</strong> representa a pi<strong>la</strong>s <strong>de</strong> números enteros, y<br />

permite crear una pi<strong>la</strong>, api<strong>la</strong>r un elemento, <strong>de</strong>sapi<strong>la</strong>r un elemento y<br />

consultar el estado <strong>de</strong> <strong>la</strong> pi<strong>la</strong> (vacía o no vacía).<br />

• Internamente se utiliza un vector para almacenar los elementos <strong>de</strong> <strong>la</strong><br />

pi<strong>la</strong>.<br />

• Si se mantiene el comportamiento, se podría cambiar <strong>la</strong><br />

representación interna <strong>de</strong> los datos <strong>de</strong> <strong>la</strong> pi<strong>la</strong> y sustituir el vector por<br />

una lista sin afectar a <strong>la</strong>s aplicaciones que utilizan <strong>la</strong> c<strong>la</strong>se Pi<strong>la</strong>.<br />

• Esto es posible porque <strong>de</strong>s<strong>de</strong> el exterior es invisible <strong>la</strong><br />

implementación <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Pi<strong>la</strong>.<br />

Programación Orientada a Objetos 15


Herencia (I)<br />

CONCEPTOS DE POO<br />

• La herencia es el mecanismo que permite <strong>de</strong>finir una c<strong>la</strong>se<br />

(subc<strong>la</strong>se) a partir <strong>de</strong> otra c<strong>la</strong>se (superc<strong>la</strong>se), <strong>de</strong> manera que <strong>la</strong><br />

subc<strong>la</strong>se hereda <strong>la</strong> estructura (estado) <strong>de</strong> <strong>la</strong> superc<strong>la</strong>se a través<br />

<strong>de</strong> <strong>la</strong>s variables, y hereda el comportamiento a través <strong>de</strong> los<br />

métodos.<br />

• Por ejemplo, si se <strong>de</strong>fine <strong>la</strong> superc<strong>la</strong>se Coche con <strong>la</strong>s variables para<br />

almacenar el Nº <strong>de</strong> marchas, <strong>la</strong> velocidad actual, y <strong>la</strong> marcha actual, y<br />

los métodos que permiten arrancar, acelerar, frenar y cambiar <strong>de</strong><br />

marcha, se pue<strong>de</strong> construir <strong>la</strong> subc<strong>la</strong>se CocheCarreras a partir <strong>de</strong><br />

Coche utilizando <strong>la</strong> herencia. De esta manera, <strong>la</strong> c<strong>la</strong>se CocheCarreras<br />

hereda <strong>la</strong>s variables y los métodos <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Coche.<br />

Programación Orientada a Objetos 16


Herencia (II)<br />

CONCEPTOS DE POO<br />

• Habitualmente una subc<strong>la</strong>se aumenta o re<strong>de</strong>fine <strong>la</strong> estructura y el<br />

comportamiento <strong>de</strong> su superc<strong>la</strong>se.<br />

• Por ejemplo,<br />

• Se <strong>de</strong>fine <strong>la</strong> superc<strong>la</strong>se Reloj con variables para almacenar <strong>la</strong> hora y <strong>la</strong><br />

fecha actuales, y los métodos que permiten fijar <strong>la</strong> hora y fijar al fecha.<br />

• Se pue<strong>de</strong> construir <strong>la</strong> subc<strong>la</strong>se RelojDespertador a partir <strong>de</strong> Reloj<br />

utilizando <strong>la</strong> herencia.<br />

• La c<strong>la</strong>se RelojDespertador aumenta el comportamiento <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Reloj<br />

ya que es capaz <strong>de</strong> emitir una a<strong>la</strong>rma a una hora previamente prefijada,<br />

para ello, <strong>la</strong> c<strong>la</strong>se RelojDespertador aumenta <strong>la</strong> estructura con una<br />

variable para almacenar <strong>la</strong> hora <strong>de</strong> <strong>la</strong> a<strong>la</strong>rma, otra para a<strong>la</strong>macenar el<br />

estado <strong>de</strong> <strong>la</strong> a<strong>la</strong>rma (activada/<strong>de</strong>sactivada) y los métodos que permiten<br />

fijara <strong>la</strong> hora <strong>de</strong> <strong>la</strong> a<strong>la</strong>rma y activar<strong>la</strong> o <strong>de</strong>sactivar<strong>la</strong>.<br />

• Por ejemplo,<br />

• Se <strong>de</strong>fine <strong>la</strong> superc<strong>la</strong>se Polígono con distintas variables y métodos, entre<br />

los cuales está el método que permite calcu<strong>la</strong>r el área <strong>de</strong>l polígono.<br />

• Se <strong>de</strong>finen <strong>la</strong>s subc<strong>la</strong>ses Triángulo y Pentágono<br />

• En cada una <strong>de</strong> el<strong>la</strong>s <strong>la</strong> fórmu<strong>la</strong> matemática para el cálculo <strong>de</strong>l área es<br />

diferente. El método <strong>de</strong> <strong>la</strong> superc<strong>la</strong>se Figura que calcule el área <strong>de</strong>l<br />

polígono <strong>de</strong>berá “re<strong>de</strong>finirse” en cada una <strong>de</strong> <strong>la</strong>s subc<strong>la</strong>ses.<br />

Programación Orientada a Objetos 17


Herencia (III)<br />

CONCEPTOS DE POO<br />

• Que una c<strong>la</strong>se sea subc<strong>la</strong>se <strong>de</strong> una superc<strong>la</strong>se significa (semántica)<br />

que es un caso especial <strong>de</strong> <strong>la</strong> misma y por eso a esta re<strong>la</strong>ción entre<br />

c<strong>la</strong>ses se <strong>la</strong> conoce con el nombre “es-un”. Por ejemplo:<br />

• Un coche <strong>de</strong> carreras “es-un” coche.<br />

• Un árbol binario “es-un” árbol.<br />

• Un triángulo “es-un” polígono.<br />

• Una nevera “es-un” electrodoméstico.<br />

• La herencia genera una jerarquía <strong>de</strong> generalización/especialización<br />

en <strong>la</strong> que una subc<strong>la</strong>se especializa el comportamiento o <strong>la</strong> estructura<br />

más general <strong>de</strong> su superc<strong>la</strong>se.<br />

• La especialización consistirá en el aumento <strong>de</strong> <strong>la</strong> estructura y/o el<br />

comportamiento, su re<strong>de</strong>finición o su aumento y re<strong>de</strong>finición.<br />

• La subc<strong>la</strong>se RelojDespertador <strong>de</strong> ejemplos anteriores aumenta <strong>la</strong><br />

estructura y el comportamiento <strong>de</strong> <strong>la</strong> superc<strong>la</strong>se Reloj.<br />

• La subc<strong>la</strong>ses Triángulo y Pentágono re<strong>de</strong>finen el comportamiento <strong>de</strong> <strong>la</strong><br />

superc<strong>la</strong>se Polígono.<br />

Programación Orientada a Objetos 18


Herencia (IV)<br />

CONCEPTOS DE POO<br />

• Se pue<strong>de</strong>n distinguir distintos tipos <strong>de</strong> herencia en cuanto al<br />

número <strong>de</strong> superc<strong>la</strong>ses <strong>de</strong> una subc<strong>la</strong>se:<br />

• Herencia simple: una subc<strong>la</strong>se hereda so<strong>la</strong>mente <strong>de</strong> una superc<strong>la</strong>se.<br />

• Herencia múltiple: una subc<strong>la</strong>se hereda <strong>de</strong> más <strong>de</strong> una superc<strong>la</strong>se.<br />

• Este tipo <strong>de</strong> herencia es conceptualmente correcta pero introduce<br />

ciertas complejida<strong>de</strong>s en los lenguajes <strong>de</strong> <strong>programación</strong>.<br />

• Por ejemplo, pue<strong>de</strong> ocurrir que una subc<strong>la</strong>se here<strong>de</strong> <strong>de</strong> dos superc<strong>la</strong>ses<br />

que tienen atributos o métodos con el mismo nombre. Esta colisión <strong>de</strong><br />

nombres se resuelve <strong>de</strong> distinta manera en los lenguajes orientados a<br />

<strong>objetos</strong>:<br />

– en Java no se permite <strong>la</strong> herencia múltiple,<br />

– en C++ sí se permite pero utilizando calificación explícita.<br />

• Es fundamental seña<strong>la</strong>r que <strong>la</strong> herencia no se limita a un número<br />

<strong>de</strong>terminado <strong>de</strong> niveles por lo que todas los <strong>objetos</strong> <strong>de</strong> una<br />

aplicación heredarán <strong>de</strong> <strong>la</strong>s superc<strong>la</strong>ses más altas <strong>de</strong> <strong>la</strong> jerarquía<br />

<strong>de</strong> <strong>la</strong>s que here<strong>de</strong>n directa o indirectamente.<br />

Programación Orientada a Objetos 19


Ligadura estática y dinámica<br />

CONCEPTOS DE POO<br />

• En los lenguajes <strong>de</strong> poo objeto <strong>de</strong> este curso, aparecen los<br />

siguientes <strong>conceptos</strong> re<strong>la</strong>cionados con el momento en el que los<br />

nombres se ligan con sus tipos:<br />

• Ligadura (en<strong>la</strong>ce) estática o temprana: se fijan los tipos <strong>de</strong> todas<br />

<strong>la</strong>s variables y expresiones en tiempo <strong>de</strong> compi<strong>la</strong>ción.<br />

• Ligadura (en<strong>la</strong>ce) dinámica o tardía: los tipos <strong>de</strong> <strong>la</strong>s variables y<br />

expresiones no se conocen hasta el momento <strong>de</strong> <strong>la</strong> ejecución.<br />

Programación Orientada a Objetos 20


Polimorfismo (I)<br />

CONCEPTOS DE POO<br />

• Es <strong>la</strong> característica más potente <strong>de</strong> estos lenguajes que nace <strong>de</strong> <strong>la</strong><br />

interacción <strong>de</strong> <strong>la</strong> herencia y el en<strong>la</strong>ce dinámico.<br />

• Respecto al en<strong>la</strong>ce dinámico:<br />

• Es importante seña<strong>la</strong>r que esta técnica tiene interés cuando variables<br />

<strong>de</strong> un tipo pue<strong>de</strong>n almacenar <strong>objetos</strong> <strong>de</strong> otros tipos.<br />

• Esto sólo está permitido en poo cuando <strong>la</strong> variable que almacenará<br />

<strong>objetos</strong> <strong>de</strong> distintos tipos es <strong>de</strong> una c<strong>la</strong>se más general.<br />

Programación Orientada a Objetos 21


Polimorfismo (II)<br />

CONCEPTOS DE POO<br />

• Expliquemos ese concepto mediante un ejemplo:<br />

• Se <strong>de</strong>fine <strong>la</strong> superc<strong>la</strong>se Polígono con el método área que permite<br />

calcu<strong>la</strong>r el área <strong>de</strong>l polígono.<br />

• Se <strong>de</strong>finen <strong>la</strong>s subc<strong>la</strong>ses Triángulo y Pentágono, y en cada una <strong>de</strong> el<strong>la</strong>s<br />

se re<strong>de</strong>fine el método área: hay distintas versiones <strong>de</strong>l método área.<br />

• Un programa que utilice esta jerarquía <strong>de</strong> c<strong>la</strong>ses, pue<strong>de</strong> <strong>de</strong>c<strong>la</strong>rar una<br />

variable <strong>de</strong> tipo Polígono, supongamos que se l<strong>la</strong>ma mi_poligono.<br />

• Como Polígono es una c<strong>la</strong>se más general queTriángulo y Pentagono, <strong>la</strong><br />

variable mi_poligono pue<strong>de</strong> almacenar <strong>objetos</strong> <strong>de</strong> estas dos últimas<br />

c<strong>la</strong>ses.<br />

• Supongamos que, durante <strong>la</strong> ejecución <strong>de</strong>l programa, a mi_poligono se le<br />

asigna un objeto <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Triángulo.<br />

• mi_poligono, ya que “es un objeto”, pue<strong>de</strong> recibir mensajes <strong>de</strong> otros<br />

<strong>objetos</strong>; cualquier mensaje que invoque el método área <strong>de</strong> mi_poligono<br />

invocará en este instante, <strong>la</strong> versión implementada en <strong>la</strong> c<strong>la</strong>se Triángulo<br />

• Si posteriormente a mi_poligono se le asigna un objeto <strong>de</strong> tipo<br />

Pentágono, cualquier mensaje que invoque el método area <strong>de</strong><br />

mi_poligono invocará <strong>la</strong> versión <strong>de</strong>l método implementada en Pentágono<br />

Programación Orientada a Objetos 22


Re<strong>la</strong>ciones entre <strong>objetos</strong> (I)<br />

CONCEPTOS DE POO<br />

• Se pue<strong>de</strong> mo<strong>de</strong><strong>la</strong>r <strong>la</strong>s re<strong>la</strong>ciones que se i<strong>de</strong>ntifiquen entre <strong>la</strong>s<br />

c<strong>la</strong>ses. Estas re<strong>la</strong>ciones pue<strong>de</strong>n distinguirse por su significado o<br />

semántica. Por ejemplo:<br />

• Un empleado trabaja para una compañía.<br />

Existe un re<strong>la</strong>ción entre <strong>la</strong> c<strong>la</strong>se Empleado y <strong>la</strong> c<strong>la</strong>se Compañía.<br />

• Una frase pertenece a un párrafo.<br />

Existe una re<strong>la</strong>ción entre <strong>la</strong> c<strong>la</strong>se Frase y <strong>la</strong> c<strong>la</strong>se Párrafo.<br />

• Un país tiene muchas ciuda<strong>de</strong>s.<br />

Existe un re<strong>la</strong>ción entre <strong>la</strong> c<strong>la</strong>se País y <strong>la</strong> c<strong>la</strong>se Ciudad.<br />

• Una ventana tiene un menú.<br />

Existe una re<strong>la</strong>ción entre <strong>la</strong>s c<strong>la</strong>se Ventana y <strong>la</strong> c<strong>la</strong>se Menú.<br />

Programación Orientada a Objetos 23


Re<strong>la</strong>ciones entre <strong>objetos</strong> (II)<br />

CONCEPTOS DE POO<br />

• Multiplicidad: especifica el número <strong>de</strong> instancias <strong>de</strong> una c<strong>la</strong>se que<br />

pue<strong>de</strong>n estar re<strong>la</strong>cionadas con una única instancia <strong>de</strong> una c<strong>la</strong>se<br />

asociada.<br />

• Un empleado trabaja para una compañía.<br />

• Con una única instancia <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Empleado se re<strong>la</strong>ciona una instancia <strong>de</strong><br />

<strong>la</strong> c<strong>la</strong>se Compañía (siempre y cuando un empleado solo pueda trabajar en<br />

una compañía).<br />

• Con una única instancia <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Compañía se re<strong>la</strong>cionan varias<br />

instancias <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Empleado.<br />

• Las personas tiene acciones <strong>de</strong> <strong>la</strong>s empresas.<br />

• Con una única instancia <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Empresa se re<strong>la</strong>cionan varias<br />

instancias <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Persona..<br />

• Con una única instancia <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Persona se re<strong>la</strong>cionan varias instancias<br />

<strong>de</strong> <strong>la</strong> c<strong>la</strong>se Compañía.<br />

• Los países tienen una ciudad como capital<br />

• Con una única instancia <strong>de</strong> <strong>la</strong> c<strong>la</strong>se País se re<strong>la</strong>ciona una instancia <strong>de</strong> <strong>la</strong><br />

c<strong>la</strong>se Ciudad.<br />

• Con una única instancia <strong>de</strong> <strong>la</strong> c<strong>la</strong>se Ciudad se re<strong>la</strong>ciona una instancia <strong>de</strong> <strong>la</strong><br />

c<strong>la</strong>se País.<br />

Programación Orientada a Objetos 24


Re<strong>la</strong>ciones entre <strong>objetos</strong> (III)<br />

CONCEPTOS DE POO<br />

• Las re<strong>la</strong>ciones entre los <strong>objetos</strong> se pue<strong>de</strong>n c<strong>la</strong>sificar <strong>de</strong> acuerdo<br />

a su semántica:<br />

• Generalización<br />

• Re<strong>la</strong>ción <strong>de</strong> tipo “es-un” (herencia).<br />

• Un árbol binario “es-un” árbol.<br />

• Un triángulo “es-un” polígono.<br />

• Una nevera “es-un” electrodoméstico.<br />

• Asociación<br />

• Es una re<strong>la</strong>ción que <strong>de</strong>scribe vínculos entre <strong>objetos</strong>.<br />

• Un País tiene muchas Ciuda<strong>de</strong>s.<br />

• Un Cliente tiene una o más Cuentas (bancarias)<br />

• Agregación<br />

• Es una re<strong>la</strong>ción <strong>de</strong> tipo “todo-parte”.<br />

• Realmente <strong>la</strong> diferencia entre una re<strong>la</strong>ción <strong>de</strong> agregación y una <strong>de</strong><br />

asociación es una cuestión <strong>de</strong> “preferencia” por parte <strong>de</strong>l analista.<br />

• Una Ca<strong>de</strong>na (comercio) tiene varios Locales.<br />

Programación Orientada a Objetos 25


Re<strong>la</strong>ciones entre <strong>objetos</strong> (IV)<br />

CONCEPTOS DE POO<br />

• Composición<br />

• Es una re<strong>la</strong>ción <strong>de</strong> tipo “todo-parte” más fuerte que <strong>la</strong> agregación.<br />

• Es simi<strong>la</strong>r a <strong>la</strong>s re<strong>la</strong>ciones <strong>de</strong> composición físicas.<br />

• Los tiempos <strong>de</strong> vida <strong>de</strong> <strong>la</strong>s partes y el todo coinci<strong>de</strong>n.<br />

• Una parte no pue<strong>de</strong> pertenecer a dos composiciones al mismo tiempo.<br />

• El todo es responsable <strong>de</strong> <strong>la</strong> creación y <strong>de</strong> <strong>la</strong> <strong>de</strong>strucción <strong>de</strong> <strong>la</strong>s partes.<br />

• Una C<strong>la</strong>se tiene varios Atributos.<br />

• Un Pedido tiene varias Lineas.<br />

• Un Círculo está formado por muchos Puntos.<br />

• Una Ventana tiene una Barra <strong>de</strong> título y dos Scrollbar.<br />

• Depen<strong>de</strong>ncia<br />

• Es un aspecto semántico que se pue<strong>de</strong> i<strong>de</strong>ntificar en muchos tipos <strong>de</strong><br />

re<strong>la</strong>ciones y se refiere al hecho <strong>de</strong> que los cambios en unos <strong>objetos</strong><br />

afectan a otros.<br />

Programación Orientada a Objetos 26


Re<strong>la</strong>ciones entre <strong>objetos</strong> (V)<br />

CONCEPTOS DE POO<br />

• Variables miembro <strong>de</strong> una re<strong>la</strong>ción y c<strong>la</strong>ses <strong>de</strong> asociación: <strong>de</strong><br />

forma simi<strong>la</strong>r a <strong>la</strong> manera en <strong>la</strong> que <strong>la</strong>s variables miembro <strong>de</strong> una<br />

c<strong>la</strong>se <strong>de</strong>scriben su estructura, hay ocasiones en <strong>la</strong>s que existe<br />

cierta información relevante <strong>de</strong> una re<strong>la</strong>ción entre c<strong>la</strong>ses<br />

• Las re<strong>la</strong>ciones pue<strong>de</strong>n especificar variables miembro para<br />

contener esta información.<br />

• En este caso, pue<strong>de</strong> resultar conveniente, <strong>de</strong>finir una c<strong>la</strong>se para<br />

contener esa estructura.<br />

• A estas c<strong>la</strong>ses se <strong>la</strong>s conoce como c<strong>la</strong>ses <strong>de</strong> asociación<br />

• Por ejemplo.<br />

• En el contexto <strong>de</strong> una biblioteca, pue<strong>de</strong>n existir dos c<strong>la</strong>ses Libro y<br />

Cliente que estén re<strong>la</strong>cionadas mediante una asociación Préstamo.<br />

• Es posible que, para <strong>la</strong> biblioteca, sea relevante tener constancia <strong>de</strong><br />

<strong>la</strong> fecha <strong>de</strong> inicio y finalización <strong>de</strong>l préstamo para po<strong>de</strong>r establecer<br />

posibles sanciones por entregas retrasadas.<br />

• Pue<strong>de</strong> ser conveniente <strong>de</strong>finir para <strong>la</strong> re<strong>la</strong>ción Préstamo <strong>la</strong> c<strong>la</strong>se<br />

Préstamo que tendrá <strong>la</strong>s variables miembros necesarias, por ejemplo,<br />

Fecha_inicio y Fecha_fin.<br />

Programación Orientada a Objetos 27


UML (I)<br />

CONCEPTOS DE POO<br />

• Es un lenguaje <strong>de</strong> mo<strong>de</strong><strong>la</strong>do visual <strong>de</strong> propósito general que se<br />

utiliza para especificar, visualizar, construir y documentar los<br />

componentes <strong>de</strong> un sistema software.<br />

• Ha sido adoptado con generalidad en el ámbito <strong>de</strong>l <strong>de</strong>sarrollo <strong>de</strong><br />

software orientado a <strong>objetos</strong>.<br />

• Algunos elementos:<br />

• C<strong>la</strong>ses<br />

• Objetos<br />

• Re<strong>la</strong>ciones<br />

• Multiplicidad<br />

• Diagramas <strong>de</strong> c<strong>la</strong>ses<br />

• Diagramas <strong>de</strong> <strong>objetos</strong><br />

Programación Orientada a Objetos 28

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

Saved successfully!

Ooh no, something went wrong!