Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

He estado trabajando como desarrollador durante los últimos 4 años, con los 4 años anteriores a que el desarrollo de software de estudiar en la universidad. En mis 4 años en la industria que he hecho algunos trabajos en VB6 (que era una broma), pero la mayor parte ha estado en C # / ASP.NET. Durante este tiempo, me he movido desde un paradigma procedimental "con conciencia de objeto" a un paradigma orientado a objetos.

Últimamente he tenido curiosidad por otros paradigmas de programación por ahí, así que pensé en pedir a otros desarrolladores de sus comentarios sobre las similitudes y diferencias entre estos paradigmas, específicamente a la POO? En programación orientada a objetos, me parece que hay un fuerte enfoque en las relaciones e interacciones lógicas entre conceptos. ¿Cuáles son los marcos de la mente tiene que estar adentro para los otros paradigmas?

¿Fue útil?

Solución

Con mucho, las mejores explicaciones de paradigmas de programación se encuentran en la obra de Peter Van Roy. Especialmente en el libro conceptos, técnicas y modelos de Programación por Peter Van Roy y Seif Haridi . ( Aquí es el compañero wiki .) CTM utiliza el multi-paradigma distribuido lenguaje de programación Oz para introducir todos los principales paradigmas de programación.

Peter Van Roy también hizo esta increíble cartel que muestra los 34 principales paradigmas y sus relaciones y las posiciones sobre diversos eje . El cartel es básicamente una versión muy comprimida de CTM. Una explicación más detallada de ese cartel está contenida en el artículo paradigmas de programación para los maniquíes: Lo que todo programador debe saber que apareció como un capítulo en el libro Nueva Computacional Paradigmas para Computer Music , editado por G. y A. Assayag Gerzso.

Otro gran libro que demuestra varios paradigmas de programación es importante Estructura e Interpretación de programas de ordenador de Harold Abelson y Gerald Jay Sussman . Este libro fue la base de CS101 del MIT desde hace varias décadas. Un curso impartido por Abelson y Sussman sí se registró a una formación empresarial para Hewlett -Packard en 1986 .

La principal diferencia entre la CTM y SICP CTM es que demuestra más grandes paradigmas utilizando un lenguaje compatible con ellas (en su mayoría distribuida Oz, pero también algunos otros). SICP otoh ellos demuestra por implementar en un lenguaje que hace no apoyarlos de forma nativa (un subconjunto del esquema). Al ver orientación a objetos implementado en una docena de líneas de código es jodidamente increíble.

Puede encontrar grabaciones de vídeo y los materiales del curso del curso de primavera de 2005 en la página web del MIT OpenCourseWare . Otra grabación del recorrido desde el MIT de corta duración Universidad ArsDigita proyecto . SICP también se ha enseñado en otras universidades, de hecho se enseña en Berkley en este momento .

En una nota personal, mi experiencia ha sido que realmente entender un paradigma de programación sólo es posible

  • un paradigma a la vez y
  • en los idiomas que fuerza en el paradigma

Lo ideal sería utilizar un lenguaje que tiene el paradigma al extremo. En lenguajes multi-paradigma, es demasiado fácil "engañar" y entrar de nuevo en un paradigma que se siente más cómodo con. Y el uso de un paradigma como una biblioteca sólo es realmente posible en idiomas como el esquema que están diseñados específicamente para este tipo de programación. Aprendizaje de la programación funcional perezoso en Java, por ejemplo, no es una buena idea, aunque hay bibliotecas para eso.

Aquí hay algunos de mis favoritos:

  • orientación a objetos en general : Auto
    • basado en prototipos orientación a objetos : Auto
    • basado en la clase orientación a objetos : Newspeak
      • estática basada en la clase orientación a objetos : Eiffel
    • envío múltiple basada OO : Dylan
    • funcional + orientación a objetos : Scala
  • programación funcional Haskell
    • programación funcional pura : Haskell
      • programación funcional pura pereza : Haskell
    • programación funcional estática : Haskell
    • programación funcional dinámico Clojure
  • programación imperativa Lua
  • programación concurrente : Clojure
    • de paso de mensajes programación concurrente : Erlang
  • metaprogramming : Esquema
  • lenguaje de programación orientado a intencional de dominio Workbench

Otros consejos

Esta es mi opinión:

  • La programación funcional significa la escritura de funciones que se llevan en los datos y operan en él. Que se acumulan las grandes aplicaciones de las funciones de montaje.
  • los datos de programación orientados a objetos encapsulados y sus operadores en un único componente que se asigna a los modelos mentales también. A construir grandes aplicaciones a partir de objetos que colaboran.
  • La programación declarativa (por ejemplo, SQL) que separa lo que se hace a partir de cómo se hace. Usted le dice a una base de datos relacional, lo que le gustaría que hacer y dejar la conducción al motor de consulta.

este enlace trata de explicar algo que he utilizado en las últimas dos décadas. Lo menciono porque es demostrable útil y creo que cuenta como un paradigma, porque para usarla es necesario pensar de una manera particular.

La diferente forma en que hay que pensar es que al analizar un problema, en vez de preguntar qué objetos existen y qué acciones tienen lugar, se empieza con los requisitos generales y pedir ¿Qué hay que decir?

Desde que, a elegir o diseñar un específico lenguaje de dominio (DSL) y el estado de su problema en ese idioma.

Este enlace explica un lenguaje particular para describir de forma dinámica las interfaces de usuario de diálogo cambiante. Su implementación depende de una estructura de control en particular, Ejecución diferencial. Lo que se logra es un orden de magnitud en la reducción de código fuente, con menos posibilidades de errores de codificación. Estos ahorros pueden ser gastado en la toma de la interfaz de usuario más sofisticada.

Para otros tipos de problemas, otras estructuras de control son apropiadas, pero el concepto de trabajo a través de una conexión DSL bien elegido, por lo que el código fuente mucho más pequeña, más fácilmente modificada, y menos propenso a errores, es el enfoque común.

Creo que los paradigmas de programación funcional y programación orientada a objetos se evalúan mejor mediante la identificación de los tipos de problemas de los que son la mejor expresión. A menudo, estos paradigmas simplemente se convierten en carrozas y se promociona como panaceas, en lugar de clasificarlos por los espacios problema que abordan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top