ООП - Оборачиваем Ошибки Полиэтиленом

Jan 19, 2012 10:44

В мире программирования серебряной пули нет, поэтому за неимением ее приходится использовать более или менее удовлетворяющие заменители. Там где получается об этом громко говорят и стараются "продвинуть идею в массы", после чего идея начинает жить сама, часто в довольно извращенной форме.

Читать дальше

Leave a comment

binf January 24 2013, 06:52:10 UTC
Доброго времени суток. Я здесь впервые, но, поскольку тема для меня животрепещущая, позволю себе высказаться.

В процесе перехода на гибридные ЯП (с С# на F#, а с Java на соответственно Scala), я тоже пришёл к выводу, что, как правило, любой ОО-код можно успешно ресоурсить на функциональный, используя замыкания, размеченные объединения и технику сопоставления с образцом. При этом читаемость кода всегда улучшается. Тут единственная проблема видится мне в привычке программистов думать в терминах ложных представлений об ООП, навязанных C++ и Java в первую очередь.

Объектно-ориентированное программирование объединяет данные вместе с кодом, который их обрабатывает и это продается как преимущество.

Нет. Цимес ООП в динамическом (мульти)полиморфизме, а не в статическом связыании (структурировании) кода и данных. Последнее выдаётся как премущество Java и С++ ("паблик статик файнл Борщ Борщ борщ нью Борщ", ага ), хотя изначально в Simula и Smalltalk заложена принципиально иная парадигма. Которая, как известно, успешно реализована в CLOS. Собственно, вот и пример правильного ООП подхода, без утраты функциональной декларативности. Другой более или менее годный пример - Javascript с его протоипной природой, это уже ближе к общепринятой практике, чем Lisp.

Reply

rigidus January 24 2013, 12:39:05 UTC
Я бы сказал, что в ООП сложно выделить один "цимес", т.к. всегда проще продать пакет преимуществ под одним лейблом, чем одно конретное преимущество. Динамический мультиполиморфизм по сравнению с мультиметодами и обобщенными функциями CLOS выглядит как наколеночное решение. Что же касается прототипного ООП в javascript - я не могу сказать по его поводу что-то определенное, поскольку знаком с ним лишь теоретически.

Reply

binf January 24 2013, 17:27:30 UTC
Хм, а я, напротив, с CL лишь теоретически, но о преимущества мультиметодов представляю, поскольку имел пичальный опыт "применения шаблона visitor".

Прототипное ООП лучше даже одним лишь отсутствием классов, плюс возможность динамической структуризации. javascript, видимо, не самый удачный пример такого ЯП ввиду наличия множества граблей. Но он всё же достаточно удобен, поскольку граблей таки меньше, чем к примеру в С++, их можно обойти малой кровью. Автор формата json назвал его "Lisp в шкуре C"

Reply

rigidus January 26 2013, 20:01:23 UTC
>> с CL лишь теоретически
Есть отличный краткий курс (просмотреть и даже попробовать можно за день, а то и меньше)

https://github.com/filonenko-mikhail/ub-lisp

После него можно сразу легко и свободно рассуждать об устрицах :)

Reply


Leave a comment

Up