Siempre tendí a culpar a la popularidad de C por la necesidad de un lenguaje ensamblador universal. Su combinación de especificidad a nivel de máquina, estandarización y portabilidad extrema permiten que C funcione como ese lenguaje ensamblador universal de facto , y por esa razón sospecho que su papel allí continuará indefinidamente.
Debo mencionar que siempre estoy un poco sorprendido cuando OOP se presenta en los cursos de programación como una especie de "modelo final" que es el único punto final posible para una buena programación. Al igual que muchos otros aspectos de la programación, el valor de OOP es un compromiso entre muchos factores competitivos, incluyendo cómo los cerebros humanos organizaron la información, cómo los grupos sociales apoyan el software a largo plazo y, en el caso de la programación orientada a objetos, algunos aspectos bastante profundos de cómo funciona el universo mismo.
Y ese último punto vale un poco más. Lea más si está interesado en una exploración a nivel físico de por qué existen ciertos estilos de programación, cómo funcionan juntos y hacia dónde se dirige el mundo en el futuro a medida que nos expandimos más en tales conceptos ...
Un objeto en física es cualquier cosa que mantenga una coherencia reconocible a lo largo del tiempo. Eso a su vez permite que criaturas simples como nosotros se salgan con la suya representando el objeto usando solo una pequeña cantidad de bits, sin poner en peligro nuestra supervivencia. Pero en términos de física en general, la cantidad de cosas que debe acertar exactamente para hacer que este tipo de simplificación sea fácil y común es notablemente grande. Como humanos, no pensamos mucho en eso porque, francamente, no estaríamos aquí si no fuera cierto.
¿Suena demasiado abstracto? Realmente no lo es. Imagine, por ejemplo, tratar de navegar por el camino a la casa de su amigo si, en lugar de automóviles, se encuentra con campos de plasma que oscilan rápidamente y condensaciones momentáneas de materia que se mueven con un enorme rango de velocidades. Tal escenario podría cortar bastante profundamente en las oportunidades de socialización, ¿sí? Necesitamos objetos, que son objetos, y la existencia de los objetos que nos provee de un nivel enorme y críticamente importante de la simplificación del entorno que nos rodea.
Entonces, regresemos todo eso al software. ¿Qué tienen que decir los objetos en el mundo real sobre los objetos en términos de programación?
Bueno, por un lado, significa que lo que define un objeto "bueno" en el software realmente debería ser si el tipo de datos que maneja respalda o no la idea de persistencia reconocible en el tiempo .
Con la definición, las formas más fáciles de OOP son fáciles de reconocer. Ellos son los que copian un poco al usar solo datos que ya están "adjuntos" o definidos por algún objeto realmente físico del mundo real, como una persona, una casa o un automóvil. Incluso hoy, esta es con demasiada frecuencia la única definición de objetos que las personas obtienen en los cursos de software. Eso es una lástima, porque incluso los programas triviales orientados a objetos necesitan una definición más amplia que esa.
La segunda y mucho más interesante categoría de objetos consiste en lo que llamaré eventos inmortalizados del mundo real . Por "inmortalizado" me refiero a cosas que existen al menos brevemente como una entidad o colecciones bien definidas en el mundo real, pero que luego se dispersan y dejan de existir como colecciones físicamente significativas. Un simposio es un gran ejemplo: el simposio existe por un corto tiempo como una colección decentemente bien definida de lugares y personas. Pero, por desgracia, incluso las mejores conferencias deben terminar, y las partes individuales que las componen pasan a otras actividades.
Pero al usar computadoras y redes, podemos hacer que un simposio transitorio parezca un objeto a largo plazo al capturar y mantener una memoria de él como un objeto de software. Muchas de las cosas que hacemos con las computadoras y las bases de datos equivalen a este tipo de inmortalización de eventos transitorios, en el que, en efecto, tratamos de enriquecer nuestro universo real al capturarlo y extenderlo de formas que no pueden existir físicamente. Por ejemplo, ¿has visto una Pandora real últimamente? Tales capturas y extensiones de piezas del mundo real ayudan a enriquecer y extender nuestras propias vidas, economías y opciones de manera notable. Para mí, este es el corazón de la programación orientada a objetos, el lugar donde ha tenido y continúa teniendo los impactos más notables.
Una categoría final de OOP consiste en objetos que no tienen una conexión cercana a eventos externos, sino que son la infraestructuranecesitábamos apoyar nuestra extensión continua de la realidad usando objetos inmortalizados del mundo real. Aquí es donde puedes descender hasta el (semi) metal de la computadora, creando piezas de realidad persistente que, al igual que los elementos químicos del mundo real, se pueden combinar rápidamente y de manera interesante para construir nuevos mundos internos. La informática móvil ha ayudado a promover el crecimiento de este tipo de enfoque altamente recombinante, uno que de nuevo imita de muchas maneras las características recombinantes del mundo físico. También es difícil: lo que puede parecer una buena opción puede probar con el tiempo haber sido una inesperadamente mala, generalmente porque termina bloqueando la diversidad y la expansión en lugar de apoyarla.
Esta última categoría también señala los riesgos de usar un solo modelo para la programación, ya que al igual que el mundo real, los mundos programados también necesitan procesos que nocorresponden bien a objetos relativamente inmutables. La Tierra está llena de objetos, pero el sol está lleno de flujos de energía altamente dinámicos que, en última instancia, son necesarios para "conducir" los objetos y actividades en la Tierra de baja energía. Del mismo modo, al crear mundos informáticos, hay casos en los que debe lidiar con flujos y transformaciones y contextos que cambian rápidamente que, aunque no son muy parecidos a los objetos en sí mismos, son absolutamente críticos para permitir que los objetos más simples y amigables para los humanos se utilicen en niveles superiores . No es casualidad que gran parte de la programación realizada a nivel del núcleo no sea visiblemente similar a un objeto, o que tienda a depender en gran medida de lenguajes como C que estén más orientados al procesamiento. Estos son los dominios más profundos que complementan la fascinante diversidad que vemos más arriba en los mundos generados por computadora.
La otra área donde OOP puede salir mal es enfocarse demasiado en los viejos conceptos de objetos.
Los objetos en el mundo real, y especialmente los objetos vivos , tienen un nivel de habilidad absolutamente sorprendente para interactuar con sus entornos de formas complejas y sutiles. Los widgets componibles que se miran entre sí, hacen algunas comprobaciones de compatibilidad y cordura, y tal vez incluso descubren algunas formas nuevas de interactuar que se acercan mucho más al concepto biológico real de los objetos que los marcos simples y los esquemas de herencia simples que tendemos para centrarse (¡generalmente por necesidad!) en el nivel de código. Esta es una de las áreas de crecimiento para los objetos en el mundo cibernético, los enfoques más "como agentes" donde la reactividad al medio ambiente es la norma, incluso dentro de la programación misma.
¡Y mucho por mi "crítica" de OOP! Sin embargo, espero haber señalado por qué crear un mundo cibernético más rico significa abarcar la diversidad de estilos de programación, en lugar de asumir que "solo uno" es todo lo que se necesita. ¡Mi sensación es que las cosas realmente interesantes están por venir, no importa cuán mundano sea mucho de lo que hacemos ahora!