oop - clases - curso python orientado a objetos
¿Alguna crítica sólida de OOP? (11)
Quiero pedirle que me proporcione algunos artículos (tal vez libros), que posiblemente haya encontrado muy convincentes al criticar la metodología OOP.
He leído algunos en la WWW sobre este tema y realmente no encontré un "desmotivador definitivo".
No tiene mucho que ver con mi actitud personal hacia el OOP, pero realmente me gustaría tener algo constructivo, una base rigurosa para cualquier tipo de discusión y solo un pensamiento abstracto.
También puede publicar algunas investigaciones originales, pero sea muy constructivo (como mi solicitud personal).
¿Qué versión de OOP? La visión original de Alan Kay? ¿La forma moderna bastarda de la misma que pierde el punto por completo y, por lo tanto, nos obstaculiza con el control de acceso extraño, las variables miembro, etc. La herencia centrada? ¿Prototipo basado? OOP composicional?
Cada forma de OOP tiene sus fortalezas y sus debilidades; sus defensores y sus detractores; Sus dominios de utilidad y sus dominios de inutilidad. No hay nada mágico en la POO que lo convierte en el Paradigma Asesino y no hay nada infernal que lo convierta en el Paradigma Asesino (de los Programadores).
Realmente no puedo señalarle ningún libro o artículo que haya matado mi interés en la OOP como Silver Bullet (a diferencia de una de las muchas técnicas que puedo usar para mantener mis proyectos sobrevivibles). Sin embargo, puedo señalar la crítica más graciosa de una marca específica de OOP: el clásico de Steve Yegge, "Execution in the Kingdom of Nouns" .
Cómo es la ejecución de steve yegge en el reino del sustantivo para el estilo java OO
Cuando se define un proceso en lenguaje natural. Utiliza oraciones donde define al sujeto que realizará una acción en uno o más objetos .
El único punto fijo es la acción , el predicado de la oración.
No creo que asignar acciones a los objetos sea una buena idea. Solo hay un verbo, pero puede haber múltiples nombres.
En OOP puedes escribir un archivo de al menos 3 formas:
file.write(data);
o
data.writeToFile(file);
o
OperatingSystem.write(file, data);
¿Qué objeto debería implementar el método? Necesitas pensar en esto también. Mientras que en el procedimiento, probablemente escribas
write(file, data);
Y lo único que debe pensar es el orden de los operandos, que usualmente no importa.
(Bueno, el archivo y los datos pueden no ser el mejor ejemplo, pero probablemente vea el punto)
El problema es que la mayoría de la gente no sabe realmente la Programación Orientada a Objetos, por lo que muchos diseños CHUPAN.
Lee las obras de Scott Ambler, incluidas sus (ahora bastante antiguas) Aplicaciones de objetos de construcción que funcionan . Esto ha sido revelador para mucha gente.
La Biblia de Gideon de patrones de diseño orientados a objetos, apropiadamente llamados Patrones de Diseño . Uno de los mejores libros de diseño de software que he leído.
Realmente deberías ver el Sr. B. Jacobs:
(También conocido como OOP Oversold.)
Recomiendo aprender un paradigma de programación diferente o leer argumentos pro para paradigmas específicos (http://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf). Además de la POO, creo que el más utilizado es el paradigma funcional (búsqueda por "Por qué importa la programación funcional"), pero también echar un vistazo a los otros. Cuando empiezas a mirar la programación desde una perspectiva diferente, los defectos de la POO comienzan a aparecer automáticamente.
Ejercicio simple: defina los objetos IPerson, CMale y CFemale e implemente los métodos "sexo" y "reproducir".
Rick Hickey''s ¿Ya llegamos? - Una Deconstrucción del Tiempo Orientado a Objetos fue una revelación para mí. Es la crítica de OO más lógica que he encontrado.
Si quieres una crítica de la programación OO, esto es lo que recomendaría:
- Aprende Smalltalk
- Aprender erlang
- Aprender esquema
Una vez que haya hecho eso, tendrá muchas críticas sobre la interpretación común de la programación OO.
(Sugerencia: la OO estaba destinada de muchas maneras a parecerse más al modelo de cómputo de Actor, pero su interpretación común es efectivamente una modificación del modelo de procedimiento / estructurado)
Tal vez no sea exactamente lo que estaba buscando, pero eche un vistazo a la edición de enero / febrero de la revista IEEE Software: Análisis orientado a objetos: ¿es solo teoría? . La conclusión básica es que OOA no proporciona una buena relación costo / beneficio, por lo que no se utiliza correctamente.
Dado que la OOA no se utiliza o soporta efectivamente en el "mundo real", sospecho que para proyectos de desarrollo más grandes la arquitectura general del sistema, el modelo de objetos desplegados y la búsqueda de clase terminan siendo subóptimos y poco comprendidos (implementados) por varias partes de El equipo de desarrollo. Un segundo artículo en la misma revista: Cuatro tendencias conducentes a la acumulación de tiempo de ejecución de Java señala algunos problemas comunes de POO que impiden la implementación de sistemas Java de alto volumen. Las observaciones hechas en este artículo probablemente se apliquen a las aplicaciones OOP más altamente diseñadas.
No tome esto como un ataque de OO, simplemente refleja que, como expertos en software, tenemos mucho trabajo que hacer para desarrollar mejores mecanismos de comunicación persona a persona para transmitir modelos de procesos altamente complejos y abstractos.
http://cat-v.org tiene una gran página sobre Programación Orientada a Objetos .
La mayor parte de la página consiste en citas humorísticas pero no terriblemente informativas. Sin embargo, en la parte inferior de la página hay varios enlaces a artículos que cuestionan la POO. Son:
- Propiedades de mala ingeniería de lenguajes orientados a objetos por Luca Cardelli.
- Por qué OO Sucks por Joe Armstrong
- Problemas de la programación orientada a objetos: por Tony Albrecht, de Sony Computer Entertainment Europe, División de Investigación y Desarrollo.
- Orientado a objetos considerado perjudicial por Frans Faase.
- Programación Orientada a Objetos Oversold!
- Odio los patrones - por Parand Tony Darugar.
- ¿Por qué el arco no está particularmente orientado a objetos? Por Paul Graham.
- Las preguntas sobre herencia en la IAQ de Java.
- Deje de escribir clases: una gran charla sobre cómo las clases se usan y abusan a menudo. Por Jack Diederich.
Si está interesado en alternativas a la programación orientada a objetos:
cat-v.org . Desde su página ''acerca de'': Cat-v.org alberga una serie de sitios dedicados a diversos temas que comparten una perspectiva intelectual idiosincrásica, cuestionando la ortodoxia y fomentando elitismo y altos estándares en temas desde diseño de software a política, pasando por el arte y el periodismo y Cualquier otra cosa interesante.
Estructura e interpretación de programas informáticos . En concreto enseña programación funcional. Disponible gratis en línea here , a la venta here . No puedo recomendar esto lo suficiente. Es absolutamente revolucionario. Cambiará tu forma de pensar.
Todos y cada uno de los escritos / videos / conferencias de Rob Pike y Steve Yegge . De particular interés es Whirlwind Languages Tour de Yegge.