Glosario de Términos Técnicos

Diccionario completo de acrónimos y conceptos del curso IF0100

Proyecto TaskFlow | Python / FastAPI / SQLAlchemy

1. Programación Orientada a Objetos y Principios

POO: Programación Orientada a Objetos. Paradigma donde el software se estructura como objetos que encapsulan datos (atributos) y comportamientos (métodos). Los cuatro pilares son: encapsulamiento, herencia, polimorfismo y abstracción.
Ejemplo: En TaskFlow, `Usuario`, `Proyecto` y `Tarea` son objetos con sus propios datos y comportamientos.
SOLID: 5 Principios de Diseño.
  • Single Responsibility: Una clase = una responsabilidad
  • Open/Closed: Abierto a extensión, cerrado a modificación
  • Liskov Substitution: Clases hijas sustituibles por padres
  • Interface Segregation: Interfaces pequeñas y específicas
  • Dependency Inversion: Depender de abstracciones, no concreciones
DRY: Don't Repeat Yourself. Principio que busca eliminar duplicación de código. Si repites lógica, extrae a una función/clase.
Ejemplo: Si validas emails en 3 lugares, crea una función `validar_email()` reutilizable.
KISS: Keep It Simple, Stupid. Mantén el código simple y directo. La simplicidad es mejor que la complejidad innecesaria.
Ejemplo: Usa una lista simple en lugar de una estructura de datos compleja si no es necesario.
YAGNI: You Ain't Gonna Need It. No implementes funcionalidades que crees que podrías necesitar en el futuro. Implementa solo lo que necesitas AHORA.
OOP: Object-Oriented Programming. Versión en inglés de POO.
Encapsulamiento: Ocultar los detalles internos de un objeto y exponer solo lo necesario mediante interfaces públicas. En Python se usa el prefijo `_` (protegido) o `__` (privado).
Ejemplo: `usuario._password` es protegido, no debería accederse directamente desde fuera.
Herencia: Mecanismo donde una clase (hija) hereda atributos y métodos de otra (padre). Permite reutilización y especialización.
Ejemplo: `UsuarioAdmin` hereda de `Usuario` pero añade permisos especiales.
Polimorfismo: Capacidad de diferentes objetos de responder al mismo mensaje de diferentes formas. Permite tratar objetos de diferentes clases de manera uniforme.
Ejemplo: Tanto `Usuario` como `Proyecto` podrían tener método `to_dict()`, cada uno implementándolo a su manera.
Abstracción: Proceso de identificar características esenciales de un objeto y ignorar detalles irrelevantes. Las clases abstractas definen interfaces sin implementación.
MRO: Method Resolution Order. Orden en que Python busca métodos en jerarquías de herencia múltiple. Se puede consultar con `Clase.__mro__`.
ABC: Abstract Base Class. Clase abstracta en Python (módulo `abc`). No puede instanciarse, solo heredarse. Define métodos que las subclases deben implementar.
Ejemplo: `IRepository` como ABC con método abstracto `save()`.
Property / @property: Decorador que permite acceder a métodos como atributos, implementando getters, setters y deleters controlados.
Ejemplo: `@property def email(self):` permite acceder como `usuario.email` en lugar de `usuario.email()`.
Type Hints: Anotaciones de tipo en Python (PEP 484). Indican qué tipos de datos se esperan (no son obligatorias en runtime pero ayudan al desarrollo).
Ejemplo: `def crear_usuario(nombre: str, edad: int) -> Usuario:`

2. Testing, TDD y Calidad de Código

TDD: Test-Driven Development. Desarrollo guiado por pruebas. Ciclo Red-Green-Refactor: 1) Escribe test que falla, 2) Escribe código mínimo para pasar, 3) Refactoriza.
BDD: Behavior-Driven Development. Desarrollo guiado por comportamiento. Usa lenguaje Gherkin (Given-When-Then) para describir comportamiento en términos de negocio.
DDD: Domain-Driven Design. Diseño orientado al dominio. Enfoque en modelar el software basado en el dominio de negocio real. Usa lenguaje ubicuo (ubiquitous language).
Ejemplo: En TaskFlow, las entidades Usuario, Proyecto, Tarea reflejan el dominio real de gestión de tareas.
Gherkin: Lenguaje específico de dominio para describir comportamiento en BDD. Sintaxis: Given (Dado), When (Cuando), Then (Entonces).
Ejemplo: `Dado que tengo un proyecto | Cuando agrego una tarea | Entonces aparece en la lista`
Fixture: Función pytest que proporciona datos/estado para tests. Se usa con decorador `@pytest.fixture`. Permite reutilizar setup de pruebas.
Ejemplo: Fixture que crea un usuario de prueba antes de cada test.
Mock: Objeto simulado que imita el comportamiento de objetos reales. Se usa para aislar tests de dependencias externas (DB, API, email).
Ejemplo: Simular el envío de email sin enviarlo realmente.
Cobertura (Coverage): Porcentaje de código ejecutado por los tests. Se mide con `pytest --cov`. Objetivo mínimo en este curso: 80%.
PEP 8: Python Enhancement Proposal 8. Guía de estilo oficial de Python. Define convenciones de formato: espacios, nombres, longitud de líneas (79 chars), etc.
Refactorización: Proceso de mejorar el código interno sin cambiar su comportamiento externo. Hacer el código más limpio, legible y mantenible.
Linter: Herramienta que analiza código fuente para detectar errores, violaciones de estilo y malas prácticas. Ejemplos: flake8, pylint, ruff.

3. Desarrollo Web y APIs

API: Application Programming Interface. Conjunto de reglas que permiten que dos aplicaciones se comuniquen. Define cómo hacer requests y qué respuestas esperar.
REST: Representational State Transfer. Estilo arquitectónico para diseñar APIs. Usa métodos HTTP (GET, POST, PUT, DELETE) y URLs semánticas.
Ejemplo: `GET /usuarios` lista usuarios, `POST /usuarios` crea uno nuevo.
HTTP: HyperText Transfer Protocol. Protocolo de comunicación web. Métodos principales:
  • GET: Obtener recursos (lectura)
  • POST: Crear recursos
  • PUT/PATCH: Actualizar recursos
  • DELETE: Eliminar recursos
Status Codes: Códigos de respuesta HTTP que indican el resultado de una petición:
  • 2xx: Éxito (200 OK, 201 Created, 204 No Content)
  • 3xx: Redirecciones (301, 302)
  • 4xx: Errores cliente (400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 422 Unprocessable Entity)
  • 5xx: Errores servidor (500 Internal Server Error)
JSON: JavaScript Object Notation. Formato de intercambio de datos ligero y legible. Estándar para APIs modernas.
Ejemplo: `{"nombre": "Juan", "edad": 25}`
URL: Uniform Resource Locator. Dirección de un recurso en la web. Ejemplo: `https://api.taskflow.com/usuarios`
Endpoint: Punto final de una API. URL específica donde un servicio puede ser accedido. Ejemplo: `/usuarios/{id}` es un endpoint.
CRUD: Create, Read, Update, Delete. Las 4 operaciones básicas de persistencia. En REST corresponden a POST, GET, PUT/PATCH, DELETE.
HTMX: Librería JavaScript que permite crear interfaces dinámicas usando atributos HTML. Permite hacer peticiones AJAX sin escribir JavaScript.
Ejemplo: `
Jinja2: Motor de templates para Python. Permite generar HTML dinámico con sintaxis de templates (`{{ variable }}`, `{% for %}`).
Bootstrap: Framework CSS que proporciona componentes pre-diseñados y sistema de grid responsivo. Versión 5 es la usada en el curso.
JWT: JSON Web Token. Estándar para transmitir información de forma segura entre partes. Usado para autenticación (tokens de sesión).
AJAX: Asynchronous JavaScript and XML. Técnica para actualizar partes de una página web sin recargarla completa.

4. Bases de Datos y Persistencia

ORM: Object-Relational Mapping. Técnica para mapear objetos de código a tablas de base de datos SQL. SQLAlchemy es el ORM usado en el curso.
Ejemplo: Un objeto `Usuario` en Python se guarda automáticamente en tabla `usuarios`.
SQL: Structured Query Language. Lenguaje para gestionar bases de datos relacionales. Instrucciones: SELECT, INSERT, UPDATE, DELETE.
CSV: Comma-Separated Values. Formato de archivo plano donde los datos se separan por comas. Fácil de leer/escribir pero sin estructura compleja.
Migration: Script que modifica el esquema de base de datos (crear tablas, agregar columnas, etc.). Alembic es la herramienta de migraciones usada.
Session: En SQLAlchemy, representa una conversación con la base de datos. Agrupa operaciones y permite commit/rollback de transacciones.
Transaction: Unidad de trabajo atómica. O se completa toda o no se aplica nada (ACID). Se confirma con `commit()` o revierte con `rollback()`.
Foreign Key: Clave foránea. Campo que referencia la clave primaria de otra tabla. Establece relaciones entre tablas.
Ejemplo: `tarea.proyecto_id` referencia `proyecto.id`.
Primary Key: Clave primaria. Identificador único de cada fila en una tabla. Generalmente es un ID autoincremental.
Query: Consulta a la base de datos. En SQLAlchemy se construyen con métodos como `.filter()`, `.all()`, `.first()`.
Schema: Estructura de la base de datos (tablas, columnas, relaciones, índices). Define cómo se organizan los datos.
Connection Pool: Conjunto de conexiones reutilizables a la base de datos. Mejora el rendimiento evitando crear/eliminar conexiones constantemente.

5. Arquitectura de Software y Patrones

Clean Architecture: Arquitectura limpia propuesta por Robert C. Martin (Uncle Bob). Separa el software en capas concéntricas: Entities (Domain), Use Cases (Application), Interface Adapters (Infrastructure), Frameworks (API).
Regla de dependencia: Las capas internas no conocen las externas.
Repository Pattern: Patrón que abstrae el acceso a datos. Define una interfaz para operaciones CRUD sin exponer detalles de implementación (JSON, SQL, etc.).
Ejemplo: `IUsuarioRepository` con métodos `save()`, `get_by_id()`, `delete()`.
DTO: Data Transfer Object. Objeto simple usado para transportar datos entre capas. En Python usamos Pydantic para validación automática.
Ejemplo: `UsuarioCreateDTO` para datos de entrada vs `UsuarioResponseDTO` para respuesta.
DI: Dependency Injection. Inyección de dependencias. Patrón donde las dependencias se proporcionan desde fuera en lugar de crearse internamente. Facilita testing y desacoplamiento.
Ejemplo: Inyectar `IRepository` en el servicio en lugar de crear `SQLRepository()` dentro.
IoC: Inversion of Control. Inversión de control. El framework (FastAPI) llama a tu código en lugar de tu código llamar al framework. FastAPI maneja el ciclo de vida de requests.
MVC: Model-View-Controller. Patrón arquitectónico que separa datos (Model), presentación (View) y lógica de control (Controller). FastAPI usa variación similar.
Layered Architecture: Arquitectura en capas: Presentation → Application → Domain → Infrastructure. Cada capa solo puede comunicarse con la inmediatamente inferior.
Separation of Concerns: Principio de separación de responsabilidades. Cada módulo/clase debe tener una única responsabilidad bien definida.

6. Python Específico

PEP: Python Enhancement Proposal. Documento que describe nuevas características de Python o sus procesos. PEP 8 = estilo, PEP 484 = type hints.
pip: Pip Installs Packages. Gestor de paquetes de Python. Instala librerías desde PyPI. Ejemplo: `pip install fastapi`
venv: Virtual Environment. Entorno virtual aislado para proyectos Python. Permite tener diferentes versiones de librerías por proyecto sin conflictos.
Ejemplo: `python -m venv venv` crea entorno virtual.
REPL: Read-Eval-Print Loop. Entorno interactivo de Python (la consola `>>>`). Lee entrada, evalúa, imprime resultado, repite.
Pydantic: Librería para validación de datos usando type hints. Define modelos con validación automática, serialización y documentación.
Ejemplo: `class Usuario(BaseModel): nombre: str = Field(..., min_length=3)`
Pathlib: Módulo moderno de Python para manejo de rutas de archivos. Orientado a objetos y multiplataforma (Windows/Linux/Mac).
Ejemplo: `Path("data/usuarios.json")` funciona en cualquier SO.
Decorator (@): Función que modifica otra función. En Python se usa `@`. Ejemplos: `@property`, `@staticmethod`, `@app.get()`.
Comprehension: Sintaxis concisa para crear listas/diccionarios. `[x for x in range(10)]` vs bucle for tradicional.
f-string: Formatted string literal. Strings con formato (Python 3.6+). `f"Hola {nombre}"` interpola variables.
Context Manager: Protocolo para manejar recursos (archivos, conexiones). Usa `with` para garantizar cierre automático.
Ejemplo: `with open("file.txt") as f:` cierra el archivo automáticamente.
Import: Forma de incluir código de otros módulos. `import modulo`, `from modulo import funcion`, `import modulo as m`.
Module: Archivo Python (.py). Un programa Python está compuesto de múltiples módulos importados.
Package: Directorio con múltiples módulos. Debe contener `__init__.py` (aunque en Python 3.3+ es opcional).
Lambda: Función anónima de una línea. `lambda x: x * 2`. Útil para operaciones simples.
Iterator / Iterable: Objeto que puede ser iterado (recorrido). `list`, `dict`, `str` son iterables. Generadores son iteradores lazy.
Generator: Función que produce secuencia de valores lazy (bajo demanda). Usa `yield` en lugar de `return`. Ahorra memoria.
Async / Await: Sintaxis para programación asíncrona (Python 3.5+). Permite ejecutar múltiples tareas concurrentemente sin bloquear.
Ejemplo: `async def fetch_data(): ... await response()`
Exception Handling: Manejo de errores con `try-except-finally`. Captura y maneja excepciones para evitar que el programa se cierre abruptamente.

7. Herramientas y Entornos de Desarrollo

IDE: Integrated Development Environment. Entorno de desarrollo integrado. Ejemplos: VS Code, PyCharm. Incluye editor, debugger, terminal integrada.
CLI: Command Line Interface. Interfaz de línea de comandos. Terminal/bash donde escribes comandos de texto.
GUI: Graphical User Interface. Interfaz gráfica de usuario. Ventanas, botones, menús (vs CLI).
Git: Sistema de control de versiones distribuido. Permite rastrear cambios en código, colaborar en equipo y volver a versiones anteriores.
GitHub: Plataforma web para alojar repositorios Git. Incluye issues, pull requests, actions (CI/CD), pages.
Git Bash: Terminal de Git para Windows. Proporciona comandos Unix (ls, grep, cat) en Windows.
Colab: Google Colaboratory. Entorno Jupyter notebook en la nube. Permite ejecutar Python desde el navegador con GPU/TPU gratuita.
Jupyter: Aplicación web para crear notebooks interactivos. Combina código, texto, gráficos en un solo documento.
Docker: Plataforma de contenedores. Empaqueta aplicaciones con todas sus dependencias para ejecutar de forma consistente en cualquier entorno.
Venv: Abreviatura común de Virtual Environment. Ver definición completa arriba.
LSP: Language Server Protocol. Protocolo para que editores (VS Code) obtengan autocompletado, navegación de código, refactorización.
PyPI: Python Package Index. Repositorio oficial de paquetes Python. `pip` instala desde aquí.
Requirements.txt: Archivo que lista las dependencias del proyecto. Se genera con `pip freeze > requirements.txt`.

8. Términos del Proyecto TaskFlow

TaskFlow: Sistema de gestión de tareas y proyectos que construyes durante el curso. Es el proyecto integrador incremental.
Entidad: Objeto de dominio con identidad propia. En DDD, una entidad se diferencia de otros por su ID, no por sus atributos.
Ejemplo: Dos usuarios con mismo nombre son diferentes si tienen diferente ID.
Value Object: Objeto sin identidad conceptual, definido solo por sus atributos. Son inmutables.
Ejemplo: `Direccion` (calle, ciudad, código_postal). Si cambia, es una dirección diferente.
Aggregate: Agrupación de entidades y value objects tratados como una unidad. Tiene una entidad raíz (root).
Ejemplo: `Proyecto` es el aggregate root que contiene `Tareas`.
Servicio: Lógica de negocio que no pertenece naturalmente a ninguna entidad. Coordina operaciones entre múltiples entidades.
Repositorio: Abstracción que encapsula el acceso a datos. Permite cambiar la implementación (JSON, SQL, API) sin afectar el dominio.
Capa de Dominio: Núcleo de la aplicación. Contiene entidades, value objects, servicios de dominio. Es independiente de frameworks y bases de datos.
Capa de Aplicación: Orquesta casos de uso. Coordina el flujo entre UI y dominio. Contiene servicios de aplicación y DTOs.
Capa de Infraestructura: Implementaciones técnicas concretas. Repositorios SQL, envío de emails, APIs externas. Depende de frameworks y librerías.
MVP: Minimum Viable Product. Producto mínimo viable. Versión funcional con características justas para probar el concepto. E3 es el MVP de TaskFlow.
Sustentación: Presentación oral y defensa del proyecto ante el docente. Se evalúa comprensión, calidad de código y funcionamiento.
Proyecto Incremental: Metodología donde el proyecto se construye por partes acumulativas. Cada entrega (E1-E6) agrega funcionalidad sobre lo anterior.
¿Encontraste un término que falta?

Si encuentras acrónimos en el curso que no estén en este glosario, por favor notifica al docente para agregarlos.