Разработка программного обеспечения на основе моделей против Haskell - PullRequest
5 голосов
/ 05 мая 2011

Только что прочитал (немецкий) Wiki-статью о SW-разработке, управляемой моделями (MDSD). Подводя итог Wiki-определения:

  • MDSD - о сухом принципе (не повторяйся)
  • MDSD - это проектирование DSL (доменных языков) и генераторов
  • Более краткое описание проблем (посредством более высокого уровня абстракции соответствующих DSL) возможно с помощью MDSD.

Поскольку я знаю и использую функциональное программирование высшего порядка, мне интересно, и мой актуальный вопрос: Является ли MDSD ничем иным, как отчаянной попыткой внедрить (частично) мощные функции функционального программирования высшего порядка в языки программирования / парадигмы, которым по своей природе не хватает этих возможностей?

(Или я неправильно понял, и можно ли вообще использовать MDSD для поддержки функционального программирования более высокого порядка?)

Ответы [ 2 ]

5 голосов
/ 05 мая 2011

Я предпочитаю смотреть на это с другой стороны.ООП, MDSD, TDD, доменный дизайн и многие другие парадигмы - это всего лишь ... парадигмы.Это способы взглянуть на задачу разработки программного обеспечения, разработанную людьми для решения проблем, которых, по их мнению, не хватает во всем, что имело место до них.Оказывается, что функциональное программирование делает то же самое - оно дает программисту возможности абстракции, которые не изящны в языках, которые не имеют функций первого класса.Поэтому я бы не сказал, что MDSD - это отчаянная попытка дать функциональным функциям нефункциональных языков столько, сколько я бы сказал, что люди сталкиваются с одной и той же проблемой с другой точки зрения.

Некоторые ответы на этот недавний вопрос SO по-другому.ShreevatsaR говорит: «Почти все, что вы можете сделать с макросами, вы можете сделать с помощью функции высшего порядка».Матиас Бенкард говорит: «Отсутствие макросов несколько смягчается более сложными ... понятиями, такими как монады и стрелы».Другие комментарии также повторяют ту же тему.Вы упоминаете, что одним из принципов MDSD являются генераторы.Макросы являются генераторами времени компиляции.Поэтому я бы перевел их утверждения как аргумент, что MDSD по своей природе прост в функциональных языках.

3 голосов
/ 05 мая 2011

Существует большая разница между созданием DSL (предметно-ориентированного языка) (FP) и созданием целой связки Доменных объектов (OOP) (с бизнес-логикой внутри объектов).

FP может страдать от той же проблемы (и преимуществ), что и процедурные языки: Разделение поведения и данных .Языки ООП препятствуют этому.Это разделение известно как Модель анемичного домена .

Это разделение может сделать изменение ваших данных очень трудным (и, возможно, даже хуже с DSL). Смотрите мой пост: ОбработкаИзменения в инкрементном моделировании данных в функциональном программировании

Однако, с другой стороны, изменение поведения и отсутствие каких-либо состояний без ограничений по всей доске являются проблемой в дизайне OOP Domain Driven.Однако с такими вещами, как AOP ITD и метапрограммирование , это становится меньшей проблемой.

Скала и Руби - хороший пример сочетания обеих техник.

...