23.02.2017 Views

Java

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Java</strong> 23<br />

En general se considera mala práctica utilizar la subclasificación<br />

para reutilizar implementación sin formar una relación de subtipado.<br />

Generalmente la técnica que se utiliza para no crear ese tipo de<br />

jerarquías mal aplicadas es la agregación.<br />

Debemos tener en cuenta que se llama agregación cuando un objeto<br />

utiliza a otro. Se dice que un objeto tiene o usa otro.<br />

Veamos otro ejemplo: supongamos que tenemos Rectángulos y<br />

Cuadrados, y queremos que respondan al mensaje ¿área?. Ambos tipos<br />

son muy parecidos, podríamos decir que un Cuadrado es un Rectángulo<br />

con los lados iguales o también que un Rectángulo es un Cuadrado con<br />

los lados desparejos. Podríamos, entonces, elegir alguna de estas dos<br />

jerarquías para reutilizar el comportamiento. ¿Cuál conviene elegir?<br />

area<br />

lado<br />

lado 2<br />

area<br />

lado<br />

RECTÁNGULO<br />

CUADRADO<br />

Figura 9. Objetos que representan a un rectángulo y a un<br />

cuadrado. El rectángulo especializa al cuadrado agregando<br />

un colaborador extra para representar el lado distinto.<br />

Viendo las diferencias entre los objetos, elegir heredar Rectángulo<br />

de Cuadrado parece una opción sencilla, solo hay que agregar un<br />

jerarQUÍa mal UtiliZada<br />

En su mayoría, si una clase hereda métodos que no tienen ninguna relación con ella, que no aplican y que<br />

no forman parte de las responsabilidades que debería tener, entonces estamos frente a un mal uso<br />

de la herencia. Debemos evitar este tipo de jerarquías dado que generan productos de mala calidad. La<br />

forma correcta de aplicarlas es eliminando la herencia y utilizando la agregación.<br />

www.FreeLibros.me<br />

www.redusers.com

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

Saved successfully!

Ooh no, something went wrong!