La composición es mucho mejor que la herencia


en Este artículo se explica los peligros de la herencia, y ofrece una solución...

En este artículo voy a tener que usar algunos ficticios nombres de clase, etc, debido a la sensibilidad del proyecto en el que estoy trabajando, así que tengan paciencia conmigo si alguna de la información parece & nbsp un poco extraño.

Después de trabajar a mí mismo acerca de 6 niveles de profundidad en la herencia de repente me di cuenta de que mi clase de Fábrica & nbsp había un DateOfBirth. & nbsp Esto fue, sin duda indeseable, pero con mi actual modelo no podía hacer nada al respecto. & nbsp Mis opciones fueron para deshacerse de la herencia de Fábrica y perder todos los beneficios de hacerlo (tener 'AdditionalInformation' definible por el usuario, por ejemplo), o para omitir la DateOfBirth y no se mostrará en la interfaz gráfica de usuario.

Ambas opciones eran basura. & nbsp Lugar de tomar cualquiera de ellos, yo fui por una completamente diferente opción. & nbsp he decidido quitar casi toda la herencia dentro de mi modelo, y agregar compuesto relaciones en su lugar.

Ahora, & nbsp lugar de mi clase de Fábrica descendente indirectamente a partir de un ObjectWithAdditionalInformation no tiene la clase padre. & nbsp con el fin De lograr la misma funcionalidad, ahora tengo una relación unidireccional entre la Fábrica y el ahora con el nombre de AdditionalInformationHolder clase. & nbsp Esta clase contiene la información adicional que el usuario quiere entrar, y la Fábrica crea una instancia de la misma cuando se crea por primera vez.

luego he creado un Marco/UserControl que se mantenga la interfaz gráfica de usuario para la introducción de información adicional, incluyendo su propia ExpressionHandle.

La belleza de este enfoque es que puedo tener ahora cualquier tipo de objeto dentro de mi modelo que es capaz de tener información adicional grabado en contra de ella si así lo desea. & nbsp implementar la interfaz gráfica de usuario me basta con colocar el Bastidor/UserControl a la forma del objeto en cuestión y establecer el contexto raíz de la ExpressionHandle.

de Repente tengo un modelo con apenas herencia en ella en absoluto. & nbsp puedo hacer modificaciones a las clases sin tener que comprobar que no se rompa alguna de las clases descendientes (o sus formas), y no he perdido ninguna funcionalidad.

le recomiendo que se use la herencia sólo para el polimorfismo beneficios, no sólo por el bien de la herencia de propiedades. & nbsp Sólo lo uso cuando es una solución elegante a un problema (tal como el descrito en mi artículo de la Composición y recursiva OCL) en lugar de como una manera de evitar tener que introducir los mismos atributos y comportamiento en una nueva clase. & nbsp Recuerde, sólo porque un Edificio, una Persona tiene un nombre, una fecha de la concepción, y un lugar, no les hace la misma cosa!









La composicion es mucho mejor que la herencia


La composicion es mucho mejor que la herencia : Multi-millones de consejos para hacer su vida mas facil.


en Este articulo se explica los peligros de la herencia, y ofrece una solucion...

En este articulo voy a tener que usar algunos ficticios nombres de clase, etc, debido a la sensibilidad del proyecto en el que estoy trabajando, asi que tengan paciencia conmigo si alguna de la informacion parece & nbsp un poco extraño.

Despues de trabajar a mi mismo acerca de 6 niveles de profundidad en la herencia de repente me di cuenta de que mi clase de Fabrica & nbsp habia un DateOfBirth. & nbsp Esto fue, sin duda indeseable, pero con mi actual modelo no podia hacer nada al respecto. & nbsp Mis opciones fueron para deshacerse de la herencia de Fabrica y perder todos los beneficios de hacerlo (tener 'AdditionalInformation' definible por el usuario, por ejemplo), o para omitir la DateOfBirth y no se mostrara en la interfaz grafica de usuario.

Ambas opciones eran basura. & nbsp Lugar de tomar cualquiera de ellos, yo fui por una completamente diferente opcion. & nbsp he decidido quitar casi toda la herencia dentro de mi modelo, y agregar compuesto relaciones en su lugar.

Ahora, & nbsp lugar de mi clase de Fabrica descendente indirectamente a partir de un ObjectWithAdditionalInformation no tiene la clase padre. & nbsp con el fin De lograr la misma funcionalidad, ahora tengo una relacion unidireccional entre la Fabrica y el ahora con el nombre de AdditionalInformationHolder clase. & nbsp Esta clase contiene la informacion adicional que el usuario quiere entrar, y la Fabrica crea una instancia de la misma cuando se crea por primera vez.

luego he creado un Marco/UserControl que se mantenga la interfaz grafica de usuario para la introduccion de informacion adicional, incluyendo su propia ExpressionHandle.

La belleza de este enfoque es que puedo tener ahora cualquier tipo de objeto dentro de mi modelo que es capaz de tener informacion adicional grabado en contra de ella si asi lo desea. & nbsp implementar la interfaz grafica de usuario me basta con colocar el Bastidor/UserControl a la forma del objeto en cuestion y establecer el contexto raiz de la ExpressionHandle.

de Repente tengo un modelo con apenas herencia en ella en absoluto. & nbsp puedo hacer modificaciones a las clases sin tener que comprobar que no se rompa alguna de las clases descendientes (o sus formas), y no he perdido ninguna funcionalidad.

le recomiendo que se use la herencia solo para el polimorfismo beneficios, no solo por el bien de la herencia de propiedades. & nbsp Solo lo uso cuando es una solucion elegante a un problema (tal como el descrito en mi articulo de la Composicion y recursiva OCL) en lugar de como una manera de evitar tener que introducir los mismos atributos y comportamiento en una nueva clase. & nbsp Recuerde, solo porque un Edificio, una Persona tiene un nombre, una fecha de la concepcion, y un lugar, no les hace la misma cosa!


La composición es mucho mejor que la herencia

La composición es mucho mejor que la herencia : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación