Java - Herencia figuras geometricas

 
Vista:
sin imagen de perfil

Herencia figuras geometricas

Publicado por Gonzalo (10 intervenciones) el 14/01/2022 17:11:05
Buenas tardes, estaba buscando un codigo que me permita responder el siguiente ejercicio:

Realiza un programa que muestre un menú para seleccionar entre 3 fi-guras geométricas, triangulo, rectángulo y círculo. Debemos implemen-tar una clase por cada una de estas figuras de manera que contenga sus dimensiones y a través de dos métodos calcular su área y perímetro. Cuando seleccionemos una de estas figuras en el menú nos pedirá sus atributos por teclado y deberá mostrar su área y perímetro. El programa no se deberá acabar hasta que se elija la opción salir.

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Herencia figuras geometricas

Publicado por Kabuto (1381 intervenciones) el 15/01/2022 01:28:43
En vez de buscar un código, intenta crearlo tú.

Mencionas que hay herencia en este ejercicio, así que posiblemente debas crear una clase madre que se llame por ejemplo Figura
Esta tendrá tres clases hijas: Rectangulo, Triangulo y Circulo.


La clase madre debería tener los atributos y métodos comunes a TODAS las figuras, en este caso, los atributos comunes podrían ser el area y el perimetro.

Los métodos comunes, sería pues unos getters que retornen el valor del area y del perimetro.

También debería tener unos métodos que calculen el valor del área y del perímetro, pero estos cálculos se hacen de forma distinta para cada figura.
Así que estos métodos, si los declaramos dentro de Figura, los haremos abstractos. Esto significa que aquí, en Figura, no tendrán código, pero sus clases hijas, al heredarlos, estarán obligadas cada una a escribir el código necesario.
De hecho, la propia clase Figura podría ser declarada como abstracta, ya que no vamos a querer instanciar objetos de esta clase, si no solo de sus hijas.

Esta podría ser la clase Figura, no tiene constructor, no lo necesita.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public abstract class Figura {
 
	//Atributos comunes a todas las figuras
	protected double area;
	protected double perimetro;
 
	//Métodos get
	public double getArea() {
		return area;
	}
 
	public double getPerimetro() {
		return perimetro;
	}
 
	/*
	 * Métodos abstractos, cada figura "hija"
	 * sobreescribirá estos métodos para hacer
	 * los cálculos de estos atributos a su manera
	 */
	protected abstract void calcularArea();
 
	protected abstract void calcularPerimetro();
 
}

Ahora hay que escribir las clases hijas. Cada una heredará de Figura, aportará sus propios atributos y, mediante estos atributos, escribirá el código necesario para hacer los cálculos del área y del perímetro.

Veamos por ejemplo la clase Rectángulo.
Un Rectángulo tiene una base y una altura, esos son los atributos necesario para definir un Rectángulo y son además los necesarios para calcular área y perímetro.
Podemos hacer que su constructor reciba los valores necesarios para inicializar sus atributos y que acto seguido, invoque los métodos que calculan el área y el perímetro.
Así al construir este tipo de figura, automáticamente tendremos los cálculos realizados.

El código para calcular el área y el perímetro lo ponemos en los dos métodos heredados de la clase Figura
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Rectangulo extends Figura {
 
	//Atributos de esta figura
	private double base;
	private double altura;
 
	//Al construir una figura, automáticamente se calcula el área y perímetro
	public Rectangulo(double base, double altura) {
		this.base = base;
		this.altura = altura;
		calcularArea();
		calcularPerimetro();
	}
 
	/*
	 * Sobrescribimos los métodos heredados de la clase madre Figura
	 * Los atributos área y perímetro son visibles en el ámbito de Rectangulo
	 * porque en la clase Figura se establecieron como protected en lugar de private
	 */
	@Override
	protected void calcularArea() {
		area = base * altura;
	}
 
	@Override
	protected void calcularPerimetro() {
		perimetro = (2*base) + (2*altura);
	}
 
}


Siguiendo este ejemplo, intenta tú ahora escribir las clases Triangulo y Circulo.
Investiga y averigua cómo se calculan el perímetro y el área en estas figuras, para saber que atributos vas a necesitar definir para cada una de ellas.
En el circulo es fácil, solo necesitas el radio.
Para el triangulo, necesitas base y altura para el área. Pero para su perímetro necesitarás otros atributos. Averígualo.

Comparte por aquí lo que hayas conseguido hacer, lo revisamos, y ya solo quedaría hacer el programa principal con el menú de opciones de usuario.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Herencia figuras geometricas

Publicado por Gonzalo (10 intervenciones) el 15/01/2022 01:36:49
Al final lo pude solucionar yo, estoy pendiente de crear otro hilo con otro ejercicio que me esta dando bastantes problemas.

El codigo que me quedo no fue nada limpio la verdad. Seguramente se pueda modificar y abreviar. A mi me quedo esto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class Main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
 
        boolean enEjecucion= true;
 
 
        do{
 
        System.out.println("1.Rectangulo");
        System.out.println("2.Circulo");
        System.out.println("3.Triangulo");
        System.out.println("Seleccione una opcion");
        Scanner sc = new Scanner (System.in);
        int opcion= sc.nextInt();
 
        switch(opcion){
            case 1:{
                Rectangulo rectangulo = new Rectangulo(0,0,0,0);
                System.out.println("Para un rectangulo de alto "+ rectangulo.getAlto()+ " y de ancho "+ rectangulo.getAncho()+
                " el area del rectangulo es "+ rectangulo.getArea()+ " y su perimetro es "+
                rectangulo.getPerimetro()
                );
                break;
            }
            case 2:{
                Circulo circulo = new Circulo (0,0,0);
                System.out.println("El radio del circulo es "+ circulo.getRadio()+ " con lo cual su area es "
                        + circulo.getArea()+ " y su perimetro es "+ circulo.getPerimetro());
                break;
            }
            case 3:{
                Triangulo triangulo = new Triangulo (0,0,0,0,0,0);
                System.out.println("El area del triangulo es "+ triangulo.getArea()+ " y su perimetro es "+
                        triangulo.getPerimetro());
                break;
            }
            default:{
                System.out.println("No existe la opción disponible");
            }
 
 
 
        }
            System.out.println("¿Desea realizar otra operacion? Y/N ");
            String respuesta = leerTeclado();
            if(respuesta.equalsIgnoreCase("N")){
            enEjecucion=false;
            }
 
        }while(enEjecucion);
    }
   private static String leerTeclado (){
   String retorno= "";
   Scanner sc =  new Scanner (System.in);
   retorno= sc.nextLine();
   return retorno;
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Figuras {
 
    protected double area;
    protected double perimetro;
 
 
    public Figuras(double area, double perimetro) {
        this.area = area;
        this.perimetro = perimetro;
    }
 
    //getter y setter
 
    public double getArea() {
        return area;
    }
 
    public void setArea(double area) {
        this.area = area;
    }
 
    public double getPerimetro() {
        return perimetro;
    }
 
    public void setPerimetro(double perimetro) {
        this.perimetro = perimetro;
    }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public class Rectangulo extends Figuras{
 
 
    //atributos
    double alto;
    double ancho;
 
 
    //constructor
    //creo el objeto
 
 
    public Rectangulo(double alto, double ancho, double area, double perimetro) {
        super(area, perimetro);
        System.out.println("Introduzca el alto");
        Scanner sc= new Scanner(System.in);
        this.alto = sc.nextDouble();
        System.out.println("Introduzca el ancho");
        this.ancho = sc.nextDouble();
    }
 
 
    // Getter y setter
    public double getArea() {
 
        return alto*ancho;
    }
 
    public void setArea(double area) {
        this.area = area;
    }
 
    public double getPerimetro() {
        return alto*2.0+ancho*2.0;
    }
 
 
    public void setPerimetro(double perimetro) {
        this.perimetro = perimetro;
    }
 
    public double getAlto() {
        return alto;
    }
 
    public void setAlto(double alto) {
        System.out.println("Introduzca el alto");
        Scanner sc= new Scanner(System.in);
        this.alto = sc.nextDouble();
    }
 
    public double getAncho() {
        return ancho;
    }
 
    public void setAncho(double ancho) {
        System.out.println("Introduzca el ancho");
        Scanner sc= new Scanner(System.in);
        this.ancho = sc.nextDouble();
    }
 
 
 
 
}

Y similar al rectangulo, hice el resto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Herencia figuras geometricas

Publicado por Kabuto (1381 intervenciones) el 15/01/2022 11:14:35
Por si te resulta útil, dejo aquí la solución propuesta según el ejemplo que iba desarrollando.

Nos faltaba la clase Triangulo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Triangulo extends Figura {
 
	private double base;
	private double altura;
	private double lado1;
	private double lado2;
	private double lado3;
 
	public Triangulo(double base, double altura, double lado1, double lado2, double lado3) {
		this.base = base;
		this.altura = altura;
		this.lado1 = lado1;
		this.lado2 = lado2;
		this.lado3 = lado3;
		calcularArea();
		calcularPerimetro();
	}
 
	@Override
	protected void calcularArea() {
		area = base * altura / 2;
	}
 
	@Override
	protected void calcularPerimetro() {
		perimetro = lado1 + lado2 + lado3;
	}
 
}

Clase Circulo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Circulo extends Figura {
 
	private double radio;
 
	public Circulo(double radio) {
		this.radio = radio;
		calcularArea();
		calcularPerimetro();
	}
 
	@Override
	protected void calcularArea() {
		area = Math.PI * Math.pow(radio, 2);
	}
 
	@Override
	protected void calcularPerimetro() {
		perimetro = 2 * Math.PI * radio;
	}
 
}

Y una clase Main con menú de opciones y métodos para pedir los datos necesarios según lo que se elija en el menú:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
public class Main {
 
	private static Scanner teclado = new Scanner(System.in);
 
	public static void main(String[] args) {
 
		String opcion = "";
 
		while (!opcion.equals("4")) {
			System.out.println("[1] -- Construir un Rectangulo");
			System.out.println("[2] -- Construir un Triangulo");
			System.out.println("[3] -- Construir un Circulo");
			System.out.println("[4] -- SALIR");
			System.out.print("Opcion: ");
			opcion = teclado.nextLine();
 
			switch(opcion) {
				case "1":
					construirRectangulo();
					break;
				case "2":
					construirTriangulo();
					break;
				case "3":
					construirCirculo();
					break;
				case "4":
					System.out.println("\n\t\tFIN DE PROGRAMA");
					break;
				default:
					System.out.println("Opcion equivocada\n");
			}
		}
 
	}
 
	private static void construirRectangulo() {
		System.out.print("\nBase: ");
		double base = Double.parseDouble(teclado.nextLine());
		System.out.print("Altura: ");
		double altura = Double.parseDouble(teclado.nextLine());
 
		Rectangulo rec = new Rectangulo(base, altura);
 
		System.out.println("Area calculada: " + rec.getArea());
		System.out.println("Perimetro calculado: " + rec.getPerimetro());
		System.out.println("\n");
	}
 
	private static void construirTriangulo() {
		System.out.print("\nBase: ");
		double base = Double.parseDouble(teclado.nextLine());
		System.out.print("Altura: ");
		double altura = Double.parseDouble(teclado.nextLine());
		System.out.print("Lado 1: ");
		double lado1 = Double.parseDouble(teclado.nextLine());
		System.out.print("Lado 2: ");
		double lado2 = Double.parseDouble(teclado.nextLine());
		System.out.print("Lado 3: ");
		double lado3 = Double.parseDouble(teclado.nextLine());
 
		Triangulo tri = new Triangulo(base, altura, lado1, lado2, lado3);
 
		System.out.println("Area calculada: " + tri.getArea());
		System.out.println("Perimetro calculado: " + tri.getPerimetro());
		System.out.println("\n");
	}
 
	private static void construirCirculo() {
		System.out.print("\nRadio: ");
		double radio = Double.parseDouble(teclado.nextLine());
 
		Circulo tri = new Circulo(radio);
 
		System.out.println("Area calculada: " + tri.getArea());
		System.out.println("Perimetro calculado: " + tri.getPerimetro());
		System.out.println("\n");
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar