La herencia es probablemente la forma más obvia y sencilla de reutilizar código entre clases. Tienes dos clases con el mismo código. Creas una clase base común para estas dos clases y colocas dentro el código similar. !Pan comido!
Lamentablemente, la herencia tiene sus contras, que a menudo no resultan aparentes hasta que tu programa tiene toneladas de clases y cambiarlo todo resulta muy complicado. Aquí tienes una lista de esos problemas.
1.- Una subclase no puede reducir la interfaz de la superclase. Tienes que implementar todos los métodos abstractos de la clase padre, incluso aunque no vayas a usarlos.
2.- Al sobrescribir métodos debes asegurarte de que el nuevo comportamiento sea compatible con el de base. Es importante porque los objetos de la subclase pueden pasarse a cualquier código que espere objetos de la superclase y no quieres que ese código se rompa.
3.- La herencia rompe la encapsulación de la superclase porque los detalles internos de la clase padre se hacen disponibles para la subclase. Puede darse una situación opuesta en la que un programador hace que una superclase conozca algunos detalles de las subclases, con el objetivo de que las siguientes extensiones sean más sencillas.
4.- Las subclases están fuertemente acopladas a superclases. Cualquier cambio en una superclase puede descomponer la funcionalidad de las subclases.
5.- Intentar reutilizar código mediante la herencia puede conducir a la creación de jerarquías paralelas. Normalmente, la herencia sucede en una única dimensión. Pero cuando hay dos o más dimensiones, debes crear muchas combinaciones de clases, hinchando la jerarquía de clases hasta un tamaño ridículo.
Fuente: Libro Patrones de Diseño de Alexander Shvets.
No hay comentarios:
Publicar un comentario