Resumen - Calculadora de figuras
Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 33 de 87.
Desafío
FácilVamos a construir una calculadora de formas que reúna todos los conceptos de polimorfismo que has aprendido en este capítulo. Crearás una clase abstracta Shape con subclases concretas, y luego usarás el polimorfismo para calcular y mostrar áreas de manera uniforme.
Organizarás tu código en cuatro archivos:
Shape.java: Crea una clase abstracta que sirva como base para todas las formas. Cada forma tiene un camponame(String). Incluye un constructor para inicializarlo, un método gettergetName()y un método abstractogetArea()que devuelva un double. También añade un métododescribe()que devuelva:[name]: [area](donde el área esté formateada a 2 decimales usandoString.format("%.2f", getArea())).Circle.java: Crea una clase concreta que extienda de Shape. Los círculos tienen un camporadius(double). Usasuperpara pasar "Circle" como nombre. ImplementagetArea()para devolver el área usandoMath.PI * radius * radius.Rectangle.java: Crea otra clase concreta que extienda de Shape. Los rectángulos tienen camposwidthyheight(ambos double). Pasa "Rectangle" como nombre al constructor padre. ImplementagetArea()para devolver el ancho multiplicado por el alto.Main.java: Construye una calculadora de formas que demuestre el polimorfismo en acción. Recibirás tres entradas: un radio para el círculo, un ancho y un alto para el rectángulo.Crea un Circle y un Rectangle, luego almacénalos en un arreglo de referencias de tipo
Shape. Recorre el arreglo y, para cada forma, imprime su descripción usando el métododescribe().Después del bucle, calcula e imprime el área total de todas las formas con el formato:
Total area: [sum](también formateado a 2 decimales). Usa un bucle separado o un acumulador para sumar las áreas llamando agetArea()en cada referencia de forma.
Recibirás tres entradas: el radio del círculo (double), el ancho del rectángulo (double) y el alto del rectángulo (double).
Tu salida debería mostrar tres líneas: una descripción para cada forma seguida del área total. ¡Observa cómo puedes tratar diferentes formas de manera uniforme a través del tipo abstracto Shape mientras cada forma calcula su área a su propia manera!
Pruébalo tú mismo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leer las entradas
double radius = scanner.nextDouble();
double width = scanner.nextDouble();
double height = scanner.nextDouble();
// TODO: Crear un objeto Circle usando el radius
// TODO: Crear un objeto Rectangle usando width y height
// TODO: Crear un arreglo de referencias Shape y almacenar ambas formas en él
// TODO: Recorrer el arreglo e imprimir la descripción de cada forma usando describe()
// TODO: Calcular el área total de todas las formas
// Usar un bucle o acumulador para sumar las áreas llamando a getArea() en cada forma
// TODO: Imprimir el área total con el formato: "Total area: [sum]"
// Usar String.format("%.2f", totalArea) para el formato
}
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Iterator