Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Enzo en 04 de Diciembre 2015, 16:59

Título: Java sobreescribir método equals igualdad objeto circulo y cuadrado CU00694B
Publicado por: Enzo en 04 de Diciembre 2015, 16:59
Buenas tardes,

Aquí dejo mi ejercicio del tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos" para su corrección:

Superclase Figura:

Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DEL MÉTODO EQUALS.<br>
 * Esta Clase define una Superclase de la que "beberan" otras clases.<br>
 * Clase 1 del Ejercicio del Tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos".
 * @author aprenderaprogramar.com
 * @version 20151204.01
 */
public class Figura_CU00694B {

    // Inicialización de Atributos
    protected int dimensionPrincipal;

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     * @param dimensionPrincipal El parámetro dimensionPrincipal define la Medida Principal de la Figura
     */
    public Figura_CU00694B() {
        dimensionPrincipal = 0;
    } // Cierre del Constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     * @param dimensionPrincipal El parámetro dimensionPrincipal define la Medida Principal de la Figura
     */
    public Figura_CU00694B(int dimensionPrincipal) {
        this.dimensionPrincipal = dimensionPrincipal;
    } // Cierre del Constructor 2

    /**
     * Método para establecer la Medida Principal de la Figura
     * @param valorDimensionPrincipal El parámetro valorDimensionPrincipal define el valor que contendrá la Medida Principal de la Figura
     */
    public void setDimensionPrincipal(int valorDimensionPrincipal) {
        dimensionPrincipal = valorDimensionPrincipal;
    } // Cierre del método para establecer la Medida Principal de la Figura

    /**
     * Método para para obtener la Medida Principal de la Figura
     * @return la Medida Principal de la Figura
     */
    public int getDimensionPrincipal(){ return dimensionPrincipal; }

    /**
     * Método de Sobreescritura del método equals
     * @return Comparación de si dos Figuras tienen igual la Medida Principal
     */
    public boolean equals (Object obj) {

        /* En primer lugar se comprueba si el objeto pasado como parámetro (obj) es un tipo Figura.
         * Si no lo es, se devuelve como resultado del método false:
         * los objetos no son iguales (no pueden serlo si ni siquiera coinciden sus tipos).*/
        if (obj instanceof Figura_CU00694B) {

            /* En segundo lugar, se crea una variable de tipo Figura a la que se asigna
             * el objeto pasado como parámetro valiéndonos de casting (enmascaramiento).
             * Esta variable se crea para poder invocar campos y métodos de la clase Figura,
             * ya que esto no se podria hacer sobre un objeto de tipo Object.
             * Con esta variable, se realizan las comparaciones oportunas y se devuelve un resultado.*/
            Figura_CU00694B tmpFigura = (Figura_CU00694B) obj;

            /* Comparación para ver si coinciden su dimensionPrincipal.
             * La dimensionPrincipal se compara con el operador == por ser un tipo primitivo*/
            if (this.dimensionPrincipal == tmpFigura.dimensionPrincipal) {
                return true;
            } else {
                return false; }

        } else {
            return false;
        }

    } //Cierre del método equals

    /**
     * Método para mostar la Información de la Figura
     */
    public void mostrarDatos() {
        System.out.println ("\tMedida Principal de la Figura: " + dimensionPrincipal);
    } // Cierre del método para mostrar información de la Figura

} // Cierre de la Clase


Subclase Cuadrado:

Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DEL MÉTODO EQUALS.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Figura_CU00694B.<br>
 * Clase 2 del Ejercicio del Tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos".
 * @author aprenderaprogramar.com
 * @version 20151204.01
 */
public class Cuadrado_CU00694B extends Figura_CU00694B {

    // No hay campos específicos de la subclase.

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     */
    public Cuadrado_CU00694B () {
        super();
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     */
    public Cuadrado_CU00694B (int dimensionPrincipal) {       
        super(dimensionPrincipal); // Parametros del constructor de la Superclase. Siempre se incluyen
        // No hay campos específicos de la subclase.
    } // Cierre del constructor 2

    // METODOS ESPECIFICOS DE LA SUBLASE
    /**
     * Método de Sobreescritura del método equals
     * @return Comparación de si dos cuadrados son iguales si coinciden su Medida Principal.
     */
    public boolean equals (Object obj) {
       
        /* En primer lugar se comprueba si el objeto pasado como parámetro (obj) es un tipo Cuadrado.
         * Si no lo es, se devuelve como resultado del método false:
         * los objetos no son iguales (no pueden serlo si ni siquiera coinciden sus tipos).*/
        if (obj instanceof Cuadrado_CU00694B) {
           
            /* En segundo lugar, se crea una variable de tipo Cuadrado a la que se asigna
             * el objeto pasado como parámetro valiéndonos de casting (enmascaramiento).
             * Esta variable se crea para poder invocar campos y métodos de la clase Cuadrado,
             * ya que esto no se podria hacer sobre un objeto de tipo Object.
             * Con esta variable, se realizan las comparaciones oportunas y se devuelve un resultado.*/
             Cuadrado_CU00694B tmpCuadrado = (Cuadrado_CU00694B) obj;
           
            /* En este caso se invoca el método equals de la superclase Figura,
             * para que dos cuadrados sean iguales han de coincidir la dimensionPrincipal.*/
            if (super.equals(tmpCuadrado)) {
                return true;
            } else {
                return false;
            }
           
        } else {
            return false;
        }
       
    } // Cierre del método equals
   
    /**
     * Método para clacular el área del cuadrado
     * @return El área del cuadrado.
     */
    public double getAreaCuadrado() {
        return dimensionPrincipal * dimensionPrincipal;
    } // Cierre del método para clacular el área del círculo
   
    /**
     * Método para mostar la Información del Cuadrado
     */
    public void mostrarDatos() {
        super.mostrarDatos();
         System.out.println ("\tPor lo tanto, el Área del Cuadrado es: " + dimensionPrincipal + "*" + dimensionPrincipal + " = " + getAreaCuadrado());
    } // Cierre del método para mostar la Información del Cuadrado

} // Cierre de la Clase


Subclase Círculo:

Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DEL MÉTODO EQUALS.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Figura_CU00694B.<br>
 * Clase 3 del Ejercicio del Tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos".
 * @author aprenderaprogramar.com
 * @version 20151204.01
 */
public class Circulo_CU00694B extends Figura_CU00694B {

    // No hay campos específicos de la subclase.

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     */
    public Circulo_CU00694B () {
        super();
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     */
    public Circulo_CU00694B (int dimensionPrincipal) {       
        super(dimensionPrincipal); // Parametros del constructor de la Superclase. Siempre se incluyen
        // No hay campos específicos de la subclase.
    } // Cierre del constructor 2

    // METODOS ESPECIFICOS DE LA SUBLASE
    /**
     * Método de Sobreescritura del método equals
     * @return Comparación de si dos círculos son iguales si coinciden su Medida Principal.
     */
    public boolean equals (Object obj) {
       
        /* En primer lugar se comprueba si el objeto pasado como parámetro (obj) es un tipo Círculo.
         * Si no lo es, se devuelve como resultado del método false:
         * los objetos no son iguales (no pueden serlo si ni siquiera coinciden sus tipos).*/
        if (obj instanceof Circulo_CU00694B) {
           
            /* En segundo lugar, se crea una variable de tipo Círculo a la que se asigna
             * el objeto pasado como parámetro valiéndonos de casting (enmascaramiento).
             * Esta variable se crea para poder invocar campos y métodos de la clase Círculo,
             * ya que esto no se podria hacer sobre un objeto de tipo Object.
             * Con esta variable, se realizan las comparaciones oportunas y se devuelve un resultado.*/
             Circulo_CU00694B tmpCirculo = (Circulo_CU00694B) obj;
           
            /* En este caso se invoca el método equals de la superclase Figura,
             * con lo que se dice que para que dos círculos sean iguales
             * han de coincidir la dimensionPrincipal.*/
            if (super.equals(tmpCirculo)) {
                return true;
            } else {
                return false;
            }
           
        } else {
            return false;
        }
       
    } // Cierre del método equals
   
    /**
     * Método para clacular el área del círculo
     * @return El área del círculo.
     */
    public double getAreaCirculo() {
        return 3.1416 * (dimensionPrincipal*dimensionPrincipal);
    } // Cierre del método para clacular el área del círculo
   
    /**
     * Método para mostar la Información del Circulo
     */
    public void mostrarDatos() {
        super.mostrarDatos();
         System.out.println ("\tPor lo tanto, el Área del Circulo es: 3.1416*(" + dimensionPrincipal + "*" + dimensionPrincipal + ") = " + getAreaCirculo());
    } // Cierre del método para mostar la Información del Circulo

} // Cierre de la Clase


Clase Test:

Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DEL MÉTODO EQUALS.<br>
 * Esta Clase define una clase test para probar Herencias y método Equals.<br>
 * Clase 4 del Ejercicio del Tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos".
 * @author aprenderaprogramar.com
 * @version 20151204.01
 */
public class TestEquals_CU00694B{
   
    public static void main (String [ ] Args) {
       
        /* Creación de 3 objetos Cuadrado
         * Se le pasa 1 parámetros gestionado por el constructor de la superclase Figura*/
        Cuadrado_CU00694B cuadrado1 = new Cuadrado_CU00694B (55);
        Cuadrado_CU00694B cuadrado2 = new Cuadrado_CU00694B (25);
        Cuadrado_CU00694B cuadrado3 = new Cuadrado_CU00694B (55);
       
        /* Creación de 3 objetos Circulo
         * Se le pasa 1 parámetros gestionado por el constructor de la superclase Figura*/
        Circulo_CU00694B circulo1 = new Circulo_CU00694B (48);
        Circulo_CU00694B circulo2 = new Circulo_CU00694B (48);
        Circulo_CU00694B circulo3 = new Circulo_CU00694B (25);
       
        // Se limpia la pantalla de la Consola
        System.out.println("\f");
       
        // Se muestran en pantalla las compraciones de los distintos objetos
        System.out.println ("COMPARATIVA DE LOS CUADRADOS");
        System.out.println ("----------------------------");
        System.out.println ("- El Cuadrado1:");
        cuadrado1.mostrarDatos();
        System.out.println ("- El Cuadrado2:");
        cuadrado2.mostrarDatos();
        System.out.println ("- El Cuadrado3:");
        cuadrado3.mostrarDatos();
        System.out.println ("- Comparaciones:");
        System.out.println ("\t¿Son iguales el cuadrado1 y el cuadrado2? " + cuadrado1.equals(cuadrado2) );
        System.out.println ("\t¿Son iguales el cuadrado1 y el cuadrado3? " + cuadrado1.equals(cuadrado3) );
        System.out.println ("\t¿Son iguales el cuadrado2 y el cuadrado3? " + cuadrado2.equals(cuadrado3) );
        System.out.println(""); // Se imprime una línea en Blanco de separación
        System.out.println ("COMPARATIVA DE LOS CÍCULOS");
        System.out.println ("--------------------------");
        System.out.println ("- El Círculo1:");
        circulo1.mostrarDatos();
        System.out.println ("- El Círculo2:");
        circulo2.mostrarDatos();
        System.out.println ("- El Círculo3:");
        circulo3.mostrarDatos();
        System.out.println ("- Comparaciones:");
        System.out.println ("\t¿Son iguales la circulo1 y la circulo2? " + circulo1.equals(circulo2) );
        System.out.println ("\t¿Son iguales la circulo1 y la circulo3? " + circulo1.equals(circulo3) );
        System.out.println ("\t¿Son iguales la circulo2 y la circulo3? " + circulo2.equals(circulo3) );
        System.out.println(""); // Se imprime una línea en Blanco de separación
        System.out.println ("Se realiza una ultima comprobación entre uno de los cuadrados y un círculo con la misma Medida Proncipal");
        System.out.println ("\t¿Son iguales la cuadrado2 y la circulo3? " + cuadrado2.equals(circulo3) );
       
    } //Cierre del main
   
} //Cierre de la clase

Espero vuestros comentarios,

Muchas gracias,

Saludos,
Título: Re:Java sobreescribir método equals igualdad objeto circulo y cuadrado CU00694B
Publicado por: Mario R. Rancel en 06 de Diciembre 2015, 12:49
Buenas tardes Enzo

El ejercicio después de revisarlo lo veo correcto, considerando que la dimensión principal de un cuadrado es su lado y de un círculo su radio.

Para tener precisión matemática con el número pi te recomiendo usar Math.PI que es una constante disponible a través del api de Java.

En lugar de return 3.1416 * (dimensionPrincipal*dimensionPrincipal); escribiríamos return Math.PI * (dimensionPrincipal*dimensionPrincipal);

Para hacer uso del polimorfismo en lugar de esta declaración:

        Cuadrado_CU00694B cuadrado1 = new Cuadrado_CU00694B (55);
        Cuadrado_CU00694B cuadrado2 = new Cuadrado_CU00694B (25);
        Cuadrado_CU00694B cuadrado3 = new Cuadrado_CU00694B (55);

Puedes usar esta:

        Figura_CU00694B cuadrado1 = new Cuadrado_CU00694B (55);
        Figura_CU00694B cuadrado2 = new Cuadrado_CU00694B (25);
        Figura_CU00694B cuadrado3 = new Cuadrado_CU00694B (55);

En este caso el tipo estático es Figura y el dinámico Cuadrado.

Lo mismo para los círculos.

Hay una cosa que no has hecho y sería interesante que hicieras: en lugar de mostrarDatos() usar el método toString(). El método toString es un estándar usado por todos los programadores y cuanto antes nos acostumbremos a usarlo mejor. Tener en cuenta que toString es un método tipo función que devuelve un String, no es un void.

Saludos
Título: Re:Java sobreescribir método equals igualdad objeto circulo y cuadrado CU00694B
Publicado por: Enzo en 08 de Diciembre 2015, 16:33
Hola Mario,

Ok. Tienes razón. Voy a realizar los cambios que me comentas.

Muchas gracias

Un Saludo,