La herencia.docx
-
Upload
esthercita-hc -
Category
Documents
-
view
217 -
download
0
Transcript of La herencia.docx
-
7/24/2019 La herencia.docx
1/61
4 La herencia, ms aumento de la ambigedad
ndice
4. La herencia, ms aumento de la ambigedad........................................................103
Sobre el captulo....................................................................................................104Motivaciones.....................................................................................................104
b!etivo.............................................................................................................104
"ontenido..........................................................................................................1044.1 La herencia....................................................................................................10#
4.$ %l polimor&ismo.............................................................................................10'
4.3 La herencia como ta(onoma.........................................................................10)
4.4 "uriosidades biol*gicas de la herencia so&t+are...........................................104.# La herencia - la evoluci*n e/uivocada del so&t+are..................................10
4.' 2elegar en ve de heredar.............................................................................11$4.) %l principio de sustituci*n de Lisov............................................................1144. La evoluci*n segura del so&t+are..................................................................11#
4. %l aporte del principio de sustituci*n, la ambigedad...................................11)
4.10 "ondiciones del principio de sustituci*n.......................................................114.11 "ontrae!emplo de la herencia. %l cuadrado no es un rectngulo...................11
4.1$ Las clases abstractas......................................................................................1$$
4.13 Las clases generales, una soluci*n alternativa, pero5.................................1$4
4.14 Las clases particulares, bene&icios - problema..............................................1$'4.1# La ambigedad, soluci*n al problema de la diversidad................................1$)
4.1' La ambigedad es la clave, no la divisi*n.....................................................1$
4.1) La herencia m6ltiple......................................................................................1$4.1 7pro(imaci*n al patr*n adaptador................................................................131
4.1 La herencia vista desde el c*digo, un e!emplo..............................................131
4.$0 %l polimor&ismo en 8ava................................................................................13'4.$1 %!ercicio.........................................................................................................143
9na soluci*n..........................................................................................................144
4.$$ tro e!ercicio.................................................................................................14)La b6s/ueda de la plasticidad, un cambio del dise:o............................................14
La soluci*n del rectngulo.....................................................................................1#1
;ibliogra&a............................................................................................................1#$
-
7/24/2019 La herencia.docx
2/61
Sobre el captulo
Motivaciones
La herencia ha sido y es un canto de sirena en los objetos. Quien lo
escucha con odos ingenuos se hunde con el sistema. Parece que laherencia es la fuente de ahorro de cdigo, de la facilidad de modicaciny extensin de los programas, pero realmente es lo contrario, salo quese utilice con el papel y la forma adecuada. !l papel adecuado de laherencia es como medio de aumento de la ambig"edad y la formaadecuada de uso es mediante el polimorsmo.
Objetivo
!l objetio del presente captulo es que los alumnos comprendan#
$ !l concepto de herencia, su papel faorable y sus papeles
perjudiciales% !l concepto de polimorsmo
& Que es mejor delegar que heredar
' !l principio de sustitucin de Lis(o, como forma segura y)til de la herencia
* Las clases abstractas
+ Que la ambig"edad es la clae, no la diisin
Contenido
La primera parte profundia en la herencia, sus aspectos buenos ymalos, y recomienda que es preferible delegar que heredar. -e enunciatambin el concepto de polimorsmo.
La segunda parte estudia con detalle el principio de sustitucin deLis(o, sus condiciones y cmo un cuadrado no es un rect/ngulo, entrminos de la herencia soft0are.
La tercera parte se dedica a las clases abstractas1 a la ambig"edadcomo solucin de la diersidad y, en general, como solucin m/spoderosa que el limitado principio de diide y encer/s.
La cuarta parte discute la herencia m)ltiple, sus efectos nefastosactuales y las restrictias condiciones donde es faorable, por ejemplo,en el patrn adaptador.
-
7/24/2019 La herencia.docx
3/61
1 La herencia
La herencia es uno de los cantos de sirenas del enfoque de
objetos. -e dice mucho de sus faores y muy poco de sus peligros. Poresta causa primero se estudiar/ la denicin y los peligros, y despus se
er/ la forma de obtener los faores de la herencia.
2esde el punto de ista formal, 34ooch 5'6 establece que#
La herenciaes una relacin entre clases donde una clase comparte
la estructura o comportamiento denido en otra clase 7herencia
simple8 o en m/s clases 7herencia m)ltiple8. La herencia dene
una jerarqua 9es-un: entre clases, en la cual una subclase hereda
de una o m/s clases generaliadas1 una subclase tpicamente
especialia su superclase a;adiendo o redeniendo la estructura y
el comportamiento.
La
-
7/24/2019 La herencia.docx
4/61
!n la
-
7/24/2019 La herencia.docx
5/61
Los clientes de una operacin polimrca la inocan a tras del
mismo mensaje, por ejemplo v.m2, pero el comportamiento depende del
objeto que exprese la ariable v. = continuacin se muestra el
pseudocdigo y resultado de una operacin que utilia el sericio
polimrco m2ofrecido por objetos de las clases =, 4 y >.
vesA declaracin de la ariable v
v O:A se asigna a la ariable vun objeto de la claseA
v:m2 mensaje al objeto asignado a vpara que ejecute m2
-e ejecuta la operacin m2de la claseA
vesA declaracin de la ariable v
v O:C se asigna a la ariable vun objeto de la clase C
v.m2 mensaje al objeto asignado a vpara que ejecute m2
-e ejecuta la operacin m2de la claseAporque la clase > lo utilia
sin redenicin.
vesA declaracin de la ariable v
v O:B se asigna a la ariable vun objeto de la clase B
v.m2 mensaje al objeto asignado a vpara que ejecute m2
-e ejecuta la operacin m2 de la clase B porque la clase B ha
redenido m2.
vesA declaracin de la ariable v
v O:C se asigna a la ariable vun objeto de la clase C
v.m4 mensaje al objeto asignado a v para que ejecute m2
-
7/24/2019 La herencia.docx
6/61
!quiocacin# La claseAcarece del mtodo m2.
!n principio, cualquier operacin puede ser polimrca a tras
del mecanismo de herencia, salo las operaciones de creacin de
objetos que por su tarea especca, no pueden ser polimrcas. ?n
constructor crea objetos de una clase y no de otra. @/s adelante se
oler/ a tratar este tema.
% La herencia como ta&onoma
2esde el punto de ista conceptual se podra decir que los objetos
de By Cson ariantes deA. !sta idea permite asociar la herencia con
una relacin jer/rquica 9es un:. !s decir, como un instrumento de
clasicacin, al estilo taxonmico de las ciencias naturales. =bundan los
ejemplos que ilustran la herencia a tras de modelos taxonmicos# la
clase perro es una subclase de la clase mamfero. Pero, en general,
constituye un ejemplo poco afortunado. Primero, porque cualquier
clasicacin es subjetia y siempre admite objeciones, de manera que al
introducir clasicaciones en el soft0are se introducen fuentes de
cambio. -egundo, porque las clasicaciones usuales pueden sercontraproducentes para el sistema soft0are como sucede con el cl/sico
ejemplo del cuadrado y el rect/ngulo, discutido m/s adelante.
4 Curiosidades biol'gicas de la herencia so$t(are
!l sabor biolgico del mecanismo soft0are denominado herencia
se hace explcito en su propio nombre. =lgunos lenguajes se diferencian
y le llaman exensi!n 79extends:8 o implemenaci!n 79implements:8seg)n sea el caso. Aay arias curiosidades asociadas con este
mecanismo.
La herencia soft0are parece un mecanismo 9sexuado: puesto que
un descendiente puede tener arios progenitores. Bista as, la herencia
-
7/24/2019 La herencia.docx
7/61
simple se corresponde con el fenmeno biolgico denominado
partenognesis donde un solo progenitor es capa de crear. Los
descendientes tienen, en general, el mismo sexo que el progenitor. !n la
pr/ctica soft0are es una curiosidad sin trascendencia, aunque de alor
nemotcnico como se er/ despus.
Ctra curiosidad, pero esta e clae, de la 9herencia: soft0are es
que los 9progenitores: soft0are desconocen a sus reto;os, al res de la
mayora de los humanos. !n el enfoque de objetos, las hijas son las que
reconocen a sus madres. La nuea clase se declara hija de alguna clase
ya existente como sucede con el p/jaro cuco insertado en nido ajeno. !n
otros casos los recin nacidos reconocen como progenitor a cualquieraque est presente en el momento de su nacimiento. -i las 9madres:
soft0are tuiesen que declarar a las hijas, habra que modicar la
declaracin 7cdigo8 de la madre cada e que se creara una hija. Por
este motio, la referencia hereditaria es de descendientes hacia
ascendientes, en el soft0are de objetos.
La 9herencia: soft0are es un reDejo extremo del modelo de
Lamarc( donde se heredan los cambios som/ticos. !n la 9herencia:
soft0are, si al progenitor 7superclase8 se le quita o cambia una
propiedad todos sus descendientes pierden o cambian, inmediatamente,
esa propiedad. Lamarc( era contempor/neo de 2ar0in, pero de ideas
diferentes. !sta otra curiosidad tambin es clae en el soft0are. -i la
9madre: soft0are adelgaa 7se le quita alguna propiedad8 todas las
descendientes 7hijas, nietas,E chonas,E8 nacidas o por nacer
adelgaar/n inmediatamente. !n n que, cualquier modicacin en lospredecesores se reDejar/ en los futuros sucesores y se propagar/ a los
Fque ya existenG, hecho que no sucede en ninguna herencia natural.
La propagacin de los cambios puede parecer una irtud de la
herencia, pero realmente es una cat/strofe. !n primer lugar porque
-
7/24/2019 La herencia.docx
8/61
cualquier clase puede ser madre de muchos descendientes sin saberlo1
no hay referencia a ellos. La b)squeda de los descendientes es un
problema laborioso, sobre todo si los esquemas no existen, est/n
desactualiados o no se dispone de un medio autom/tico para hacerlo.
!n segundo lugar, porque cualquier cambio afecta a quienes utilian esa
clase y localiar a los afectados es una tarea mucho m/s difcil de
realiar. @ientras m/s descendientes, mayor ser/ el problema. La
situacin es equialente a una epidemia de cambios y fallos.
) La herencia * la evoluci'n +euivocada- del so$t(are
!l smil biolgico inspira a usar la herencia como una a de
eolucin del soft0are, que se ajusta a las nueas necesidades, a tras
de la creacin de clases hijas que heredan las propiedades de las clases
existente y las modican o a;aden otras propiedades nueas. Parece
que la herencia permite ahorrar cdigo, no tocar lo que ya funciona, y
adem/s, permite que se puedan cambiar muchas clases cambiando una
sola. -on ideas atractias, como las sirenas.
La
-
7/24/2019 La herencia.docx
9/61
igura 4! " #jemplo de herencia
!n la gura slo aparecen los atributos y los mtodos a;adidos o
modicados con respecto a los predecesores. Por ejemplo, la clase #i$a %
a;ade el atributo a4y el mtodo m4. La clase #i$a 2modica el atributo
a2y el mtodo m2, y los declara para diferenciarlos de los predecesores.
La clase &iea % a;ade los atributos a' y a(, y el mtodo m'. Pero
tambin, modica el mtodo m) de la clase "adre, es decir de su
abuela. H por )ltimo, la clase &iea 2modica el mtodo m2 de la clase
#i$a 2, su madre. La descripcin ya es confusa.
La facilidad que parece ofrecer la herencia para la eolucin del
sistema soft0are se puede ealuar en la pr/ctica con la
-
7/24/2019 La herencia.docx
10/61
igura 4! % .epetici'n de la igura 4! "
=l er en el cdigo la clase &iea 2, se puede pensar que slo tiene
la propiedad m2, pero no es as. >omo esta clase es hija de #i$a 2, habr/
que buscar y localiar a la clase madre para saber qu propiedades
hereda de ella. ?na e localiada, se sabe que &iea 2 tiene la
propiedad m2 7propia, porque redene a la madre8 y la propiedad a2,
seg)n la madre, #i$a 2. Pero, la historia continua. #i$a 2es hija de "adre.
!ntonces, &iea 2 no est/ casi aca como parece. &iea 2 tiene las
propiedades# m2, propia1 a2 de #i$a 27su madre, que a su e redene a
"adre, la madre de #i$a 28. H tiene tambin, las propiedades a%, a), m%
y m)de "adreporque #i$a 2no las redene.
!n n, con apenas tres clases se pudiera exclamar# 9@adre, el
drama padre:, ttulo de un delicioso enredo teatral de Iardiel Poncela.
@ientras m/s genealoga, m/s calario y mayor probabilidad de
equiocaciones. Por otra parte, si se quiere reutiliar alguna clase hija
habr/ que llearse a la nuea aplicacin, todas las clases antecesoras.
-
7/24/2019 La herencia.docx
11/61
Jesumiendo, la herencia es un potente instrumento de trabajo,
pero peligroso porque puede ocasionar graes efectos negatios seg)n
se ha isto. La herencia ofrece su mayor utilidad y menor riesgo cuando
se emplea para ampliar la capacidad de expresar ambig"edad del
dise;o, seg)n se deria del principio de Lis(o. Para otro tipo de uso es
mejor delegar que heredar.
/ 0elegar en ve de heredar
!sta idea es ieja en el soft0are, ya tiene m/s de quince a;os.
3Jumbaugh 5*6 utili el ejemplo de una pila y una lista, pero se puede
usar el ejemplo de cliente y persona.
-
7/24/2019 La herencia.docx
12/61
una persona: resulta una relacin circunstancial susceptible de cambio.
@a;ana cliente puede ser una empresa o hasta un plutoniano, ahora que
Plutn ha dejado de ser un planeta 7el eterno problema de las
clasicaciones8.
Ko coniene utiliar la herencia para relacionar Clieney *ersona
por arias raones. Primero, porque es preisible que cambie y
cambiar/, seg)n @urphy. -egundo, porque los cambios son m/s
engorrosos dadas las fuertes ligaduras entre Clieney *ersona a causa
de las propiedades que hereda Cliene de *ersona. ercero, porque
conceptualmente es una relacin temporal y la herencia expresa una
relacin permanente.
La relacin de composicin de entre las clases Cliene y *ersona
7una parte de persona es la situacin de cliente8 reduce los
inconenientes citados porque una persona siempre puede estar en la
situacin de cliente, al menos de forma potencial. Por tanto, es una
relacin m/s estable, m/s prxima a la condicin de permanencia que
expresa la composicin, en consecuencia, hay menos posibilidad de
cambio en la relacin. =dem/s, de producirse cambios, seran menos
engorrosos porque la ligadura de Clienehacia *ersonaes mucho m/s
dbil puesto que no hereda nada.
!n e de composicin se pudiera usar una relacin de asociacin,
pero la composicin enfatia la pertenencia exclusia del objeto cliene
al objetopersona que lo contiene. 2e este modo se debe asegurar que
el objeto clienede un objetopersonano se comparta con otro objeto
del sistema. Los lenguajes actuales no suministran esta cualidad, si se
quiere hay que implementarla.
-
7/24/2019 La herencia.docx
13/61
2 #l principio de sustituci'n de Lis3ov
2espus del an/lisis de los muchos problemas de la herencia, el
principio de sustitucin de Lis(o, formulado hace casi dos dcadas,ofrece un camino )til y conable para aproechar los faores de la
herencia.
Literalmente el principio dene, en trminos de una sustitucin
segura, cuando una subclase es un subtipo de una superclase.
9-i para cada objeto O%de tipo +hay un objeto O2de tipo tal
que para todos los programas * denidos en trminos de , el
comportamiento 3interno6 de *no cambia cuando O%es sustituido
por O2, entonces +es un subtipo de .: 3Lis(o M+6
La
-
7/24/2019 La herencia.docx
14/61
La evoluci'n segura del so$t(are
Pero lo interesante es er el principio de sustitucin desde otra
perspectia.
La herencia permite sustituir un objeto por otro, es decir
cambiar una tarea por otra, sin riesgo, siempre que las
subclases sean subtipos de las superclases.
-i tenemos una clase + que hereda de la clase , para usar un
objeto de la clase +dondequiera que se espere un objeto de la clase , yque el sistema siga funcionando correctamente, la condicin es que +
debe ser subtipo de . -i +no es subtipo de no se puede asegurar cu/l
ser/ la consecuencia de la sustitucin.
La relacin de subtipo a tipo admite dise;ar un tipo y despus
especialiarlo sin alterar los nculos del sistema con el tipo. -e facilita la
eolucin del sistema. Por ejemplo, primero dise;ar un tipoApensando
en una tarea general y despus, inentar un subtipo Bque particularice
o especialice esa tarea. C al res, dise;ar un tipo y m/s tarde
conertirlo en un subtipo de otro tipo. La relacin de subtipo a tipo
facilita un antes y un despus sin da;os colaterales.
-
7/24/2019 La herencia.docx
15/61
igura 4! / #voluci'n del so$t(are
La
-
7/24/2019 La herencia.docx
16/61
tanto, se puede modicar la tarea, la funcin del programa, sin alterar su
trabajo. ?na e m/s se consolida la direccin de la ambig"edad como
lnea de dise;o soft0are para conseguir acomodo a los cambios, para
conseguir plasticidad. La
-
7/24/2019 La herencia.docx
17/61
5 #l aporte del principio de sustituci'n, la ambigedad
!l aporte del principio de sustitucin es se;alar el lado 9bueno: de
la herencia y ofrecer una forma segura de usarlo. Pero, cu/l es el lado
9bueno: de la herencia porque antes de estudiar el principio slo sehaban isto lados problem/ticos. !l propio ttulo del principio ofrece la
respuesta# el lado bueno de la herencia es su capacidad de producir
elementos distintos, pero sustituibles. !s decir, la cualidad faorable de
la herencia es su capacidad para elear la ambig"edad en el dise;o y as
facilitar el manejo de la complejidad descriptia y de incertidumbre.
La eolucin, expansin o modicacin del soft0are a tras de la
herencia debe cumplir las condiciones del principio de sustitucin de
Lis(o para eitar dicultades.
16 Condiciones del principio de sustituci'n
!l cumplimiento del principio de sustitucin exige que los mtodos
de las clases deriadas deban mantener las siguientes relaciones con los
mtodos de la clase base#
$ La clase deriada debe tener un mtodo correspondiente a
cada mtodo de la clase base. !ste mtodo puede heredarse
directamente de la clase base o sobrescribirse.
% >ada mtodo de la clase deriada que se corresponda a un
mtodo de la clase base debe requerir lo mismo o menos que la
clase base. !s decir, si se sobrescribe un mtodo heredado de
la clase base, las precondiciones del mtodo deben ser m/s
dbiles o permisias que las del mtodo de la clase base. 2icho
de otro modo, si se sobrescribe en una clase deriada un
mtodo heredado de la clase base se debe garantiar que el
nueo mtodo funcione en las mismas condiciones y recibiendo
-
7/24/2019 La herencia.docx
18/61
los mismos argumentos que el mtodo heredado. !l nueo
mtodo no puede ser m/s restrictio que el mtodo heredado.
& >ada mtodo de la clase deriada que se corresponda a un
mtodo de la clase base debe garantiar lo mismo o m/s que la
clase base. !s decir, si se sobrescribe un mtodo heredado de
la clase base, las postcondiciones del mtodo de las clases
deriada deben ser m/s fuertes o rigurosas que las heredadas
de la clase base. 2icho de otro modo, el mtodo de la clase
deriada no debe comprometerse a ofrecer mayores resultados
o resultados diferentes1 slo debe comprometerse a hacer lo
que hace el mtodo de la clase base, garantiando tambin laspropiedades adicionales. Por ejemplo, si un mtodo de la clase
base deuele un n)mero mayor que el argumento que recibe,
un mtodo de una clase deriada podra deoler un n)mero
primo mayor que el argumento. Pero no estara permitido que el
mtodo de la clase deriada deoliese un n)mero menor o
igual que el argumento.
' !st/ permitido que la clase deriada introduca nueos
mtodos adicionales que no aparecan en la clase base.
Las clases deriadas deben garantiar tambin que se cumplan
todas las restricciones denidas sobre los atributos que hereda de la
clase base. Por ejemplo, si en la clase base se dene un atributo de tipo
entero y se establece una restriccin para que el atributo sea mayor o
igual que cero, la clase deriada debe garantiar que se cumple esta
restriccin y que el atributo en la clase deriada tambin tendr/ siempre
un alor mayor o igual que cero.
>omo podemos er, cumplir con el principio de sustitucin de
Lis(o es f/cil, siempre que no modiquemos ni sobrescribamos los
atributos y mtodos que las clases hijas heredan de sus madres y nos
-
7/24/2019 La herencia.docx
19/61
limitemos slo a a;adir nueos atributos y mtodos adicionales en las
clases hijas.
-i necesitamos modicar en las clases hijas los comportamientos
heredados de sus madres, entonces cumplir con el principio de Lis(o
puede resultar m/s complicado. Puede incluso, que al tratar de cumplir
con el principio, debamos plantearnos si realmente la clase hija debe
heredar de la clase madre.
11 Contraejemplo de la herencia! #l cuadrado no es un rectngulo
?n ejemplo cl/sico de uso peligroso de la herencia es la relacin
entre cuadrado y rect/ngulo, analiada por 4arbara Lis(o en su trabajo
sobre el principio.
2esde el colegio, todos sabemos que un rect/ngulo es una gura
geomtrica de cuatro lados iguales dos a dos. H que un cuadrado /es
unrect/ngulo con todos los lados iguales.
La herencia se suele considerar como una relacin /es un, por
tanto podra parecernos natural que la clase Cuadradoheredase de laclase 0ec1nulo, ya que, al n y al cabo un cuadrado es un caso
particular de rect/ngulo.
La clase 0ec1nulob/sicamente podra tener un par de atributos,
ancho y largo, que son sucientes para denir el rect/ngulo. Kuestra
clase tendra un mtodo esablecerama3oque recibe como argumentos
el ancho y el largo del rect/ngulo que queremos denir.
-
7/24/2019 La herencia.docx
20/61
igura 4! ! Clase .ectngulo
-i la clase Cuadrado hereda de la clase 0ec1nulo, entonces
Cuadrado tendr/ dos atributos, laro y ancho, y un mtodo
esablecerama3oque recibe como argumentos el laro y el anchodel
cuadrado. Ki los atributos ni los mtodos heredados de 0ec1nulo
resultan muy )tiles para la clase Cuadrado, ya que todos sabemos que
en un cuadrado el largo y el ancho son siempre iguales. Para poder
utiliar los atributos y el mtodo heredado tendremos que a;adir
algunas restricciones#
$ el atributo larotendr/ siempre el mismo alor que el atributo
ancho.
% el mtodo esablecerama3otendr/ como precondicin que el
alor del argumento ancho sea igual al alor del argumento
laro. !n caso contrario se lanar/ una excepcin o un mensaje
de error.
-
7/24/2019 La herencia.docx
21/61
igura 4! 5 .elaci'n de herencia entre cuadrado * rectngulo
Preguntmonos ahora que ocurrira si sustituimos la clase
0ec1nulo por la clase Cuadradoen alg)n lugar del cdigo donde se
use 0ec1nulo. Podra un cliente de 0ec1nulotrabajar con Cuadrado
y seguir funcionando La respuesta es no. = menos que el clienteconoca y cumpla las restricciones de Cuadrado, si tratamos de sustituir
Cuadradopor 0ec1nuloel resultado ser/ impredecible.
Qu es lo que est/ ocurriendo en trminos del principio de
sustitucin de Lis(o !l principio no se cumple porque los atributos y
mtodos de Cuadrado son m/s restrictios que los de 0ec1nulo.
Cuadradono es subtipo de 0ec1nulo. Por tanto, si no queremos tener
resultados inesperados no deberamos utiliar la herencia de Cuadradoa
0ec1nulo. #erenciaque, por otra parte, no aporta ninguna entaja al
dise;o, ya que Cuadradonecesita sobrescribir todo lo que hereda de
0ec1nulopara funcionar.
-
7/24/2019 La herencia.docx
22/61
Kuestra intuicin nos ha lleado a pensar que Cuadrado debera
heredar de 0ec1nulo porque conceptualmente un cuadrado es un
rect/ngulo. -in embargo, hemos isto que esta clasicacin, a pesar de
ser cierta, no aporta ninguna entaja a nuestro dise;o y s puede
traernos serios inconenientes. La herencia puede ser contradictoria con
la clasicacin usual. !n los dise;os orientados a objetos, copiar la
realidad o dejarse arrastrar por ella, no siempre es una buena idea. ?n
cuadrado es un rect/ngulo en geometra, pero la clase Cuadradono es
un subtipo de la clase 0ec1nuloen el soft0are.
1" Las clases abstractas
!l ejemplo del cuadrado y el rect/ngulo demuestra que la relacin
geomtrica de tipo y subtipo entre rect/ngulo y cuadrado no es aplicable
a una relacin soft0are entre la clase 0ec1nulo y la clase Cuadrado. !l
unierso soft0are y el unierso ajeno al soft0are son uniersos distintos.
!n el unierso soft0are, si se quiere conseguir el intercambio
seguro de objetos cuadrados y objetos rect/ngulos, hay que aproechar
la relacin tipo R subtipo, pero de otra forma# deniendo a las clasesCuadrado y 0ec1nulo como subtipos 7hermanos8 de un tipo que se
podra denominar iura. !n la
-
7/24/2019 La herencia.docx
23/61
La relacin de la
-
7/24/2019 La herencia.docx
24/61
ejemplo, la clase iura. ambin se les llama clases viruales o
di6eridas. @ientras que una clase es la denicin de un conjunto
de objetos, una clase abstracta es la denicin de un conjunto de
clases. !s una abstraccin de abstracciones que elea la
capacidad de expresar ambig"edad del enfoque estructurado. La
carencia de cdigo, en al menos un mtodo, impide que existan
objetos de una clase abstracta. !n ?@L las clases abstractas se
escriben con letra cursia.
!n ?@L se denomina iner6a7a una coleccin de operaciones que
tiene un nombre y que se usa para especicar un sericio de una
clase. !s un paso m/s eleado en el camino de la ambig"edad enforma de abstraccin. ?na iner6a7carece de atributos. ?@L reala
la importancia de este tipo de abstraccin al darle un nombre
propio, pero la idea es anterior y coincide con la idea de clase
absraca puraque utilian otros autores. !l problema de usar el
nombre de iner6a7es que aumenta la polisemia de esta palabra.
-
7/24/2019 La herencia.docx
25/61
facilitar que la clase
-
7/24/2019 La herencia.docx
26/61
?n paso m/s all/ conduce a la clase polgono irregular 7por qu
limitarse al regular8 que se consigue con reajustes de atributos y
mtodos 7cada e m/s generales8. H continuando con la tentacin 7para
qu tantas clases8, se podra disponer de una )nica clase iura87para
distinguirla de la otra8 capa de operar con cualquier gura geomtrica.
La
-
7/24/2019 La herencia.docx
27/61
Ctra ariante sera denir los atributos de 0ec1nuloen trminos
de los rtices de la diagonal y el mtodopinar, de la clase 0ec1nulo,
pintara la gura inscrita en esos rtices, sin distinguir cuadrado de
rect/ngulo. La responsabilidad de distinguir se traspasa a la persona,
cliente de la clase 0ec1nulo, que debe calcular las coordenadas del
otro rtice, tanto para el rect/ngulo como para el cuadrado. -i se
equioca en la operacin de c/lculo la gura sale mal. La situacin es
peor si la clase *araleloramo se utilia tambin para cuadrados y
rect/ngulos. Ko obstante, puede ser )til disponer de una clase donde la
gura se describa a tras de rtices o puntos.
>om)nmente, mientras mayor sea la generalidad de la clase querealia la tarea, m/s se complica su desarrollo, mantenimiento,
manipulacin, en n todo. !l desarrollo progresio de una clase como
iuraU signica modicar una y otra e el interior de la clase y a
quienes usan la clase. !l desarrollo de una e obliga a enfrentarse a un
problema mayor que el problema de enfrentarse cada e con una gura
simple. !l mantenimiento para corregir y perfeccionar una clase como
iura8aborda un mecanismo m/s complejo montado en una sola piea
donde todo est/ relacionado con todo. 2e la manipulacin ya se ha
hablado. Precisa informacin redundante cuando opera con casos
particulares m/s simples, muchas eces exige trabajo extra de quienes
usan la clase y por estas dos causas es m/s susceptible a
equiocaciones.
La clase iura8 es una clase concreta que implementa una
herramienta general. !s como una piedra que sire para claar, cortar,lanar, dibujar, calar,Eseg)n se use. Aay que soportar un peso
innecesario cuando se usa para cortar y hay que tener cuidado de no
cortarse, al usar la piedra para claar. =dem/s, cuando se trate de
mejorar alguno de sus usos, se puede perjudicar otro porque todos ellos
est/n muy ligados, en la misma piedra. Los humanos fueron
-
7/24/2019 La herencia.docx
28/61
especialiando los distintos usos de la piedra en instrumentos
particulares. ambin coniene hacerlo en el soft0are.
14 Las clases particulares, bene$icios * problema
Los instrumentos particulares slo exigen la informacin especca
que necesitan1 facilitan el desarrollo porque se pueden construir y
probar uno a uno, o al unsono distribuyendo el trabajo de desarrollo de
los distintos instrumentos1 se puede modicar cualquiera de ellos sin
afectar a los restantes. Nncluso, se puede llegar a construir un
instrumento muy general, como iura8, para resoler situaciones muy
generales, pero como un instrumento m/s de uso especco en esas
situaciones. -in embargo, a eces todas estas entajas quedan
opacadas por el problema de la diersidad. -ucede con frecuencia en el
soft0are.
1) La ambigedad, soluci'n al problema de la diversidad
!l enfoque de objetos facilita la resolucin del problema de la
diersidad a tras de sus recursos para expresar y manejar
ambig"edad. La clase iuraes una abstraccin que oculta u omite la
diersidad 7las clases8 pero que iabilia el acceso a esa diersidad.
-
7/24/2019 La herencia.docx
29/61
La
-
7/24/2019 La herencia.docx
30/61
asociado con cohesin y acoplamiento. La simplicacin se obtiene
mediante la especicidad y la introduccin de ambig"edad.
La clase iura8es un mdulo cohesio con bajo acoplamiento. !s
un mdulo bien dise;ado. -u diisin en partes m/s peque;as no dara
lugar a los subtipos porque la diisin de un mecanismo general en
troos no produce mecanismos particulares. Nncluso, la propia clase
iura8podra ser un subtipo m/s de oexistira el supuesto todo
y las partes al mismo tiempo.
La fuente de los subtipos es la especicidad, lo indiidual y
particular de cada gura, que existe posiblemente antes de lo general
de cualquier gura. !l cuadrado, el crculo y el tri/ngulo existieron como
concepto antes que el concepto general de gura.
La fuente de la clase iuraes la abstraccin, la expresin de lo
com)n a todas las guras del sistema soft0are. La introduccin de este
elemento ambiguo es la decisin de dise;o que permite homogeneiar
la diersidad, disponer de un acceso com)n a todas las clases
particulares.
La ambig"edad que expresa la abstraccin simplica la
complejidad descriptia porque reduce la cantidad de elementos que se
necesitan para describir el dise;o. La existencia de la clase iura
describe que el sistema se ocupa de guras. -in esta clase habra que
decir que el sistema se ocupa de cuadrados, rect/ngulos, E =dem/s, la
ambig"edad simplica tambin la complejidad de incertidumbre porque
simplica el trabajo de reajuste presente y futuro del sistema.
-
7/24/2019 La herencia.docx
31/61
12 La herencia m:ltiple
Aasta ahora se ha estudiado la herencia simple de un solo
progenitor 7partenogentica8, pero tambin existe la herencia de arios
progenitores.
-e denomina herencia m9liplea la herencia donde una subclase
tiene m/s de una superclase directa. La
-
7/24/2019 La herencia.docx
32/61
=lgunos textos utilian este mecanismo para obtener elementos
soft0are hbridos. Ctros, como recurso de clasicacin mixta. Pero, si la
herencia simple es peligrosa, la herencia m)ltiple es m)ltiplemente
peligrosa. Por ejemplo, a menudo se ilustra la herencia m)ltiple a tras
de las superclases Barcoy Auom!vilpara obtener la claseAnfbio. ?n
problema es la distorsin del sujeto que se pretende representar porque
el anbio es barco cuando est/ en el agua y automil cuando est/ en
tierra, mientras que la clase Anfbio es Barco y Auom!vil a la e
porque la herencia es un mecanismo est/tico 7en tiempo de
compilacin8.
-i el mecanismo hereditario fuese din/mico, en tiempo deejecucin, un objeto pudiera ser de una clase ahora y de otra despus.
Ko habra confusiones porque no sera de dos clases en el mismo
momento. =unque los lenguajes comerciales de programacin orientada
a objetos todaa no incorporan una herencia din/mica, es posible
conseguir efectos semejantes con algunas tcnicas, referidas por 3
-
7/24/2019 La herencia.docx
33/61
igura 4! 14 ;erencia m:ltiple con problema!
La dicultad de la clase allir!n est/ en el atributo bocaporque
tiene dos especicaciones distintas. ?na manera de resoler el
solapamiento gentico es con la herencia din/mica. Ctra, sera poder
9marcar: la propiedad que se desea heredar, pero no est/ permitido en
los lenguajes comerciales actuales. ?na tercera manera de eitar el
solapamiento es eitar que las superclases aporten elementos en
posible conDicto.
!l lenguaje Iaa adopta esta )ltima solucin de forma radical. -lo
permite la herencia m)ltiple de las denominadas iner6aces 7clases
abstractas puras que contienen porque suprime los atributos y reduce
las operaciones a simples declaraciones. La implementacin de las
operaciones, en clase que hereda, resuele las colisiones potenciales.
!sta modalidad de la herencia m)ltiple es una forma segura y )til para
dotar a una clase con m/s de una cara 7interfa8.
-
7/24/2019 La herencia.docx
34/61
1
-
7/24/2019 La herencia.docx
35/61
15 La herencia vista desde el c'digo, un ejemplo
!n captulos anteriores se dise;aron peque;os sistemas para
trabajar con tri/ngulos, crculos y rect/ngulos. =hora se quiere integrar
estos sistemas en uno solo. = continuacin se muestran los dise;os decada clase.
igura 4! 1/ Clase Crculo
igura 4! 12 Clase >ringulo
-
7/24/2019 La herencia.docx
36/61
igura 4! 1 Clase .ectngulo
Las clases >rculo, Ject/ngulo y ri/ngulo son distintas entre s
porque tienen atributos distintos y comportamientos distintos# un crculo
se pinta de forma distinta que un rect/ngulo y que un tri/ngulo1 tambin
la forma de ampliarlo, reducirlo o moerlo es distinta a la del rect/ngulo
y el tri/ngulo. Pero todas ellas son guras, por tanto se podr/ dise;ar
una abstraccin que exprese la esencia de inters y omita los detalles
que las diferencian. La clase iura, discutida antes, puede ser un puntode partida para este dise;o particular.
Las cabeceras de las operaciones de cada gura coinciden porque
han sido dise;adas con una disciplina, manteniendo un estilo. -i las
cabeceras no coincidieran sera posible aplicar una tcnica de
adaptacin para uniformarlas. La coincidencia es necesaria para
conseguir que las operaciones sean polimrcas cuando se relacionen
con las operaciones homnimas de la clase iura.
-
7/24/2019 La herencia.docx
37/61
igura 4! 15 Clase abstracta igura
!n la nuea clase iurase ha incluido el mtodo concreto borrar;enana, iura,C?rculo, ri1nulo y 0ec1nulo del ejemplo anterior. !l cdigo del
programa completo puede erse en el anexo.
import javax.swing.*;import java.awt.*;import java.awt.event.*;
public class Ventana extends JFrame implements ActionListener{
private Figura figura;
private Janel paneloperaciones! panelfiguras;
private J"utton circulo! rectangulo! triangulo! ampliar! reducir! arriba! abajo! i#$da! dc%a;
public Ventana&' {
//Pintar la ventana vaca set(itle&)intar Figuras)';
asignarLooAndFeel&'; set+lose+lic&'; set,xtended-tate&A/001,23"4(5'; configurar670&';
//Repintar la ventana con la figura pac&'; set,xtended-tate&A/001,23"4(5'; setVisible&true'; 8
private void asignarLooAndFeel&' { //Forzar el Look and Feel de la ventana al del sistema -tring laf 9 70anager.get-:stemLooAndFeel+lassame&'; tr: { 70anager.setLooAndFeel&laf'; 8
catc% &7nsupportedLooAndFeel,xception exc'
{-:stem.err.println&)7nsupported< ) = laf';8 catc% &,xception exc' {-:stem.err.println&),rror cargando< ) = laf';8 8
private void set+lose+lic&' { //Controlar el cierre de la ventana
2eclaramos en ventana elatributo figura de la claseFigura
-
7/24/2019 La herencia.docx
41/61
add>indowListener&new >indowAdapter&' { public void window+losing&>indow,vent e' {-:stem.exit&?';8 8'; 8
private void configurar670&'{
//Crear los paneles de botones de figuras y operaciones
panelfiguras 9 new Janel&'; panelfiguras.setLa:out&new 6ridLa:out&''; paneloperaciones 9 new Janel&'; paneloperaciones.setLa:out&new 6ridLa:out&'';
//Crear los botones de figuras y aadirlos al panel de figuras circulo9new J"utton&)intar +irculo)'; circulo.addActionListener&t%is'; panelfiguras.add&circulo'; rectangulo9new J"utton&)intar @ectangulo)'; rectangulo.addActionListener&t%is'; panelfiguras.add&rectangulo';
triangulo9new J"utton&)intar (riangulo)'; triangulo.addActionListener&t%is'; panelfiguras.add&triangulo';
//Crear los botones de operaciones y aadirlos al panel de operaciones //Tienen ue estar in!abilitados !asta ue se !aya elegido una figura ampliar9new J"utton&)Ampliar)'; ampliar.addActionListener&t%is'; ampliar.set,nabled&false'; paneloperaciones.add&liar'; reducir9new J"utton&)@educir)'; reducir.addActionListener&t%is'; reducir.set,nabled&false'; paneloperaciones.add&reducir'; arriba9new J"utton&)over arriba)'; arriba.addActionListener&t%is'; arriba.set,nabled&false'; paneloperaciones.add&arriba'; abajo9new J"utton&)over abajo)'; abajo.addActionListener&t%is'; abajo.set,nabled&false'; paneloperaciones.add&abajo'; i#$da9new J"utton&)over i#$da)'; i#$da.addActionListener&t%is'; i#$da.set,nabled&false'; paneloperaciones.add&i#$da'; dc%a9new J"utton&)over dc%a)'; dc%a.addActionListener&t%is'; dc%a.set,nabled&false';
paneloperaciones.add&dc%a';
//"adir los paneles de botones# figuras en la parte superior y //operaciones en la parte inferior de la ventana get+ontentane&'.add&panelfiguras!"orderLa:out.4@(5'; get+ontentane&'.add&paneloperaciones!"orderLa:out.-47(5';
8
-
7/24/2019 La herencia.docx
42/61
2eclaramos la clase abstracta
-
7/24/2019 La herencia.docx
43/61
2eclaramos los mtodos abstractos moer, ampliar y reducir
2eclaramos la clase >rculo que hereda de
-
7/24/2019 La herencia.docx
44/61
Nmplementamos el mtodo ampliar
Nmplementamos el mtodo reducir
Nmplementamos el mtodo paint
Nmplementamos el mtodo moer
2eclaramos la clase Ject/ngulo que hereda de indow+onstants.502,343+L4-,'; dialog.pac&'; dialog.s%ow&';
// (btener los datos introducidos por el usuario centrox9formulario.obtener+entrox&'; centro:9formulario.obtener+entro:&'; radio9formulario.obtener@adio&'; color9formulario.obtener+olor&'; %a:datos9true;
8
public void paint &6rap%ics g' { super.paint&g';
//)i el usuario !a introducido los datos pinta el circulo if &%a:datos'{ g.set+olor&color'; g.draw4val¢roxBradio! centro:Bradio!*radio!*radio'; g.fill4val¢roxBradio! centro:Bradio!*radio!*radio'; g.dispose&'; 8
8
public void mover &int despla#amientox! int despla#amiento:'{
centrox9centrox=despla#amientox; centro:9 centro:=despla#amiento:; 88
public void ampliar &int #oomin'{
if oomin G ?'{ radio9radio*#oomin; 8
8
public void reducir &int #oomout'{
if oomout G ?'{ radio9radio#oomout; 8
8
-
7/24/2019 La herencia.docx
45/61
2eclaramos la clase ri/ngulo que hereda de
-
7/24/2019 La herencia.docx
46/61
Nmplementamos el mtodo paint
Nmplementamos el mtodo ampliar
Nmplementamos el mtodo reducir
Nmplementamos el mtodo moer
public void ampliar &int #oomin'{
if oomin G ?'{ base9 base * #oomin; altura9altura*#oomin; 8
8
public void reducir &int #oomout'{
if oomout G ?'{ base9 base #oomout; altura9altura #oomout; 8
8
8
public class (riangulo extends Figura{
//Coordenada ' del vertice superiorprivate int verticesuperiorx;
//Coordenada y del vertice superiorprivate int verticesuperior:;
//*ase private int base;
//"ltura private int altura;
// Crea una nueva instancia de Triangulopublic (riangulo &' {
// %ostrar el formulario para obtener los datos del triangulo Formulario(riangulo formulario9 new Formulario(riangulo&'; J2ialog dialog 9new J2ialog&'; dialog.set(itle&)0ntrodu#ca los datos del triangulo)'; dialog.setodal&true'; dialog.set+ontentane&formulario'; dialog.set2efault+lose4peration&javax.swing.>indow+onstants.502,343+L4-,'; dialog.pac&'; dialog.s%ow&';
// (btener los datos introducidos por el usuario
verticesuperiorx9formulario.obtenerVertice-uperiorx&'; verticesuperior:9formulario.obtenerVertice-uperior:&'; base9formulario.obtener"ase&'; altura9formulario.obtenerAltura&'; color9formulario.obtener+olor&'; %a:datos9true;
8
-
7/24/2019 La herencia.docx
47/61
public void paint&6rap%ics g' {
int DE coordenadasx9get+oordenadas/&'; int DE coordenadas:9get+oordenadasH&';
super.paint&g'; //)i el usuario !a introducido los datos pinta el triangulo if &%a:datos'{ g.set+olor&color'; g.drawol:gon&coordenadasx! coordenadas:! I'; g.fillol:gon&coordenadasx! coordenadas:! I'; g.dispose&'; 8
8
private int DE get+oordenadas/&'{
int DE coordenadasx 9 new int DIE;
coordenadasxD?E9verticesuperiorx;
coordenadasxDE9verticesuperiorxB&base'; coordenadasxDE9verticesuperiorx=&base';
return coordenadasx; 8
private int DE get+oordenadasH&'{
int DE coordenadas:9 new intDIE;
coordenadas:D?E9verticesuperior:;
coordenadas:DE9verticesuperior:=altura; coordenadas:DE9verticesuperior:=altura;
return coordenadas:; 8
public void mover &int despla#amientox! int despla#amiento:'{
verticesuperiorx 9 verticesuperiorx = despla#amientox; verticesuperior: 9 verticesuperior: = despla#amiento:; 8
public void ampliar &int #oomin'{
if oomin G ?'{ base9 base * #oomin; altura9altura*#oomin; 8
8
public void reducir &int #oomout'{
-
7/24/2019 La herencia.docx
48/61
if oomout G ?'{ base 9 base #oomout; altura 9 altura #oomout; 8
8
8
"1 #jercicio
Jeutilice el la solucin de guras geomtricas para dibujar una
cara. !l aspecto de la cara se muestra a continuacin. Puede suponer
que el contorno de la cara es un crculo, que los ojos tambin son
crculos y que la boca es un rect/ngulo muy estrecho.
-
7/24/2019 La herencia.docx
49/61
7na soluci'n
Pensar en objetos es asociar a un objeto la tarea de dibujar la cara.
-era un objeto compuesto de otros objetos1 uno por cada componente
de la cara. Por ejemplo#
conorno, es un objeto de la clase C?rculoasociado con el contorno
de la cara.
o$oderecho y o$oi7quierdo, son dos objetos de la clase C?rculo
asociados con los ojos.
boca,es un objeto de la clase 0ec1nuloasociado con la boca.
=dem/s coniene considerar como atributos del objeto Cara
cenrox y cenro=, son dos n)meros enteros para indicar las
coordenadas del centro de la cara. -erir/n para situar la cara en
la pantalla.
aman=o,un n)mero entero para indicar el tama;o de la cara.
color, un atributo de tipo >olor 7tipo predenido en Iaa8 que
indica el color de la cara.
La cara estar/ contenida en una entana, igual que en las guras
geomtricas, porque se est/ trabajando en un entorno de entanas
7@indo@s8. La
-
7/24/2019 La herencia.docx
50/61
igura 4! "1 0iagrama de clases de @intar Cara
Las relaciones de agregacin entre las clases Cara, C?rculo y
0ec1nuloexpresan que los objetos de la clase Caraest/n compuestos
por objetos de las clases C?rculoy 0ec1nulo. !stas relaciones reDejan
el tipo de los atributos contorno, ojoderecho, ojoiquierdo y boca.
Beamos a continuacin el cdigo de la clase >ara escrito en el
lenguaje Iaa
public class +ara extends Janel{ extendsJanel es necesario para usar el Ai swing
private +irculo ojoderec%o! ojoi#$uierdo; ojosprivate @ectangulo boca; boca
private +irculo contorno; contorno private int taman:o9??; tamaKo de la cara private int centrox9??; coordenada x del centro de la cara private int centro:9I?; coordenada : del centro de la cara private +olor color9+olor.H,LL4>; color de fondo de la cara
+rea una nueva instancia de +arapublic +ara&' {
crear el contorno contorno 9 new +irculo¢rox! centro:! taman:o! color';
-
7/24/2019 La herencia.docx
51/61
crear los ojos ojoi#$uierdo 9 new +irculo¢roxB&taman:oI'! centro:B&taman:oM'! ?! +olor."LA+N '; ojoderec%o 9 new +irculo¢rox=&taman:oI'! centro:B&taman:oM'! ?! +olor."LA+N ';
crear la boca boca 9 new @ectangulo¢roxB&taman:oM'! centro:=&taman:o'! taman:o! ! +olor."LA+N';
8
public void paint &6rap%ics g' {
super.paint&g'; necesario para utili#ar el A0 swing
pintar el contorno contorno.paint&g';
pintar los ojos ojoderec%o.paint&g';
ojoi#$uierdo.paint&g';
pintar la boca boca.paint&g';
8
8
La solucin pinta la cara reutiliando la estructura de guras
desarrollada anteriormente. La
-
7/24/2019 La herencia.docx
52/61
igura 4! "" .esultado de @intar Cara
-
7/24/2019 La herencia.docx
53/61
"" Otro ejercicio
La cara que pintamos no les gust a los ni;os y propusieron que el
contorno fuese un cuadrado. Aaga las modicaciones necesarias en eldise;o para satisfacer la nuea solicitud. 2e paso, eal)e la facilidad
que ofrece su dise;o anterior para ajustarse a este cambio.
?na solucin posible, consiste en reutiliar el dise;o anterior
modicando el atributo conornode la clase Carapara que sea un objeto
de la clase 0ec1nulo en lugar de C?rculo. >omo ambas clases,
0ec1nulo y C?rculo, tienen un mtodo llamado pain;
-
7/24/2019 La herencia.docx
54/61
-
7/24/2019 La herencia.docx
55/61
La b:sueda de la plasticidad, un cambio del diseAo
!l cambio o reajuste de requisitos es un fenmeno muy frecuente
en el soft0are, tanto que resulta ser uno de los problemas m/s
importantes 7y tambin rentables8 del desarrollo de soft0are.
La solucin anterior al ejercicio de las caras resoli la situacin de
modo directo, sin pensar m/s all/, porque lo que no se sabe, no se sabe.
2e lo contrario en el soft0are se contrataran or/culos, identes,
cualquiera que sea capa de anticiparse 7con exactitud8, pero no dan
resultado. La solucin anterior, sin otro conocimiento, est/ bien.
=hora han ariado las condiciones y ya se sabe que se quiere
modicar el contorno. Pero, si hay cambios en el contorno podr/ haber
cambios en cualquier otro atributo de la cara. !ntonces, coniene
dise;ar una solucin de mayor plasticidad 7deformable8, que admita
como componente de la cara cualquier gura. -e trata de introducir
ambig"edad en el dise;o.
?n paso en esa direccin es asignar los atributos conorno,o$oi7quierdo, o$oderechoy bocade tipo
-
7/24/2019 La herencia.docx
56/61
segundo, etc. Tracias a esta ambig"edad se gana en igualdad de
proceso y en facilidad de modicacin. Pero la ambig"edad tambin
puede dicultar la comprensin por un efecto de desconcierto. >asi nada
es gratis. Para reducir el posible efecto negatio de la ambig"edad se
han utiliado ariables temporales con los nombres de los componentes.
-in embargo, a pesar de toda la ambig"edad introducida en el
dise;o, se mantienen dependencias directas de Cara hacia C?rculo y
0ec1nuloa causa de las operaciones de creacin de objetos. -lo
cuando los creamos necesitamos declarar su tipo especco C?rculo y
0ec1nulo 7recordemos que no pueden crease objetos de clases
abstractas como iura8. !n la aproximacin a los patrones se er/ unasolucin que reducen estas ligaduras.
?na e creados los objetos podemos tratarlos a todos por igual
usando los mtodos de la clase iura. Por eso ahora, en el mtodo
pain;omo todos los
elementos de 6accionesson de tipo iurasiempre podremos llamar al
mtodo pain;
-
7/24/2019 La herencia.docx
57/61
igura 4! "% 0iagrama de clases de @intar Cara polim'r$ico
!l dise;o de la
-
7/24/2019 La herencia.docx
58/61
-
7/24/2019 La herencia.docx
59/61
La soluci'n del rectngulo
2ada la plasticidad del dise;o nueo, el cambio del contorno de la
cara se resuele slo modicando la lnea en la que creamos el objeto
contorno para crear un Ject/ngulo en lugar de un >rculo. Beamos este
cambio sobre el cdigo.
-
7/24/2019 La herencia.docx
60/61
La
-
7/24/2019 La herencia.docx
61/61
igura 4! "4 .esultado de @intar Cara
Bibliogra$a
34ooch 5'6 Trady 4ooch, 9Object Oriented Analysis and Design: !d.
4enjamin >ummings Publishing, $55'
3Jumbaugh 5*6 Iames Jumbaugh et al. 9Modelado y Diseo
Orientado a Objetos: !d. Prentice Aall, $55*
3Lis(o M+6 4arbara Lis(o et al. 9Abstraction and Specifcation
in Program Development: >ambridge, @=# he @N Press, $5MM
3