Los algoritmos describen lo que debe hacer la computadora. La estructura describe cómo se presenta el algoritmo [en el código fuente]. OOP es un estilo de programación que aprovecha ciertas estructuras "orientadas a objetos".
Los libros de algoritmos a menudo evitan la POO porque se centran en el algoritmo, no en la estructura. Los fragmentos de código que dependen en gran medida de la estructura tienden a ser malos ejemplos para poner en un libro de algoritmos. Del mismo modo, los libros de OOP a menudo evitan los algoritmos porque desordenan la historia. El punto de venta de OOP es su fluidez, y vincularlo a un algoritmo lo hace parecer más rígido. Se trata más del enfoque del libro que de cualquier otra cosa.
En el código de la vida real, usará ambos lado a lado. No puede resolver problemas informáticos sin algoritmos, por definición, y le resultará difícil escribir buenos algoritmos sin estructura (POO o de otro modo).
Como ejemplo de dónde se difuminan, tome la Programación dinámica. En un libro de algoritmos, describiría cómo tomar un conjunto de datos homogéneo en una matriz y utilizar la Programación dinámica para llegar a una solución. En un libro de OOP, puede encontrarse con una estructura como Visitor, que es una forma de hacer algoritmos arbitrarios en un conjunto de objetos heterogéneos. El ejemplo del libro DP podría considerarse como un visitante muy simple que opera en objetos en un orden generalmente ascendente. El patrón Visitante podría considerarse como el esqueleto de un problema de DP, pero falta la carne y las papas. En realidad, encontrará que a menudo necesita ambos juntos: usa el patrón Visitor para tratar la heterogeneidad en su conjunto de datos (DP es malo en eso), y usa DP dentro de la estructura de Visitor para organizar su algoritmo para minimizar el tiempo de ejecución (Visitor no
También vemos algoritmos que funcionan sobre los patrones de diseño. Es más difícil redactar ejemplos en un espacio pequeño, pero una vez que tiene estructura, comienza a querer manipular esa estructura y utiliza algoritmos para hacerlo.
¿Hay algunos problemas que solo pueden ser presentados y resueltos por OOP?
Esta es una pregunta más difícil de responder de lo que piensas. Para el primer orden, no hay una razón computacional por la que necesite OOP para resolver cualquier problema. La prueba simple es que cada programa OOP se compila en ensamblador, que es un lenguaje decididamente no OOP.
Sin embargo, en el esquema general de las cosas, la respuesta comienza a ser tímida hacia sí. Raramente está limitado simplemente por las metodologías informáticas. La mayoría de las veces hay cosas como las necesidades comerciales y la habilidad del desarrollador que son factores que influyen en la ecuación. Muchas aplicaciones hoy en día no podrían escribirse sin OOP, no porque OOP sea de alguna manera fundamental para la tarea, sino porque la estructura proporcionada por OOP fue esencial para mantener el proyecto en buen camino y dentro del presupuesto.
Esto no dice que nunca abandonaremos OOP en el futuro por alguna nueva estructura divertida. Simplemente dice que es una de las herramientas más efectivas en nuestra caja de herramientas para una fracción sorprendentemente grande de tareas de programación que existen hoy en día. Los problemas futuros pueden hacer que nos acerquemos al desarrollo utilizando diferentes estructuras. Por un lado, espero que las redes neuronales requieran un enfoque de desarrollo muy diferente, que puede resultar o no "Orientado a Objetos".
No veo la desaparición de OOP en el futuro cercano debido a la forma en que piensan los diseñadores de algoritmos. Hasta la fecha, el patrón habitual es que alguien diseña un algoritmo que no aprovecha la POO. La comunidad OOP se da cuenta de que el algoritmo realmente no se ajusta a la estructura OOP, y realmente no es necesario, por lo que envuelven todo el algoritmo en una estructura OOP y comienzan a usarlo. Considere boost::shared_ptr. Los algoritmos de conteo de referencia que descansan en el interior shared_ptrno son muy amigables con la POO. Sin embargo, el patrón no se hizo popular hasta que se shared_ptrcreó un envoltorio de OOP a su alrededor que expuso las capacidades de los algoritmos en un formato estructurado de OOP. Ahora, es tan popular que se convirtió en la última especificación para C ++, C ++ 11.
¿Por qué es tan exitoso? Los algoritmos son excelentes para resolver problemas, pero a menudo requieren una inversión inicial sustancial en investigación para comprender cómo usarlos. El desarrollo orientado a objetos es muy efectivo para envolver dichos algoritmos y proporcionar una interfaz que requiere menos inversión inicial para aprender.