¿Qué es la programación orientada a objetos (OOP) y en qué difiere de la programación procedural?
Hay una frase que encontrarás inevitablemente al estudiar programación.
«Esto debe escribirse de forma orientada a objetos».
Al oírlo por primera vez, puede resultar desconcertante. ¿Qué es la programación procedural y qué hace tan diferente a la orientada a objetos? No es fácil entenderlo.
Empecemos por la conclusión. La programación procedural se centra en «qué hacer y en qué orden», mientras que la orientada a objetos pone el énfasis en «quién es responsable de hacerlo». La diferencia está en si los datos y las funciones que los manipulan se mantienen juntos o separados.
En este artículo explicaremos la diferencia con el ejemplo sencillo de pedir café y mostraremos cómo cambia en código real.
La programación procedural es una receta de cocina
Como indica su nombre, la programación procedural se centra en los procedimientos, es decir, en el orden.
Hay datos y funciones separadas que los procesan. El flujo avanza de arriba abajo, en orden.
Una receta de cocina encaja perfectamente: lavar los ingredientes, cortarlos, saltearlos y servirlos. Pasar esa secuencia directamente al código es programación procedural.
Veamos un ejemplo sencillo con una cuenta.
var balance = 10000 // Datos
func deposit(amount: Int) { // Funciones separadas
balance += amount
}
deposit(amount: 5000)
print(balance)
// Salida: 15000
El dato balance está expuesto y la función deposit lo modifica directamente.
En un programa pequeño, esto resulta más sencillo y rápido. El problema aparece cuando el programa crece.
Cuando hay 100 cuentas y las funciones que modifican el saldo están dispersas, resulta muy difícil seguir el rastro de dónde cambió un valor.
¿Qué es la programación orientada a objetos (OOP)?
La programación orientada a objetos agrupa los datos y la funcionalidad. Este conjunto se denomina «objeto».
En una cuenta, significa reunir en una sola unidad el dato «saldo» y la funcionalidad «realizar un ingreso».
Convirtamos en objeto la cuenta anterior.
class Account {
private var balance = 10000 // Ocultar los datos dentro
func deposit(_ amount: Int) { // Incluir también la funcionalidad
balance += amount
}
func show() { print(balance) }
}
let myAccount = Account()
myAccount.deposit(5000)
myAccount.show()
// Salida: 15000
balance ahora está oculto como private. El código externo ya no puede cambiar el saldo arbitrariamente; solo puede acceder mediante rutas definidas como deposit.
Ese es el núcleo de la programación orientada a objetos: proteger los datos y dejar claro «quién es responsable de cada tarea».
Piensa en pedir café. La programación procedural significa moler los granos, hervir el agua y hacerlo todo uno mismo. La orientada a objetos significa delegarlo: «Barista, un americano, por favor». El objeto barista se encarga de saber cómo prepararlo.
Las 4 características esenciales de OOP
La programación orientada a objetos tiene cuatro pilares. Los términos pueden parecer difíciles, pero los conceptos son sencillos.
- Encapsulación: ocultar los datos y permitir el acceso solo mediante rutas definidas (como private arriba)
- Herencia: reutilizar la funcionalidad heredándola de una clase existente
- Polimorfismo: el mismo comando se comporta de forma distinta según el objeto
- Abstracción: ocultar la complejidad interna y exponer solo lo necesario
El polimorfismo es especialmente potente. Si dices «llora», el perro hace guau y el gato hace miau. El comando es uno, pero cada objeto responde de forma distinta.
Cuándo usar OOP y cuándo conviene la programación procedural
La programación orientada a objetos no siempre es la respuesta correcta. Hay que elegir según la situación.
| Situación | Enfoque adecuado |
|---|---|
| Scripts cortos, cálculos puntuales | Programación procedural |
| Flujo de datos sencillo y secuencial | Programación procedural |
| Proyectos grandes que siguen creciendo | Programación orientada a objetos |
| Código en el que colaboran varias personas | Programación orientada a objetos |
| Se repiten conceptos similares | Programación orientada a objetos |
Si es pequeño y sencillo, lo procedural suele ser más limpio. Para código grande, complejo y de mantenimiento prolongado, la programación orientada a objetos demuestra su valor.
La programación procedural diseña el orden; la orientada a objetos diseña las responsabilidades.
Así lo preguntan en las entrevistas
P. ¿Cuál es la mayor diferencia entre la programación procedural y la orientada a objetos? R. La relación entre los datos y la funcionalidad. La programación procedural separa datos y funciones y fluye según el orden, mientras que la orientada a objetos los agrupa en objetos y los gestiona por responsabilidades. Por eso facilita el mantenimiento y la colaboración cuando el sistema crece.
P. ¿Por qué es importante la encapsulación? R. Impide que el código externo modifique los datos directamente y reduce los cambios inesperados. Como el acceso se limita a métodos definidos, es más fácil rastrear errores y cambiar la implementación interna afecta menos al código externo.
Aunque la terminología parezca grandilocuente, la cuestión central es solo una: «¿Cómo debemos manejar los datos?»
Practica agrupando pequeños fragmentos de código en objetos y pronto lo entenderás. Intenta refactorizar una parte de tu propio código con lo aprendido hoy.

