Qu'est-ce que les programmeurs fonctionnels utilisent à la place d'UML?

18

Je suis étudiant CS. J'assiste actuellement à des conférences, où nous apprenons l'analyse et la conception objectives. Il consiste principalement à rédiger des cas d'utilisation, à analyser le problème que nous pouvons rencontrer lors de l'écriture d'une application pour le client, et à concevoir le projet de manière à ce qu'il soit à la fois extensible, clair pour les développeurs et ne génère pas de problèmes lorsque le client se dispute sur certains Caractéristiques. Puisqu'il est «objectif», nous l'apprenons du point de vue POO (classes et autres).

Maintenant, nous utilisons UML comme outil d'aide. Je crois que j'ai une bonne compréhension de la POO, mais j'ai également appris le paradigme fonctionnel et l'ai utilisé avec succès dans certains de mes petits projets.

Notre professeur, face à "qu'en est-il du paradigme fonctionnel?" question, a répondu qu'il ne programmait pas de projet plus important dans des langages fonctionnels, et il ne sait pas quel outil les programmes fonctionnels peuvent utiliser.

Alors, qu'est-ce qu'ils utiliseraient? Existe-t-il une méthodologie pour cela? Ou peut-être qu'il n'y a pas besoin d'une telle chose?

MatthewRock
la source
8
Étant donné que FP met davantage l'accent sur les données, un diagramme de flux de données peut probablement élucider un programme FP, de la même manière qu'un organigramme ou un diagramme de séquence élucide un code impératif.
9000
9
Je suis développeur de logiciels depuis de nombreuses années. Jamais de ma vie, je n'ai utilisé UML de mon propre gré, ni rencontré une seule personne qui connaît bien la langue. les diagrammes sont super
quand
1
@ 9000: en effet, les diagrammes de flux de données sont à mon humble avis l'un des types de diagrammes les plus utiles pour décrire la conception de logiciels à un niveau d'abstraction plus élevé - mabe plus utile que les diagrammes de classe. Cela s'applique également à FP et OOP. Malheureusement, les inventeurs UML ont choisi d'ajouter de nombreux types de diagrammes inutiles au langage de modélisation, mais ont refusé d'ajouter des diagrammes de flux de données (oui, c'est une diatribe!).
Doc Brown
Pour moi et probablement pour beaucoup d'autres personnes, la réponse est rien. En dehors de l'université, je n'ai jamais vu personne utiliser UML ou même le mentionner.
Qwertie

Réponses:

23

Je ne peux pas parler pour tous les programmeurs fonctionnels, mais ceux que je connais commencent tous par écrire les signatures de type des fonctions de niveau supérieur, puis comme ils ont besoin de plus de détails, ils écrivent les signatures de type des fonctions d'assistance, etc.

Cela fonctionne en raison du manque d'effets secondaires dans la programmation fonctionnelle, donc les fonctions sont toutes spécifiées en termes uniquement de leurs entrées et sorties. Cela rend leurs signatures de type beaucoup plus utiles comme outil de conception que dans la programmation impérative. C'est une des raisons pour lesquelles vous les voyez utilisées même lorsque le compilateur peut les déduire.

En ce qui concerne les outils de création de diagrammes, avec tout le respect que je dois à votre professeur, je ne les ai utilisés à aucun degré significatif dans aucun paradigme depuis que j'ai quitté l'école.

Karl Bielefeldt
la source
19

La norme UML définit plus d'une douzaine de types de diagrammes différents, comme indiqué dans ce tableau pratique:

Types de diagrammes UML

Source: https://en.wikipedia.org/wiki/File:UML_diagrams_overview.svg

Voir aussi Figure A.5 La taxonomie des diagrammes de structure et de comportement dans la spécification UML 2.5.

Notez qu'il s'agit d'un exemple de diagramme de classe, avec des relations de sous-typage is-a entre les types de diagramme et les types de diagramme abstraits en italique. Bien que ces types de diagramme soient en fait des classes dans le métamodèle UML, ce diagramme de classe est toujours utile pour illustrer une hiérarchie, sans aucune connexion à la POO.

Il existe quelques types qui ne s'appliquent clairement qu'à la POO, par exemple le diagramme de classes ou le diagramme d'objets . Mais le reste est plus largement applicable que les systèmes orientés objet.

  • Diagrammes de machines à états - FP n'évite pas les états, il les rend simplement explicites. Un diagramme de machine d'état peut être utile pour expliquer le flux de contrôle ou les différentes transitions d'état dans le programme.

  • Diagrammes d'activité - sont utiles dans des cas similaires à ceux du diagramme de la machine d'état, mais à un niveau supérieur. Ils peuvent être utilisés pour expliquer le flux de données entre différents sous-systèmes ou pour modéliser des processus métier externes.

  • Diagrammes d'interaction - modélisez les interactions entre plusieurs processus avec état. De toute évidence, cela n'est pas utile pour modéliser les internes d'un programme fonctionnel pur. Cependant, UML ne consiste pas seulement à modéliser la structure du code, mais principalement à fournir un langage de modélisation universel. Avec un diagramme d'interaction, je pourrais par exemple utiliser des diagrammes d'interaction pour modéliser le comportement externe entre les systèmes, par exemple entre un navigateur et un serveur Web - même lorsqu'ils sont écrits en utilisant des techniques de FP.

  • Diagrammes de cas d'utilisation - Les cas d'utilisation et les exigences sont indépendants de la technologie utilisée pour les satisfaire. La POO ou la PF n'est absolument pas pertinente ici.

  • Diagrammes de déploiement - Ce type de diagramme est utilisé pour décrire la relation entre les logiciels exécutables et les ressources matérielles. Peu importe que ce logiciel ait été écrit dans un langage FP.

  • Diagrammes des composants - La plupart des langages fonctionnels ont un support explicite pour la programmation modulaire de nos jours. Un diagramme de composants décrit les composants / modules et leurs interfaces proposées et requises. Cela me rappelle beaucoup de modules Functor d'OCaml.

  • Diagrammes de profil - décrivent les extensions d'UML lui-même et ne sont jamais utilisées en tant que telles.

  • Diagrammes de structure composite - décrivent la structure des composites. Il peut être utilisé pour décrire des structures de données, voire les points d'interaction d'une fonction. Wikipedia montre un schéma de la fonction de Fibonacci comme exemple:

    Diagramme de structure composite pour une fonction de Fibonacci

    Source: https://commons.wikimedia.org/wiki/File:Composite_Structure_Diagram.png

    Dans un sens, ce serait le choix des programmeurs fonctionnels plutôt qu'un diagramme de classes, mais cela semble horriblement surdimensionné….

  • Diagrammes de packages - Les packages sont l'équivalent UML des espaces de noms. Ce type de diagramme fait plus partie de l'infrastructure du langage UML qu'un type de diagramme distinct. Par exemple, vous pouvez utiliser des packages pour classer un grand diagramme de cas d'utilisation.

Donc, comme nous l'avons vu, divers types de diagrammes UML peuvent toujours être utiles lors de la programmation fonctionnelle.


J'ai rarement ressenti le désir d'utiliser UML lors de la conception d'un système, et d'utiliser principalement UML pour faire mes devoirs assignés, ou pour communiquer le contour d'une architecture avec un croquis rapide. Même pour un système OOP, UML ne fournit pas suffisamment de valeur pour l'utiliser tout le temps - le code réel en dit plus que mille diagrammes. Je pourrais imaginer utiliser des diagrammes de type UML pour expliquer les dépendances entre diverses fonctions et structures de données dans un programme FP, mais je ne l'ai pas encore fait - mon style personnel préfère un mélange de POO et de FP où les techniques de PF sont utilisées à l'échelle locale, mais n'influencent pas l'architecture globale.

amon
la source