Estoy haciendo una presentación que muestra las diferencias entre la programación estructural y la orientada a objetos y quiero ilustrar por qué las personas necesitan OOP con un ejemplo en el que aplicar los conceptos de OOP facilitará la codificación para que la audiencia realmente sienta que necesita OOP.
Algunas ideas ??
java
c++
object-oriented
Ahmed
fuente
fuente
Respuestas:
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?
fuente
Hay 3 formas básicas de programar una computadora:
goto
s, como en los viejos intérpretes BASIC, o en lenguaje ensamblador. Pocas personas programan de esta manera.En mi opinión, la programación orientada a objetos es algo diferente. Se trata de cómo organizar su programa a mayor escala. No reemplaza ni es obsoleto ninguno de los 3 paradigmas que mencioné anteriormente: dentro de un cuerpo de método, aún debe elegir uno de los 3 paradigmas de la lista para escribir.
fuente
Se trata de cómo anticipa el cambio.
Ambos conceptos se prestan a la reutilización, pero OOP abre la puerta a cambios más fáciles. OOP tiene toda la capacidad de reutilización que tiene la programación estructural, pero también puede usarla para crear nuevas funciones con menos esfuerzo.
¡Se podría decir que OOP hereda toda la funcionalidad de la programación estructural con la funcionalidad adicional de herencia! :-RE
fuente
Los conceptos son ortogonales. La programación estructurada se trata de estructurar código dentro de procedimientos / funciones / métodos. Es perfectamente posible (y deseable) seguir los principios de la programación estructurada dentro de los métodos de clase cuando se hace POO.
fuente
Esa es una redacción subjetiva: la programación estructurada y la OOP son estilos de resolución de problemas, y uno no siempre es mejor que el otro. Escribir una biblioteca de métodos numéricos tiene mucho sentido si se realiza en un estilo estructurado, donde realiza transformaciones en los datos de entrada. Sin embargo, un agente simple controlado por una máquina de estados se puede expresar fácilmente como una clase autónoma en Java o C ++. OOP puede ser una forma natural de expresar contenedores de almacenamiento para estructuras de datos.
Hablar sobre la ocultación de la información y la modularidad es una buena manera de motivar naturalmente a OOP como un estilo.
Steve Yegge redactó una versión interesante de este tema: de alguna manera, una de las mejores descripciones de las diferencias en los enfoques entre los dos estilos.
fuente
OOP es más fácil de entender cuando haces un modelo de negocio. Cuando piensa en los elementos de la aplicación, utiliza algunos OBJETOS y RELACIONES entre ellos, por ejemplo, el Libro tiene Autor (es), Título, ISBN. El libro es para dejarlo en la Biblioteca y el estudiante podría pedirlo prestado. La programación estructural obliga a pensar en procesos específicos, implementaciones que no están en abstracción.
OOP está diseñado para cambios fáciles. El cambio en el programa estructural es posible pero debe describirse por código. El cambio en el programa OO podría describirse mediante un cambio de modelo abstracto.
fuente
Alcance variable:
Creo que un principio de los lenguajes para garantizar una buena programación es restringir el alcance de las variables. En lenguajes estructurados como C, el alcance es principalmente de dos tipos:
Todos sabemos que el alcance global es perjudicial. Pero a veces los ámbitos locales no son suficientes para ejecutar el programa. Evitar los alcances globales tiende a un uso más amplio de punteros, que permiten el uso de variables fuera del alcance. Pero los punteros son difíciles de entender y usar.
Los lenguajes OOP como C ++ agrega un nuevo tipo de alcance: alcance de clase / objeto a través de la encapsulación. Este alcance se ve reforzado por las variaciones privadas / públicas. Y esto resuelve muchos problemas de alcance variable. Los ámbitos están más definidos en OOP. Y los punteros son menos necesarios.
Esta es una de las grandes características de OOP.
fuente