lunes, 15 de febrero de 2021

JAVA: Ejercicio sobre interfaces

El enunciado es: En el siguiente post se creó una jerarquía de clases de figuras geométricas. Implementar una interfaz que defina un método que devuelva el número de lados. Hacer que las figuras que tengan lados (el círculo no tiene) la implementen.


Main.java

package main;
import figuras.*;

public class Main {
    public static void main(String[] args) {
        Figuras figuras = new Figuras();
        figuras.annade(new Circulo(3.456));
        figuras.annade(new Triangulo(3.456,2.17));
        figuras.annade(new Cuadrado(2.11));
        if(!figuras.annade(new Triangulo(3.12,5.6),7)) {
            System.out.println("Error al borrar");
        }
        figuras.lista();
        figuras.borra(0);
        figuras.borra(33);
        System.out.println("---------------------");
        figuras.lista();
    }
}

Triangulo.java

package figuras;

public class Triangulo extends Figura implements Lados {
    
    private double base;
    private double altura;
    
    public Triangulo(double base, double altura) {
        this.base = base;
        this.altura = altura;
    }

    @Override
    public double calculaArea() {
        return (base*altura)/2;
    }

    @Override
    public int numLados() {
        return 3;
    }
       
}

Lados.java

package figuras;

public interface Lados {
    abstract public int numLados();
}

Figuras.java

package figuras;

import java.util.LinkedList;

public class Figuras {

    // No hay restricción si utilizamos colecciones (ver unidad 9)
    private LinkedList<Figura> lista = new LinkedList<>();
    
    public void annade(Figura f) {
        lista.add(f);
    }
    
    public void borra() {
        lista.removeLast();
    }
    
    public boolean annade(Figura f, int pos) {
        try {
            lista.add(pos, f);
        }
        catch(Exception e) {
            return false;
        }
        return true;
    }
    
    public void borra(int pos) {
        // Si se intenta borrar una que no existe que no haga nada
        try {
            lista.remove(pos);
        } catch(Exception e) {}
    }
    
    public void lista() {
        for(Figura f: lista) {
            System.out.println("Figura: "+f);
            if(f instanceof Lados) {
                Lados l = (Lados)f;
                System.out.println("\tNum lados: "+l.numLados());
            }
        }
    }
}

Figura.java

package figuras;

public abstract class Figura {
    abstract public double calculaArea();
}

Cuadrado.java

package figuras;

public class Cuadrado extends Figura implements Lados{

    private double lado;
    
    public Cuadrado(double lado) {
        this.lado = lado;
    }
    
    @Override
    public double calculaArea() {
        return lado * lado;
    }

    @Override
    public int numLados() {
        return 4;
    }
    
}

Circulo.java

package figuras;


public class Circulo extends Figura {

    private double radio;
    
    public Circulo(double radio) {
        this.radio = radio;
    }
    
    @Override
    public double calculaArea() {
        return Math.PI*radio*radio;
    }
    
}

Puedes ver todos mis ejercicios de JAVA en este enlace.