Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: pedro,, en 24 de Julio 2015, 22:02

Título: Java sobreescribir método equals igualdad entre objetos Ejercicio CU00694B#
Publicado por: pedro,, en 24 de Julio 2015, 22:02
Aquí mi ejercicio CU00694B

Citar
Define una clase Figura de la que hereden otras dos clases denominadas Cuadrado y Círculo. La clase figura debe tener al menos el campo dimensionPrincipal. Las clases Cuadrado y Círculo deben tener al menos un método calcularArea que permita calcular el área a partir de la dimensión principal, utilizando la fórmula matemática correspondiente. Además, sobreescribe el método equals para que dos cuadrados sean iguales si tienen igual dimensión principal, y dos círculos idem. A continuación crea un programa test donde crees varios círculos y cuadrados y hagas comprobaciones de igualdad usando el método equals.

Clase Figura
Código: [Seleccionar]
public class Figura{
    private double dimensionPrincipal;
    public Figura(){
        dimensionPrincipal = 0;
    }
    public Figura(double dimensionPrincipal){
        this.dimensionPrincipal = dimensionPrincipal;
    }
    public void setDimensionPrincipal(double dimensionPrincipal){ this.dimensionPrincipal = dimensionPrincipal; }
    public double getDimensionPrincipal(){ return dimensionPrincipal; }
    public boolean equals(Object obj){
        if (obj instanceof Figura){
            Figura tmpFigura = (Figura) obj;
            if (this.dimensionPrincipal == tmpFigura.dimensionPrincipal){
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Clase Cuadrado
Código: [Seleccionar]
public class Cuadrado extends Figura{
    public Cuadrado(){
        super();
    }
    public Cuadrado(double dimensionPrincipal){
        super(dimensionPrincipal);
    }
    public double calcularArea(){
        return Math.pow(super.getDimensionPrincipal(), 2);
    }
    public boolean equals(Object obj){
        if (obj instanceof Cuadrado){
            Cuadrado tmpCuadrado = (Cuadrado) obj;
            if (super.equals(tmpCuadrado)){
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Clase Circulo
Código: [Seleccionar]
public class Circulo extends Figura{
    private static final double PI = 3.1416;
    public Circulo(){
        super();
    }
    public Circulo(double dimensionPrincipal){
        super(dimensionPrincipal);
    }
    public double calcularArea(){
        return (PI * Math.pow(super.getDimensionPrincipal(), 2));
    }
    public boolean equals(Object obj){
        if (obj instanceof Circulo){
            Circulo tmpCirculo = (Circulo) obj;
            if (super.equals(tmpCirculo)){
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Clase TestFigura
Código: [Seleccionar]
public class TestFigura{
    public static void main(String [] args){
        Figura cuadrado1 = new Cuadrado(2);
        Figura cuadrado2 = new Cuadrado(3);
        Figura cuadrado3 = new Cuadrado(2);
        Figura circulo1 = new Circulo(2);
        Figura circulo2 = new Circulo(3);
        Figura circulo3 = new Circulo(3);
        System.out.println ("cuadrado 1 es igual a cuadrado 2 : " + cuadrado1.equals(cuadrado2));
        System.out.println ("cuadrado 1 es igual a cuadrado 3 : " + cuadrado1.equals(cuadrado3));
        System.out.println ("cuadrado 1 es igual a circulo 1 : " + cuadrado1.equals(circulo1));
        System.out.println ("cuadrado 1 es igual a circulo 2 : " + cuadrado1.equals(circulo2));
        System.out.println ("cuadrado 1 es igual a circulo 3 : " + cuadrado1.equals(circulo3));
        System.out.println ("cuadrado 2 es igual a cuadrado 3 : " + cuadrado2.equals(cuadrado3));
        System.out.println ("cuadrado 2 es igual a circulo 1 : " + cuadrado2.equals(circulo1));
        System.out.println ("cuadrado 2 es igual a circulo 2 : " + cuadrado2.equals(circulo2));
        System.out.println ("cuadrado 2 es igual a circulo 3 : " + cuadrado2.equals(circulo3));
        System.out.println ("cuadrado3 es igual a circulo 1 : " + cuadrado3.equals(circulo1));
        System.out.println ("cuadrado3 es igual a circulo 2 : " + cuadrado3.equals(circulo2));
        System.out.println ("cuadrado3 es igual a circulo 3 : " + cuadrado3.equals(circulo3));
        System.out.println ("circulo 1 es igual a circulo 2 : " + circulo1.equals(circulo2));
        System.out.println ("circulo 1 es igual a circulo 3 : " + circulo1.equals(circulo3));
        System.out.println ("circulo 2 es igual a circulo 3 : " + circulo2.equals(circulo3));
    }
}

gracias por vuestro tiempo.
Título: Re:Java sobreescribir método equals igualdad entre objetos Ejercicio CU00694B#
Publicado por: Mario R. Rancel en 26 de Julio 2015, 16:08
Hola Pedro veo el código correctamente resuelto

Como pequeñas mejoras: en lugar de definir pi podrías haber rescatado el valor usando la propia clase Math, que permite recuperar el valor de Pi (ver https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#PI)

Una pequeña mejora que veo posible sería simplificar los métodos equals.

En la clase Cuadrado quedaría con una pequeña simplificación:

Código: [Seleccionar]
    public boolean equals(Object obj){
        if (obj instanceof Cuadrado){
            return super.equals(obj);
        } else {
            return false;
        }
    }

Y en la clase Circulo quedaría con la misma pequeña simplificación:

Código: [Seleccionar]
    public boolean equals(Object obj){
        if (obj instanceof Circulo){
            return super.equals(obj);
        } else {
            return false;
        }
    }

Saludos
Título: Re:Java sobreescribir método equals igualdad entre objetos Ejercicio CU00694B#
Publicado por: pedro,, en 26 de Julio 2015, 17:21
Gracias por los apuntes Mario R. Rancel, ya cambié los métodos equals y queda aprendido el apunte sobre la clase Math.