Ir al contenido

Programacion orientada a objetos

La programacion orientada a objetos permite agrupar datos y comportamiento. No necesitas usar clases para todo, pero son utiles cuando una entidad tiene estado y acciones.

class Usuario:
def __init__(self, nombre, puntos):
self.nombre = nombre
self.puntos = puntos
def esta_activo(self):
return self.puntos > 0
usuario = Usuario("Ana", 40)
print(usuario.nombre)
print(usuario.esta_activo())

Salida:

Ana
True

Retorno: usuario.esta_activo() devuelve bool.

self representa el objeto actual. Cuando llamas usuario.esta_activo(), Python pasa usuario como primer argumento internamente.

class Cuenta:
def __init__(self, saldo=0):
self.saldo = saldo
def depositar(self, monto):
self.saldo += monto
return self.saldo
def retirar(self, monto):
if monto > self.saldo:
return False
self.saldo -= monto
return True
cuenta = Cuenta(100)
print(cuenta.depositar(50))
print(cuenta.retirar(30))
print(cuenta.saldo)

Salida:

150
True
120

Para clases que principalmente guardan datos, dataclass reduce ruido.

from dataclasses import dataclass
@dataclass
class Producto:
nombre: str
precio: float
stock: int = 0
def disponible(self):
return self.stock > 0
producto = Producto("Teclado", 45.5, 3)
print(producto)
print(producto.disponible())

Salida:

Producto(nombre='Teclado', precio=45.5, stock=3)
True

Usa clases cuando:

  • Hay datos que pertenecen juntos: Usuario, Producto, Cuenta.
  • Hay acciones que modifican esos datos: depositar, activar, marcar_completada.
  • Quieres representar conceptos del dominio de tu programa.

Prefiere funciones simples cuando:

  • La logica no necesita guardar estado.
  • Solo transformas entradas en salidas.
  • El programa todavia es pequeno.
class Tarea:
def __init__(self, titulo):
self.titulo = titulo
self.completada = False
def completar(self):
self.completada = True
return self.completada
def resumen(self):
estado = "ok" if self.completada else "pendiente"
return f"{self.titulo}: {estado}"
tarea = Tarea("Practicar funciones")
print(tarea.resumen())
print(tarea.completar())
print(tarea.resumen())

Salida:

Practicar funciones: pendiente
True
Practicar funciones: ok

Retornos: completar() devuelve True; resumen() devuelve un str.