La mayoría de los lenguaje de programación creados en los últimos 30 años tiene algo en común, se basan en algo llamado: «Programación Orientada a Objetos»
Antes que nada, no POO (su abreviatura) no es un lenguaje, sino un paradigma.
Ok, ok, ¿Qué demonios es un paradigma?
Paradigma: Forma de Pensar. Así de fácil, POO (ó OOP en inglés, por si algún día te lo encuentras) es una forma de pensar la programación de manera diferente a lo «tradicional».
¿Y qué es lo tradicional para empezar?
Pues lo tradicional es la Programación Estructurada, donde en general (y digo general porque si, tienen funciones y cosas así, pero no importa ahora) tu programa es como una receta de cocina: Un conjunto de instrucciones y nada más.
Tú le dictas a la computadora que quieres que haga y lo hace, sencillo, ¿no?
Pues POO no piensa que sea la manera más fácil (y esto es debatible pero eso queda para otro post) POO piensa que es mucho más fácil si hacemos que todo sea como las cosas de la vida real, si hacemos que todo en la computadora sea como …como objetos.
POO piensa diferente, así que agarrate de tu asiento, porque te voy a mostrar una nueva forma de programar completamente diferente a lo que viste arriba:
¿Qué es POO?
Los objetos de los que hablamos no representan cosas abstractas o «raras» su objetivo es representar cosas de la vida real, como los siguientes:
Se ve fácil, ¿no es así?
Bueno, para seguir adelante tenemos que traer a la mesa dos conceptos, y con ellos lo más difícil de memorizar de toda esta lección.
Clase
Una clase es un plano, es una idea, es una descripción, es una definición.
«Describe como es algo, pero no es ese algo en si»
Podemos tener una definición formal en la que una clase es un prototipo o del que contiene una colección de datos (atributos) un conjunto de operaciones (métodos) con esos datos que manipulan ESOS datos.
Como por ejemplo el plano de una casa:

Plano de una casa
O un ejemplo más común de clases son como los siguientes:
Y TODA clase define dos cosas en esencia:
- Atributos: Estas son las características de tu objeto, son sus cualidades en sí.
- Comportamiento: Son lo que puede hacer, su forma de comportarse.
Por ejemplo si estuviéramos haciendo una clase de una persona podemos tener algo así:
Pero como a los programadores siempre nos encanta darles nombres raros a las cosas, los nombre comunes con los que se describen esto son:
- Propiedades: Estas son las características de tu objeto, son sus cualidades en sí.
- Métodos: Son lo que puede hacer, su forma de comportarse.
Una clase define características y comportamientos comunes compartidos por un tipo de objeto. Se parece más a una plantilla cuando se crea cierto tipo de objeto.
Por ejemplo, tenemos un objeto llamado Cris, y clasificamos a Cris como un humano. No sabemos quién es Cris, pero podemos decir que tiene manos, dedos, ojos, etc. porque sabemos que es humano. Lo mismo sucede con otros objetos del mundo real. Podemos decir cuáles son esas cosas apenas sabiendo sus clases.
Otro ejemplo sería Cris es un programador y su jefe es el gerente, pero podemos decir con seguridad que Cris y su jefe son empleados (en esta frase, hay otro conocimiento sobre OOP, hablaremos de esto más adelante), porque ellos Comparten una característica común, que es su descripción del trabajo.
Pero al final de la historia la clase esta describiendo estas cosas de forma abstracta, después de todo una clase solo es una descripción de algo, te dirá que una persona por ejemplo tiene un nombre o una edad pero no te dirá una edad en especial.
Tenemos una cápsula genérica, un prototipo , del cual parten todos las cápsulas u objetos.
Esta clase es un nuevo tipo de dato.
De la misma manera que no tiene un mísero sentido hacer un plano si no quieres hacer una casa, no tiene sentido hacer una clase a menos que quieras crear un objeto.
Objetos
«La cosa en si pues»
Los objetos son creados a partir de una clase, de hecho otro nombre muy común de estos son instancias, son instancias de una clase.

Plano-Clase y Casa-Objeto
Además podemos crear más de un objeto de una misma clase.
Ejemplo:
Vamos a tomar un ejemplo más detallado de una clase:
Clase: Pokemon Propiedades: nombre tipo elemento tamaño sonido Metodos: ataque llorar
A continuación, permite crear un objeto de estas características y comportamientos:
Propiedades: nombre: Pikachu tipo: tipo de ratón pokemon elemento: electric tamaño: pequeño sonido: pika, pika Metodos: cry: Produce un "pika, pika" ataque: Ataca a otro pokemon.
La programación orientada a objetos (POO) es un método de implementación en el cual los programas están organizados como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son todas miembros de una jerarquía de clases las cuales están unidas a través de relaciones de herencia.
Puntos Clave de POO
Podemos resumir todas las ideas de POO en los siguientes puntos:
- Encapsulamiento: Recuerda que las clases son como una caja cerrada, todos los métodos y las variables están dentro y toda la información solo puede ser accedido por medio de sus sistemas propios, esto hace que sea de verdad como una caja cerrada, su información solo entra y sale por las formas y de la forma en que la clase quiera. Puede incluso no importante como funciona por dentro, todo lo que necesitas saber es que funciona.
- Herencia o Jerarquía: Esto es clave, la herencia permite que una clase pueda servir como plantilla para la creación de futuras clases, no te preocupes, explicaremos esto a detalle después.
- Polimorfismo: Un solo nombre de una clase o método puede representar diferentes implementaciones. Al igual que un Ferrari y un Porsche. Sabemos que los 2 coches tienen motores diferentes y mecanismos diferentes, pero se que ambos son coches y se conducirlos. Eso es polimorfismo, utilizando diferentes implementaciones pero solo una interfaz.
Otra de las característica en POO en si se vinculan las funciones y los datos, cosa que no exista.
Principios de POO

Principios son las Columnas en las que se sustenta POO
Toda esta filosofía se puede simplificar en varias columnas, son los pilares que fundamentan este paradigma.
- Principio de Abstracción
Modelar, este principio dice que POO busca modelar los objetos, busca atraerse y simplificar un objeto de la vida real a solo un par de atributos. En otras palabras, buscaremos transformar un objeto de la vida real en atributos (características) y sus acciones (métodos). Consiste en encontrar las partes fundamentales de un sistema para describirlas de manera simple y precisa.
- Principio de Jerarquía
Todo conocimiento o modulo de tu programa puede ordenarse como un árbol como por ejemplo (transporte-raíz, y las hojas sean autos, barcos, caballos), de que el que esta más abajo hereda todas las características de los de arriba.
- Principio de Tipificación
Todo lenguaje en POO esta tipificado, es decir tenemos diferentes TIPOS de datos.
- Principios de Encapsulamiento
Este principio dice que todos lo atributo que se relacionan a una clase tiene que estar declarados dentro de la misma clase.
- Principios de Modularidad
- Descomposición Modular: Descompón tu programa en módulos para que sea más fácil. Llamadas clases.
- Composición Modular: Todos estos modelos tiene que estar conectados, son partes de un todo.
- Comprensibilidad Modular: Tiene que ser posible entender un modulo sin necesidad de conocer los demás módulos.
- Continuidad Modular: Si realizo cambios (mejoro o corrijo errores) en un módulo no debe de importarle en nada a los demás.
- Protección Modular: Sin importar que haga, debería ser imposible para mi afectar negativamente a un módulo desde fuera de este.
Podemos también hablar de varias reglas:
Correspondencia Directa: Que podamos ser capaces de mejorar un modulo y el programa debe de funcionar de manera normal.
Pocas Interfaces: Busca que tus clases no se relacionen a menos que sea totalmente necesario, evitando así errores al actualizar un módulo.
Pequeñas Interfaces: Busca que la relación, que la cantidad de atributos sean los menores posibles, busca una mayor independencia de cada módulo.
Interfaces Explicitas: Evita que varios módulos modifiquen un mismo atributo para evitar conflicto de escritura o lectura.
Ocultación de la Información: Solo la clase misma debería poder ser capaz de modificar sus atributos.
Y si…no es ni de lejos todo lo que POO pero nos dará una idea bastante exacta de esta nueva idea a de entender la programación.

Ya se POO
Así que listo, regresa por donde has venido y ve a aprender ese lenguaje que tanto quieres, Java, C++ o Python.