Este taller está diseñado para introducir a los estudiantes en los conceptos de la Programación Orientada a Objetos (OOP) utilizando Python. Construiremos una tienda de muebles que implementa una jerarquía de clases aplicando los conceptos vistos en clase.
Cuenta: [@tu_cuenta_github]
- Implementar abstracción mediante clases abstractas
- Diseñar jerarquías de clases usando herencia
- Aplicar composición para crear objetos complejos
- Utilizar herencia múltiple correctamente
- Implementar polimorfismo para comportamientos dinámicos
- Crear métodos abstractos y concretos
- Utilizar getters y setters para encapsulación
- Escribir pruebas unitarias con pytest para validar el código
- Crear interfaces de usuario con Rich
- Ocultamos la complejidad interna y mostramos solo las funcionalidades esenciales
- Implementada mediante clases abstractas como
Mueble,Asiento, etc.
- Protegemos los datos internos usando atributos privados y métodos getter/setter
- Ejemplo:
_precio,_materialcon sus respectivos métodos de acceso
- Las clases hijas heredan propiedades y métodos de las clases padre
- Ejemplo:
Sillahereda deAsientoque hereda deMueble
- Diferentes objetos responden al mismo método de manera específica
- Ejemplo: cada mueble implementa
calcular_precio()de forma diferente
- Un objeto contiene otros objetos como partes
- Ejemplo:
Comedorcontiene unaMesay variasSillas
- Una clase hereda de múltiples clases padre
- Ejemplo:
SofaCamahereda deSofayCama
-
Clona o descarga el proyecto
git clone https://github.com/UR-CC/lpa1-taller-poo.git cd lpa1-taller-poo -
Crea un entorno virtual
python -m venv venv source venv/bin/activate # Linux/Mac
-
Instala las dependencias
pip install -r requirements.txt
Archivo: models/mueble.py
- Importa
ABCyabstractmethoddeabc - Define la clase
Muebleheredando deABC - Implementa el constructor con atributos básicos
- Crea propiedades con getters y setters
- Define métodos abstractos
calcular_precio()yobtener_descripcion()
Conceptos: Abstracción, encapsulación, métodos abstractos
Archivos: models/categorias/asientos.py, almacenamiento.py, superficies.py
- Define clases abstractas que heredan de
Mueble - Añade atributos específicos de cada categoría
- Implementa métodos comunes a la categoría
- Mantén algunos métodos abstractos para las clases concretas
Conceptos: Herencia, abstracción de categorías
Archivos: Todos los archivos en models/concretos/
- Hereda de la clase de categoría correspondiente
- Implementa todos los métodos abstractos
- Añade atributos específicos del mueble
- Implementa la lógica de cálculo de precio específica
Conceptos: Herencia, polimorfismo, implementación concreta
Archivo: models/concretos/sofacama.py
- Implementa
SofaCamaheredando deSofayCama - Resuelve conflictos de métodos usando
super() - Implementa funcionalidades únicas de la combinación
Conceptos: Herencia múltiple, resolución de MRO
Archivo: models/composicion/comedor.py
- Crea la clase
Comedorque contiene unaMesay múltiplesSillas - Implementa métodos para agregar/quitar sillas
- Calcula el precio total sumando todos los componentes
Conceptos: Composición, agregación
Archivos: services/tienda.py, services/catalogo.py
- Implementa la gestión del inventario
- Crea métodos para buscar y filtrar muebles
- Implementa funcionalidades de venta
Conceptos: Separación de responsabilidades, arquitectura en capas
Archivo: ui/menu.py
- Usa Rich para crear una interfaz atractiva
- Implementa un menú interactivo
- Muestra información de muebles de forma clara
Conceptos: Separación de interfaz y lógica
Archivos: Todos los archivos en tests/
- Crea tests para cada clase y método
- Verifica el comportamiento de herencia y polimorfismo
- Prueba casos edge y validaciones
Conceptos: Testing, calidad de código
-
Ejecutar todas las pruebas
python -m pytest tests/ -v
-
Ejecutar pruebas con coverage
python -m pytest tests/ --cov=models --cov=services
python main.pyEl estudiante debe actualizar su repositio personal con:
- Código fuente completo con todos los TODOs resueltos
- Pruebas unitarias funcionando al 100%
- Aplicación ejecutable con interfaz funcional
- Documentación adicional si es necesaria
- Comienza por lo simple, implementa primero las clases básicas antes que las complejas
- Consulta la documentación y revisa los conceptos de OOP cuando tengas dudas
- Fomentar el uso de nombres descriptivos, comentarios claros y una estructura de código coherente.
- Enfatizar la importancia de las pruebas unitarias para garantizar la calidad del código.
- Utilizar Git para gestionar los cambios y realizar commits atómicos.
- Mantener el
README.mdactualizado y documentar el código cuando sea necesario.