Glosario

Los términos del curso con una definición breve, ordenados por parte del curso. Siguen la regla de la guía de estilo:

  • La mayoría de los términos técnicos se dicen en inglés, como los usan los programadores y como aparecen en la documentación y en los mensajes de error (override, garbage collector, unit test, wildcard). Esas entradas están en inglés y se explican en español.
  • Los que de verdad se usan en español (clase, herencia, excepción, colección) van en español, con el término en inglés entre paréntesis.

Herramientas

Término Definición
JDK Java Development Kit: el conjunto de herramientas para desarrollar en Java: compilador (javac), máquina virtual (java), jshell, javadoc.
JVM Java Virtual Machine: el programa que ejecuta el bytecode; la misma clase compilada corre en cualquier sistema que tenga una JVM.
bytecode Las instrucciones de la JVM que produce javac en los archivos .class.
JIT Just-in-time compiler: la parte de la JVM que traduce a código de máquina el bytecode que más se ejecuta.
class path La lista de carpetas y jars donde java y javac buscan las clases (-cp).
Archivo fuente compacto (compact source file) Archivo .java sin declaración de clase, con un void main(); se ejecuta con java Archivo.java (Java 25).
debugger Herramienta para ejecutar un programa paso a paso e inspeccionar sus variables.
stack trace La lista de las llamadas activas que imprime la JVM cuando una excepción no se captura.

Objetos y clases

Término Definición
Clase (class) Descripción de los campos y métodos que tendrán los objetos creados a partir de ella.
Objeto, instancia (object, instance) Valor creado con new a partir de una clase; tiene estado, comportamiento e identidad.
Campo, atributo (field, attribute) Variable que pertenece a cada objeto (campo de instancia) o a la clase (static).
Método (method) Operación definida en una clase; los métodos de instancia trabajan sobre un objeto (this).
Constructor Código que inicializa un objeto nuevo; se llama con new y tiene el nombre de la clase.
overloading Tener varios métodos o constructores con el mismo nombre y distintos parámetros; el compilador elige cuál llamar según los tipos de los argumentos.
Referencia (reference) Valor que indica dónde está un objeto; las variables de tipo clase guardan referencias, no objetos.
stack La zona de memoria donde vive un stack frame por cada llamada activa.
stack frame El espacio de una llamada en el stack: sus parámetros y variables locales. Se libera cuando el método termina.
call stack Los stack frames de las llamadas activas, el más reciente arriba; el stack trace lo muestra.
heap La zona de memoria donde la JVM crea los objetos.
null La referencia que no apunta a ningún objeto; usarla lanza NullPointerException.
garbage collector La parte de la JVM que libera los objetos a los que ya no llega ninguna referencia (garbage collection).
memory leak Objetos que el programa ya no necesita pero siguen alcanzables (por ejemplo, en una lista que nunca se vacía), así que el garbage collector no los puede liberar.
overflow Un cálculo con enteros cuyo resultado no cabe en el tipo: el valor da la vuelta sin avisar (int de más de 2 147 483 647).
Identidad / igualdad (identity / equality) Dos referencias al mismo objeto (==) frente a dos objetos con el mismo valor lógico (equals).
Encapsulamiento (encapsulation) Ocultar el estado de un objeto (private) y permitir cambiarlo solo a través de sus métodos.
Invariante (invariant) Condición que el objeto cumple siempre entre llamadas a sus métodos (p. ej., stock ≥ 0).
getter / setter Métodos que leen o cambian un campo; un setter debe proteger los invariantes.
Modificador de acceso (access modifier) public, protected, private o el acceso de paquete: quién puede usar un miembro.
Miembro estático (static member) Campo o método que pertenece a la clase y no a cada objeto.
Paquete (package) Agrupación de clases con un nombre común (bodega.ventas); también define el acceso de paquete.
Módulo (module) Agrupación de paquetes que declara qué exporta y de qué depende (module-info.java).
Inmutable / mutable (immutable / mutable) Un objeto inmutable no cambia su estado después de construido; uno mutable sí.
record Clase inmutable cuyos campos, constructor, equals, hashCode y toString declara el compilador.
enum Tipo con un conjunto fijo de constantes, que pueden tener campos y métodos.
ArrayList Lista de tamaño variable respaldada por un arreglo.
Responsabilidad (responsibility) Lo que una clase sabe y lo que hace; una buena clase tiene pocas y relacionadas.
Diagrama de clases (class diagram) Dibujo UML de las clases, sus miembros y sus relaciones (asociación, herencia, composición).

Herencia, polimorfismo e interfaces

Término Definición
Herencia (inheritance) Una clase (subclase) extiende otra (superclase) y recibe sus campos y métodos.
Superclase / subclase (superclass / subclass) La clase que se extiende y la que extiende (class B extends A).
override Una subclase redefine un método heredado con la misma firma; se marca con @Override. Se dice hacer override de toString.
Polimorfismo (polymorphism) Una misma llamada se comporta distinto según la clase real del objeto.
dynamic dispatch Elegir en tiempo de ejecución qué versión de un método con override se ejecuta, según la clase real del objeto.
vtable La tabla que HotSpot guarda por cada clase, con la versión de cada método que le corresponde; con ella hace el dynamic dispatch.
Tipo estático / tipo dinámico (static type / dynamic type) El tipo declarado de la variable frente a la clase real del objeto al que apunta.
casting Conversión explícita de tipo: (SmsNotification) n.
upcast / downcast Un upcast va hacia arriba en la jerarquía (de subclase a superclase) y siempre funciona; un downcast va hacia abajo y puede fallar con ClassCastException.
shadowing Un parámetro o una variable local con el mismo nombre que un campo lo tapa dentro del método; para llegar al campo se escribe this.nombre.
Ocultar (hiding) Un campo o un método static de la subclase con el mismo nombre que uno de la superclase no le hace override: lo oculta, y cuál se usa depende del tipo estático.
Clase abstracta (abstract class) Clase que no se puede instanciar y puede declarar métodos sin implementación.
Interfaz (interface) Tipo que declara métodos que las clases se comprometen a implementar.
Método default (default method) Método con implementación dentro de una interfaz (default).
Composición (composition) Construir un objeto a partir de otros que guarda como campos (“tiene un”).
Delegación (delegation) Un objeto pasa una tarea a otro que guarda como campo.
Principio de sustitución de Liskov (Liskov substitution principle, LSP) Un objeto de la subclase debe poder usarse donde se espera la superclase sin romper el programa.
sealed Una clase o interfaz sealed lista qué clases pueden extenderla (sealed ... permits).
pattern matching Comprobar el tipo o la forma de un valor y extraer sus partes en el mismo paso (instanceof, switch).
test double Objeto que reemplaza a una dependencia real en una prueba. Los más comunes son el stub, el spy, el mock y el fake.
stub Test double que devuelve respuestas fijas.
spy Test double que anota cómo lo llamaron, para revisarlo después en la prueba.
mock Test double al que se le dice de antemano qué llamadas debe recibir, y que falla si no las recibe.
fake Test double con una implementación de verdad pero simple, por ejemplo un repositorio en memoria en lugar de uno en archivos.

Programar con tipos

Término Definición
Excepción (exception) Objeto que representa un error y que interrumpe el flujo normal del programa.
Lanzar / capturar (throw / catch) Señalar un error con throw y manejarlo con try-catch.
Propagar (propagate) Dejar que una excepción suba al método que hizo la llamada.
checked Una excepción checked es una que el compilador obliga a capturar o declarar con throws (IOException).
unchecked Una excepción unchecked es una subclase de RuntimeException; el compilador no exige manejarla.
try-with-resources try (recurso) { ... }: cierra el recurso al terminar, aunque haya una excepción.
Precondición / postcondición (precondition / postcondition) Lo que un método exige al ser llamado y lo que garantiza al terminar.
Genéricos (generics) Clases, interfaces y métodos parametrizados por tipos (List<String>).
type parameter La variable de tipo de una declaración genérica (T en Box<T>).
type argument El tipo concreto que se escribe entre <> al usar una clase genérica (String en List<String>).
bounded type Un type parameter restringido con un bound: <T extends Coded> solo acepta Coded y sus subtipos, y dentro de la clase se pueden usar los métodos de Coded.
wildcard El ? en un tipo genérico; ? extends T para leer y ? super T para escribir.
type erasure El compilador quita los type arguments; en tiempo de ejecución List<String> es solo List.
raw type Un tipo genérico usado sin type arguments (List en lugar de List<String>); existe por compatibilidad y no se debe usar.
wrapper La clase que representa a un primitivo como objeto: Integer para int, Double para double.
boxing / unboxing La conversión entre un primitivo y su wrapper (int ↔ Integer); cuando la hace el compilador solo, se llama autoboxing.
Colección (collection) Objeto que agrupa elementos; la raíz del Collections Framework.
Collections Framework Las interfaces (List, Set, Map…) y las implementaciones de colecciones de la biblioteca estándar.
Lista, conjunto, mapa (list, set, map) Secuencia ordenada; colección sin repetidos; asociación de claves a valores.
Iterador (iterator) Objeto que recorre una colección elemento por elemento.
Comparador (comparator) Objeto que define un orden entre dos elementos; Comparable define el orden natural.
hash code El entero que devuelve hashCode: resume un objeto, y objetos iguales según equals deben tener el mismo.
bucket Cada casilla de la tabla de un HashMap o un HashSet; el hash code decide en qué bucket va un elemento.
lambda Función anónima escrita como expresión: p -> p.price() > 10.
Interfaz funcional (functional interface) Interfaz con un solo método abstracto; se puede implementar con una lambda.
Referencia a método (method reference) Forma corta de una lambda que llama a un método: Product::name.
stream Secuencia de elementos que se procesa con operaciones encadenadas (filter, map, collect).
pipeline La cadena de operaciones de un stream, desde la fuente hasta la operación terminal.
Operación intermedia / terminal (intermediate / terminal operation) Las intermedias devuelven otro stream y son lazy; la terminal produce el resultado.
lazy Que no se ejecuta hasta que hace falta: las operaciones intermedias de un stream no hacen nada hasta que llega la terminal.
Optional Contenedor que tiene un valor o está vacío; evita devolver null.

Diseño

Término Definición
Cohesión (cohesion) Cuánto se relacionan entre sí las responsabilidades de una clase; se busca alta.
Acoplamiento (coupling) Cuánto depende una clase de los detalles de otras; se busca bajo.
SOLID Cinco principios: responsabilidad única, abierto/cerrado, sustitución de Liskov, segregación de interfaces, inversión de dependencias.
Principio abierto/cerrado (open/closed principle) Una clase debe poder extenderse sin modificar su código.
Inversión de dependencias (dependency inversion) Depender de abstracciones (interfaces) y no de clases concretas.
Inyección de dependencias (dependency injection) Pasar a un objeto sus dependencias (por el constructor) en lugar de que las cree él.
Patrón de diseño (design pattern) Solución con nombre a un problema de diseño que se repite.
Strategy Patrón: encapsular algoritmos intercambiables detrás de una interfaz.
Observer Patrón: un objeto, el subject, avisa a los objetos registrados, sus observers, cuando cambia.
Factory Patrón: un método u objeto se encarga de crear instancias, ocultando la clase concreta.
Composite Patrón: tratar igual a un objeto simple y a un grupo de objetos.
Decorator Patrón: envolver un objeto para agregarle comportamiento con la misma interfaz.
Template Method Patrón: la superclase fija los pasos de un algoritmo y las subclases completan los que cambian.
singleton Patrón: una clase con una sola instancia global; se usa con cuidado.
builder Patrón: construir un objeto complejo paso a paso.
refactoring Cambiar la estructura del código sin cambiar su comportamiento, apoyándose en las pruebas. El verbo es refactorizar.
code smell Señal de un posible problema de diseño: métodos largos, código duplicado, clases que saben demasiado.
unit test Prueba automática de una unidad pequeña (una clase o un método) aislada del resto.
assertion Comprobación dentro de una prueba (assertEquals, assertThrows).
Serialización (serialization) Convertir un objeto en bytes o texto para guardarlo o enviarlo, y reconstruirlo después.
stream de E/S (I/O stream) Secuencia de bytes o caracteres que se lee o escribe (InputStream, Reader); no es lo mismo que un stream de datos.
buffer Memoria intermedia donde se juntan los datos antes de leerlos o escribirlos de una vez; un BufferedReader lee por bloques.
Programación orientada a eventos (event-driven programming) El programa reacciona a eventos (clics, teclas, mensajes) con handlers registrados.
listener Objeto que se registra para que le avisen cuando pasa algo (LowStockListener).
handler El método o la lambda que se ejecuta cuando llega un evento.
callback Código que se le pasa a otro para que lo llame después, cuando corresponda.
event loop El ciclo que espera eventos y llama a sus handlers, uno por uno.