Created
September 4, 2025 02:53
-
-
Save alan80avalos/fb92e741cf35956126f646a8639239ca to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| abstract class Figura { | |
| public abstract double calcularArea(); | |
| public abstract double calcularPerimetro(); | |
| } | |
| class Rectangulo extends Figura { | |
| private double base; | |
| private double altura; | |
| public Rectangulo(double base, double altura) { | |
| if (base <= 0 || altura <= 0) { | |
| throw new IllegalArgumentException("Las dimensiones del rectángulo deben ser positivas"); | |
| } | |
| this.base = base; | |
| this.altura = altura; | |
| } | |
| @Override | |
| public double calcularArea() { | |
| return base * altura; | |
| } | |
| @Override | |
| public double calcularPerimetro() { | |
| return 2 * (base + altura); | |
| } | |
| } | |
| class Triangulo extends Figura { | |
| private double lado1; | |
| private double lado2; | |
| private double lado3; | |
| private double base; | |
| private double altura; | |
| public Triangulo(double lado1, double lado2, double lado3, double base, double altura) { | |
| // Validar que los lados sean positivos | |
| if (lado1 <= 0 || lado2 <= 0 || lado3 <= 0 || base <= 0 || altura <= 0) { | |
| throw new IllegalArgumentException("Todas las dimensiones deben ser positivas"); | |
| } | |
| // Validar que se cumpla la desigualdad triangular | |
| if (lado1 + lado2 <= lado3 || lado2 + lado3 <= lado1 || lado1 + lado3 <= lado2) { | |
| throw new IllegalArgumentException("Los lados no forman un triángulo válido"); | |
| } | |
| // Validar que la base sea uno de los lados | |
| if (base != lado1 && base != lado2 && base != lado3) { | |
| throw new IllegalArgumentException("La base debe ser igual a uno de los lados"); | |
| } | |
| this.lado1 = lado1; | |
| this.lado2 = lado2; | |
| this.lado3 = lado3; | |
| this.base = base; | |
| this.altura = altura; | |
| } | |
| @Override | |
| public double calcularArea() { | |
| return (base * altura) / 2; | |
| } | |
| @Override | |
| public double calcularPerimetro() { | |
| return lado1 + lado2 + lado3; | |
| } | |
| } | |
| class Circulo extends Figura { | |
| private double radio; | |
| public Circulo(double radio) { | |
| if (radio <= 0) { | |
| throw new IllegalArgumentException("El radio debe ser positivo"); | |
| } | |
| this.radio = radio; | |
| } | |
| @Override | |
| public double calcularArea() { | |
| return Math.PI * Math.pow(radio, 2); | |
| } | |
| @Override | |
| public double calcularPerimetro() { | |
| return 2 * Math.PI * radio; | |
| } | |
| } | |
| public class Main { | |
| public static void main(String[] args) { | |
| try { | |
| // Ejemplos válidos | |
| Figura rect = new Rectangulo(4, 6); | |
| Figura tri = new Triangulo(3, 4, 5, 3, 4); // Triángulo 3-4-5 (triángulo rectángulo) | |
| Figura circ = new Circulo(5); | |
| System.out.println("Rectángulo -> Área: " + rect.calcularArea() + " | Perímetro: " + rect.calcularPerimetro()); | |
| System.out.println("Triángulo -> Área: " + tri.calcularArea() + " | Perímetro: " + tri.calcularPerimetro()); | |
| System.out.println("Círculo -> Área: " + circ.calcularArea() + " | Perímetro: " + circ.calcularPerimetro()); | |
| // Ejemplos inválidos (comentados para evitar que el programa se detenga) | |
| // Figura rectInvalido = new Rectangulo(-1, 5); // Lanzará excepción | |
| // Figura triInvalido = new Triangulo(1, 1, 10, 1, 5); // Lanzará excepción (triángulo imposible) | |
| // Figura circInvalido = new Circulo(0); // Lanzará excepción | |
| } catch (IllegalArgumentException e) { | |
| System.out.println("Error: " + e.getMessage()); | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @startuml | |
| abstract class Figura { | |
| +abstract double calcularArea() | |
| +abstract double calcularPerimetro() | |
| } | |
| class Rectangulo extends Figura { | |
| -double base | |
| -double altura | |
| +Rectangulo(double base, double altura) | |
| +double calcularArea() | |
| +double calcularPerimetro() | |
| } | |
| class Triangulo extends Figura { | |
| -double lado1 | |
| -double lado2 | |
| -double lado3 | |
| -double base | |
| -double altura | |
| +Triangulo(double lado1, double lado2, double lado3, double base, double altura) | |
| +double calcularArea() | |
| +double calcularPerimetro() | |
| } | |
| class Circulo extends Figura { | |
| -double radio | |
| +Circulo(double radio) | |
| +double calcularArea() | |
| +double calcularPerimetro() | |
| } | |
| class Main { | |
| +static void main(String[] args) | |
| } | |
| @enduml |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment