Repaso - Contador y utilidad
Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 19 de 87.
Desafío
FácilVamos a construir un sistema completo que combina una clase Counter para rastrear instancias con una clase de utilidad MathUtils, reuniendo todo lo que has aprendido sobre variables estáticas, métodos estáticos, bloques estáticos y constantes.
Crearás tres archivos para organizar tu código:
Counter.java: Crea una clase que rastree cuántas instancias se han creado:- Una variable estática privada para contar el total de instancias
- Una variable de instancia privada
idque almacena el identificador único de cada contador - Un constructor que incrementa el conteo total y asigna el conteo actual como el id de esta instancia
- Un método
getId()que devuelve el id único de este contador - Un método estático
getTotalCount()que devuelve cuántos objetos Counter se han creado
MathUtils.java: Crea una clase de utilidad con solo miembros estáticos (nunca instanciada):- Una constante pública
PIcon el valor3.14159 - Una constante pública
HALFcon el valor0.5 - Un método estático
square(int n)que devuelve n al cuadrado - Un método estático
cube(int n)que devuelve n al cubo - Un método estático
circleArea(double radius)que devuelve PI * radius * radius
- Una constante pública
Main.java: Demuestra ambas clases trabajando juntas. Recibirás dos entradas: un número para operaciones matemáticas y un conteo de cuántos objetos Counter crear. Imprime lo siguiente:Square: [value]Cube: [value]Circle area (radius=[number]): [value](área formateada a 2 decimales)- Para cada Counter creado, imprime:
Counter [id] created - Finalmente:
Total counters: [count]
Recibirás dos entradas: un número (int) para los cálculos matemáticos, y un conteo (int) de cuántos objetos Counter crear.
Recuerda acceder a los miembros estáticos a través del nombre de la clase (como MathUtils.PI y Counter.getTotalCount()), y usa String.format("%.2f", value) para formatear valores decimales.
Pruébalo tú mismo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
int count = scanner.nextInt();
// TODO: Usa los métodos estáticos de MathUtils para calcular e imprimir:
// - Cuadrado: [value]
// - Cubo: [value]
// - Área del círculo (radio=[number]): [value] (con formato de 2 decimales)
// TODO: Crea una cantidad 'count' de objetos Counter
// Por cada Counter creado, imprime: Counter [id] created
// TODO: Imprime el número total de contadores creados
// Total counters: [count]
}
}
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