Re[7]: Так в чем же принципиальные отличия ФП от ИП?
От: Mamut Швеция http://dmitriid.com
Дата: 27.04.07 08:53
Оценка:
__>3) "ООП" — позволяет хранить состояние в виде переменных членов и набор ассоциированных с ними функций в виде методов.

__>VladD2 совершенно справедливо заметил, что такой способ хорошо подходит для описание систем на макро уровне, например:

__>public class JobSystem и сразу понятно что если нужно взаимодействие с шедулером то нужно смотреть список его методов, в нем
__>же хранится текущее состоние (в виде конфига и запихнутого внутрь кварца(которй уже со своими потрохами)), там же лежат
__>методы для управления подсистемой в целом (start/shutdown).

-module(job_system).

-export([
    public_method/1,
    public_method_two/1,
    public_method_three/2
]).


%% ------------------------------------------------------
%% Публичные методы aka интерфейс взаимодействия
%% ------------------------------------------------------

public_method(Param) ->
    ok.

%% Функция является перегруженной
%% Перегрузка на основе паттерн-матчинга

%% Эта функция принимает список и вызывает внутреннюю, приватную функцию
public_method_two([Head|Tail]) ->
    private_method(Head, Tail);

%% Эта функция принимает кортеж и вызывает внутреннюю, приватную функцию
public_method_two({A,B}) ->
    private_method(A, B).

public_method_three(Param1, Param2) ->
    {я, не, знаю, что, мне, делать, с, этою, бедой}.

%% ------------------------------------------------------
%% Приватные функции
%% ------------------------------------------------------

%% Приватная функция также прегружена на основе
%% сопоставления с образцом

private_method(A, [Head|Tail]) ->
    another_Module:do_something(A),
    private_method(Head, Tail);

private_method(A, []) ->
   another_Module:do_something(A);

private_method(A, B) ->
   another_Module:do_something(A),
   another_Module:do_something(B).


Ну и чем это отличается от объекта? Состояние этот модуль тоже может хранить (см. gen_server в документации по Эрлангу ну или здесь).


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.