Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: LuisM en 29 de Septiembre 2017, 17:13
-
Hola a todos !! Dejo a continuación las clases en respuesta al ejercicio propuesto CU00694B del tutorial de programación Java pdf. Desde ya muchas gracias.
Saludos, Luis
EJERCICIO
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
public class Figura
{
private float dimensionPrincipal;
public Figura(float dimensionPrincipal) { }
}
Clase Cuadrado
public class Cuadrado extends Figura
{
protected float superficie;
protected float lado;
public Cuadrado(float lado){
super(lado);
this.lado = lado;
calcularArea(lado);
}
public void calcularArea(float lado) {
superficie = lado*lado;
}
public boolean equals (Object obj) {
if (obj instanceof Cuadrado) {
Cuadrado tmpCuadrado = (Cuadrado) obj;
if (this.lado==tmpCuadrado.lado) {
return true; } else { return false; }
} else { return false; }
}
}
Clase Circulo
public class Circulo extends Figura
{
protected float radio;
protected double superficie;
public Circulo(float radio) {
super(radio);
this.radio=radio;
calcularArea(radio);
}
public void calcularArea(float radio) {
superficie=3.14*radio*radio;
}
public boolean equals (Object obj) {
if (obj instanceof Circulo) {
Circulo tmpCirculo = (Circulo) obj;
if (this.radio==tmpCirculo.radio ) {
return true; } else { return false; }
} else { return false; }
}
}
Clase TestFiguras
public class TestFiguras{
public static void main (String [ ] Args) {
Cuadrado cuadrado1 = new Cuadrado(3);
System.out.println("cuadrado 1 de lado:"+cuadrado1.lado+" y superficie:"+cuadrado1.superficie);
Cuadrado cuadrado2 = new Cuadrado(3);
System.out.println("cuadrado 2 de lado:"+cuadrado2.lado+" y superficie:"+cuadrado2.superficie);
Cuadrado cuadrado3 = new Cuadrado(5);
System.out.println("cuadrado 3 de lado:"+cuadrado3.lado+" y superficie:"+cuadrado3.superficie);
System.out.println ("¿Son iguales cuadrado1 y cuadrado2? " + cuadrado1.equals(cuadrado2) );
System.out.println ("¿Son el mismo objeto cuadrado1 y cuadrado2? " + (cuadrado1 == cuadrado2) );
System.out.println ("¿Son iguales cuadrado1 y cuadrado3? " + cuadrado1.equals(cuadrado3) );
Circulo circulo1 = new Circulo(2);
System.out.println("circulo 1 de radio:"+circulo1.radio+" y superficie:"+circulo1.superficie);
Circulo circulo2 = new Circulo(3);
System.out.println("circulo 2 de radio:"+circulo2.radio+" y superficie:"+circulo2.superficie);
Circulo circulo3 = new Circulo(2);
System.out.println("circulo 3 de radio:"+circulo3.radio+" y superficie:"+circulo3.superficie);
System.out.println ("¿Son iguales circulo1 y circulo2? " + circulo1.equals(circulo2) );
System.out.println ("¿Son el mismo objeto circulo1 y circulo2? " + (circulo1 == circulo2) );
System.out.println ("¿Son iguales circulo1 y circulo3? " + circulo1.equals(circulo3) );
} //Cierre del main
} //Cierre de la clase
Resultado de la ejecución
cuadrado 1 de lado:3.0 y superficie:9.0
cuadrado 2 de lado:3.0 y superficie:9.0
cuadrado 3 de lado:5.0 y superficie:25.0
¿Son iguales cuadrado1 y cuadrado2? true
¿Son el mismo objeto cuadrado1 y cuadrado2? false
¿Son iguales cuadrado1 y cuadrado3? false
circulo 1 de radio:2.0 y superficie:12.56
circulo 2 de radio:3.0 y superficie:28.259999999999998
circulo 3 de radio:2.0 y superficie:12.56
¿Son iguales circulo1 y circulo2? false
¿Son el mismo objeto circulo1 y circulo2? false
¿Son iguales circulo1 y circulo3? true
-
Hola, hay algo a lo que no le veo mucho sentido, y es que dentro del constructor de Cuadrado se realice el cálculo del área (idem para el círculo). Los constructores se usan principalmente para inicializar objetos y por ello no parece muy adecuado meter el cálculo del área dentro de un constructor.
Por otro lado, el ejercicio pide que se calcule el área a partir de la dimensión principal. Tú lo has hecho indirectamente, pero en realidad parece que no estás usando la dimensión principal.
Por otro lado, fíjate cómo has duplicado el código del equals en las clases cuadrado y circulo. La idea de usar herencia es evitar repetición de código. Para evitar repetición de código el método equals debería estar en la clase Figura (superclase) en lugar de en las subclases
Puedes ver un ejemplo de solución donde se usa la dimensión principal (para calcular el área, para el método equals dentro de la superclase) en https://www.aprenderaprogramar.com/foros/index.php?topic=2973.msg13450#msg13450
Saludos
-
Hola Alex !! Muchas gracias por tus correcciones que intenté (espero que si) aplicar. Con respecto a la comparación, primero compara en la clase "hijo" si son la misma figura y en caso de serlo compara en la clase "padre" Figura si tienen la misma dimensiónPrincipal. Además, hay 2 métodos que sobreescriben de la clase "padre" : el cálculo del área y la publicación de la superficie. Paso a dejar el código.
Un saludo,
Luis
Clase TestFiguras - método main
public class TestFiguras{
public static void main (String [ ] Args) {
Figura cuadrado1 = new Cuadrado(1); cuadrado1.calcularArea();
Figura cuadrado2 = new Cuadrado(3); cuadrado2.calcularArea();
Figura cuadrado3 = new Cuadrado(5); cuadrado3.calcularArea();
Figura cuadrado4 = new Cuadrado(3); cuadrado4.calcularArea();
Figura circulo1 = new Circulo(2); circulo1.calcularArea();
Figura circulo2 = new Circulo(3); circulo2.calcularArea();
Figura circulo3 = new Circulo(2); circulo3.calcularArea();
System.out.println("cuadrado 1 de lado:"+cuadrado1.getDimensionPrincipal()+" y superficie:"+cuadrado1.getArea());
System.out.println("cuadrado 2 de lado:"+cuadrado2.getDimensionPrincipal()+" y superficie:"+cuadrado2.getArea());
System.out.println("cuadrado 3 de lado:"+cuadrado3.getDimensionPrincipal()+" y superficie:"+cuadrado3.getArea());
System.out.println("cuadrado 4 de lado:"+cuadrado4.getDimensionPrincipal()+" y superficie:"+cuadrado4.getArea());
System.out.println(" ");
System.out.println ("¿Son iguales cuadrado1 y cuadrado2? " + cuadrado1.equals(cuadrado2) );
System.out.println ("¿Son iguales cuadrado1 y cuadrado3? " + cuadrado1.equals(cuadrado3) );
System.out.println ("¿Son iguales cuadrado4 y cuadrado2? " + cuadrado4.equals(cuadrado2) );
System.out.println ("¿Son el mismo objeto cuadrado4 y cuadrado2?? " + (cuadrado4 == cuadrado2) );
System.out.println ("¿Son iguales cuadrado4 y cuadrado3? " + cuadrado4.equals(cuadrado3) );
System.out.println("----------------------------------------------");
System.out.println("circulo 1 de radio:"+circulo1.getDimensionPrincipal()+" y superficie:"+circulo1.getArea());
System.out.println("circulo 2 de radio:"+circulo2.getDimensionPrincipal()+" y superficie:"+circulo2.getArea());
System.out.println("circulo 3 de radio:"+circulo3.getDimensionPrincipal()+" y superficie:"+circulo3.getArea());
System.out.println(" ");
System.out.println ("¿Son iguales circulo1 y circulo2? " + circulo1.equals(circulo2) );
System.out.println ("¿Son iguales circulo1 y circulo3? " + circulo1.equals(circulo3) );
System.out.println ("¿Son el mismo objeto circulo1 y circulo3? " + (circulo1 == circulo3) );
System.out.println("==============================================");
System.out.println ("¿Son iguales cuadrado2 y circulo2? " + cuadrado2.equals(circulo2) );
} //Cierre del main
} //Cierre de la clase
Clase "padre" Figura
public class Figura
{
private float dimensionPrincipal;
public Figura(float dimensionPrincipal) {
this.dimensionPrincipal = dimensionPrincipal;
}
public void calcularArea(){
}
public double getArea(){
return 0;
}
public float getDimensionPrincipal(){
return dimensionPrincipal;
}
public boolean equals (Object obj) {
Figura tmpFigura = (Figura) obj;
if (this.dimensionPrincipal==tmpFigura.dimensionPrincipal) {
return true; } else { return false; }
}
}
Clase Cuadrado
public class Cuadrado extends Figura
{
public float dimensionPrincipal;
public double superficie;
public Cuadrado(float dimensionPrincipal){
super(dimensionPrincipal);
this.dimensionPrincipal = dimensionPrincipal;
}
public void calcularArea() {
superficie = dimensionPrincipal*dimensionPrincipal;
}
public double getArea(){
return superficie;
}
public boolean equals(Object obj){
if (obj instanceof Cuadrado){
return super.equals(obj);
} else {
return false;
}
}
}
Clase Circulo
import java.lang.Math;
public class Circulo extends Figura
{
public float dimensionPrincipal;
public double superficie;
public Circulo(float dimensionPrincipal) {
super(dimensionPrincipal);
this.dimensionPrincipal=dimensionPrincipal;
}
public void calcularArea() {
superficie=Math.PI*dimensionPrincipal*dimensionPrincipal;
}
public double getArea(){
return superficie;
}
public boolean equals(Object obj){
if (obj instanceof Circulo){
return super.equals(obj);
} else {
return false;
}
}
}