Erlang (Функциональное программирование) по сравнению с Объектно-ориентированным программированием с точки зрения взглядов

По необходимости, как доказывают, масштабируем к 5 000 + пользователи на единственном сервере в Google, видит: Жизнь на Краю: Контроль и Выполнение Очень Большого По необходимости Установка

казалось бы, что многие крупнейшие компании-разработчики программного обеспечения используют По необходимости или исключительно или как их основной SCM. Например: Adobe, Cisco, SAP, Symantec, EA, Ubisoft и Autodesk - все По необходимости пользователи. Это не прекрасно, но это все еще превосходит SVN или TFS (Ни один из которых не плох в своем собственном праве)

13
задан Jeff 30 November 2009 в 11:45
поделиться

3 ответа

I would use records:

-record(post, {title, date_created, body, comments = []}).
-record(comment, {created_by, date_created, content}).

Then if you want to use mnesia as database:

Post = #post{title = "", body = "", date_created = erlang:universaltime()},
mnesia:transaction(fun() -> mnesia:write(Post) end).

To add a comment:

Comment = #comment{created_by = "", content = "", date_created = erlang:universaltime()},
mnesia:transaction(fun() ->
    [Post] = mnesia:read(post, Title),
    PostWithNewComment = Post#post{comments = [Comment | Post#post.comments]},
    mnesia:write(PostWithNewComment)
end).

I haven't tested the code, but this is what I would do. Also I assumed that each title is unique.

5
ответ дан 2 December 2019 в 01:10
поделиться

Эрланг - это объектно-ориентированный язык. Это утверждение имеет большую силу, если вы посмотрите на ООП так, как его описал Алан Кей:

ООП для меня означает только обмен сообщениями, локальный сохранение и защита и сокрытие состояние-процесс и крайний позднее связывание всех вещей.

Как вы должны знать, Erlang продвигает стиль программирования, называемый Параллельно-ориентированное программирование , в котором вы абстрагируете объекты как независимые процессы, которые общаются посредством передачи сообщений. У каждого процесса есть свое локальное состояние, они живут в своем параллельном мире. Динамический полиморфизм достигается тем, что вы можете определить класс процессов, которые могут отвечать на общий набор сообщений. Поскольку «объекты» Erlang живут в своем собственном крошечном процессе, он становится естественной средой для моделирования реального мира. Вы можете использовать свои навыки ООП в Erlang лучше, чем в любом другом языке.

Невозможно дать полное описание ООП в Erlang на таком маленьком пространстве. Предлагаю вам прочитать книгу Программирование на Erlang: Программное обеспечение для параллельного мира .

Также см. Эти ссылки:

6
ответ дан 2 December 2019 в 01:10
поделиться

Ваш пример на самом деле не представляет хорошего объектно-ориентированного стиля. Комментарии появляются к уже опубликованным сообщениям в блогах, поэтому к тому времени у вас будет просто какая-то ссылка на идентификатор сообщения, на который размещен комментарий.

Для объектно-ориентированного программирования было бы разумнее иметь какой-то объект BlogDb, который отправляет сообщение и комментировать объекты. Объект комментария должен знать, к какому идентификатору поста он относится. Вы не должны создавать объекты сообщений и комментариев с помощью оператора 'new', вместо этого интерфейс BlogDb имеет методы, возвращающие их свежие экземпляры.

Внезапно у вас есть приемлемый способ реализовать то же самое в Erlang. Запустите gen_server, который является blog_db. Делайте такие вещи, как

Post = myblog:post(Title, Body),
{ok, Result} = myblog:add_post(BlogDb, Post),
...

. Вам не нужно знать детали значения Post, поэтому то, как оно создается, скрыто в «конструкторе» для него в другом модуле.

0
ответ дан 2 December 2019 в 01:10
поделиться