¿Qué utilizan los programadores funcionales en lugar de UML?

14

Soy estudiante de CS. Actualmente estoy asistiendo a conferencias, donde nos enseñan Análisis y Diseño Objetivo. Consiste principalmente en escribir casos de uso, analizar el problema que podemos enfrentar al escribir alguna aplicación para el cliente y cómo diseñar el proyecto para que sea extensible, claro para los desarrolladores y no genere problemas cuando el cliente discute sobre algunos caracteristicas. Ya que es 'objetivo', lo estamos aprendiendo desde el punto de vista de la POO (clases y demás).

Ahora estamos usando UML como herramienta de ayuda. Creo que tengo un buen conocimiento de la POO, pero también aprendí un paradigma funcional y lo usé con éxito en algunos de mis proyectos más pequeños.

Nuestro profesor, cuando se enfrenta a "¿qué pasa con el paradigma funcional?" pregunta, respondió que no estaba programando ningún proyecto más grande en lenguajes funcionales, y no sabe qué herramienta pueden estar usando los programas funcionales.

Entonces, ¿qué usarían? ¿Hay alguna metodología para esto? O tal vez no hay necesidad de tal cosa?

    
pregunta MatthewRock 17.11.2015 - 15:32

2 respuestas

19

No puedo hablar por todos los programadores funcionales, pero los que conozco comienzan por escribir las firmas de tipo de las funciones de nivel superior, luego, ya que necesitan más detalles, escriben las firmas de tipo de las funciones auxiliares, y así sucesivamente.

Esto funciona debido a la falta de efectos secundarios en la programación funcional, por lo que las funciones se especifican solo en términos de sus entradas y salidas. Esto hace que sus firmas de tipo sean mucho más útiles como herramienta de diseño que en la programación imperativa. Esa es una de las razones por las que los ves utilizados incluso cuando el compilador podría inferirlos.

En cuanto a las herramientas de diagramación, con el debido respeto a su profesor, no las he usado en ningún grado significativo en el paradigma ningún desde que dejé la escuela.

    
respondido por el Karl Bielefeldt 17.11.2015 - 18:21
14

El estándar UML define más de una docena de tipos de diagramas diferentes, como se muestra en este gráfico útil:

  

    

Fuente: enlace

     

Vea también Figura A.5 La taxonomía de los diagramas de estructura y comportamiento en la especificación UML 2.5.

     

Tenga en cuenta que este es un ejemplo de un diagrama de clase, con relaciones de subtipo is-a entre tipos de diagrama y tipos de diagrama abstracto en cursiva.   Si bien estos tipos de diagramas en realidad son clases dentro del metamodelo UML, este diagrama de clase sigue siendo útil para ilustrar una jerarquía, sin ninguna conexión con OOP.

Hay un par de tipos que claramente solo se aplican a la POO, por ejemplo, el diagrama de clases o el diagrama de objetos . Pero el resto es más ampliamente aplicable que solo para sistemas orientados a objetos.

  • Diagramas de máquina de estado : FP no evita los estados, simplemente los hace explícitos. Un diagrama de máquina de estado puede ser útil para explicar el flujo de control o las diversas transiciones de estado en el programa.

  • Diagramas de actividad : son útiles en casos similares como en el Diagrama de máquina de estado, pero en un nivel superior. Se pueden utilizar para explicar el flujo de datos entre varios subsistemas o para modelar procesos de negocios externos.

  • Diagramas de interacción : modela las interacciones entre múltiples procesos con estado. Claramente, esto no es útil para modelar las partes internas de un programa funcional puro. Sin embargo, UML no solo se trata de modelar la estructura del código, sino principalmente de proporcionar un lenguaje de modelado universal. Con un diagrama de interacción, p. Ej. use diagramas de interacción para modelar el comportamiento externo entre sistemas, por ejemplo, entre un navegador y un servidor web, incluso cuando se escriben utilizando técnicas de PF.

  • Diagramas de casos de uso : los casos y requisitos de uso son independientes de la tecnología utilizada para satisfacerlos. OOP o FP es absolutamente irrelevante aquí.

  • Diagramas de implementación : este tipo de diagrama se usa para describir la relación entre el software ejecutable y los recursos de hardware. No importa si ese software fue escrito en un lenguaje de PF.

  • Diagramas de componentes : la mayoría de los lenguajes funcionales tienen soporte explícito para la programación modular en estos días. Un diagrama de componentes describe los componentes / módulos, y sus interfaces ofrecidas y requeridas. Esto me recuerda a muchos módulos de Functor de OCaml.

  • Diagramas de perfil : describe las extensiones de UML y, por lo tanto, nunca se usan.

  • Diagramas de estructura compuesta : describe la estructura de los compuestos. Puede usarse para describir estructuras de datos, o incluso los puntos de interacción de una función. Wikipedia muestra un diagrama para la función de Fibonacci como ejemplo:

      

        

    Fuente: enlace

    En cierto sentido, esta sería la opción de los programadores funcionales en lugar de un diagrama de clase, pero esto parece horriblemente excesivo de ingeniería ...

  • Diagramas de paquetes : los paquetes son el equivalente UML de los espacios de nombres. Este tipo de diagrama es más parte de la infraestructura del lenguaje UML que un tipo de diagrama separado. Por ejemplo, podría usar paquetes para categorizar un gran Diagrama de casos de uso.

Como hemos visto, varios tipos de diagramas UML pueden ser útiles cuando se realiza la programación funcional.

Raramente he sentido el deseo de usar UML al diseñar un sistema, y principalmente uso UML para hacer la tarea asignada, o para comunicar el esquema de una arquitectura con un boceto rápido. Incluso para un sistema OOP, UML no proporciona el valor suficiente para usarlo todo el tiempo; el código real dice más de mil diagramas. Podría imaginarme usando diagramas similares a UML para explicar las dependencias entre varias funciones y estructuras de datos en un programa de PF, pero aún tengo que hacerlo, mi estilo personal prefiere una combinación de OOP y PF donde las técnicas de PF se usan a escala local. pero no influyen en la arquitectura general.

    
respondido por el amon 17.11.2015 - 20:44

Lea otras preguntas en las etiquetas