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. |