Saltar al contenido principal

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 { /* ... */ }