Есть ли что-то вроде функциональной модели? - PullRequest
5 голосов
/ 13 ноября 2008

В объектно-ориентированной парадигме я хотел бы создать объектную / концептуальную модель, прежде чем приступить к ее реализации с использованием языка ОО.

Есть ли что-нибудь параллельное объектной модели в функциональном программировании. Это называется функциональная модель? или мы создаем одну и ту же концептуальную модель в обеих парадигмах, прежде чем реализовать ее на одном из языков ..

Есть ли статьи / книги, где я могу прочитать о функциональной модели, если она существует?

или, иначе говоря, ... даже если мы используем функциональный язык программирования, начнем ли мы с объектной модели?

Ответы [ 3 ]

6 голосов
/ 02 декабря 2008

На самом деле есть. Существует форма спецификации для функциональных языков, основанная на абстрактных типах данных, называемая алгебраической спецификацией. Их поведение в некоторых отношениях очень похоже на поведение объектов, однако конструкции логичны и математичны и неизменны, как функциональные конструкции.

В конкретном языке функциональной спецификации, который используется в классе Algorithms и Data Structures в Университете Буэнос-Айреса, есть генераторы, наблюдатели и дополнительные операции. Генератор - это выражение, которое является одновременно экземпляром и возможной композицией типа данных. Например, для двоичного дерева (ADT bt) у нас есть нулевые узлы и двоичные узлы. Таким образом, у нас были бы генераторы:

-nil
-bin(left:bt, root: a, right:bt)

Где left - это экземпляр bt, корень - это общее значение, а right - еще один bt. Таким образом, nil является допустимой формой bt, но bin (bin (nil, 1, nil), 2, nil) также допустим, представляя двоичное дерево с корневым узлом со значением 2, левый дочерний узел с значение 1 и нулевой дочерний правый узел.

Таким образом, для функции, которая скажет, вычисляет количество узлов в дереве, вы определяете наблюдателя ADT и определяете набор аксиом, которые отображаются на каждый генератор. Так, например:

numberOfNodes(nil) == 0
numberOfNodes(bin(left,x,right))== 1 + numberOfNodes(left) + numberOfNodes(right)

Это имеет преимущество использования рекурсивных определений операций и обладает более формально интересным свойством, что вы можете использовать то, что называется структурной индукцией, чтобы ДОКАЗАТЬ, что ваша спецификация верна (да, вы демонстрируете, что ваш алгоритм будет давать правильный результат ).

Это довольно академическая тема, редко встречающаяся за пределами академических кругов, но она того стоит, чтобы получить представление о разработке программы, которая может изменить ваши взгляды на алгоритмы и структуры данных. Правильная библиография включает в себя:

Берно Г., Бидоит М. и Кнапик Т. 1995. Спецификации наблюдений и предположение о неразличимости. Теор. Вычи. Sci. 139, 1-2 (март. 1995), 275-314. DOI = http://dx.doi.org/10.1016/0304-3975(94)00017-D

Гуттаг, Дж. В. и Хорнинг, Дж. Дж. 1993. Лиственница: языки и инструменты для формального Спецификация. Springer-Verlag Новый Йорк, Inc. Абстракция и Спецификация в разработке программного обеспечения, Барбара Лисков и Джон Гуттаг, MIT Press, 1986.

Основы алгебраики Спецификация 1. Уравнения и начальные Семантика. H. Ehrig y B. Mahr Springer-Verlag, Берлин, Гейдельберг, Нью-Йорк, Токио, Германия, 1985.

С соответствующими ссылками: http://www.cs.st -andrews.ac.uk / ~ сослагательного наклонения / Ресурсы / Notes / FormalSpec / AlgebraicSpec.pdf http://nms.lcs.mit.edu/larch/pub/larchBook.ps

Это чертовски интересная тема.

1 голос
/ 06 января 2009

В парадигмах OO и FP вы формируете модель своего домена (решаемую проблему), а затем создаете объекты в своей программе для зеркалирования объектов домена. Существуют некоторые различия в том, что то, как программные объекты отражают объекты домена, зависит от используемой вами парадигмы и языка. Некоторые примеры (на Хаскеле):

0 голосов
/ 13 ноября 2008

Блок-схема и / или модель / диаграмма процесса могут использоваться в качестве функциональной модели для не OO-программ. Но это все еще не дает смысла в границах, похожих на модель ОО.

http://en.wikipedia.org/wiki/Functional_model

...