Здравствуйте, Философ, Вы писали:
Ф>Какова граница их применимости?
Ф>Можно ли на ФЯ написать сервис вида
Ф>interface IService Ф>{ Ф>ServiceState GetState(); Ф>void NewState(); Ф>}
Простой ответ: да.
Сложный. Когда ты пишешь такой кусок кода, то наверное подразумеваешь что надо будет потом создавать различные реализации IService и использовать в программе adhoс полиморфизм. Но так как ты забыл (а может и не знал) что adhoс полиморфизм — не более чем косвенный вызов, то ни в одном языке нету проблем сделать структуру со ссылками на функции.
Если же тебя интересует вопрос инкапсуляции, хотя это явно из приведенного кода не следует, то скажу что для инкапсуляции в ФЯ используются замыкания.
Такая же, как для любых Turing-полных языков
Ф>Можно ли на ФЯ написать сервис вида
Ф>interface IService Ф>{ Ф>ServiceState GetState(); Ф>void NewState(); Ф>}
Можно.
А что конкретно имелось в виду? В частности, подкину вот такую ссылку: http://norvig.com/design-patterns/ (показывает, как некоторые из ООП-паттернов прозрачно существуют в языках с поддержкой ФП)
Здравствуйте, Mamut, Вы писали:
M>А что конкретно имелось в виду?
особо интересовала возможность хранение состояния: например, где и как будет реализовываться состояние "сервис выключен, т.е. не принимает никаких запросов, кроме административных"
Всё сказанное выше — личное мнение, если не указано обратное.
M>>А что конкретно имелось в виду?
Ф>особо интересовала возможность хранение состояния: например, где и как будет реализовываться состояние "сервис выключен, т.е. не принимает никаких запросов, кроме административных"
В общем случае для ФЯ это будет выглядеть так:
State = initial_service_state(),
State1 = service_on(State),
State2 = service_off(State1),
...
где State — opaque структура данных, в которой хранится некие данные для идентификации сервиса и/или его состояния.
Для того, чтобы не протягивать этот State по всей программе, в Erlang'е, например, поднимается процесс, который прячет свое внутреннее состояние.
Здравствуйте, gandjustas, Вы писали:
G>Простой ответ: да.
G>Сложный. Когда ты пишешь такой кусок кода, то наверное подразумеваешь что надо будет потом создавать различные реализации IService и использовать в программе adhoс полиморфизм. Но так как ты забыл (а может и не знал) что adhoс полиморфизм — не более чем косвенный вызов, то ни в одном языке нету проблем сделать структуру со ссылками на функции.
G>Если же тебя интересует вопрос инкапсуляции, хотя это явно из приведенного кода не следует, то скажу что для инкапсуляции в ФЯ используются замыкания.
Браво! А ещё говорят, что специалисты микрософт никчёмные ...
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].