system onlinepath: /guias/programacion/programacion-orientada-a-objetos-desde-cero/mode: knowledge_baselocal:
Programación · Nivel inicial

Programación orientada a objetos explicada desde cero

La programación orientada a objetos organiza el código agrupando datos y comportamiento en objetos que modelan cosas del mundo real. Es uno de los paradigmas más usados, y sus cuatro pilares se entienden con analogías simples.

14 min de lectura▣ Actualizada el ◇ Por Underc0de
Respuesta rápida

La programación orientada a objetos (POO) es una forma de organizar el código agrupando en objetos los datos (lo que algo es) y el comportamiento (lo que algo hace). En vez de tener variables sueltas por un lado y funciones por otro, un objeto coche tiene sus datos (marca, velocidad) y sus acciones (acelerar, frenar) juntos. Se apoya en dos conceptos: la clase es el molde o plano (la definición de qué es un coche en general) y el objeto o instancia es cada ejemplar concreto creado a partir de ese molde (tu coche rojo específico). Un molde, muchos objetos. La POO se resume en cuatro pilares: encapsulación (guardar los datos internos de un objeto y exponer solo lo necesario, como un cajero que no te deja tocar los billetes por dentro); herencia (crear clases nuevas a partir de otras, reutilizando lo común: un CocheEléctrico hereda de Coche); polimorfismo (que objetos distintos respondan a la misma orden a su manera: hacerSonido() hace «guau» en un perro y «miau» en un gato); y abstracción (mostrar lo esencial y ocultar la complejidad: usás el volante sin saber cómo funciona el motor). Su valor es modelar el problema de forma cercana al mundo real, reutilizar código y mantener organizados los sistemas grandes. Casi todos los lenguajes populares la soportan.

Ver índice de contenidos
  1. 01Qué es la POO
  2. 02Clase e instancia
  3. 03Los cuatro pilares
  4. 04Errores frecuentes
  5. 05Preguntas frecuentes
  6. 06Fuentes

Qué es la POO

Un paradigma de programación es una forma de organizar el código. La POO propone organizarlo alrededor de objetos: unidades que juntan datos (sus características) y comportamiento (las acciones que pueden hacer). La idea es modelar el problema como un conjunto de objetos que interactúan, parecido a cómo pensamos las cosas del mundo real.

Datos y comportamiento, juntos

La diferencia clave con otros estilos es que en la POO los datos y las funciones que operan sobre ellos viven juntos en el objeto. Un objeto cuenta bancaria no es solo un número de saldo: es el saldo y las operaciones depositar() y retirar() que lo modifican de forma controlada. Esa unión —datos + comportamiento— es lo que hace que un objeto sea una pieza coherente y autónoma, responsable de sí misma.

Clase e instancia

Dos palabras que se confunden y conviene fijar desde el principio. La clase es el molde; el objeto (o instancia) es lo que sale del molde.

# La CLASE define cómo es un coche en general (el molde)
class Coche:
    def __init__(self, marca, color):
        self.marca = marca      # datos (atributos)
        self.color = color
        self.velocidad = 0
    def acelerar(self):         # comportamiento (métodos)
        self.velocidad += 10

# Los OBJETOS son ejemplares concretos creados desde la clase
mi_coche = Coche("Toyota", "rojo")      # una instancia
otro_coche = Coche("Renault", "azul")   # otra instancia distinta
mi_coche.acelerar()   # mi_coche.velocidad ahora es 10; otro_coche sigue en 0

Un molde, muchos objetos

La clase se escribe una vez y de ella se crean tantos objetos como quieras, cada uno con sus propios valores. La clase Coche define que todo coche tiene marca, color y sabe acelerar; cada objeto es un coche concreto con su marca y su velocidad. Es la misma relación que entre un plano de casa (la clase) y las casas construidas con él (los objetos): mismo diseño, viviendas independientes.

Los cuatro pilares

Los cuatro pilares de la programación orientada a objetos explicados con analogías, junto con la relación entre clase y objeto. Primero se muestra la base: una clase es el molde o plano que define qué es y qué hace un tipo de cosa, por ejemplo un coche en general, mientras que un objeto o instancia es cada ejemplar concreto creado a partir de ese molde, por ejemplo un coche rojo específico; de un molde se crean muchos objetos, cada uno con sus propios valores. Luego se presentan los cuatro pilares. El primero es la encapsulación: consiste en agrupar los datos y el comportamiento dentro del objeto y ocultar los detalles internos, exponiendo solo lo necesario a través de una interfaz controlada; la analogía es un cajero automático que no te deja tocar los billetes por dentro sino que te ofrece operaciones seguras como depositar y retirar, protegiendo el estado interno de manipulaciones indebidas. El segundo es la herencia: consiste en crear clases nuevas a partir de otras existentes, reutilizando lo que tienen en común y añadiendo o modificando lo específico; la analogía es que un coche eléctrico hereda todo lo de un coche general, como tener ruedas y poder acelerar, y añade lo suyo propio, como la batería, evitando repetir lo común. El tercero es el polimorfismo: consiste en que objetos de distinto tipo respondan a una misma orden cada uno a su manera; la analogía es que al pedir hacer un sonido, un perro responde con un ladrido y un gato con un maullido, de modo que el mismo mensaje produce el comportamiento adecuado según el objeto, lo que permite tratar objetos distintos de forma uniforme. El cuarto es la abstracción: consiste en mostrar solo lo esencial y ocultar la complejidad interna, ofreciendo una interfaz simple; la analogía es que se usa el volante y los pedales de un coche sin necesidad de saber cómo funciona el motor por dentro, concentrándose en qué hace la cosa y no en cómo lo hace. El diagrama resalta que estos cuatro pilares juntos permiten modelar el problema de forma cercana al mundo real, reutilizar código y mantener organizados los sistemas grandes, que es el valor central de la programación orientada a objetos. Estilo oscuro de programación, con la relación clase-objeto arriba y los cuatro pilares como bloques etiquetados con su analogía cada uno.
Los cuatro pilares con analogías: encapsulación (el cajero que protege los billetes), herencia (el coche eléctrico que hereda del coche), polimorfismo (perro y gato responden distinto al mismo «hacer sonido») y abstracción (usar el volante sin saber del motor).

La POO se resume en cuatro ideas, y las analogías las hacen intuitivas:

PilarQué esAnalogía
EncapsulaciónOcultar los datos internos y exponer solo operaciones segurasEl cajero: no tocás los billetes, usás «depositar» y «retirar»
HerenciaCrear clases a partir de otras, reutilizando lo comúnEl coche eléctrico hereda del coche y añade la batería
PolimorfismoQue objetos distintos respondan a la misma orden a su manera«Hacer sonido»: el perro ladra, el gato maúlla
AbstracciónMostrar lo esencial y ocultar la complejidadUsás el volante sin saber cómo funciona el motor

Estos pilares no son teoría suelta: son lo que permite reutilizar código (herencia), proteger el estado (encapsulación), extender sin romper (polimorfismo) y manejar la complejidad (abstracción). Sobre ellos se apoyan los principios SOLID y los patrones de diseño.

Errores frecuentes

  • Confundir clase con objeto. La clase es el molde; el objeto, el ejemplar concreto. Una clase, muchos objetos.
  • Exponer todos los datos del objeto. Rompe la encapsulación; exponer solo operaciones controladas.
  • Abusar de la herencia. No todo es «es un»; heredar por reutilizar sin relación real gendera jerarquías frágiles.
  • Meter todo en una sola clase gigante. Un objeto debe tener una responsabilidad clara, no hacerlo todo.
  • Modelar como datos sueltos + funciones. Es no usar POO; el objeto une datos y comportamiento.
  • Creer que la POO es siempre la mejor opción. Es un paradigma entre varios; a veces otro encaja mejor.
  • Copiar jerarquías del mundo real al pie de la letra. Modelar lo que el programa necesita, no una taxonomía completa.

Preguntas frecuentes

¿Qué es la programación orientada a objetos?

La programación orientada a objetos es un paradigma, es decir, una forma de organizar el código, que estructura los programas en torno a objetos, los cuales agrupan en una misma unidad los datos que describen algo y el comportamiento que ese algo puede realizar. La idea central es modelar el problema como un conjunto de objetos que interactúan entre sí, de una manera parecida a como pensamos las cosas del mundo real. Lo que distingue a este paradigma de otros estilos de programación es precisamente esa unión de datos y comportamiento en el objeto: en lugar de tener por un lado variables sueltas con la información y por otro funciones que la manipulan, un objeto contiene tanto sus datos, llamados atributos, como las acciones que puede ejecutar sobre ellos, llamadas métodos. Por ejemplo, un objeto que represente una cuenta bancaria no es solo un número con el saldo, sino el saldo junto con las operaciones de depositar y retirar que lo modifican de forma controlada. Esta cohesión hace que cada objeto sea una pieza autónoma y responsable de sí misma, lo que ayuda a organizar sistemas grandes, a reutilizar código y a razonar sobre el programa en términos cercanos al dominio del problema. La programación orientada a objetos se apoya en el concepto de clase, que es el molde a partir del cual se crean los objetos, y se resume en cuatro pilares fundamentales, la encapsulación, la herencia, el polimorfismo y la abstracción, que son las ideas que le dan su potencia. Es uno de los paradigmas más usados y está soportado por la gran mayoría de los lenguajes de programación populares, aunque conviene recordar que no es el único ni siempre el más adecuado para todo problema.

¿Cuál es la diferencia entre una clase y un objeto?

La diferencia entre una clase y un objeto es una de las primeras cosas que hay que entender bien en la programación orientada a objetos, y la mejor forma de fijarla es con la metáfora del molde y sus productos. La clase es el molde, el plano o la definición general: describe cómo es y qué puede hacer un tipo de cosa, especificando qué atributos tendrá y qué métodos ofrecerá, pero sin ser en sí misma una cosa concreta. El objeto, también llamado instancia, es cada ejemplar concreto creado a partir de esa clase, con sus propios valores particulares en los atributos. Por ejemplo, se puede definir una clase Coche que establezca que todo coche tiene una marca, un color y una velocidad, y que sabe acelerar y frenar; esa clase es el molde. A partir de ella se pueden crear muchos objetos coche distintos, uno que sea un Toyota rojo, otro que sea un Renault azul, cada uno con sus propios valores y su propio estado, de modo que acelerar uno no afecta al otro. La relación es de uno a muchos: se escribe la clase una sola vez y de ella se instancian tantos objetos como se necesiten, todos compartiendo la misma estructura y comportamiento definidos en la clase pero manteniendo cada uno sus datos independientes. La analogía del plano de una casa y las casas construidas con él ilustra bien esta relación: el plano es la clase, único y abstracto, y cada casa levantada según ese plano es un objeto, concreto e independiente de las demás aunque compartan el diseño. Confundir ambos conceptos, por ejemplo pensando que la clase ya es una cosa concreta o que cada objeto define su propia estructura, lleva a errores de diseño, por lo que conviene tener clara desde el principio esta distinción entre el molde y sus ejemplares.

¿Qué es la encapsulación?

La encapsulación es uno de los cuatro pilares de la programación orientada a objetos, y consiste en agrupar dentro del objeto tanto sus datos como el comportamiento que actúa sobre ellos, y a la vez ocultar los detalles internos, exponiendo hacia afuera únicamente lo necesario a través de una interfaz controlada. Dicho de otro modo, la encapsulación establece una frontera entre el interior del objeto, que es privado y responsabilidad del propio objeto, y el exterior, que solo puede interactuar con él mediante las operaciones que el objeto decide ofrecer. La analogía más clara es la de un cajero automático: no se permite a los usuarios abrir la máquina y tocar directamente los billetes ni manipular sus mecanismos internos, sino que se les ofrecen operaciones seguras y bien definidas como consultar el saldo, depositar o retirar, y es la máquina la que se encarga internamente de hacer las cosas correctamente y de proteger su estado. En términos de código, esto significa que los datos internos de un objeto, como el saldo de una cuenta, no se manipulan directamente desde fuera, sino a través de métodos que garantizan que las reglas se cumplan, por ejemplo impidiendo retirar más dinero del disponible. La encapsulación aporta varias ventajas importantes. Protege la integridad del estado del objeto, evitando que se lo deje en una situación inválida por manipulaciones incorrectas desde fuera. Reduce el acoplamiento, porque el resto del programa solo depende de la interfaz pública del objeto y no de cómo está hecho por dentro, lo que permite cambiar la implementación interna sin romper a quienes lo usan. Y facilita razonar sobre el código, porque cada objeto es responsable de mantener su propia coherencia. Por todo ello, una buena encapsulación, que expone lo mínimo necesario y protege el resto, es una de las claves de un diseño orientado a objetos sólido y mantenible.

¿Qué son la herencia y el polimorfismo?

La herencia y el polimorfismo son dos de los cuatro pilares de la programación orientada a objetos, están relacionados entre sí y se entienden bien con ejemplos. La herencia es el mecanismo que permite crear una clase nueva a partir de otra ya existente, de modo que la clase nueva, llamada subclase o clase hija, recibe automáticamente los atributos y métodos de la clase de la que hereda, llamada superclase o clase padre, y puede además añadir características propias o modificar las heredadas. Su propósito principal es reutilizar lo que es común y evitar repetirlo. Por ejemplo, si se tiene una clase Coche con todo lo común a los coches, se puede crear una clase CocheEléctrico que herede de Coche, obteniendo gratis todo lo general, como tener ruedas y poder acelerar, y añadiendo lo específico suyo, como la gestión de la batería. La herencia expresa una relación de tipo es un, en el sentido de que un coche eléctrico es un coche. El polimorfismo, cuyo nombre significa muchas formas, es la capacidad de que objetos de distintos tipos respondan a una misma orden o mensaje, cada uno a su manera. El ejemplo clásico es el de una operación como hacer un sonido: si se le pide a un objeto perro que haga un sonido, ladra, y si se le pide a un objeto gato, maúlla, de modo que la misma llamada produce el comportamiento adecuado según el tipo concreto del objeto. Esto es muy potente porque permite escribir código que trata de manera uniforme a objetos distintos, confiando en que cada uno hará lo que le corresponde, sin necesidad de comprobar de qué tipo es exactamente. Herencia y polimorfismo suelen ir de la mano, porque la herencia crea familias de clases relacionadas y el polimorfismo permite tratarlas de forma intercambiable a través de su interfaz común. Bien usados, aportan reutilización y flexibilidad, aunque conviene no abusar de la herencia, ya que jerarquías demasiado profundas o forzadas pueden volver el código rígido y difícil de mantener.

¿Qué es la abstracción?

La abstracción es el cuarto pilar de la programación orientada a objetos y consiste en mostrar únicamente lo esencial de algo, es decir, qué hace, ocultando la complejidad de cómo lo hace por dentro, de manera que quien lo usa pueda concentrarse en su propósito sin necesidad de entender sus mecanismos internos. La abstracción responde a la idea de ofrecer una interfaz simple sobre una realidad que puede ser complicada. La analogía habitual es la de conducir un coche: para conducir basta con saber usar el volante, los pedales y la palanca de cambios, sin necesidad de comprender cómo funciona internamente el motor, la transmisión o la inyección de combustible; el coche abstrae toda esa complejidad detrás de unos controles sencillos y comprensibles. En programación orientada a objetos, la abstracción se manifiesta en que un objeto ofrece un conjunto de operaciones con nombres claros que expresan qué se puede hacer con él, mientras que los detalles de implementación quedan ocultos detrás de esas operaciones. Por ejemplo, se puede usar un objeto que envía correos llamando simplemente a una operación de enviar, sin necesidad de saber cómo se conecta al servidor, cómo se codifica el mensaje o cómo se manejan los errores de red por dentro. La abstracción está estrechamente relacionada con la encapsulación, ya que ambas implican ocultar detalles, pero se enfocan en aspectos distintos: la encapsulación se centra en proteger y controlar el acceso al estado interno, mientras que la abstracción se centra en simplificar, presentando un modelo conceptual claro y omitiendo lo irrelevante para quien usa el objeto. El valor de la abstracción es enorme para manejar la complejidad de los sistemas grandes, porque permite trabajar a distintos niveles sin ahogarse en detalles: cada capa ofrece abstracciones que las capas superiores usan sin preocuparse de su interior. Diseñar buenas abstracciones, con interfaces claras que capturen lo esencial y oculten lo accesorio, es una de las habilidades más importantes en el diseño de software.

¿La POO es siempre la mejor forma de programar?

No, la programación orientada a objetos no es siempre la mejor forma de programar, y conviene entenderla como uno de varios paradigmas disponibles, cada uno con sus fortalezas y sus contextos ideales, en lugar de como una respuesta universal. La programación orientada a objetos es muy poderosa y adecuada para modelar sistemas donde tiene sentido pensar en términos de entidades con estado y comportamiento que interactúan, y brilla especialmente en aplicaciones grandes y complejas donde su capacidad de organizar el código, encapsular el estado y reutilizar mediante familias de clases ayuda a mantener el orden a lo largo del tiempo. Por eso es tan popular y está tan extendida. Sin embargo, existen otros paradigmas que pueden encajar mejor según el problema. La programación funcional, por ejemplo, que evita el estado mutable y se apoya en funciones que transforman datos, resulta muy adecuada para el procesamiento de datos, la concurrencia y los casos donde la previsibilidad y la ausencia de efectos secundarios son valiosas. La programación procedimental, más directa, puede ser perfectamente apropiada para scripts y programas sencillos donde introducir toda la maquinaria de objetos sería un exceso innecesario. Además, muchos lenguajes y proyectos modernos son multiparadigma y combinan enfoques, usando objetos para unas cosas y funciones para otras según lo que resulte más claro en cada caso. También hay que evitar los excesos dentro de la propia programación orientada a objetos, como crear jerarquías de herencia demasiado complejas, abstracciones innecesarias o estructuras sobrediseñadas para problemas simples, errores que a veces se cometen por aplicar el paradigma de forma dogmática. La actitud más sana es conocer la programación orientada a objetos a fondo, porque es fundamental y muy usada, y a la vez conocer otros paradigmas, para poder elegir en cada situación la herramienta conceptual que produzca el código más claro, mantenible y adecuado al problema, sin casarse con un único enfoque.

Fuentes

Documentación oficial y material de la comunidad consultados para esta guía. Fecha de consulta: 28 de julio de 2026.

Aportes de la comunidad Underc0de

  1. Underc0de, foro. Sección Programación. Paradigmas y fundamentos.
  2. Underc0de, foro. Sección Desarrollo web. POO en la práctica.

Documentación oficial

  1. MDN. Objetos en JavaScript. Introducción práctica a objetos.
  2. Python. Clases. Tutorial oficial de clases.
  3. Oracle (Java). Object-Oriented Programming Concepts. Conceptos de POO.
  4. MDN. Programación orientada a objetos. Los pilares explicados.