Autor Tema: Java sobreescribir método equals igualdad objeto circulo y cuadrado CU00694B  (Leído 3564 veces)

Enzo

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 82
    • Ver Perfil
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,
« Última modificación: 06 de Diciembre 2015, 12:49 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
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

Enzo

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 82
    • Ver Perfil
Hola Mario,

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

Muchas gracias

Un Saludo,

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".