mi茅rcoles, 16 de julio de 2025

馃И Python Nivel 2 – Parte 16: Gesti贸n de Dependencias con pip y Archivos requirements.txt

 

馃幆 ¿Qu茅 aprender谩s?

✅ Qu茅 es pip y c贸mo instalar librer铆as externas
✅ C贸mo crear y usar un requirements.txt
✅ C贸mo compartir tu entorno de desarrollo
✅ Buenas pr谩cticas para proyectos colaborativos


馃П ¿Qu茅 es pip?

pip es el gestor de paquetes de Python.
Con 茅l puedes instalar librer铆as externas con un solo comando:


pip install requests

Esto te permite reutilizar librer铆as que otros desarrolladores han publicado.


馃梻 ¿Qu茅 es un archivo requirements.txt?

Es un archivo de texto donde defines todas las dependencias necesarias de tu proyecto, l铆nea por l铆nea.


requests==2.31.0 flask==2.3.2

馃敡 C贸mo generarlo autom谩ticamente:


pip freeze > requirements.txt

Esto guarda todas las librer铆as y versiones que tienes en tu entorno actual.


馃攧 C贸mo instalar dependencias desde el archivo:


pip install -r requirements.txt

✅ As铆 puedes compartir tu proyecto con otros, y podr谩n instalar todo de forma autom谩tica.


馃И Ejemplo paso a paso:

  1. Crea un entorno virtual:


    python -m venv venv
  2. Act铆valo:

    • En Windows: venv\Scripts\activate

    • En macOS/Linux: source venv/bin/activate

  3. Instala una librer铆a:


    pip install rich
  4. Guarda dependencias:


    pip freeze > requirements.txt
  5. Usa requirements.txt en cualquier m谩quina:


    pip install -r requirements.txt

馃摝 Buenas pr谩cticas

✔️ Siempre usa entornos virtuales
✔️ No subas carpetas venv al repositorio
✔️ Usa requirements.txt para compartir dependencias
✔️ Usa pip freeze solo dentro del entorno virtual


馃 ¿Qu茅 aprendiste hoy?

✔️ C贸mo instalar paquetes externos con pip
✔️ C贸mo crear y usar un archivo requirements.txt
✔️ C贸mo colaborar y compartir tu proyecto f谩cilmente
✔️ Buenas pr谩cticas para un entorno Python profesional


馃搨 C贸digo de ejemplo en GitHub:
github.com/josecodetech

馃帴 Video explicativo en YouTube:
https://youtu.be/kKdl9ZoajV0



jueves, 10 de julio de 2025

馃И Python Nivel 2 – Parte 15: Introducci贸n a Testing con unittest

 

馃幆 ¿Qu茅 aprender谩s?

✅ Qu茅 es el testing y por qu茅 es esencial
✅ C贸mo crear tests automatizados con unittest
✅ Qu茅 es un test case y c贸mo definirlo
✅ C贸mo comprobar que el c贸digo funciona correctamente
✅ Qu茅 hacer cuando un test falla


馃П ¿Qu茅 es unittest?

unittest es el m贸dulo est谩ndar de Python para pruebas automatizadas.
Permite crear clases de test que validan que tus funciones y m茅todos se comporten correctamente.


馃摝 Estructura b谩sica de un test:


import unittest def suma(a, b): return a + b class TestSuma(unittest.TestCase): def test_suma_positivos(self): self.assertEqual(suma(2, 3), 5) def test_suma_negativos(self): self.assertEqual(suma(-2, -3), -5) if __name__ == '__main__': unittest.main()

✅ ¿Qu茅 hace cada parte?

  • import unittest: importa el framework

  • class TestX(unittest.TestCase): define un grupo de tests

  • self.assertEqual(...): compara resultado esperado con resultado real

  • unittest.main(): ejecuta todos los tests definidos


馃И Otros m茅todos de validaci贸n


self.assertNotEqual(a, b) self.assertTrue(condici贸n) self.assertFalse(condici贸n) self.assertIn(valor, lista) self.assertRaises(ErrorEsperado, funcion, args)

馃挕 ¿Cu谩ndo hacer testing?

✔️ Al desarrollar funciones cr铆ticas
✔️ Cuando mantienes proyectos grandes
✔️ Al trabajar en equipo
✔️ Para prevenir errores en producci贸n


馃‍馃捇 Ejemplo real con clase Usuario


class Usuario: def __init__(self, nombre): self.nombre = nombre def saludo(self): return f"Hola, {self.nombre}" class TestUsuario(unittest.TestCase): def test_saludo(self): u = Usuario("Ana") self.assertEqual(u.saludo(), "Hola, Ana")

馃 ¿Qu茅 aprendiste hoy?

✔️ A automatizar pruebas con unittest
✔️ A validar comportamientos de funciones y clases
✔️ A escribir c贸digo m谩s confiable y profesional
✔️ A detectar errores antes de que lleguen al usuario


馃搨 C贸digo de ejemplo en GitHub:
github.com/josecodetech

馃帴 Video paso a paso en YouTube:
https://youtu.be/-2Dj28lOn8E


mi茅rcoles, 9 de julio de 2025

馃И Python Nivel 2 – Parte 14: Uso de Decoradores (Decorators) en Python

 

馃幆 ¿Qu茅 aprender谩s?

✅ Qu茅 son los decoradores y para qu茅 sirven
✅ C贸mo crear y aplicar decoradores
✅ C贸mo usarlos para validar, medir tiempos o modificar comportamiento
✅ Decoradores anidados y con par谩metros


馃П ¿Qu茅 es un decorador?

Un decorador en Python es una funci贸n que recibe otra funci贸n como argumento y devuelve una nueva funci贸n con funcionalidades a帽adidas, sin modificar su estructura interna.


馃敡 Sintaxis b谩sica


def mi_decorador(funcion_original): def nueva_funcion(): print("Antes de ejecutar") funcion_original() print("Despu茅s de ejecutar") return nueva_funcion @mi_decorador def saludar(): print("Hola!") saludar()

馃 Salida:


Antes de ejecutar Hola! Despu茅s de ejecutar

✅ ¿Para qu茅 sirven los decoradores?

✔️ Validar par谩metros
✔️ Medir tiempos de ejecuci贸n
✔️ Agregar logs o registros
✔️ Controlar permisos o acceso
✔️ Reutilizar c贸digo sin repetir l贸gica


馃晲 Ejemplo: medir tiempo de ejecuci贸n


import time def medir_tiempo(func): def wrapper(*args, **kwargs): inicio = time.time() resultado = func(*args, **kwargs) fin = time.time() print(f"Tiempo: {fin - inicio:.2f}s") return resultado return wrapper @medir_tiempo def procesar(): time.sleep(2) print("Proceso terminado") procesar()

馃З Decorador con argumentos


def repetir(n): def decorador(func): def wrapper(*args, **kwargs): for _ in range(n): func(*args, **kwargs) return wrapper return decorador @repetir(3) def hola(): print("Hola!") hola()

馃 ¿Qu茅 aprendiste hoy?

✔️ Qu茅 son y c贸mo funcionan los decoradores
✔️ C贸mo aplicarlos en funciones reales
✔️ C贸mo pasar par谩metros a los decoradores
✔️ A reutilizar l贸gica de forma limpia y elegante


馃搨 C贸digo de ejemplos en GitHub:
github.com/josecodetech

馃帴 Video explicativo en YouTube:
https://youtu.be/oloxPaRSGpg



馃И Python Nivel 2 – Parte 13: Documentar tu C贸digo con Docstrings y Buenas Pr谩cticas

 

馃幆 ¿Qu茅 aprender谩s?

✅ Qu茅 es un docstring y c贸mo escribirlo correctamente
✅ C贸mo documentar funciones, clases y m贸dulos
✅ C贸mo generar documentaci贸n autom谩tica
✅ Buenas pr谩cticas para que tu c贸digo sea m谩s legible y mantenible


馃П ¿Qu茅 es un Docstring?

Un docstring es un texto descriptivo que se coloca justo despu茅s de la definici贸n de una funci贸n, clase o m贸dulo.
Se escribe entre triples comillas (""" """") y sirve para explicar qu茅 hace, qu茅 par谩metros recibe y qu茅 devuelve.


馃‍馃捇 Ejemplo de funci贸n con docstring


def saludar(nombre): """ Devuelve un saludo personalizado. Par谩metros: nombre (str): El nombre de la persona a saludar. Retorna: str: Un saludo con el nombre. """ return f"Hola, {nombre}!"

馃摝 Docstring en una clase


class Usuario: """ Representa un usuario con nombre y email. """ def __init__(self, nombre, email): """ Inicializa un nuevo usuario. Par谩metros: nombre (str): Nombre del usuario. email (str): Correo electr贸nico del usuario. """ self.nombre = nombre self.email = email

馃О Buenas pr谩cticas al documentar

✔️ Usa lenguaje claro y conciso
✔️ Explica entradas y salidas
✔️ Usa estilo PEP 257 (recomendado en Python)
✔️ Incluye ejemplos cuando sea 煤til


馃И Acceder al docstring en tiempo de ejecuci贸n


print(saludar.__doc__) help(saludar)

馃搫 Docstring de m贸dulo

Coloca un docstring al principio del archivo .py:


""" M贸dulo para gestionar usuarios y sus datos. Contiene: - Clase Usuario - Funciones de validaci贸n """

馃殌 ¿Qu茅 aprendiste hoy?

✔️ A escribir documentaci贸n integrada con docstrings
✔️ A aplicar buenas pr谩cticas de c贸digo limpio
✔️ A facilitar el mantenimiento de tus programas
✔️ A comunicarte mejor con tu futuro yo (o tu equipo)


馃搨 Ejemplos documentados en GitHub:
github.com/josecodetech

馃帴 Video paso a paso en YouTube:
https://www.youtube.com/watch?v=DKz0CfiSbFs



domingo, 6 de julio de 2025

馃И Python Nivel 2 – Parte 12: Gesti贸n de Errores Personalizados y Excepciones Propias

 

馃幆 ¿Qu茅 aprender谩s en esta parte?

✅ C贸mo definir tus propias excepciones en Python
✅ Cu谩ndo y por qu茅 usar errores personalizados
✅ C贸mo lanzar errores con raise
✅ C贸mo capturarlos y diferenciarlos de otros errores
✅ Aplicaci贸n en sistemas reales: validaciones y reglas de negocio


馃П ¿Qu茅 son las excepciones personalizadas?

Son clases propias que heredan de Exception y te permiten controlar errores con m谩s precisi贸n y dar mensajes espec铆ficos a cada situaci贸n.


馃敡 Ejemplo b谩sico:


class EdadInvalidaError(Exception): pass def verificar_edad(edad): if edad < 18: raise EdadInvalidaError("Debes ser mayor de edad.")

馃摝 ¿Por qu茅 usar excepciones propias?

✔️ Identificas claramente el tipo de error
✔️ Mejoras la organizaci贸n del c贸digo
✔️ Ayudas a otros desarrolladores a entender tu l贸gica
✔️ Puedes aplicar reglas de negocio complejas f谩cilmente


馃‍馃捇 Ejemplo real: Sistema de usuarios


class UsuarioExistenteError(Exception): pass usuarios_registrados = ["ana@mail.com", "luis@mail.com"] def registrar_usuario(email): if email in usuarios_registrados: raise UsuarioExistenteError("El usuario ya est谩 registrado.") usuarios_registrados.append(email)

馃И Capturando errores personalizados


try: registrar_usuario("ana@mail.com") except UsuarioExistenteError as e: print("⚠️ Error:", e)

馃攣 Jerarqu铆a de excepciones propias

Puedes crear subtipos para organizar mejor errores:


class ErrorUsuario(Exception): pass class UsuarioExistenteError(ErrorUsuario): pass class EmailInvalidoError(ErrorUsuario): pass

馃 ¿Qu茅 aprendiste hoy?

✔️ A crear tus propias excepciones con clases
✔️ A lanzar errores espec铆ficos con raise
✔️ A capturar errores personalizados con try-except
✔️ A mejorar la claridad y control de tus validaciones


馃搨 C贸digo de ejemplo en GitHub:
github.com/josecodetech

馃帴 Video paso a paso en YouTube:
https://youtu.be/6gpdqmTc8aE


s谩bado, 5 de julio de 2025

馃帗 Aprende Python gratis con certificado – ¡3 cursos disponibles solo para los 1000 primeros!

 ¿Quieres aprender a programar con Python y obtener certificado totalmente gratis?

He creado cupones exclusivos para acceder sin coste a 3 cursos completos en Udemy, cada uno con certificado de finalizaci贸n. ¡Pero atenci贸n! Solo estar谩n disponibles para los primeros 1000 inscritos en cada curso.

馃敼 Curso 1 – Programaci贸n con Python y Copilot
馃捇 Aprende a programar con la ayuda de la IA de GitHub Copilot en Visual Studio Code.
馃帗 Accede gratis al curso

馃敼 Curso 2 – Interfaces gr谩ficas con Tkinter
馃枼️ Crea tus propias aplicaciones visuales usando Python y Tkinter.
馃帗 Accede gratis al curso

馃敼 Curso 3 – Web Scraping con Python
馃寪 Aprende a extraer datos de p谩ginas web con Python de forma pr谩ctica y profesional.
馃帗 Accede gratis al curso


馃搶 Recuerda: son cursos 100% pr谩cticos, pensados para que aprendas paso a paso, con proyectos reales y obtengas un certificado que podr谩s a帽adir a tu curr铆culum.

馃摵 Adem谩s, en mi canal de YouTube @josecodetech tienes a煤n m谩s contenido, ejercicios y recursos complementarios para seguir aprendiendo programaci贸n.

✅ ¡Comparte esta publicaci贸n y no olvides valorar los cursos adecuadamente si te resultan 煤tiles!
Gracias por formar parte de esta comunidad de aprendizaje 馃殌






domingo, 29 de junio de 2025

馃И Python Nivel 2 – Parte 11: Pruebas con assert y Manejo Profesional de Errores

 

馃幆 ¿Qu茅 aprender谩s en esta parte?

✅ Qu茅 es una prueba con assert y c贸mo usarla
✅ C贸mo detectar errores desde el desarrollo
✅ C贸mo crear pruebas simples sin librer铆as externas
✅ C贸mo capturar errores personalizados y mantener controlado tu c贸digo


馃П ¿Qu茅 es assert?

assert es una instrucci贸n que permite verificar condiciones durante la ejecuci贸n.
Si la condici贸n no se cumple, lanza una excepci贸n (AssertionError) y detiene el programa.


馃攳 Ejemplo b谩sico:


def dividir(a, b): assert b != 0, "El divisor no puede ser cero" return a / b print(dividir(10, 2)) # 5.0 print(dividir(10, 0)) # AssertionError

✅ Ventajas de usar assert

✔️ Detecta errores temprano
✔️ Mejora la confiabilidad del c贸digo
✔️ Facilita pruebas durante el desarrollo
✔️ Se puede desactivar al ejecutar con python -O


馃攼 Personalizar errores con try-except

Adem谩s de assert, Python permite manejar errores sin que el programa se detenga abruptamente:


try: resultado = dividir(10, 0) except AssertionError as e: print("Error capturado:", e)

馃‍馃捇 Ejemplo pr谩ctico: validar emails


def registrar_usuario(nombre, email): assert "@" in email, "El email no es v谩lido" return {"nombre": nombre, "email": email} usuario = registrar_usuario("Ana", "ana@correo.com") print(usuario)

馃И Uso combinado con bucles o inputs


while True: edad = input("Introduce tu edad: ") try: edad = int(edad) assert edad > 0, "La edad debe ser positiva" break except (ValueError, AssertionError) as e: print(f"❌ Error: {e}")

馃 ¿Qu茅 aprendiste hoy?

✔️ C贸mo usar assert para validar condiciones
✔️ C贸mo capturar errores sin romper el programa
✔️ C贸mo detectar errores durante el desarrollo
✔️ C贸mo crear validaciones m谩s limpias y robustas


馃搨 C贸digo de ejemplos en GitHub:
github.com/josecodetech

馃帴 Video explicativo en YouTube:
https://www.youtube.com/watch?v=ccWUUSFZKRk

lunes, 23 de junio de 2025

馃И Python Nivel 2 – Parte 9-10: Proyecto CRUD Completo en Consola con POO y JSON

 

馃幆 Objetivo del proyecto:

Crear una aplicaci贸n funcional por consola que permita gestionar una lista de usuarios con las siguientes operaciones:

  • 馃敼 Crear usuarios

  • 馃敼 Leer todos los usuarios

  • 馃敼 Actualizar un usuario existente

  • 馃敼 Eliminar usuarios

  • 馃敼 Guardar los datos en un archivo .json

  • 馃敼 Recuperarlos al iniciar el programa


馃梻️ Estructura del sistema

馃敡 Clases necesarias:

  • Usuario

  • GestorUsuarios (controlador del CRUD)


馃捇 C贸digo simplificado

馃П Clase Usuario


class Usuario: def __init__(self, nombre, email): self.nombre = nombre self.email = email def to_dict(self): return {"nombre": self.nombre, "email": self.email}

馃П Clase GestorUsuarios


import json import os class GestorUsuarios: def __init__(self, archivo): self.archivo = archivo self.usuarios = self.cargar() def cargar(self): if os.path.exists(self.archivo): with open(self.archivo, "r", encoding="utf-8") as f: datos = json.load(f) return [Usuario(**d) for d in datos] return [] def guardar(self): with open(self.archivo, "w", encoding="utf-8") as f: json.dump([u.to_dict() for u in self.usuarios], f, indent=4) def crear_usuario(self, nombre, email): self.usuarios.append(Usuario(nombre, email)) self.guardar() def listar(self): for i, u in enumerate(self.usuarios, 1): print(f"{i}. {u.nombre} - {u.email}") def actualizar(self, indice, nombre, email): if 0 <= indice < len(self.usuarios): self.usuarios[indice].nombre = nombre self.usuarios[indice].email = email self.guardar() def eliminar(self, indice): if 0 <= indice < len(self.usuarios): del self.usuarios[indice] self.guardar()

馃‍馃捇 Interfaz por consola


gestor = GestorUsuarios("usuarios.json") while True: print("\n1. Crear usuario\n2. Listar usuarios\n3. Actualizar usuario\n4. Eliminar usuario\n5. Salir") opcion = input("Selecciona una opci贸n: ") if opcion == "1": nombre = input("Nombre: ") email = input("Email: ") gestor.crear_usuario(nombre, email) elif opcion == "2": gestor.listar() elif opcion == "3": gestor.listar() i = int(input("N煤mero de usuario a actualizar: ")) - 1 nombre = input("Nuevo nombre: ") email = input("Nuevo email: ") gestor.actualizar(i, nombre, email) elif opcion == "4": gestor.listar() i = int(input("N煤mero de usuario a eliminar: ")) - 1 gestor.eliminar(i) elif opcion == "5": print("馃憢 Adi贸s.") break

馃 ¿Qu茅 aprendiste hoy?

✔️ Crear una aplicaci贸n CRUD completa con Python
✔️ Usar clases y persistencia con JSON
✔️ Desarrollar men煤s interactivos
✔️ Aplicar POO en un contexto realista


馃搨 C贸digo completo en GitHub:
github.com/josecodetech

馃帴 Video paso a paso en YouTube:
https://www.youtube.com/watch?v=f5yfu-TxWlA




jueves, 19 de junio de 2025

馃И Python Nivel 2 – Parte 8: Guardar y Cargar Objetos con JSON (Persistencia)

 

馃幆 ¿Qu茅 aprender谩s?

✅ C贸mo guardar estructuras de datos en archivos .json
✅ C贸mo convertir objetos a diccionarios (__dict__)
✅ C贸mo volver a crear objetos desde archivos
✅ Integrar lectura/escritura en tu sistema


馃搧 ¿Por qu茅 usar JSON?

Los objetos en memoria desaparecen al cerrar Python.
Con .json puedes almacenar datos estructurados como diccionarios o listas y volver a cargarlos despu茅s.


✅ Ejemplo pr谩ctico con clases: guardar usuarios

Supongamos que tienes esta clase:


class Usuario: def __init__(self, nombre, email): self.nombre = nombre self.email = email def to_dict(self): return {"nombre": self.nombre, "email": self.email}

馃捑 Guardar lista de usuarios en un archivo


import json usuarios = [Usuario("Ana", "ana@mail.com"), Usuario("Luis", "luis@mail.com")] with open("usuarios.json", "w", encoding="utf-8") as f: json.dump([u.to_dict() for u in usuarios], f, indent=4)

馃搨 Cargar usuarios desde el archivo .json


with open("usuarios.json", "r", encoding="utf-8") as f: datos = json.load(f) usuarios_cargados = [Usuario(**d) for d in datos] for u in usuarios_cargados: print(f"{u.nombre} - {u.email}")

馃 Aprendiste:

  • A serializar objetos (convertir a JSON)

  • A deserializar (crear objetos desde JSON)


馃 Buenas pr谩cticas

✅ Usar to_dict() para conversi贸n
✅ Separar l贸gica de guardado en funciones
✅ Validar archivos vac铆os o inexistentes
✅ Guardar listas completas (no objetos uno a uno)


馃殌 ¿Qu茅 aprendiste hoy?

✔️ A persistir tus objetos entre ejecuciones
✔️ A leer y guardar datos estructurados
✔️ A construir sistemas m谩s completos y reutilizables
✔️ A combinar clases + archivos + l贸gica real


馃搨 C贸digo completo en GitHub:
github.com/josecodetech

馃帴 Video paso a paso en YouTube:
https://www.youtube.com/watch?v=s4kWoqrTGVM

domingo, 15 de junio de 2025

馃И Python Nivel 2 – Parte 7: Poner en pr谩ctica UML con un mini proyecto

Ahora que conoces c贸mo funciona UML, es momento de aplicarlo a un proyecto pr谩ctico donde dise帽aremos con UML y luego lo programaremos en Python. Esta actividad te ayudar谩 a consolidar los conceptos de clases, herencia, composici贸n y agregaci贸n.


馃幆 Proyecto: Sistema de Biblioteca

Vamos a construir un sistema sencillo para una biblioteca que permita:

  • Registrar libros y usuarios

  • Asignar libros a usuarios

  • Consultar disponibilidad de libros


馃梻️ Dise帽o UML: Clases y Relaciones

Clases involucradas:

  1. Libro

    • titulo: str

    • autor: str

    • disponible: bool

    • prestar(), devolver()

  2. Usuario

    • nombre: str

    • email: str

    • prestamos: list

  3. Biblioteca

    • libros: list

    • usuarios: list

    • agregar_libro(), registrar_usuario(), prestar_libro()


馃П Fragmento UML


-------------------------------- | Libro | -------------------------------- | + titulo: str | | + autor: str | | + disponible: bool | -------------------------------- | + prestar() | | + devolver() | -------------------------------- -------------------------------- | Usuario | -------------------------------- | + nombre: str | | + email: str | | + prestamos: list | -------------------------------- -------------------------------- | Biblioteca | -------------------------------- | + libros: list | | + usuarios: list | -------------------------------- | + agregar_libro() | | + registrar_usuario() | | + prestar_libro() | --------------------------------

馃捇 C贸digo en Python (versi贸n simplificada)


class Libro: def __init__(self, titulo, autor): self.titulo = titulo self.autor = autor self.disponible = True def prestar(self): if self.disponible: self.disponible = False return True return False def devolver(self): self.disponible = True class Usuario: def __init__(self, nombre, email): self.nombre = nombre self.email = email self.prestamos = [] class Biblioteca: def __init__(self): self.libros = [] self.usuarios = [] def agregar_libro(self, libro): self.libros.append(libro) def registrar_usuario(self, usuario): self.usuarios.append(usuario) def prestar_libro(self, titulo, email): libro = next((l for l in self.libros if l.titulo == titulo and l.disponible), None) usuario = next((u for u in self.usuarios if u.email == email), None) if libro and usuario: if libro.prestar(): usuario.prestamos.append(libro) print(f"{usuario.nombre} ha tomado prestado '{libro.titulo}'.") else: print("❌ No se pudo completar el pr茅stamo.")

馃 ¿Qu茅 aprendiste hoy?

✔️ A dise帽ar con UML antes de programar
✔️ A transformar ese dise帽o en c贸digo Python
✔️ A trabajar con clases relacionadas mediante composici贸n y listas
✔️ A crear una app funcional basada en objetos


馃搨 C贸digo completo en GitHub:
github.com/josecodetech

馃帴 Video del mini proyecto en YouTube:
http://youtube.com/watch?v=s4kWoqrTGVM



馃И Python Nivel 2 – Parte 6: UML y Dise帽o de Clases

 

馃幆 ¿Qu茅 aprender谩s en esta parte?

✅ Qu茅 es UML y para qu茅 se usa
✅ C贸mo representar clases con UML
✅ C贸mo planificar relaciones (herencia, composici贸n, agregaci贸n)
✅ C贸mo traducir un dise帽o UML en clases Python
✅ Ejemplo completo: diagrama + c贸digo


馃搶 ¿Qu茅 es UML?

UML (Unified Modeling Language) es un lenguaje visual para representar sistemas orientados a objetos.
Se utiliza para planificar clases, atributos, m茅todos y relaciones entre objetos antes de programar.


馃П Estructura de una clase en UML

Un diagrama de clase b谩sico UML incluye:


-------------------------------------- | NombreClase | -------------------------------------- | - atributo1: Tipo | | - atributo2: Tipo | -------------------------------------- | + metodo1(): TipoRetorno | | + metodo2(par谩metro: Tipo): Retorno | --------------------------------------
  • + = p煤blico

  • - = privado

  • # = protegido


馃З Ejemplo simple en UML


------------------------- | Persona | ------------------------- | - nombre: str | | - edad: int | ------------------------- | + saludar(): str | -------------------------

Traducci贸n en c贸digo Python:


class Persona: def __init__(self, nombre, edad): self._nombre = nombre self._edad = edad def saludar(self): return f"Hola, me llamo {self.nombre} y tengo {self.edad} a帽os."

馃敆 Relaciones UML

Relaci贸nUMLEjemplo
HerenciaFlecha abiertaEmpleado → Persona
Composici贸nRombo negroCoche ▪── Motor
Agregaci贸nRombo blancoCurso ◇── Profesor

馃 ¿Por qu茅 usar UML?

✅ Facilita la planificaci贸n antes de codificar
✅ Mejora la comunicaci贸n entre programadores
✅ Ayuda a evitar errores de dise帽o
✅ Documenta mejor tus sistemas


✅ ¿Qu茅 aprendiste hoy?

✔️ Leer y escribir diagramas UML
✔️ Representar atributos y m茅todos
✔️ Comprender relaciones entre clases
✔️ Traducir UML a Python


馃搨 C贸digo de ejemplo completo:
github.com/josecodetech

馃帴 Video paso a paso en YouTube:
https://www.youtube.com/watch?v=RwGeo03rL6g



馃И Python Nivel 2 – Parte 5: Relaciones entre Clases – Composici贸n y Agregaci贸n

Despu茅s de aprender herencia, es momento de trabajar otro aspecto clave de la POO: c贸mo se relacionan las clases entre s铆. Esto se logra con t茅cnicas como composici贸n y agregaci贸n.


馃幆 ¿Qu茅 aprender谩s hoy?

✅ Qu茅 es la composici贸n y c贸mo implementarla
✅ Qu茅 es la agregaci贸n y en qu茅 se diferencia
✅ C贸mo crear relaciones entre clases (uno-a-uno, uno-a-muchos)
✅ Ejemplos pr谩cticos con objetos reales


馃敡 1. Composici贸n

La composici贸n representa una relaci贸n fuerte:

“Un objeto contiene otro como parte esencial.”

Si el objeto principal se destruye, los objetos internos tambi茅n.


class Motor: def arrancar(self): print("馃敡 Motor en marcha...") class Coche: def __init__(self): self.motor = Motor() # Composici贸n def arrancar(self): self.motor.arrancar() auto = Coche() auto.arrancar()

馃 Aprendiste:

  • El objeto Coche crea y contiene a Motor

  • No puedes usar Motor si no existe un Coche


馃敡 2. Agregaci贸n

La agregaci贸n representa una relaci贸n d茅bil:

“Un objeto usa a otro, pero no lo controla.”

Se pasa como par谩metro, y puede vivir por separado.


class Profesor: def __init__(self, nombre): self.nombre = nombre class Curso: def __init__(self, profesor): self.profesor = profesor # Agregaci贸n def mostrar(self): print(f"Curso impartido por {self.profesor.nombre}") profe = Profesor("Ana") curso = Curso(profe) curso.mostrar()

馃 Aprendiste:

  • El Curso utiliza un Profesor ya existente

  • Si destruyes el Curso, el Profesor sigue existiendo


馃 Comparaci贸n r谩pida

Relaci贸nCrea internamenteIndependencia
Composici贸n✅ S铆❌ No
Agregaci贸n❌ No✅ S铆

馃殌 ¿Qu茅 aprendiste hoy?

✔️ A crear relaciones reales entre objetos
✔️ A modelar sistemas complejos como colecciones, veh铆culos, usuarios, etc.
✔️ A aplicar buenas pr谩cticas de dise帽o OOP en Python


馃搨 C贸digo completo disponible en:
github.com/josecodetech

馃挰 ¿Te gustar铆a un proyecto real usando estas relaciones? ¿Un sistema escolar, app o juego?