Uso práctico de clases abstractas en Java con figuras geométricas

En la programación orientada a objetos con Java, las clases abstractas permiten definir una estructura común para múltiples subclases, ipmoniendo la implementación de ciertos comportamientos sin especificar cómo se realizan. A continuación se presenta un ejemplo práctico que ilustra este concepto mediante el cálculo del área y perímetro de distintas figuras geométricas.

Clase abstracta base: Figura

import java.text.DecimalFormat;

abstract class Figura {
    protected String tipo;

    protected Figura(String tipo) {
        this.tipo = tipo;
        System.out.print("Figura: " + tipo);
    }

    public abstract double calcularArea();
    public abstract double calcularPerimetro();
}

Esta clase define:

  • Un atributo protegido tipo para identificar la figura.
  • Un constructor que inicializa dicho tipo y lo imprime.
  • Dos métodos abstractos: calcularArea() y calcularPerimetro(), que deben ser implementados por cada subclase.

Subclase Circulo

class Circulo extends Figura {
    private static final double PI = Math.PI;
    private double radio;

    public Circulo(String nombre, double r) {
        super(nombre);
        this.radio = r;
    }

    @Override
    public double calcularArea() {
        return PI * radio * radio;
    }

    @Override
    public double calcularPerimetro() {
        return 2 * PI * radio;
    }
}

El círculo implementa los métodos abstractos usando fórmulas específicas y utiliza Math.PI para mayor precisión.

Subclase Rectangulo

class Rectangulo extends Figura {
    private double ancho;
    private double alto;

    public Rectangulo(String nombre, double ancho, double alto) {
        super(nombre);
        this.ancho = ancho;
        this.alto = alto;
    }

    @Override
    public double calcularArea() {
        return ancho * alto;
    }

    @Override
    public double calcularPerimetro() {
        return 2 * (ancho + alto);
    }
}

El rectángulo también implementa los métodos según sus propias reglas geométricas.

Clase principal de prueba

public class PruebaFiguras {
    public static void main(String[] args) {
        Figura rect = new Rectangulo("Rectángulo", 6.5, 10.3);
        System.out.println("; Área=" + rect.calcularArea());
        System.out.println("; Perímetro=" + rect.calcularPerimetro());

        Figura circ = new Circulo("Círculo", 10.2);
        DecimalFormat formato = new DecimalFormat("#.##");
        System.out.println("; Área=" + formato.format(circ.calcularArea()));
        System.out.println("; Perímetro=" + formato.format(circ.calcularPerimetro()));
    }
}

Este programa demuestra polimorfismo: las referencias del tipo Figura apuntan a instancias concretas, permitiendo invocar métodos comunes sin conocer el tipo real en tiempo de compilación. Además, se usa DecimalFormat para presentar resultados numéricos con dos decimales.

Etiquetas: java clases abstractas polimorfismo herencia orientación a objetos

Publicado el 9-3 05:54