Objetivo de aprendizaje
Dominar los fundamentos de la Programación Orientada a Objetos en Python, construyendo clases que modelen entidades del mundo real, aplicando los principios de encapsulación, herencia y polimorfismo mediante ejercicios prácticos, para desarrollar soluciones de software estructuradas, modulares y reutilizables que fomenten el pensamiento lógico, la creatividad técnica y una actitud colaborativa frente a problemas computacionales.
Contextualización
Imagina que estás organizando una reunión con tus amigos. Tienes una lista de contactos, cada uno con nombre, teléfono y correo. En lugar de manejar tres listas separadas (una para nombres, otra para teléfonos, otra para correos), ¿no sería mejor tener un solo "objeto" que reúna toda la información de cada persona?
Así es como piensa la Programación Orientada a Objetos: agrupando datos y comportamientos relacionados en entidades coherentes. Cuando juegas un videojuego, cada personaje, cada enemigo, cada item del inventario es un "objeto" que tiene propiedades (vida, posición, color) y acciones (moverse, atacar, usar).
En este taller, vamos a aprender a crear nuestros propios "moldes" (clases) para generar objetos que representen cosas del mundo real: desde estudiantes y profesores hasta animales y vehículos. Verás cómo esta forma de pensar transforma problemas complejos en conjuntos de piezas que interactúan entre sí, como en un ecosistema digital.
Desarrollo de la actividad
Vamos a explorar los cuatro pilares fundamentales de la POO con ejemplos prácticos y contextualizados a nuestra realidad:
1. Clases y objetos: Modelando estudiantes
Una clase es como un molde para crear objetos. Por ejemplo, podemos crear una clase Estudiante que tenga propiedades como nombre, edad y promedio.
class Estudiante: # Constructor: método especial que se ejecuta al crear un objeto def __init__(self, nombre, edad, promedio): self.nombre = nombre # Atributo: nombre del estudiante self.edad = edad # Atributo: edad del estudiante self.promedio = promedio # Atributo: promedio académico # Método: acción que puede realizar el objeto def estudiar(self, materia): return f"{self}.nombre está estudiando {materia}" # Método para mostrar información del estudiante def mostrar_info(self): return f"Nombre: {self}.nombre, Edad: {self}.edad, Promedio: {self}.promedio" # Creando objetos (instancias) de la clase Estudiante estudiante1 = Estudiante("María García", 16, 8.5) estudiante2 = Estudiante("Carlos Méndez", 17, 9.2) # Usando los métodos de los objetos print(estudiante1.estudiar("Matemáticas")) print(estudiante2.mostrar_info())
2. Encapsulación: Protegiendo nuestros datos
La encapsulación nos permite ocultar los detalles internos de una clase y exponer solo lo necesario. En Python, usamos convenciones como el guion bajo para indicar atributos "protegidos".
class CuentaBancaria: def __init__(self, titular, saldo_inicial): self.titular = titular self._saldo = saldo_inicial # Atributo "protegido" (convención) def depositar(self, cantidad): if cantidad > 0: self._saldo += cantidad return True return False def retirar(self, cantidad): if 0 < cantidad <= self._saldo: self._saldo -= cantidad return True return False def consultar_saldo(self): return self._saldo # Uso de la clase con encapsulación mi_cuenta = CuentaBancaria("Ana López", 1000) mi_cuenta.depositar(500) mi_cuenta.retirar(200) print(f"Saldo actual: {mi_cuenta.consultar_saldo()}")
El reto final
Imagina que tu colegio quiere implementar un sistema para gestionar las actividades extracurriculares. Cada actividad tiene un nombre, un instructor, un cupo máximo de estudiantes y una lista de estudiantes inscritos.
Tu misión: Crea un sistema en Python que permita gestionar estas actividades extracurriculares utilizando todos los conceptos de POO que hemos aprendido.
Requisitos del sistema:
- Define una clase ActividadExtra con los atributos: nombre, instructor, cupo_maximo, estudiantes_inscritos (lista).
- Implementa métodos para:
- Inscribir un estudiante (verificando que haya cupo disponible)
- Retirar un estudiante
- Mostrar la información de la actividad
- Mostrar la lista de estudiantes inscritos
- Crea una clase Estudiante (como la del ejemplo) y úsala para crear objetos estudiantes.
- Crea al menos 3 actividades diferentes (música, deporte, robótica).
- Simula la inscripción de varios estudiantes a las actividades.
- Implementa una función que muestre un reporte general de todas las actividades.
Desafío adicional (para los más curiosos):
- Crea una clase Instructor con sus propios atributos y métodos.
- Implementa herencia: crea una clase ActividadDeporte que herede de ActividadExtra y añada atributos específicos como "tipo_deporte" y "requiere_equipo".
- Añade validaciones para evitar que un estudiante se inscriba en dos actividades al mismo horario.
Evaluación lúdica
¡Pon a prueba lo que has aprendido! Responde las siguientes preguntas. Cada respuesta correcta suma 20 puntos. ¡Intenta llegar a 100!