Es posible que desee ver este video blog rápido . El resultado es que la diferencia entre la programación estructurada y la programación OO es una cuestión de lo que quitan de la programación, no de lo que agregan. Las disciplinas de software como la programación estructurada y la programación orientada a objetos son limitantes, no habilitantes. Aquí hay algunas definiciones. Advertencia: no te van a gustar.
La programación estructurada es una disciplina impuesta al goto (transferencia directa de control)
La programación OO es una disciplina impuesta a los punteros a las funciones (transferencia indirecta de control)
La programación funcional es disciplina impuesta a la asignación.
El primero no es demasiado difícil de entender. Dijkstra descubrió que era imposible crear pruebas generales de corrección cuando se permitía el goto en los algoritmos. Sin embargo, si las estructuras de control se limitaban a la secuencia, la selección y la iteración, entonces las pruebas de corrección eran posibles. Por supuesto, hoy en día ni siquiera intentamos demostrar que las cosas están correctas, pero sí nos gusta la simplicidad y la elegancia de la programación estructurada.
Es un poco más difícil de entender OO. A menudo definimos OO como encapsulación, herencia y polimorfismo. Lo que es menos conocido es que estos tres atributos son alcanzables, y con frecuencia se lograron en C. De hecho, C ++ comenzó como un preprocesador que se compiló en C. No es realmente difícil encapsular en C. Tampoco es difícil de construir estructuras de datos que son subconjuntos entre sí, simulando herencia. El polimorfismo, sin embargo, es un poco más difícil. Requiere punteros a funciones que, en C, son difíciles de manejar bien. Lo que nos dieron los lenguajes como C ++ fue la disciplina impuesta a esos punteros a las funciones. El compilador de C ++ construyó los vtables para nosotros e inicializó los punteros dentro de ellos de acuerdo con un estricto formalismo. Entonces, en un sentido muy real, OO es simplemente disciplina impuesta sobretransferencia indirecta de control, es decir, punteros a funciones.
La programación estructurada trata sobre cómo no usar goto. OO trata sobre cómo no usar punteros para las funciones. Y la programación funcional también se trata de lo que no se debe hacer. En la programación funcional no asignamos variables, excepto en los casos más estrictamente controlados.
Por lo tanto, al final, todas estas "tecnologías" de programación en realidad restringen las disciplinas en lugar de habilitar tecnologías. Nos dicen lo que no hay que hacer más de lo que nos dicen lo que hacer. Y eso significa que el desarrollo de software no ha crecido en los últimos 40 años. Más bien, se ha reducido. Se ha vuelto cada vez más limitado ya que hemos aprendido todas las cosas que no debemos hacer.
Aprender qué no hacer es bueno; Pero aquí está la inquietante pregunta: ¿Qué cosas nuevas hemos aprendido a hacer?