Skip to content

Instantly share code, notes, and snippets.

@alan80avalos
Created September 4, 2025 02:53
Show Gist options
  • Select an option

  • Save alan80avalos/fb92e741cf35956126f646a8639239ca to your computer and use it in GitHub Desktop.

Select an option

Save alan80avalos/fb92e741cf35956126f646a8639239ca to your computer and use it in GitHub Desktop.
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());
}
}
}
@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