Показаны сообщения с ярлыком oop. Показать все сообщения
Показаны сообщения с ярлыком oop. Показать все сообщения

понедельник, 2 февраля 2015 г.

Диаграмма языков

Есть четыре парадигмы языков, которые часто путают и смешивают в кучу:
  • Императивная парадигма
  • Декларативная парадигма
  • Фунциональная парадигма
  • Объектно-ориентированная парадигма

Я решил нарисовать простую диаграмму, которая расставляет всё на свои места. Заранее предупреждаю, что это моё личное субъективное видение, которое не претендует на стопроцентную истину:


Таким образом, есть две прямо противоположные непересекающиеся парадигмы: императивная и декларативная. В императивных языках мы описываем решение задачи через последовательность инструкций, которые указывают машине что делать. Декларативная парадигма же не содержит никаких инструкций, а вместо них даёт некоторое описание, которое машина должна интерпретировать.
Пример чисто императивного языка  C, пример чисто декларативного языка  HTML.
Теперь самое интересное: объектно-ориентированная и функциональная парадигмы. Обе они не являются строгим подмножеством императивной и декларативной парадигм соответственно. Да, есть языки, которые объектно-ориентированны и при этом чисто императивны (Java, C++), и есть языки, которые функциональны и чисто декларативны (Agda).
Но в целом, ничто не запрещает функциональному языку быть императивным (Haskell), а объектно-ориентированному языку  декларативным (C# со своим LINQ).
А есть вообще языки, которые сразу поддерживают и императивную, и декларативную, и объектно-ориентированную, и функциональную парадигмы (Scala, Nemerle, OCaml).

суббота, 24 января 2015 г.

OOP is dead?

Хайп вокруг ООП за последние несколько лет сильно стух:
  • Новые языки программирования отказываются от наследования (Go, Rust) и добавляют всё больше и больше функциональных вещей. Лямбды есть уже во всех мейнстримовых языках.
  • Люди всё чаще используют динамические и скриптовые языки (JavaScript заметно вырвался вперёд по популярности, хотя несколько лет назад был наравне с Java).
  • Исчезают статьи про паттерны проектирования и прочий оопшный мусор. А статьи про монады растут в геометрической прогрессии.
  • Программисты стали чаще отказываться от тяжелых фреймворков и контейнеров в пользу более лёгких. Сейчас уже трудно встретить человека, который с энтузиазмом бы рассказывал про какой-нибудь GlassFish или Spring.
  • Не совладая с экспоненциально растущей сложностью своих проектов, люди стали винить даже процесс разработки и начали искать решения в гибких методологиях вроде Scrum или XP. Вместо того чтобы развиваться и изучать компьютерную науку, люди занимаются самообманом. Agile не решит проблему ООП: граф состояний объектов так и будет расти экспоненциально.
Мне кажется, эра ООП постепенно подходит к концу. Целая индустрия фреймворков построена исключительно для того, чтобы решать проблемы, существующие только в мире ООП. Столько мозгов и денег пропадает впустую, решая несуществующие проблемы!

Мы должно положить этому конец. Чем скорее ООП сдохнет, тем лучше.