Code Smells en Programación Orientada a Objetos (OOP)
Ya hemos explorado muchos de estos, pero resumamos algunos de los más críticos:
2.1. OOP Smells Específicos
Herencia Excesiva: Jerarquías de clase demasiado profundas Acoplamiento Alto: Clases que conocen demasiados detalles de otras clases God Class: Clases que lo hacen todo Feature Envy: Métodos más interesados en datos de otras clases Data Class: Clases que son solo contenedores de datos sin comportamiento
##2.2. Ejemplo de OOP Smell: Herencia Excesiva
class Vehicle { /* ... */ }
class GroundVehicle extends Vehicle { /* ... */ }
class Car extends GroundVehicle { /* ... */ }
class SportsCar extends Car { /* ... */ }
class Ferrari extends SportsCar { /* ... */ }
class FerrariF50 extends Ferrari { /* ... */ }
- Problema: Cambios en clases base pueden afectar muchas subclases, código frágil.
- Refactorización: Favorecer composición sobre herencia.
class Vehicle {
private Engine engine;
private Chassis chassis;
// Usando composición en lugar de herencia
public Vehicle(Engine engine, Chassis chassis) {
this.engine = engine;
this.chassis = chassis;
}
}
// Diferentes tipos de motores
interface Engine { /* ... */ }
class StandardEngine implements Engine { /* ... */ }
class TurboEngine implements Engine { /* ... */ }
// Diferentes tipos de chasis
interface Chassis { /* ... */ }
class SportsChassis implements Chassis { /* ... */ }
class SUVChassis implements Chassis { /* ... */ }