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