Modulo 9: Programación Orientada a Objetos (POO)

python-desde-cero/programacion-orientada-objetos
@yoezequiel 07-03-2025

3️⃣6️⃣ Introducción a la POO: ¿Qué es y por qué usarla?

🔹 ¿Qué es la Programación Orientada a Objetos (POO)?

🔹 ¿Por qué usar POO?

Organización y reutilización del código
Mantenibilidad y escalabilidad
Modularidad y abstracción


3️⃣7️⃣ Clases y objetos: Definición y uso

🔹 Definiendo una clase y creando un objeto

class Persona:
    pass  # Clase vacía

p1 = Persona()  # Creando un objeto
print(type(p1))  # <class '__main__.Persona'>

🔹 Ejemplo con atributos

class Persona:
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad

p1 = Persona("Juan", 30)
print(p1.nombre)  # Juan
print(p1.edad)  # 30

3️⃣8️⃣ Atributos y métodos de instancia

📌 Atributos de instancia

class Coche:
    def __init__(self, marca, modelo):
        self.marca = marca
        self.modelo = modelo

mi_coche = Coche("Toyota", "Corolla")
print(mi_coche.marca)  # Toyota

📌 Métodos de instancia

class Coche:
    def __init__(self, marca, modelo):
        self.marca = marca
        self.modelo = modelo

    def mostrar_info(self):
        return f"Marca: {self.marca}, Modelo: {self.modelo}"

mi_coche = Coche("Ford", "Fiesta")
print(mi_coche.mostrar_info())  # Marca: Ford, Modelo: Fiesta

3️⃣9️⃣ Métodos especiales (__init__, __str__)

📌 Método __init__ (constructor)

class Persona:
    def __init__(self, nombre):
        self.nombre = nombre

p1 = Persona("Ana")

📌 Método __str__ (representación amigable)

class Persona:
    def __init__(self, nombre):
        self.nombre = nombre

    def __str__(self):
        return f"Persona: {self.nombre}"

p1 = Persona("Ana")
print(p1)  # Persona: Ana

4️⃣0️⃣ Encapsulamiento (public, _protected, __private)

📌 Modificadores de acceso

class Ejemplo:
    def __init__(self):
        self.publico = "Público"
        self._protegido = "Protegido"
        self.__privado = "Privado"

e = Ejemplo()
print(e.publico)  # OK
print(e._protegido)  # OK, pero no recomendado
print(e.__privado)  # ERROR

4️⃣2️⃣ Herencia: Clases padre e hijas

📌 Definiendo herencia en Python

class Animal:
    def hablar(self):
        return "Hace un sonido"

class Perro(Animal):
    def hablar(self):
        return "Ladra"

p = Perro()
print(p.hablar())  # Ladra

4️⃣3️⃣ Polimorfismo y sobreescritura de métodos

📌 Polimorfismo: Un mismo método con diferentes implementaciones

class Gato(Animal):
    def hablar(self):
        return "Maulla"

animales = [Perro(), Gato()]
for animal in animales:
    print(animal.hablar())

4️⃣4️⃣ Composición y Agregación de clases

📌 Composición: Un objeto dentro de otro

class Motor:
    def __init__(self, tipo):
        self.tipo = tipo

class Coche:
    def __init__(self, marca, motor):
        self.marca = marca
        self.motor = Motor(motor)

mi_coche = Coche("Toyota", "Eléctrico")
print(mi_coche.motor.tipo)  # Eléctrico
Lección Anterior Curso