Java - Ayuda con polimorfismo.

 
Vista:
sin imagen de perfil

Ayuda con polimorfismo.

Publicado por Junior__935 (1 intervención) el 21/01/2023 20:59:02
Hola, tengo un ejercicio sobre polimorfismo que no tengo muy claro como proceder y hacer lo que me pide.

Me pide lo siguiente: Construye la clase ConjuntoDeFiguras para que gestione un array de figuras de cualquier
clase. (utiliza las clases: figura, rectángulo y circulo del ejemplo del moodle herencia).
Entre sus métodos públicos debes incluir las siguientes operaciones con carácter polimórfico:
- Añadir una nueva figura
- Calcular el área total de las figuras almacenadas
- Imprimir por pantalla los datos de todas las figuras almacenadas.

La clase tendrá la siguiente estructura:
public class ConjuntoDeFiguras {
Figura[]A;
ConjuntoDeFiguras(){
A = new Figura[10];
}
void añade(Figura f){ }

double areaTotal(){ }

void imprimeTodo(){}
}

Prueba la clase ConjuntoDeFiguras desde el programa principal siguiente, en una clase nueva, usando
objetos de las clases especializadas Círculo y Rectángulo.
public static void main (String [] args){
double[] Lados = {3d,4d};
ConjuntoDeFiguras c = new ConjuntoDeFiguras();
c.añade(new Rectangulo(Lados, Color.green));
c.añade(new Circulo(5,Color.red));
c.imprimeTodo();
}

Las clases que me piden (Rectángulo y círculo) ya las tengo creadas con sus códigos respectivos, pero la duda me surge principalmente con la de ConjuntodeFiguras. No sé muy bien como debo añadir lo que me pide. Estoy bastante atascado.

Facilito el código de las clases creadas hasta ahora:
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
import java.awt.Color;
 
public class Clase_rectangulo extends Figura{
	private double[] Lados = new double[2];
 
	Clase_rectangulo(){
	}
 
			Clase_rectangulo(double[] Lados) {
				EstableceLados(Lados);
			}
 
			Clase_rectangulo(double[]Lados, Color color) {
				super(color);
				EstableceLados(Lados);
			}
			Clase_rectangulo(double[] Lados, Color color, int[] Posicion) {
			super(color, Posicion);
		EstableceLados(Lados);
			}
 
			public void EstableceLados(double[] Lados) {
			this.Lados[0] = Lados[0];
				this.Lados[1] = Lados[1];
			}
 
			public double[] DimeLados() {
				return Lados;
			}
 
			public double Perimetro() {
				return 2d*Lados[0] + 2d*Lados[1];
			}
	 	}
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
import java.awt.Color;
 
public class Clase_circulo extends Figura {
		private double Radio;
 
		Clase_circulo(){
		}
 
	public double getRadio() {
			return Radio;
		}
 
		public void setRadio(double radio) {
			Radio = radio;
		}
 
	Clase_circulo(double Radio) {
			super();
			EstableceRadio(Radio);
		}
		Clase_circulo(double Radio,Color color) {
			super(color);
			EstableceRadio(Radio);
		}
 
		Clase_circulo(double Radio, Color color, int[] Posicion) {
			super(color, Posicion);
			EstableceRadio(Radio);
	}
 
	public void EstableceRadio(double Radio) {
		this.Radio = Radio;
	}
 
		public double DimeRadio() {
			return Radio;
		}
			public double Perimetro() {
				return 2.0d*Math.PI*Radio;
			}
}

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
import java.awt.Color;
	public class Figura {
		private Color ColorFigura;
	private int[] Posicion = new int[2];
		Figura() {
		EstableceColor(Color.black);
		Posicion[0] = 0;
		Posicion[1] = 0;
 		}
 
	Figura(Color color) {
			EstableceColor(color);
			Posicion[0] = 0;
			Posicion[1] = 0;
		}
 
		Figura(Color color, int[] Posicion) {
			EstableceColor(color);
			EstableceCentro(Posicion);
		}
 
	public void EstableceColor(Color color) {
			ColorFigura = color;
		}
 
	public Color DimeColor() {
			return ColorFigura;
		}
 
		public void EstableceCentro(int[] Posicion) {
			this.Posicion[0] = Posicion[0];
			this.Posicion[1] = Posicion[1];
		}
 
		public int[] DimeCentro() {
			return Posicion;
		}
		public double Perimetro() {
			return 0d;
		}
	}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Conjuntodefiguras extends Figura {
 
	 Figura[]A;
	 Conjuntodefiguras(){
	 A = new Figura[10];
	 A [0] = new Figura();
	 A [1] = new Clase_circulo();
	 A [2] = new Clase_rectangulo();
	 }
	 void añade(Figura f){
 
	 }
 
	 double areaTotal(){
		 return 2.0d*Math.PI ;
}
 
	 void imprimeTodo(){}
	 System.out.println("Color: " + .Color)
 
	}

Y eso sería todo. Se agradecería cualquier tipo de ayuda.
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 Manolo72

Ayuda con polimorfismo.

Publicado por Manolo72 (18 intervenciones) el 22/01/2023 13:28:18
Básicamente el polimorfismo es la capcaidad de una clase de tener la implementación distinta a la de su(s) clase(s) hermana(s) para el mismo método.

Para tu ejemplo, lo que quiere es que hagas un arraylist de figuras pero casero. Para resolver tu problema tienes que aplicar los siguientes pasos.

1. Haz la clase Figura abstracta y añade un método abstracto calcularArea()

2. Crea para cada clase hija de Figura los metodos calcularArea() y sobreescribe el método toString() que será el que dé toda la información sobre la Figura al respecto. Obviamente las implementaciones de estos métodos son distintas para cada clase, pues el área del circulo no se calcula igual que el área del rectángulo, ni la información es igual, ect. Por eso se usa el polimorfismo, porque para cada calase hija la implementación del mismo método es distinta.

3. En la clase Conjuntodefiguras que tienes creada no tiene que ser hija de FIgura, pues entonces tendrías que implementar todos los métodos de la clase Figura y eso no te interesa. El atributo array de tipo Figura es correcto, pero tampoco es necesario que rellenes el array en el constructor, basta con que le des una longitud preestablecida, eso sí, ten en cuenta que en el futuro puede ser necesario aumentar esa longitud.

4. Para el método addFigure( Figura f) [Mejor ponlo en inglés y no uses la ñ para programar] simplemente ves donde es la útlima posición de tu array (donde la siguiente a una posición usada el resutlado sea null) y añade la figura que has pasado como parámetro (no crres una instancia de Figura, crea un instancia de la clase hija que quieras añadir, ya sea Circulo o Rectangulo). Aquí es donde tienes que ver que no hayas alcanzado el máximo tamaño del array, y si es ese caso, aumenta la longitud del atributo de tu clase (crea más métodos para estas cosas si lo ves necesario).

5. Para el método areaTotal() simplemente crea una variable donde sumar cada uno de los resultados de llamar al método calcularArea() para cada uno de los elementos del array y al final del mismo devuelve el valor. No te preocupes, si los has añadido con su clase correspondinete Java sabe identificar a que clase preguntar para usar el método apropiado.

6. Para la información de cada Figura, exactamente lo mismo que el paso anterior pero usando el método toString() que has sobreescrto en cada clase hija.


Espero que siguiendo estas pautas saques el ejercicio. Si tienes más dudas pregunta otra vez por aquí.
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