Mostrando entradas con la etiqueta programaci贸n orientada a objetos. Mostrar todas las entradas
Mostrando entradas con la etiqueta programaci贸n orientada a objetos. Mostrar todas las entradas

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




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



jueves, 12 de junio de 2025

馃И Python Nivel 2 – Parte 4: Constructores, Destructores y M茅todos Especiales

 

馃幆 ¿Qu茅 aprender谩s hoy?

✅ Qu茅 es y c贸mo se usa el constructor __init__
✅ C贸mo implementar un destructor con __del__
✅ M茅todos especiales como __str__, __len__, __eq__, __repr__
✅ C贸mo hacer que tus objetos se comporten como tipos nativos


馃敡 1. Constructor __init__()

El constructor se ejecuta autom谩ticamente cuando creas un nuevo objeto. Se usa para inicializar atributos.


class Usuario: def __init__(self, nombre, email): self.nombre = nombre self.email = email usuario1 = Usuario("Laura", "laura@email.com") print(usuario1.nombre)

馃敡 2. Destructor __del__()

El destructor se ejecuta cuando el objeto se elimina. Puede usarse para liberar recursos (memoria, archivos abiertos, conexiones).


class Conexion: def __init__(self): print("馃攲 Conexi贸n establecida.") def __del__(self): print("❌ Conexi贸n cerrada.") c = Conexion() del c # Esto fuerza la destrucci贸n

馃敡 3. M茅todo __str__() – Representaci贸n legible

Define c贸mo se muestra el objeto cuando se imprime.


class Producto: def __init__(self, nombre, precio): self.nombre = nombre self.precio = precio def __str__(self): return f"{self.nombre} - ${self.precio}" p = Producto("Auriculares", 45.99) print(p) # Auriculares - $45.99

馃敡 4. Otros m茅todos especiales 煤tiles

M茅todoDescripci贸n
__len__Devuelve la longitud
__eq__Define c贸mo comparar dos objetos (==)
__repr__Representaci贸n t茅cnica (depuraci贸n)
__add__Define c贸mo sumar dos objetos

✅ Ejemplo de comparaci贸n con __eq__


class Libro: def __init__(self, titulo): self.titulo = titulo def __eq__(self, otro): return self.titulo == otro.titulo l1 = Libro("Python B谩sico") l2 = Libro("Python B谩sico") print(l1 == l2) # True

馃殌 ¿Qu茅 aprendiste hoy?

✔️ C贸mo inicializar y destruir objetos
✔️ C贸mo hacer que tus clases se comporten de forma m谩s intuitiva
✔️ C贸mo personalizar funciones internas como print(), ==, len()
✔️ C贸mo mejorar la depuraci贸n con __repr__


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

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

馃挰 ¿Qu茅 m茅todo especial te parece m谩s 煤til? ¿Has usado __init__ sin saberlo?


domingo, 8 de junio de 2025

馃И Python Nivel 2 – Parte 3: Herencia en Programaci贸n Orientada a Objetos

En esta lecci贸n aprender谩s a reutilizar c贸digo mediante herencia, un pilar clave de la Programaci贸n Orientada a Objetos (POO). Te permitir谩 crear estructuras organizadas y extender clases de forma eficiente.


✅ ¿Qu茅 es la herencia?

La herencia permite que una clase hija herede atributos y m茅todos de una clase padre. As铆 se puede reutilizar c贸digo y especializar comportamientos sin partir de cero.


馃敡 Ejemplo 1: Clase base y subclases


class Animal: def __init__(self, nombre): self.nombre = nombre def hablar(self): print(f"{self.nombre} hace un sonido.") class Perro(Animal): def hablar(self): print(f"{self.nombre} dice: ¡Guau!") class Gato(Animal): def hablar(self): print(f"{self.nombre} dice: Miau.")

perro = Perro("Rex") gato = Gato("Michi") perro.hablar() gato.hablar()

馃 Aprendiste:

  • C贸mo una clase hija sobrescribe m茅todos

  • Que las clases hijas heredan atributos y m茅todos autom谩ticamente


馃敡 Ejemplo 2: Constructor extendido con super()


class Vehiculo: def __init__(self, marca, modelo): self.marca = marca self.modelo = modelo class Coche(Vehiculo): def __init__(self, marca, modelo, puertas): super().__init__(marca, modelo) self.puertas = puertas def mostrar_info(self): print(f"{self.marca} {self.modelo}, {self.puertas} puertas")

coche = Coche("Toyota", "Yaris", 5) coche.mostrar_info()

馃 Aprendiste:

  • A reutilizar el constructor de la clase padre con super()

  • A a帽adir nuevos atributos en la subclase


馃殌 ¿Qu茅 aprendiste hoy?

✔️ Crear jerarqu铆as de clases
✔️ Reutilizar y extender c贸digo
✔️ Especializar comportamientos en subclases
✔️ Aplicar el principio DRY (Don’t Repeat Yourself)


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

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

馃挰 ¿Te gustar铆a ver un ejemplo real usando herencia para usuarios, productos o personajes de un juego? ¡Com茅ntalo!



馃И Python Nivel 2 – Parte 1: Introducci贸n a la Programaci贸n Orientada a Objetos

 Despu茅s de dominar los fundamentos de Python, es hora de dar el siguiente paso:

Organizar tu c贸digo como un profesional con clases y objetos.


馃 ¿Qu茅 es la Programaci贸n Orientada a Objetos?

Es un paradigma que permite estructurar el c贸digo imitando el mundo real:
馃摝 Clases → plantillas
馃 Objetos → instancias 煤nicas
馃彿️ Atributos → caracter铆sticas
⚙️ M茅todos → acciones


馃敡 Conceptos que aprender谩s hoy:

  • Qu茅 es una clase y c贸mo se define

  • C贸mo crear objetos a partir de clases

  • C贸mo funcionan los atributos y m茅todos

  • Qu茅 es el constructor __init__

  • Qu茅 significa self en Python


Ejemplo 1: Crear una clase b谩sica


class Persona: def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad def saludar(self): print(f"Hola, me llamo {self.nombre} y tengo {self.edad} a帽os.") # Crear y usar un objeto persona1 = Persona("Luc铆a", 29) persona1.saludar()

Ejemplo 2: Modificar atributos


persona1.nombre = "Laura" persona1.saludar()

馃 El objeto puede cambiar din谩micamente su informaci贸n.


Ejemplo 3: Crear m煤ltiples objetos


persona2 = Persona("Carlos", 35) persona3 = Persona("Ana", 42) persona2.saludar() persona3.saludar()

馃殌 ¿Por qu茅 usar POO?

✔️ Mantiene el c贸digo limpio y escalable
✔️ Agrupa informaci贸n y funciones en una sola entidad
✔️ Es la base de librer铆as, frameworks, APIs y juegos
✔️ Reutilizas estructuras sin reescribir todo


馃搶 Pr贸ximo paso:

En la Parte 2 aprender谩s:

  • C贸mo usar m茅todos especiales (__str__, __repr__)

  • C贸mo encapsular informaci贸n

  • C贸mo crear clases con l贸gica m谩s compleja


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

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

馃挰 ¿Te gustar铆a ver c贸mo aplicar clases para videojuegos, apps o bots? ¡D茅jamelo en los comentarios!