Programación Orientada a Objetos en Python

🧩

1. Definición de POO

La Programación Orientada a Objetos organiza el código en objetos que representan cosas reales o conceptos. Cada objeto combina:

Esto permite escribir código más modular, reutilizable y fácil de mantener.

🏗️

2. Clase

Una clase es un molde que define la estructura y el comportamiento de los objetos. Dentro de una clase se definen los atributos y métodos que compartirán todas sus instancias.

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

    def saludar(self):
        return f"Hola, soy {self.nombre}"
👤

3. Objeto o instancia

Un objeto es una instancia concreta de una clase. Cada objeto tiene sus propios valores de atributos, aunque comparta la misma estructura.

persona1 = Persona("Ana", 30)
persona2 = Persona("Luis", 25)
🪜

4. Herencia

La herencia permite crear nuevas clases basadas en otras existentes. La clase hija reutiliza y puede extender el comportamiento de la clase padre.

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

    def trabajar(self):
        return f"{self.nombre} trabaja como {self.puesto}"
🎭

5. Polimorfismo

El polimorfismo permite que distintas clases tengan métodos con el mismo nombre, pero con comportamientos diferentes. Esto hace que el código sea más flexible y extensible.

class Gato:
    def hablar(self):
        return "Miau"

class Perro:
    def hablar(self):
        return "Guau"
🔒

6. Encapsulamiento

El encapsulamiento protege los datos internos de un objeto, evitando que se modifiquen directamente desde fuera. En Python se suele usar __atributo para indicar que es privado.

class Cuenta:
    def __init__(self, saldo):
        self.__saldo = saldo

    def depositar(self, cantidad):
        self.__saldo += cantidad

    def obtener_saldo(self):
        return self.__saldo

7. Abstracción

La abstracción permite trabajar con ideas generales, ocultando los detalles internos de implementación. Se define una interfaz común y las clases concretas implementan los detalles.

class Vehiculo:
    def mover(self):
        raise NotImplementedError

class Coche(Vehiculo):
    def mover(self):
        return "El coche avanza por la carretera"
🧩

Mini‑juegos POO

1. Adivina el concepto

Lee la definición y elige el concepto correcto.

2. Completa el código

Elige la línea correcta para completar el código.

class Persona:
    def __init__(self, nombre):
        # completa aquí
        
📘

Diagrama UML básico

Relación entre las clases principales del ejemplo.

classDiagram class Persona { -nombre -edad +saludar() } class Empleado { -puesto +trabajar() } class Cuenta { -__saldo +depositar() +obtener_saldo() } class Vehiculo { +mover() } class Coche { +mover() } Persona <|-- Empleado Vehiculo <|-- Coche