A menudo he oído decir que los objetos no se han entregado en términos de reutilización de código. ¿Estás de acuerdo? Si crees que no, ¿por qué no?
object-oriented
code-reuse
Casebash
fuente
fuente
Respuestas:
No, no necesariamente
Los objetos ofrecen una mejor semántica, organización del código / funcionalidad y, posiblemente, facilidad de uso.
Las bibliotecas bien diseñadas cumplen la promesa de reutilizar el código, no los objetos per se.
fuente
Honestamente, no estoy seguro de si la "reutilización de código" es realmente lo que alguien está buscando (o al menos, debería ser después). Mi filosofía es "componentes de software", lo que significa una mejor capacidad de mantenimiento a través de buenas interfaces y evitar acoplamientos innecesarios. La "reutilización de código" es una de las cosas que a veces se cae de eso: el código innecesariamente duplicado es una señal de que ha organizado las cosas de manera incorrecta y, por supuesto, es difícil de mantener.
Para responder la pregunta un poco más directamente, hay una colección de herramientas bastante buenas para evitar repetirse: herencia, rasgos, delegación, funciones de orden superior, etc. De ellas, las personas tienden a confundir la herencia con OO en su conjunto, y También tienden a abusar un poco, si me preguntas. Tal vez de ahí proviene parte de la vibra "OO apesta": encontrar la herencia atascada donde no tiene derecho natural a estar :)
fuente
No, los "objetos" no han hecho que la reutilización del código sea más fácil o más común. Las mismas preocupaciones que evitan que el código se reutilice en un programa modular (diseñar, probar y documentar una API de propósito general requiere un esfuerzo inicial considerablemente mayor que escribir una rutina única, y la razón de ser de todas las operaciones puede ser la maestro de ninguno: la lógica destinada a ser reutilizada puede no estar bien optimizada para los usos a los que realmente se aplica) se aplica a los programas OO, con la preocupación adicional de que un modelo de objeto mal diseñado puede obstaculizar la reutilización de lo que de otro modo sería reutilizable código.
OO es una abstracción útil para muchos problemas, pero tenga cuidado con las exageraciones de los años 80-90: no resuelve mágicamente los problemas fundamentales de nuestro comercio más de lo que hace gofres para usted mientras duerme.
fuente
No espero que TODOS los objetos se reutilicen, pero tenemos muchos objetos que reutilizamos en muchos proyectos diferentes. También tenemos objetos que solo se reutilizan en un proyecto. A menudo consumiremos los mismos objetos de negocios (u objetos de transferencia de datos), así como objetos de lógica de negocios de una aplicación de escritorio Click-Once, una aplicación web y una aplicación de teléfono, todo para el mismo proyecto.
¿Dónde has oído que OO no cumple con la reutilización? ¿Y cuál fue el razonamiento? Quizás el diseño de sus objetos los obligó a esa situación ...
fuente
Algunos programadores copiarán y pegarán en cualquier idioma y estilo.
Los programadores realmente buenos pueden evitar la mayoría de copiar y pegar en casi cualquier idioma.
Encuentro que los patrones de OO tienden a fomentar la reutilización. He visto código Java que se escribió en un estilo que no es OO (donde los datos se separaron del código debido a un ORM malo) y la reutilización fue realmente miserable, pero en OO los mismos programadores hicieron un mejor trabajo en el diseño ( y reutilizar).
También en los casos en que usamos patrones que no son oo o antipatrones oo, como establecedores / captadores, declaraciones de cambio, clases internas anónimas, funciones enormes y similares, he visto que la reutilización de códigos baja y la repetitiva sube ... significativamente.
PD. Sé que la gente tendrá problemas con el párrafo anterior, así que lo explicaré un poco.
Los setters y getters causan problemas OO porque le permiten operar en los miembros de un objeto (un objeto debe manipular sus propios miembros) Esto distribuye el código que opera en su clase a través de otras clases que requieren que copie la funcionalidad alrededor del setter / getter . Esto también se aplica a las Propiedades, solo porque las Propiedades son más fáciles no las hace "Buenas" en todas las situaciones.
El código en las clases internas anónimas no se puede reutilizar en absoluto y la gente olvida que muchas cosas (como los oyentes) pueden y deben ser clases completas, ¡esto también se aplica a los cierres! Si ha utilizado una clase interna anónima para implementar algo como un oyente, es mucho más probable que simplemente copie y pegue su implementación que extraer el código en un método o su propia clase y llamarlo en su lugar. Los cierres también pueden mejorar la reutilización, solo depende de cómo los use.
En muchos casos, las funciones disponibles le dan forma a cómo estructura su código. OO es aún más poderoso cuando se trata de ayudarlo a visualizar todo su código y cómo interactúa, pero esa es otra pregunta.
fuente
Los objetos no tienen más capacidad para entregar la reutilización del código que una escaladora u otro equipo de acondicionamiento físico para perder peso. Los desarrolladores tienen que estar motivados para usar las herramientas adecuadamente.
Una vez que los equipos de software otorguen un mayor valor a la reutilización del código probado que a mantener todos los detalles en su cabeza, verá objetos y métodos mucho más precisos y, por lo tanto, más reutilización del código.
fuente
si
OOP te brinda más formas de reutilizar el código
No
No hay bala de plata
Depende
en lo que pones en él, y lo que esperabas a cambio!
fuente
Si. Una buena programación orientada a objetos promueve la separación de preocupaciones, bajo acoplamiento, alta cohesión y ocultación de información. Estas cosas son críticas para el código reutilizable.
Yo diría que el principal beneficio de OOP es la modularidad y la modificabilidad, en lugar de la reutilización, pero esa es otra cuestión.
fuente
Los objetos permiten volver a demandar código, pero como tal no es la mejor técnica para eso. Creo que la reutilización del código se promueve a través de técnicas relacionadas con objetos como la herencia, el polimorfismo, la sobrecarga y las plantillas.
fuente
Sí, lo hacen, la capacidad de extender (heredar) de una clase súper clara contribuye a la reutilización del código, no estoy seguro de cómo alguien podría argumentar lo contrario. Simplemente puede extender una clase y anular un método, mientras usa el resto de la superclase, si esto no ayuda a la reutilización del código, entonces no sé qué es
fuente
Si es así, ¿han cumplido su promesa de reutilización de código hasta ahora? Sí, si los programas escritos con OOP en mente aplican los patrones de diseño sabiamente. De lo contrario, en su mayoría no. Pero mirando la popularidad de los programas no triviales a gran escala que los sistemas Adobe, Google y similares escriben con C ++ o Java u otros lenguajes OOP, diría que OOP tiene un largo camino por recorrer antes de que se elimine gradualmente. Ese tiempo será mucho más adecuado para hacer esta pregunta y podría ayudar a proporcionar un terreno para un nuevo paradigma.
fuente