Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BAD SMELL
EQUIPO: ENTENDIDOS
Las jerarquías de herencia paralela es un bad smell que lo define Martin Fowler
como un caso especial de cirugía de escopeta, en la cual, cuando se crea una
subclase de una clase, se debe de crear a la vez una subclase de otra.
Una jerarquía de herencia paralela puede ser reconocida porque los prefijos del
nombre de clase en una jerarquía son los mismos que los prefijos de clase en otra
jerarquía.
1.2. Causas
La jerarquía de herencia paralela ocurre cuando un árbol de herencia depende de
otro árbol de herencia y mantienen una relación especial; en la cual una subclase de
un árbol de herencia depende de otra subclase de otro árbol de herencia.
Entre otras causas tenemos:
- Mucho código duplicado.
- No realizar la refactorización continua.
- Exceso de entusiasmo por dividir cada función como una clase separada.
- No introducir patrones de diseño adecuados.
2. Estrategias de Solución
Como estrategia general para eliminar la duplicación es asegurarse de que las instancias de
una jerarquía se refieran a las instancias de otra. Usando Move Method y Move Field, la
jerarquía en la clase de referencia desaparece.
CLASE 1:
Clase2
this.infrestructura=infrestructura;
}
}
Clase 3:
public class Informatico extends Ingeniero
{
private String rango;
public Informatico(int salario,Hito mihito,String tipo,String rango)
{
super(salario,mihito,tipo);
this.rango=rango;
}
Clase 4:
public abstract class Hito
{
public abstract String trabajo();
public abstract String objetivo();
clase 5:
public class Hitocivil extends Hito
{
public String trabajo() {
return"contruir las torres gemelas";
Clase 6 :
public class Hitoinformatica extends Hito
{
public String trabajo()
{
return"crea un micro servicio de facturacion";
Quitamos la super clase hito con sus subclases y lo pasamos sus atributos a la super
clase ingenieroRefactor y nos quedamos con sus atributos y de la clase respectivamente
y obtrendremos un solo árbol de herencia con el código refactorizado y más entendible
y nos muestra lo mismo la descripción y los datos de las subclase informaticRefactor y
civilRefactor.
Clase 1:
Clase 2:
public class InformarticoRefac extends IngenieroRefactor
{
private String rango;
public InformarticoRefac(int salario,String tipo,String rango)
{
super(salario,tipo);
this.rango=rango;
}
Clase 3:
public class CivilRefac extends IngenieroRefactor
{
this.infrestructura=infrestructura;