orientado objetos curso clases oop lazy-evaluation modularity

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" .



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.



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".



Si quieres una crítica de la programación OO, esto es lo que recomendaría:

  1. Aprende Smalltalk
  2. Aprender erlang
  3. 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:

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.