Entendiendo la Programación Orientada a Objetos
7/20/2024
Entendiendo la programación orientada a objetos
La formalización de la teoría de conjuntos es un tema reciente en la historia de las matemáticas. Georg Cantor inició esta teoría, y Fraenkel y Zermelo la formalizaron estrictamente.
Sin embargo, surgieron problemas, especialmente con el concepto de infinito. El libro Principia Mathematica de Russell y Whitehead se dedicó a resolver varios de estos problemas.
En matemáticas, no hay lugar para la contradicción. Aquí, nos referimos a contradicciones profundas, no a simples contradicciones verbales. Para ilustrarlo, imagina que las hojas de un libro son blancas y negras al mismo tiempo.
También podemos pensar en expresiones populares como “estoy muerto en vida”. Aunque aceptadas, no reflejan las verdaderas contradicciones matemáticas.
Russell llamó “círculo vicioso” a uno de los problemas más importantes donde aparecía la contradicción: una cosa no puede pertenecer a sí misma.
Imagina que intentas comerte a ti mismo. Comienzas por los pies, pero es imposible continuar. Incluso lógicamente, una boca no puede comerse a sí misma porque es parte de lo que debe comer.
Russell resolvió esto con la teoría de tipos, creando una jerarquía en relación a la pertenencia. Por ejemplo, el bigote es de color café, pero el bigote no pertenece al color café. Los grados de pertenencia no son iguales y esta diferencia crea la contradicción.
Ahora, enfoquémonos en la programación orientada a objetos (OOP):
- Clase = Conjunto
- Atributo = Etiqueta
- Subclases = Subconjuntos
- Herencia = Inyección de propiedades
- Interfaces = Etiquetas especiales
La lógica detrás de OOP no es un capricho, sino un descubrimiento de cómo funciona el mundo. Aprender OOP implica seguir ciertos lineamientos, pero comprender la teoría es clave.
Aquí algunas preguntas fundamentales sobre OOP:
- ¿Por qué la clase padre se declara abstracta?
- ¿Por qué no se puede instanciar un objeto desde una clase abstracta?
- ¿Por qué una clase no puede recibir herencia múltiple?
- ¿Por qué la clase hija debe heredar todo de la clase padre?
- ¿Por qué la clase hija puede sobrescribir métodos?
- ¿Por qué una interfaz no puede incluir atributos nuevos?
- ¿Por qué una interfaz debe declarar la implementación de métodos de manera especial?
Entender OOP no se trata solo de seguir reglas, sino de comprender el porqué detrás de ellas. Un buen programador debe comprender estas bases para poder crear y resolver problemas eficientemente.