Re[2]: Базовое отличие ООП от ФП
От: sergii.p  
Дата: 15.03.24 10:48
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Принципиальное отличие в наличии изменяемого состояния, для которого необходима идентифицируемость (identity).


это если мы говорим о сравнении ФП с императивным подходом.
А если сравнивать ООП с ФП, то иммутабельность видимо не является принципиальным отличием. Ведь без изменения состояния можно работать и в ООП парадигме.
Принципиальным отличием, как мне кажется, является то как мы вносим зависимости.

В ООП через интерфейсы:

struct Out { virtual void write(const Data&) const = 0; };

struct Console { virtual void write(const Data&) const { ... }; };

struct File { virtual void write(const Data&) const { ... }; };

void foo(const Data& d, Out& out) {
    out.write(d);
}

void main(){
    const auto console = Console{};
    const auto file = File{};
    const Data d{42};
    foo(d, console);
    foo(d, file);
}


В ФП — через функции:

void write_to_console(const Data& ) { ... }
void write_to_file(const Data& ) { ... }

void foo(const Data& d, auto write) {
    write(d);
}

void main() {
    const auto log = [file = "log.txt"](const Data& d) { write_to_file(file, d); };
    const Data d{42};
    foo(d, log);
    foo(d, write_to_console);
}


Мне даже кажется, что если бы функциональщина появились в языках изначально, ООП так бы и не был внедрён. Он более громоздок, вносит больше вспомогательных абстракций.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.