Programación orientada a objetos: explicación clara con un ejemplo

La programación orientada a objetos (POO) suele explicarse con muchas definiciones antes de que el alumno sepa qué problema resuelve. Empecemos por la idea útil: agrupar datos y las operaciones que tienen sentido sobre esos datos.
Clase y objeto no son lo mismo
Imagina una aplicación que gestiona cuentas bancarias. Cada cuenta tiene un titular y un saldo, y permite ingresar o retirar dinero. La clase describe qué información y comportamientos tendrá cualquier cuenta. Un objeto es una cuenta concreta creada a partir de esa descripción.
La clase es el modelo; el objeto contiene un estado real. Si creas dos objetos, cada uno mantiene su propio saldo aunque los dos respeten las mismas reglas.
Atributos y métodos
Los atributos representan el estado: titular y saldo. Los métodos expresan acciones válidas: ingresar, retirar o consultarSaldo.
La decisión importante no es solo dónde escribir una función. Pregúntate qué objeto posee la información necesaria y quién debe proteger sus reglas. En este caso, la propia cuenta debería impedir una retirada inválida.
Encapsulación: proteger una regla
Si cualquier parte del programa puede cambiar el saldo directamente, también puede dejarlo en un estado imposible. Encapsular significa limitar ese acceso y ofrecer operaciones controladas.
En vez de asignar saldo = -500, se llama a retirar(500). El método comprueba si la operación está permitida y comunica el resultado. La regla queda en un solo lugar, más fácil de probar y mantener.
¿Cuándo tiene sentido la herencia?
La herencia permite definir una clase más específica a partir de otra. Pero no debería usarse solo para evitar repetir dos líneas. Tiene sentido cuando existe una relación estable del tipo “es un” y el comportamiento base sigue siendo válido.
Una cuenta de ahorro puede ser una cuenta con reglas adicionales. En cambio, un cliente tiene cuentas; no es una cuenta. En ese caso corresponde composición: un objeto contiene o utiliza otros objetos.
Un ejercicio para comprobar que lo entiendes
Diseña una biblioteca sencilla:
- Identifica los posibles objetos: libro, usuario y préstamo.
- Decide qué estado pertenece a cada uno.
- Escribe las acciones permitidas.
- Coloca cada regla donde están los datos que necesita.
- Prueba casos normales y casos inválidos.
No empieces por la herencia. Empieza por responsabilidades claras. Si puedes explicar por qué un método pertenece a una clase y qué estado protege, ya estás razonando con objetos en lugar de traducir definiciones de memoria.
Si estás en la carrera y quieres practicar con exámenes, tienes la POO de la universidad con ejercicios de examen resueltos: herencia, polimorfismo, interfaces, equals y excepciones.
La POO es el punto donde más alumnos se descuelgan en un ciclo. Si es tu caso, así la trabajamos en las clases de programación para DAM y DAW y en las clases para universidad.