En el único blog de desarrollo que leí, por ese tipo de Joel-On-Software-Fundador-de-SO, leí hace mucho tiempo que OO no conduce a aumentos de productividad. La gestión automática de memoria sí. Frio. ¿Quién puede negar los datos?
Todavía creo que OO es para no OO lo que la programación con funciones es programar todo en línea.
(Y debo saber, ya que comencé con GWBasic.) Cuando refactoriza el código para usar funciones, se
variable2654convierte
variable3en el método en el que se encuentra. O, mejor aún, tiene un nombre que puede entender,
y si la función es corta , se llama
value y eso es suficiente para una comprensión total.
Cuando el código sin funciones se convierte en código con métodos, puede eliminar millas de código.
Al refactorizar código para ser verdaderamente OO, b, c, q, y Zconvertirse this, this, thisy this. Y como no creo en el uso de la thispalabra clave, puede eliminar millas de código. En realidad, puedes hacerlo incluso si lo usas this.
No creo que OO sea una metáfora natural.
Tampoco creo que el lenguaje sea una metáfora natural, ni creo que los "olores" de Fowler sean mejores que decir "este código sabe mal". Dicho esto, creo que OO no se trata de metáforas naturales y que las personas que piensan que los
objetos simplemente salen hacia ti básicamente están perdiendo el punto.
Usted define el universo de objetos, y mejores universos de objetos dan como resultado un código que es más corto, más fácil de entender, funciona mejor o todo esto (y algunos criterios que estoy olvidando). Creo que las personas que usan los objetos naturales de los clientes / dominios como objetos de programación carecen del poder para redefinir el universo.
Por ejemplo, cuando hace un sistema de reserva de una aerolínea, lo que llama una reserva podría no corresponder en absoluto a una reserva legal / comercial.
Algunos de los conceptos básicos son herramientas realmente geniales
Creo que la mayoría de la gente exagera con todo eso de "cuando tienes un martillo, son todos clavos". Creo que el otro lado de la moneda / espejo es igual de cierto: cuando tienes un dispositivo como polimorfismo / herencia, comienzas a encontrar usos donde cabe como un guante / calcetín / lente de contacto. Las herramientas de OO son muy poderosas. La herencia única es, creo, absolutamente necesaria para que la gente no se deje llevar, a pesar de mi propio
software de herencia múltiple.
¿Cuál es el punto de OOP?
Creo que es una excelente manera de manejar una base de código absolutamente masiva. Creo que le permite organizar y reorganizar su código y le brinda un lenguaje para hacerlo (más allá del lenguaje de programación en el que está trabajando), y modulariza el código de una manera bastante natural y fácil de entender.
OOP está destinado a ser malentendido por la mayoría de los desarrolladores
Esto se debe a que es un proceso revelador como la vida: entiendes OO cada vez más con experiencia, y comienzas a evitar ciertos patrones y a emplear a otros a medida que te vuelves más sabio. Uno de los mejores ejemplos es que deja de usar la herencia para las clases que no controla y prefiere el patrón
Fachada .
Con respecto a su mini ensayo / pregunta
Quería mencionar que tienes razón. La reutilización es un sueño imposible, en su mayor parte. Aquí hay una cita de Anders Hejilsberg sobre ese tema (brillante) de aquí :
Si le pide a los programadores principiantes que escriban un control de calendario, a menudo piensan: "¡Oh, voy a escribir el mejor control de calendario del mundo! Será polimórfico con respecto al tipo de calendario. Tendrá visualizadores, y mungers, y esto, aquello y lo otro ". Necesitan enviar una aplicación de calendario en dos meses. Pusieron toda esta infraestructura en su lugar en el control y luego pasaron dos días escribiendo una aplicación de calendario horrible encima. Pensarán: "En la próxima versión de la aplicación, voy a hacer mucho más".
Sin embargo, una vez que comienzan a pensar cómo van a implementar todas estas otras concreciones de su diseño abstracto, resulta que su diseño es completamente incorrecto. Y ahora se han pintado en una esquina y tienen que tirar todo. Lo he visto una y otra vez. Creo firmemente en ser minimalista. A menos que realmente vaya a resolver el problema general, no intente establecer un marco para resolver uno específico, porque no sabe cómo debería ser ese marco.