Mostrando entradas con la etiqueta avanzadas. Mostrar todas las entradas
Mostrando entradas con la etiqueta avanzadas. Mostrar todas las entradas

lunes, 21 de julio de 2025

✅ Python Nivel 3 – Parte 2: Programaci贸n Orientada a Objetos Avanzada

 馃敀 1. Encapsulamiento

Es un principio de la programaci贸n orientada a objetos que protege los datos internos de una clase, restringiendo el acceso directo a ellos.

馃И Ejemplo:


class Usuario: def __init__(self, nombre): self.__nombre = nombre # atributo privado (doble gui贸n bajo) def obtener_nombre(self): return self.__nombre

¿Qu茅 significa __nombre?
El doble gui贸n bajo convierte el atributo en privado, es decir, no se puede acceder directamente desde fuera de la clase (usuario.__nombre dar谩 error).

馃憠 Se accede mediante m茅todos p煤blicos, como obtener_nombre().


馃彿️ 2. Uso de @property y @setter

Permite controlar c贸mo se accede y modifica un atributo, manteniendo la sintaxis simple como si fuera p煤blico.

馃И Ejemplo:


class Producto: def __init__(self, precio): self._precio = precio # protegido @property def precio(self): return self._precio @precio.setter def precio(self, nuevo_precio): if nuevo_precio >= 0: self._precio = nuevo_precio

Ventaja:
Permite hacer validaciones al asignar o leer atributos, manteniendo una interfaz clara:


p = Producto(100) p.precio = 150 # Usa el setter print(p.precio) # Usa el getter

馃攣 3. M茅todos Especiales (Magic Methods)

Son m茅todos que comienzan y terminan con __. Python los usa para sobrecargar operadores y personalizar comportamientos.

✅ Ejemplos 煤tiles:

M茅todo¿Qu茅 hace?
__str__Representaci贸n en print()
__len__Permite usar len(obj)
__eq__Permite usar obj1 == obj2
__add__Permite usar obj1 + obj2

馃И Ejemplo de __str__:


class Punto: def __init__(self, x, y): self.x = x self.y = y def __str__(self): return f"Punto({self.x}, {self.y})" p = Punto(1, 2) print(p) # Imprime: Punto(1, 2)

馃П 4. Principios SOLID aplicados a Python

Estos principios ayudan a dise帽ar c贸digo mantenible, limpio y escalable.

馃З Explicaci贸n de cada uno:

  • S – Single Responsibility
    Cada clase debe tener una 煤nica responsabilidad. No mezcles l贸gica de base de datos con l贸gica de interfaz, por ejemplo.

  • O – Open/Closed
    Las clases deben estar abiertas a extensi贸n pero cerradas a modificaci贸n. Usa herencia o composici贸n en lugar de cambiar c贸digo existente.

  • L – Liskov Substitution
    Una subclase debe poder reemplazar a su clase padre sin alterar el comportamiento del programa.

  • I – Interface Segregation
    No fuerces a una clase a implementar m茅todos que no necesita. Divide interfaces en bloques m谩s peque帽os si hace falta.

  • D – Dependency Inversion
    No dependas de clases concretas, sino de abstracciones. Usa interfaces o clases base cuando sea posible.


馃彟 5. Ejemplo completo con todo lo aprendido


class CuentaBancaria: def __init__(self, titular, saldo=0): self.titular = titular self._saldo = saldo def depositar(self, cantidad): self._saldo += cantidad def retirar(self, cantidad): if cantidad <= self._saldo: self._saldo -= cantidad def __str__(self): return f"{self.titular} - Saldo: €{self._saldo}"
  • Usa encapsulamiento (_saldo)

  • Tiene m茅todos claros y separados

  • Usa __str__ para mostrar el objeto de forma legible

  • Cumple con el principio SRP (una clase → una tarea)