La herencia.docx

download La herencia.docx

of 61

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&ampliar'; 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&centroxBradio! centro:Bradio!*radio!*radio'; g.fill4val&centroxBradio! 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&centrox! centro:! taman:o! color';

  • 7/24/2019 La herencia.docx

    51/61

    crear los ojos ojoi#$uierdo 9 new +irculo&centroxB&taman:oI'! centro:B&taman:oM'! ?! +olor."LA+N '; ojoderec%o 9 new +irculo&centrox=&taman:oI'! centro:B&taman:oM'! ?! +olor."LA+N ';

    crear la boca boca 9 new @ectangulo&centroxB&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