Si bien algunos objetos que creo están modelando objetos del mundo real, ¿no haría lo mismo el código pre-OOP?
La mayor diferencia entre el código OOP y el código pre-OOP es que el primero modela una situación del mundo real como un grupo de entidades distintas que interactúan entre sí, cada una con un "poder" limitado con respecto a lo que puede hacer, y también capaz de " Reaccionando "ante eventos externos con acciones propias. Este último modela todo como una gran cantidad de datos que no hace nada por sí solo, mientras que el cálculo representa "cosas que suceden" y puede afectar a cualquiera o a todos ellos.
Tanto si modela mejor el mundo real como si no, eso realmente depende de qué facetas del mundo estás modelando. Una simulación de física, por ejemplo, donde desea describir los efectos que, por ejemplo, un fuego que se está encendiendo tendría en los objetos circundantes, estaría mejor representada por un enfoque "tradicional", ya que tanto la luz como el calor están bien. procesos definidos que afectan el estado externo e interno de otros objetos, y no varían según el comportamiento de cada objeto en particular, solo se ven afectados por sus propiedades.
Por otro lado, si está modelando diferentes componentes que interactúan para producir el comportamiento deseado, tratarlos como agentes en lugar de cosas pasivas puede hacer que sea más fácil hacerlo correctamente sin perder nada. Si quiero encender mi televisor, simplemente presiono el botón, si el cable de alimentación está desenchufado, TV.turnOn
lo comprobará por mí. Por lo tanto, no hay riesgo de girar una rueda dentada y olvidarse de la otra que la está tocando, ya que la propia rueda dentada (si está programada correctamente) se ocupará de las interacciones secundarias que surjan como consecuencia de la principal.
Pero OO realmente trata sobre cómo modelar cosas, y ese método de modelado no me parece inspirado por el mundo real.
Creo que tiene más que ver con la forma en que nosotros percibimos el mundo que cómo es realmente el mundo. Se podría argumentar que todo es solo un grupo de átomos (o energía, u ondas, lo que sea), pero eso no nos ayuda a manejar la tarea de lidiar con los problemas que enfrentamos, con entender el entorno que nos rodea y predecir eventos futuros ( o describiendo los pasados). Así que creamos "modelos mentales" del mundo y, a menudo, esos modelos mentales encuentran una mejor correspondencia con OO que los datos + procesa uno, lo que podría decirse que "mejor" es cómo funciona el mundo real.
También es interesante observar que la mayoría de la gente piensa que la POO es sinónimo de "POO clásica", donde creamos taxonómicamente conjuntos y subconjuntos de cosas, y colocamos los objetos de forma inequívoca en un conjunto muy específico. Eso es muy útil para crear nuevos tipos reutilizables , pero no tanto cuando la entidad que está modelando es bastante autónoma, y aunque inicia interacciones con otros objetos, rara vez, si es que alguna, lo es. objetivo de una interacción. O peor, cuando hay pocas (quizás solo una) instancia de esa entidad, o las instancias varían enormemente en la composición, el comportamiento o ambos.
Sin embargo, también hay un "OOP prototípico", en el que se describe un objeto seleccionando uno similar y enumerando los aspectos en los que difieren. Sugeriría este ensayo para un buen y no demasiado Explicación técnica del proceso de pensamiento (todo el post es demasiado grande, incluso para los estándares de Steve Yegge, así que estoy señalando la sección correspondiente: P). Nuevamente, esta es una buena combinación para nuestros modelos mentales cuando imaginamos instancias desconocidas en comparación con una conocida, pero no necesariamente por la forma en que "funciona" el mundo real ... (dos vacas son en realidad entidades completamente distantes, incluso si las percibimos como ser "similar" en muchos sentidos)