Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sugerencia de principios SOLID #3

Open
DiegoA00 opened this issue Nov 6, 2023 · 0 comments
Open

Sugerencia de principios SOLID #3

DiegoA00 opened this issue Nov 6, 2023 · 0 comments

Comments

@DiegoA00
Copy link

DiegoA00 commented Nov 6, 2023

Hola, he encontrado algunas violaciones a los principios SOLID en tu código. Te propongo una solución para usar estos principios ya que esto permite un código legible y extensible. Adjunto el diagrama de clases UML y el código fuente donde se ve la propuesta para cumplir con SOLID.

Diagrama de clasesUML

UMLSugerencia

Código fuente

// Clase abstracta Coche
public abstract class Coche {

    private String marca;
    private String modelo;
    protected Motor motor;

    public Coche(String marca, String modelo, Motor motor) {
        this.marca = marca;
        this.modelo = modelo;
        this.motor = motor;
    }

    public String getMarca() {
        return marca;
    }

    public String getModelo() {
        return modelo;
    }

    public abstract void arrancar();

    public abstract void detener();
}

// Clase Camion que extiende Coche
public class Camion extends Coche {

    private int cantidadEjes;

    public Camion(String marca, String modelo, Motor motor, int cantidadEjes) {
        super(marca, modelo, motor);
        this.cantidadEjes = cantidadEjes;
    }

    @Override
    public void arrancar() {
        // Futura implementación específica para camiones
        System.out.println("Arrancando el camión...");
    }

    @Override
    public void detener() {
        // Futura implementación específica para camiones
        System.out.println("Deteniendo el camión...");
    }
}

// Clase Coche4x4 que extiende Coche
public class Jeepeta extends Coche {

    private boolean traccion4WD;

    public Jeepeta(String marca, String modelo, Motor motor, boolean traccion4WD) {
        super(marca, modelo, motor);
        this.traccion4WD = traccion4WD;
    }

    @Override
    public void arrancar() {
        // Futura implementación específica para Jeepeta
        System.out.println("Arrancando la Jeepeta...");
    }

    @Override
    public void detener() {
        // Futura implementación específica para Jeepeta
        System.out.println("Deteniendo la Jeepeta...");
    }
}

// Clase abstracta Motor
public abstract class Motor {
    protected int litros_de_aceite;
    protected int potencia;
    
    public Motor(int potencia) {
        this.litros_de_aceite = 0;
        this.potencia = potencia;
    }
    
    //getters & setters

    public abstract void encender();

    public abstract void apagar();
}


// Clase Garaje
public class Garaje {
    
    private Coche coche;
    private String averia;
    

    public void aceptarCoche() {
        System.out.println("Posible futura implementación con coche");
        System.out.println("Revisando coche con " + averia);
        System.out.println("Viendo si el coche arranca");
        coche.arrancar();
    }

    public void devolverCoche() {
        System.out.println("Posible futura implementación con coche");
        System.out.println("Devolviendo coche");
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant