Entendiendo la Programación Orientada a Objetos
7/20/2024
La teoría de conjuntos es reciente en matemáticas. Georg Cantor la inició. Fraenkel y Zermelo la formalizaron después.
Pero surgieron problemas. El infinito era especialmente problemático. Russell y Whitehead escribieron Principia Mathematica para resolverlos.
En matemáticas no hay contradicciones. Hablamos de contradicciones profundas. No de simples palabras contradictorias.
Imagina hojas que son blancas y negras a la vez. Eso sería imposible.
También están las expresiones populares. “Estoy muerto en vida” suena dramático. Pero no es una contradicción matemática real.
Russell identificó el “círculo vicioso”. Era un problema grave. Una cosa no puede pertenecer a sí misma.
Piensa en comerte a ti mismo. Empiezas por los pies. Pero es imposible continuar.
Una boca no puede comerse a sí misma. Es parte de lo que debe comer. La lógica lo impide.

Russell creó la teoría de tipos. Estableció una jerarquía de pertenencia.
El bigote es café. Pero el bigote no pertenece al color café. Los grados de pertenencia son diferentes. Esta diferencia evita la contradicción.
Ahora viene lo interesante. La programación orientada a objetos (OOP) funciona igual:
- Clase = Conjunto
- Atributo = Etiqueta
- Subclases = Subconjuntos
- Herencia = Inyección de propiedades
- Interfaces = Etiquetas especiales
La lógica de OOP no es caprichosa. Es un descubrimiento sobre cómo funciona el mundo.
Aprender OOP requiere seguir reglas. Pero comprender la teoría es fundamental.
Estas son las preguntas clave sobre OOP:
- ¿Por qué la clase padre es abstracta?
- ¿Por qué no puedes instanciar una clase abstracta?
- ¿Por qué no existe herencia múltiple?
- ¿Por qué la clase hija hereda todo del padre?
- ¿Por qué la clase hija puede sobrescribir métodos?
- ¿Por qué una interfaz no incluye atributos nuevos?
- ¿Por qué una interfaz declara métodos de manera especial?
Entender OOP va más allá de seguir reglas. Es comprender el porqué detrás de ellas.
Un buen programador conoce estas bases. Así puede crear y resolver problemas de manera eficiente.