LINUX.ORG.RU

[philosophy] В чем заключается революционность перехода от функциональщины к ООП?


1

0

Так уж повелось, что первый язык, который я изучал, был делфи. Потом всякие сишарпики, С++, лисп, и т.п. В итоге, как мне кажется, у меня ООП головного мозга. Когда возникала задача писать на С, я начал реализовавывать обьектную модель в этом языке.

«Стоп», сказал я себе и подумал. Почему сейчас все кругом вопят про ООП и про его архиполезность и архиправильность? Далее, по ходу раздумий, пришел к мысли, что все, что пишется с использованием ООПшной парадигмы, может быть написано и без нее.

Почему появились языки, которые взяли ООП за главенствующую идею (java, c#, етц)?

Неужели те преимущества, которые предлагает ООП (полиморфизм, инкапсуляция, наследование), дают прирост в эффективности, скорости написания программ, понимания их работы и поддержке? Здесь было бы интересно сравнить одну и ту же программу, написанную на С и на С++, чтобы узреть принципиальные архитектурные различия (может такие уже есть?).

Сухой остаток. ООП представляет из себя еще один уровень абстракции, который позволяет оперировать про проектировании не функциями, а обьектами. А неужели это так меняет дело и делает разработку более удобной?

Было бы интересно без срачей услышать компетентное мнение.

★★
Ответ на: комментарий от anonymous

[philosophy] В чем заключается революционность перехода от функциональщины к ООП? (комментарий)

Ну вот, для нормального языка:

Формализация и конкретизация паттернов - очень даже хорошее дело. Потому что их потом можно записать функциями(в стандартной библиотеке того же Haskell куча таких паттернов - withFile, например, очень хороший и полезный паттерн).

Что-то не так?

Miguel ★★★★★
()
Ответ на: комментарий от anonymous

>> http://www.linux.org.ru/jump-message.jsp?msgid=5034750&cid=5044184

да ты просто фразу из контекста вырвал. первоначально Лове5фан заикнулся на счет паттерна в cl:with-open-file. Мигель назвал его функцией, так как не в теме.

Нет, Мигель сказал, что такие вещи можно делать функциями высших порядков, а не макросами. Кстати, с возможностью этого и Love5an не спорит. А ты начал пороть какую-то хрень, так как не в теме.

Waterlaz ★★★★★
()
Ответ на: комментарий от Miguel

> Тот же with-open-file, скажем, становится обычной фукнцией.

хаскелляторы такие хаскелляторы. тьфу на вас.

anonymous
()
Ответ на: комментарий от Waterlaz

> Нет, Мигель сказал, что такие вещи можно делать функциями высших порядков, а не макросами. Кстати, с возможностью этого и Love5an не спорит. А ты начал пороть какую-то хрень, так как не в теме.

и на тебя тьфу.

anonymous
()
Ответ на: комментарий от anonymous

тьфу на вас.

Плеваться можешь сколько угодно, но нигде я лисповый макрос with-open-file не называл функцией.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Плеваться можешь сколько угодно, но нигде я лисповый макрос with-open-file не называл функцией.

Если чё я могу - «Ау, with-open-file енто такая функция» :_:

quasimoto ★★★★
()
Ответ на: комментарий от Miguel

Тот же with-open-file, скажем, становится обычной фукнцией.

Плеваться можешь сколько угодно, но нигде я лисповый макрос with-open-file не называл функцией.


(with-open-file (in "data.txt")
          (read-and-process-data in))

(macroexpand '(with-open-file (in "data.txt")
          (read-and-process-data in)))
(LET ((IN (OPEN "data.txt")) (#:G973 T))
  (UNWIND-PROTECT
      (MULTIPLE-VALUE-PROG1 (PROGN (READ-AND-PROCESS-DATA IN))
        (SETQ #:G973 NIL))
    (WHEN IN (CLOSE IN :ABORT #:G973))))

становится обычной фукнцией

ГДЕ?

anonymous
()
Ответ на: комментарий от anonymous

ГДЕ?

Ну, в общем, Лавсан выше показал, как сделать этот паттерн функцией.

Miguel ★★★★★
()
Ответ на: комментарий от quasimoto
(funcall (macro-function 'with-open-file)
        '(nil (in "data.txt") (read in)) nil)
;=>
(WITH-OPEN-STREAM (IN (OPEN "data.txt")) (READ IN))

Т.е. макрос это функция от кода (от AST), возвращающая код (другой AST).

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

Т.е. макрос это функция от кода (от AST), возвращающая код (другой AST).

Я предлагаю, всё-таки, не уподобляться анонимусу и не прикидываться, что чего-то не поняли.

Макрос - конечно, функция AST -> AST, но не говорить же вместо короткого «функция» длинное «функция-выполняющаяся-только-в-рантайме».

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.