🎯 Objetivos de Aprendizaje
Al finalizar esta semana serás capaz de:
- Explicar qué es la Programación Orientada a Objetos y sus ventajas
- Identificar cuándo usar POO vs programación procedural
- Modelar situaciones del mundo real usando conceptos de POO
- Reconocer los 4 pilares fundamentales de la POO: Encapsulamiento, Herencia, Polimorfismo y Abstracción.
Teoría: ¿Qué es la Programación Orientada a Objetos?
Paradigmas de Programación
La programación tiene diferentes paradigmas o formas de pensar y estructurar el código:
Programación Procedural (lo que ya conocés):
función calcular_area_rectangulo(ancho, alto)
función calcular_perimetro_rectangulo(ancho, alto)
función mostrar_rectangulo(ancho, alto, color)
rectángulo_1_ancho = 5
rectángulo_1_alto = 3
rectángulo_1_color = "azul"
Programación Orientada a Objetos:
clase Rectangulo:
atributos: ancho, alto, color
métodos: calcular_area(), calcular_perimetro(), mostrar()
rectángulo_1 = nuevo Rectangulo(5, 3, "azul")
rectángulo_1.calcular_area()
¿Por qué POO?
La POO nos permite modelar el mundo real de forma más natural. En lugar de tener datos sueltos y funciones separadas, agrupamos lo que pertenece junto.
Ejemplo del mundo real:
- Un auto tiene características (color, marca, velocidad) y comportamientos (acelerar, frenar, girar)
- En POO: creamos una clase Auto con atributos (color, marca) y métodos (acelerar(), frenar())
Los 4 Pilares de la POO
Encapsulamiento: Agrupar datos y comportamientosOculta los detalles internos de un objeto.
-
Controla el acceso a los atributos.
Permite crear clases basadas en otras.
- Significa que diferentes objetos pueden tener un mismo método con el mismo nombre (por ejemplo
hablar()
), pero cada uno lo implementa a su manera.
🐶🐱 Ejemplo práctico en Python:
Ahora probamos:
Abstracción significa mostrar solo lo esencial y ocultar los detalles internos que no son necesarios para quien usa un objeto o sistema.
Es como decir:
“Solo te muestro lo que necesitás saber para usar esto, sin complicarte con cómo está hecho por dentro.”
📦 Ejemplo cotidiano: Una cafetera
🎯 Lo que ves (interfaz):
-
Un botón de encendido
-
Un botón de preparar café
-
Una luz que indica que está listo
🔌 Lo que no ves (complejidad oculta):
-
El sistema eléctrico
-
Los sensores de temperatura
-
Las resistencias y válvulas
-
El software que regula el tiempo y la presión
Vos simplemente presionás “Preparar” y esperás tu café. Eso es abstracción: usar algo sin saber cómo está implementado por dentro.
🧑💻 Llevado a la programación:
Clase Cafetera
(vista desde afuera):
Quien usa la clase (usuario = Cafetera()
) solo ve esos métodos. No necesita saber cómo se calienta el agua ni cómo se dosifica el café. La lógica interna está “encapsulada” y oculta.
🚪 Otro ejemplo simple: una puerta
-
Método público:
abrir()
-
Lo que no ves: el mecanismo interno de la cerradura, el resorte, la física de la bisagra.
🎯 ¿Por qué es útil la abstracción?
-
Hace tu código más fácil de usar y entender.
-
Permite cambiar la implementación sin romper el código que lo usa.
-
Fomenta el diseño de interfaces claras y coherentes.
Qué diferencia hay entre encapsulamiento y abstraccion?
📌 Diferencia clave en una frase:
La abstracción te dice qué hace un objeto.
El encapsulamiento te dice cómo lo protege internamente.
🧩 ¿Qué es Abstracción?
-
Oculta la complejidad innecesaria y muestra solo lo esencial.
-
Te permite usar un objeto sin conocer su implementación.
Ejemplo: Usar un control remoto para cambiar el canal.
No sabés qué pasa dentro del televisor, pero usás el botón cambiar_canal()
.
🔐 ¿Qué es Encapsulamiento?
-
Agrupa datos y comportamientos dentro de una clase.
-
Restringe el acceso directo a los datos internos (para protegerlos).
-
Permite definir niveles de acceso: público, privado, protegido.
Ejemplo: Una caja fuerte con código.
El contenido está encapsulado y solo se accede mediante un método: abrir(codigo)
.
🧑💻 Ejemplo en código Python:
🔎 ¿Dónde está la abstracción?
-
Vos usás
depositar()
over_saldo()
sin saber cómo se manejan internamente.
🔐 ¿Dónde está el encapsulamiento?
-
__saldo
es un atributo privado. No podés modificarlo directamente desde afuera.
🧠 En resumen:
Concepto | Qué hace | Para qué sirve |
---|---|---|
Abstracción | Oculta los detalles, muestra lo esencial | Simplifica el uso de objetos |
Encapsulamiento | Oculta y protege los datos internos | Mejora la seguridad y el mantenimiento |
Actividades Guiadas
Ejercicio 1: Identificando Objetos
Situación: Sistema de una biblioteca
Pregunta: ¿Qué objetos identificás en una biblioteca?
Respuesta esperada:
- Libro: título, autor, ISBN, páginas → prestar(), devolver(), buscar()
- Usuario: nombre, ID → registrarse(), prestar_libro()
- Bibliotecario: nombre, ID, turno → gestionar_prestamos(), registrar_libro()
Ejercicio 2: Pensando en Atributos y Métodos
Situación: Sistema de una tienda online
Completa la siguiente tabla:
Objeto | Atributos | Métodos |
---|---|---|
Producto | precio, nombre, stock, ... | aplicar_descuento(), actualizar_stock(), ... |
Cliente | nombre, ... | registrarse(), realizar_compra(), ... |
Carrito | productos, total, ... | agregar_producto(), calcular_total(), ... |
Pedido | ... | ... |
Vendedor | ... | ... |
Ejercicio 3: POO vs Procedural
Código Procedural:
# Variables globales
nombre = "Juan"
edad = 20
notas = [8, 7, 9]
def calcular_promedio(notas):
return sum(notas) / len(notas)
def mostrar_info(nombre, edad, notas):
promedio = calcular_promedio(notas)
print(f"{nombre}, {edad} años, promedio: {promedio}")
¿Problemas que identificás?
- Datos dispersos
- Difícil de mantener con muchos estudiantes
- No hay relación clara entre datos y funciones
- Baja reutilización
Versión POO (conceptual):
class Estudiante:
def __init__(self, nombre, edad, notas):
self.nombre = nombre
self.edad = edad
self.notas = notas
def calcular_promedio(self):
return sum(self.notas)/len(self.notas)
📚 Glosario Clave
-
Clase: Plantilla para crear objetos.
-
Objeto: Instancia concreta de una clase.
-
Atributo: Variable interna de un objeto.
-
Método: Función dentro de una clase.
-
Instanciar: Crear un objeto a partir de una clase.
-
Encapsulamiento / Herencia / Polimorfismo / Abstracción: Los 4 pilares de la POO.
Conceptos Clave de la Semana
Clase vs Objeto
- Clase: El "molde" o "plano" (como el plano de una casa)
- Objeto: La "instancia" específica (la casa construida)
Atributos vs Métodos
- Atributos: Las características o datos (color, tamaño, nombre)
- Métodos: Los comportamientos o acciones (calcular, mostrar, procesar)
Modelado del Mundo Real
La clave está en observar y abstraer:
- ¿Qué cosas (objetos) hay en mi problema?
- ¿Qué características (atributos) tienen?
- ¿Qué acciones (métodos) pueden realizar?
Entregable de la Semana
Práctica: Análisis y Modelado de Sistema
Consigna: Elegí uno de los siguientes sistemas y realizá un análisis completo:
- Sistema de gestión de un gimnasio
- Sistema de reservas de un restaurante
- Sistema de gestión de una veterinaria
Tu entregable debe incluir:
Parte 1: Identificación de Objetos (mínimo 4 objetos)
Objeto: Nombre del objeto
Descripción: Qué representa en el mundo real
Parte 2: Análisis Detallado (para cada objeto)
OBJETO: [Nombre]
ATRIBUTOS:
- atributo1: tipo de dato (descripción)
- atributo2: tipo de dato (descripción)
- ...
MÉTODOS:
- método1(): qué hace
- método2(): qué hace
- ...
RELACIONES:
- Cómo se relaciona con otros objetos
Parte 3: Casos de Uso (mínimo 3)
Caso de Uso: [Nombre]
Descripción: Qué sucede paso a paso
Objetos involucrados: Lista de objetos que participan
Ejemplo de formato esperado:
=== SISTEMA DE GESTIÓN DE GIMNASIO ===
OBJETO: Miembro
ATRIBUTOS:
- id: entero (identificador único)
- nombre: texto (nombre completo)
- email: texto (correo electrónico)
- fecha_inscripcion: fecha (cuándo se inscribió)
- plan: texto (tipo de membresía)
- activo: booleano (si la membresía está activa)
MÉTODOS:
- inscribirse(): registra nuevo miembro
- renovar_plan(): extiende la membresía
- cancelar_membresia(): desactiva la cuenta
- consultar_rutina(): obtiene rutina asignada
RELACIONES:
- Tiene una Rutina asignada
- Puede tener múltiples Pagos
- Usa Equipos del gimnasio
Caso de Uso: Nuevo miembro se inscribe al gimnasio
Descripción:
1. El miembro llega al gimnasio
2. El recepcionista consulta planes disponibles
3. El miembro elige un plan y proporciona sus datos
4. El recepcionista registra al nuevo miembro
5. Se genera un pago por la inscripción
6. Se asigna una rutina básica al miembro
Objetos involucrados: Miembro, Recepcionista, Plan, Pago, Rutina
🎥 Recursos Extra (Opcionales)
- https://www.youtube.com/watch?v=HtKqSJX7VoM - Curso de POO con PYTHON desde CERO (Completo)
📌 Preparación para la Semana 2
✅ Asegurate de tener:
👉 También podés usar https://colab.research.google.com/ si no podés instalar software.
Evaluación de la Semana
¿Cómo saber si dominás los conceptos?
Deberías poder responder:
- ¿Qué ventajas tiene POO sobre programación procedural?
- ¿Cómo identificar objetos en un problema del mundo real?
- ¿Cuál es la diferencia entre clase y objeto?
- ¿Qué son los 4 pilares de la POO?
Si podés explicar estos conceptos con tus propias palabras y ejemplos, estás listo para la Semana 2.
Comentarios