Nawet strukturalnie da się wszystko napisać - choć osobiście bym nie chciał. Chciałbym natomiast porozmawiać z kimś kto modeluje systemy, zajmuje się analityką / rozmawia z klientem i programuje w paradygmacie funkcyjnym. Ciekaw jestem jak wyglądają notatki takiej osoby, co na spotkaniach pokazuje klientom itp. itd.
Jestem programistą i z klientem końcowym mam teraz mały kontakt, ale pracuje z analitykami, ew. współtworze dokumenty - i tak:
Pokazuje zebrane wymagania - w formie tabelki. Przepływy danych (tu są diagramy czasem), interfejsy (API).
Na pewno nie pokazuje UML, diagramów baz danych, ludzików itp. - kiedyś to robiłem, ale zanim nawet na serio trafiłem do FP to doszedłem, że to straszna bryndza (chociaż klienci się tym jarali - fajnie, ale za duża strata czasu i za dużo durnych pytań).
Co do samego kodowania to fakt, że i w strukturalnym, i w OOP, i w FP robi się te same rzeczy
projektuje funkcje i struktury danych i czasem nawet używa się słówka class
. Ale to nie jest to samo i nie jest tak, że modelowanie danych pochodzi z OOP.
Fakt, ADT z daleka wygląda jak OOP i można przezłożyć jedno na drugie - ale jednak jest inna filozofia.
ADT w zasadzie zakłada immutability.
ADT jest ultra regularne - masz po prostu typy bazowe, sume i iloczyn - z tego budujesz (z pewnymi kruczkami, różne sumy, różne iloczyny).
ADT nie ma takich koncepcji jak dziedziczenie w standardzie.
Za to jest nacisk na polimorfizm (parametryczny) i czasem (ale to raczej nie w typowym crudzie) pojawiają się cuda typu GADT.
W FP nie bawimy się w pola prywatne i publiczne. W uproszczeniu - wszystko jest publiczne. Za prywatność odpowiada mechanizm modułów w danym jezyku (po prostu pewnych funkcji, konstruktorów typów i struktur moduł nie udostępnia na zewnątrz).
Typeclass to też coś co raczej nie wprowadzasz jak robisz typową aplikację dla klienta (czyli w języku OOP - o rany nie robimy interfejsów!, to się raczej robi w bibliotekach).