Formas - Diagrama de clases
viernes, 10 de noviembre de 2023
⁃
Dificultad:
Intermedio
Objetivo
Cree un programa en Java que modele diferentes formas geométricas del siguiente diagrama de clases UML.
En el diagrama se representan atributos públicos, privados y protegidos además de la dependencia de clases y la herencia.
Comienza diseñando una clase base llamada FormaGeometrica
que contenga propiedades comunes a todas las formas, como el color. Implementa un constructor que permita inicializar estas propiedades.
Luego, crea clases específicas que hereden de FormaGeometrica
para representar diferentes formas, como círculos, cuadrados y triángulos. En estas clases, implementa métodos que calculen el área y el perímetro de cada forma.
Concluye el programa instanciando objetos de las diferentes formas y mostrando información relevante, como el área y el perímetro, en la consola.
Instrucciones Adicionales:
- Utiliza la clase principal del programa para instanciar objetos de las formas geométricas creadas.
- Asegúrate de imprimir en la consola la información detallada de cada forma, incluyendo su área y perímetro.
- Observa cómo la herencia y la encapsulación permiten una implementación más organizada y reutilizable del código.
Entrada
No requiere entrada
Salida
Información del Círculo:
Color: Rojo
Área: 78.53981633974483
Perímetro: 31.41592653589793
Información del Cuadrado:
Color: Azul
Área: 16.0
Perímetro: 16.0
Información del Triángulo:
Color: Verde
Área: 24.0
Perímetro: 18.0
Solución
import java.util.Scanner;
// Clase base FormaGeometrica
class FormaGeometrica {
// Propiedades comunes a todas las formas
private String color;
// Constructor para inicializar propiedades
public FormaGeometrica(String color) {
this.color = color;
}
// Método para obtener el color
public String getColor() {
return color;
}
// Método abstracto para calcular el área (será implementado por las clases hijas)
public double calcularArea() {
return 0;
}
// Método abstracto para calcular el perímetro (será implementado por las clases hijas)
public double calcularPerimetro() {
return 0;
}
}
// Clase para representar un círculo
class Circulo extends FormaGeometrica {
private double radio;
// Constructor para inicializar propiedades
public Circulo(String color, double radio) {
super(color);
this.radio = radio;
}
// Implementación del método para calcular el área
@Override
public double calcularArea() {
return Math.PI * radio * radio;
}
// Implementación del método para calcular el perímetro
@Override
public double calcularPerimetro() {
return 2 * Math.PI * radio;
}
}
// Clase para representar un cuadrado
class Cuadrado extends FormaGeometrica {
private double lado;
// Constructor para inicializar propiedades
public Cuadrado(String color, double lado) {
super(color);
this.lado = lado;
}
// Implementación del método para calcular el área
@Override
public double calcularArea() {
return lado * lado;
}
// Implementación del método para calcular el perímetro
@Override
public double calcularPerimetro() {
return 4 * lado;
}
}
// Clase para representar un triángulo
class Triangulo extends FormaGeometrica {
private double base;
private double altura;
// Constructor para inicializar propiedades
public Triangulo(String color, double base, double altura) {
super(color);
this.base = base;
this.altura = altura;
}
// Implementación del método para calcular el área
@Override
public double calcularArea() {
return 0.5 * base * altura;
}
// Implementación del método para calcular el perímetro (aproximado)
@Override
public double calcularPerimetro() {
return 3 * base; // Aproximación para un triángulo equilátero
}
}
// Clase principal
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Crear objetos de diferentes formas
Circulo circulo = new Circulo("Rojo", 5);
Cuadrado cuadrado = new Cuadrado("Azul", 4);
Triangulo triangulo = new Triangulo("Verde", 6, 8);
// Mostrar información de las formas
System.out.println("Información del Círculo:");
mostrarInformacionForma(circulo);
System.out.println("\nInformación del Cuadrado:");
mostrarInformacionForma(cuadrado);
System.out.println("\nInformación del Triángulo:");
mostrarInformacionForma(triangulo);
scanner.close();
}
// Método para mostrar información común de las formas
private static void mostrarInformacionForma(FormaGeometrica forma) {
System.out.println("Color: " + forma.getColor());
System.out.println("Área: " + forma.calcularArea());
System.out.println("Perímetro: " + forma.calcularPerimetro());
}
}
import java.util.Scanner;
// Clase base FormaGeometrica
class FormaGeometrica {
// Propiedades comunes a todas las formas
private String color;
// Constructor para inicializar propiedades
public FormaGeometrica(String color) {
this.color = color;
}
// Método para obtener el color
public String getColor() {
return color;
}
// Método abstracto para calcular el área (será implementado por las clases hijas)
public double calcularArea() {
return 0;
}
// Método abstracto para calcular el perímetro (será implementado por las clases hijas)
public double calcularPerimetro() {
return 0;
}
}
// Clase para representar un círculo
class Circulo extends FormaGeometrica {
private double radio;
// Constructor para inicializar propiedades
public Circulo(String color, double radio) {
super(color);
this.radio = radio;
}
// Implementación del método para calcular el área
@Override
public double calcularArea() {
return Math.PI * radio * radio;
}
// Implementación del método para calcular el perímetro
@Override
public double calcularPerimetro() {
return 2 * Math.PI * radio;
}
}
// Clase para representar un cuadrado
class Cuadrado extends FormaGeometrica {
private double lado;
// Constructor para inicializar propiedades
public Cuadrado(String color, double lado) {
super(color);
this.lado = lado;
}
// Implementación del método para calcular el área
@Override
public double calcularArea() {
return lado * lado;
}
// Implementación del método para calcular el perímetro
@Override
public double calcularPerimetro() {
return 4 * lado;
}
}
// Clase para representar un triángulo
class Triangulo extends FormaGeometrica {
private double base;
private double altura;
// Constructor para inicializar propiedades
public Triangulo(String color, double base, double altura) {
super(color);
this.base = base;
this.altura = altura;
}
// Implementación del método para calcular el área
@Override
public double calcularArea() {
return 0.5 * base * altura;
}
// Implementación del método para calcular el perímetro (aproximado)
@Override
public double calcularPerimetro() {
return 3 * base; // Aproximación para un triángulo equilátero
}
}
// Clase principal
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Crear objetos de diferentes formas
Circulo circulo = new Circulo("Rojo", 5);
Cuadrado cuadrado = new Cuadrado("Azul", 4);
Triangulo triangulo = new Triangulo("Verde", 6, 8);
// Mostrar información de las formas
System.out.println("Información del Círculo:");
mostrarInformacionForma(circulo);
System.out.println("\nInformación del Cuadrado:");
mostrarInformacionForma(cuadrado);
System.out.println("\nInformación del Triángulo:");
mostrarInformacionForma(triangulo);
scanner.close();
}
// Método para mostrar información común de las formas
private static void mostrarInformacionForma(FormaGeometrica forma) {
System.out.println("Color: " + forma.getColor());
System.out.println("Área: " + forma.calcularArea());
System.out.println("Perímetro: " + forma.calcularPerimetro());
}
}
Haz clic aquí para ver la solución del ejercicio
Compártelo
Compártelo en tus redes sociales y desafía a tus amigos a resolver problemas de programación. Juntos, podemos aprender y crecer.
Copiado
El codigo se ha copiado correctamente en el portapapeles.