1 added
1 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>8 апр 2021</li>
2
<ul><li>8 апр 2021</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><h2>ООП умерло? Да здравствует ООП!</h2>
4
</ul><h2>ООП умерло? Да здравствует ООП!</h2>
5
<p>Адепты функционального программирования, кажется, вы рано сбросили ООП со счетов. А не зря ли вы вообще на него ополчились?</p>
5
<p>Адепты функционального программирования, кажется, вы рано сбросили ООП со счетов. А не зря ли вы вообще на него ополчились?</p>
6
<p>william krause / unsplash</p>
6
<p>william krause / unsplash</p>
7
<p>Выпускающий редактор Skillbox Media.</p>
7
<p>Выпускающий редактор Skillbox Media.</p>
8
<p><strong><strong>об авторе</strong></strong></p>
8
<p><strong><strong>об авторе</strong></strong></p>
9
<p>Стартапер со степенью доктора философии Сорбонны и MBA от <a>CDI</a>. Пишет для TheNextWeb, HP Enterprise и Built In.</p>
9
<p>Стартапер со степенью доктора философии Сорбонны и MBA от <a>CDI</a>. Пишет для TheNextWeb, HP Enterprise и Built In.</p>
10
Если так много людей ненавидит ООП, то почему же они не готовы от него отказаться?<em>Фото: <a>Vale Zmeykov</a> / <a>Unsplash</a></em><p>На заре программирования, в 1960-х годах, компьютеры были довольно слабыми. Поэтому требовалось как-то<a>делить их вычислительные ресурсы</a>между данными и задачами.</p>
10
Если так много людей ненавидит ООП, то почему же они не готовы от него отказаться?<em>Фото: <a>Vale Zmeykov</a> / <a>Unsplash</a></em><p>На заре программирования, в 1960-х годах, компьютеры были довольно слабыми. Поэтому требовалось как-то<a>делить их вычислительные ресурсы</a>между данными и задачами.</p>
11
<p>Проблема заключалась в том, что тогда нельзя было обработать большой объём данных, не загрузив компьютер до предела его возможностей. А если нужно было решать много разных задач, то каждая могла работать лишь с данными небольшого объёма, иначе компьютер считал бы вечно.</p>
11
<p>Проблема заключалась в том, что тогда нельзя было обработать большой объём данных, не загрузив компьютер до предела его возможностей. А если нужно было решать много разных задач, то каждая могла работать лишь с данными небольшого объёма, иначе компьютер считал бы вечно.</p>
12
<p>И вот в середине шестидесятых Алан Кэй предложил идею автономных мини-компьютеров, которые бы обменивались не данными, а сообщениями. Так вычислительные мощности можно было бы делить гораздо эффективнее.</p>
12
<p>И вот в середине шестидесятых Алан Кэй предложил идею автономных мини-компьютеров, которые бы обменивались не данными, а сообщениями. Так вычислительные мощности можно было бы делить гораздо эффективнее.</p>
13
<p><strong>от переводчика</strong></p>
13
<p><strong>от переводчика</strong></p>
14
<p>Будучи по образованию математиком и молекулярным биологом, Алан Кэй сравнил компьютеры с живыми клетками. Идея состояла в том, чтобы независимые программы (ячейки) отправляли друг другу<strong>сообщения</strong>. При этом<strong>состояние</strong>программ не открывалось бы внешней среде (<strong>инкапсуляция</strong>).</p>
14
<p>Будучи по образованию математиком и молекулярным биологом, Алан Кэй сравнил компьютеры с живыми клетками. Идея состояла в том, чтобы независимые программы (ячейки) отправляли друг другу<strong>сообщения</strong>. При этом<strong>состояние</strong>программ не открывалось бы внешней среде (<strong>инкапсуляция</strong>).</p>
15
<p>Вот как Кэй<a>вспоминает</a>об этом: "Я считал<strong>объекты</strong>чем-то вроде биологических клеток и/или отдельных компьютеров в сети, которые могут общаться только через<strong>сообщения</strong>".</p>
15
<p>Вот как Кэй<a>вспоминает</a>об этом: "Я считал<strong>объекты</strong>чем-то вроде биологических клеток и/или отдельных компьютеров в сети, которые могут общаться только через<strong>сообщения</strong>".</p>
16
<p>Несмотря на гениальность этой идеи, в объектно-ориентированное программирование она воплотилась не сразу, оно завоевало популярность лишь к <a>1981 году</a>. С тех пор в ООП неуклонно погружаются как новички, так и бывалые разработчики. И <a>рынок</a>сегодня заполонён ОО-программистами.</p>
16
<p>Несмотря на гениальность этой идеи, в объектно-ориентированное программирование она воплотилась не сразу, оно завоевало популярность лишь к <a>1981 году</a>. С тех пор в ООП неуклонно погружаются как новички, так и бывалые разработчики. И <a>рынок</a>сегодня заполонён ОО-программистами.</p>
17
<p>ООП правит бал сорок с лишним лет. Однако в последние годы эту парадигму всё чаще<a>критикуют</a>. Возможно ли, что технологии попросту её переросли?</p>
17
<p>ООП правит бал сорок с лишним лет. Однако в последние годы эту парадигму всё чаще<a>критикуют</a>. Возможно ли, что технологии попросту её переросли?</p>
18
<p>Основная идея объектно-ориентированного программирования проста до безобразия: вы разбиваете программу на части, законченные сами по себе. То есть объединяете все данные и методы, которые нужны для обработки только этих данных.</p>
18
<p>Основная идея объектно-ориентированного программирования проста до безобразия: вы разбиваете программу на части, законченные сами по себе. То есть объединяете все данные и методы, которые нужны для обработки только этих данных.</p>
19
-
<p>Заметьте, это относится только к понятию<strong>инкапсуляции</strong>, то есть данные и методы находятся внутри объекта и ��евидимы снаружи, защищены. С содержимым объекта можно взаимодействовать только через сообщения, так называемые методы доступа (<strong>геттеры</strong>и <strong>сеттеры</strong>).</p>
19
+
<p>Заметьте, это относится только к понятию<strong>инкапсуляции</strong>, то есть данные и методы находятся внутри объекта и невидимы снаружи, защищены. С содержимым объекта можно взаимодействовать только через сообщения, так называемые методы доступа (<strong>геттеры</strong>и <strong>сеттеры</strong>).</p>
20
<p>У современного ООП есть и другие важные принципы, которые не входили в изначальную идею. Это<strong>наследование</strong>и <strong>полиморфизм</strong>.</p>
20
<p>У современного ООП есть и другие важные принципы, которые не входили в изначальную идею. Это<strong>наследование</strong>и <strong>полиморфизм</strong>.</p>
21
<p>Наследование означает, что разработчики могут определять подклассы, которые обладают всеми свойствами, присущими родительскому классу. Эта концепция возникла в 1976 году, спустя десятилетие после появления объектно-ориентированного программирования.</p>
21
<p>Наследование означает, что разработчики могут определять подклассы, которые обладают всеми свойствами, присущими родительскому классу. Эта концепция возникла в 1976 году, спустя десятилетие после появления объектно-ориентированного программирования.</p>
22
<p>Ещё через десять лет в ООП пришёл полиморфизм. В общих чертах он означает, что метод или объект могут быть шаблонами для других методов и объектов. По сути, это более универсальное понятие, чем наследование, потому что новой сущности можно передавать не все свойства исходного метода или объекта, переопределять их по необходимости.</p>
22
<p>Ещё через десять лет в ООП пришёл полиморфизм. В общих чертах он означает, что метод или объект могут быть шаблонами для других методов и объектов. По сути, это более универсальное понятие, чем наследование, потому что новой сущности можно передавать не все свойства исходного метода или объекта, переопределять их по необходимости.</p>
23
<p>Особенность полиморфизма состоит в том, что, даже если в исходном коде две сущности зависят друг от друга, вызываемая сущность является скорее шаблоном для фактически используемых объектов. Это облегчает жизнь разработчикам - им не нужно беспокоиться о зависимостях при выполнении программы.</p>
23
<p>Особенность полиморфизма состоит в том, что, даже если в исходном коде две сущности зависят друг от друга, вызываемая сущность является скорее шаблоном для фактически используемых объектов. Это облегчает жизнь разработчикам - им не нужно беспокоиться о зависимостях при выполнении программы.</p>
24
<p>Вообще говоря, наследование и полиморфизм присущи не только объектно-ориентированному программированию. А уникальность ООП - именно в инкапсуляции данных и методов, которые их обрабатывают. Когда вычислительных ресурсов было намного меньше, чем сегодня, эта идея оказалась прорывной.</p>
24
<p>Вообще говоря, наследование и полиморфизм присущи не только объектно-ориентированному программированию. А уникальность ООП - именно в инкапсуляции данных и методов, которые их обрабатывают. Когда вычислительных ресурсов было намного меньше, чем сегодня, эта идея оказалась прорывной.</p>
25
Бесполезным ООП точно не назовёшь. Создавать код с ним стало куда проще.<em>Фото: <a>Windows</a> / <a>Unsplash</a></em><p>Став массовым, объектно-ориентированное программирование перевернуло сам подход к написанию кода. До 1980-х годов преобладало процедурное программирование, которое было машинно-ориентированным. Чтобы писать хороший код, нужно было разбираться во внутреннем устройстве компьютера.</p>
25
Бесполезным ООП точно не назовёшь. Создавать код с ним стало куда проще.<em>Фото: <a>Windows</a> / <a>Unsplash</a></em><p>Став массовым, объектно-ориентированное программирование перевернуло сам подход к написанию кода. До 1980-х годов преобладало процедурное программирование, которое было машинно-ориентированным. Чтобы писать хороший код, нужно было разбираться во внутреннем устройстве компьютера.</p>
26
<p>ООП же изменило взгляд на разработку ПО, переключило его с машины на человека. Например, в ООП чисто интуитивно понятно, что метод drive() принадлежит к группе данных car, а не к группе teddybear.</p>
26
<p>ООП же изменило взгляд на разработку ПО, переключило его с машины на человека. Например, в ООП чисто интуитивно понятно, что метод drive() принадлежит к группе данных car, а не к группе teddybear.</p>
27
<p>Когда появилось наследование, понятности это не убавило: по-прежнему было очевидно, что Hyundai - это подгруппа car, и у них одинаковые свойства, а вот для Hyundai и PoohTheBear - это не так.</p>
27
<p>Когда появилось наследование, понятности это не убавило: по-прежнему было очевидно, что Hyundai - это подгруппа car, и у них одинаковые свойства, а вот для Hyundai и PoohTheBear - это не так.</p>
28
<p>Впечатляет? Ещё бы. Но есть и обратная сторона: разработчики, которые знают лишь объектно-ориентированное программирование, воспринимают любую задачу только с позиций ООП. Это всё равно что взять в руки молоток - и с этого момента везде замечать незабитые гвозди. Но если в ящике с инструментами у вас только молоток - это может стать большой проблемой. О чём далее.</p>
28
<p>Впечатляет? Ещё бы. Но есть и обратная сторона: разработчики, которые знают лишь объектно-ориентированное программирование, воспринимают любую задачу только с позиций ООП. Это всё равно что взять в руки молоток - и с этого момента везде замечать незабитые гвозди. Но если в ящике с инструментами у вас только молоток - это может стать большой проблемой. О чём далее.</p>
29
<p>Следующие примеры я частично позаимствовал из <a>вирусной истории</a>Чарльза Скалфани (Charles Scalfani) "Прощай, объектно-ориентированное программирование"<em>.</em></p>
29
<p>Следующие примеры я частично позаимствовал из <a>вирусной истории</a>Чарльза Скалфани (Charles Scalfani) "Прощай, объектно-ориентированное программирование"<em>.</em></p>
30
<p>Предположим, вы пишете программу. В ней понадобился новый класс. Вы сразу вспоминаете, что как раз такой аккуратный маленький класс вы уже создавали в другом проекте, - и он идеально подошёл бы здесь и сейчас.</p>
30
<p>Предположим, вы пишете программу. В ней понадобился новый класс. Вы сразу вспоминаете, что как раз такой аккуратный маленький класс вы уже создавали в другом проекте, - и он идеально подошёл бы здесь и сейчас.</p>
31
<p>Нет вопросов! Можно спокойно использовать класс из старого проекта в новом.</p>
31
<p>Нет вопросов! Можно спокойно использовать класс из старого проекта в новом.</p>
32
<p>Только вот класс этот может оказаться подклассом - а значит, придётся включить в код и его родителя. Родительский же класс тоже окажется зависимым от других классов - и в итоге вы навключаете в программу кучу лишнего кода.</p>
32
<p>Только вот класс этот может оказаться подклассом - а значит, придётся включить в код и его родителя. Родительский же класс тоже окажется зависимым от других классов - и в итоге вы навключаете в программу кучу лишнего кода.</p>
33
<p>Создатель языка программирования<a>Erlang</a>Джо Армстронг когда-то сказал об этом так:</p>
33
<p>Создатель языка программирования<a>Erlang</a>Джо Армстронг когда-то сказал об этом так:</p>
34
<p>Проблема объектно-ориентированных языков в том, что они тащат за собой всё своё окружение.<strong>Вы хотели всего лишь банан, а получаете в итоге гориллу с бананом и целые джунгли в придачу</strong>.</p>
34
<p>Проблема объектно-ориентированных языков в том, что они тащат за собой всё своё окружение.<strong>Вы хотели всего лишь банан, а получаете в итоге гориллу с бананом и целые джунгли в придачу</strong>.</p>
35
<p>Этим всё сказано.</p>
35
<p>Этим всё сказано.</p>
36
<p>Использовать классы повторно - это нормально и вообще едва ли не главное достоинство ООП. Но не стоит доводить принцип DRY до крайностей. Иногда лучше написать новый класс, чем тянуть прежний с клубком его зависимостей.</p>
36
<p>Использовать классы повторно - это нормально и вообще едва ли не главное достоинство ООП. Но не стоит доводить принцип DRY до крайностей. Иногда лучше написать новый класс, чем тянуть прежний с клубком его зависимостей.</p>
37
Будьте мудры, не доверяйтесь парадигме всецело и слепо.<em>Фото: <a>Windows</a> / <a>Unsplash</a></em><p>Допустим, вы повторно использовали класс из прежнего проекта. Что произойдёт, если его базовый класс изменится?</p>
37
Будьте мудры, не доверяйтесь парадигме всецело и слепо.<em>Фото: <a>Windows</a> / <a>Unsplash</a></em><p>Допустим, вы повторно использовали класс из прежнего проекта. Что произойдёт, если его базовый класс изменится?</p>
38
<p>Испортиться может весь ваш код, даже тот, который никто не менял. Ещё вчера производные классы работали как часы, но сегодня всё сломалось. А просто кто-то внёс незначительное изменение в базовый класс, и это оказалось критичным для целого проекта. Называется такое проблемой<a>хрупкого ("незащищённого") базового класса</a>.</p>
38
<p>Испортиться может весь ваш код, даже тот, который никто не менял. Ещё вчера производные классы работали как часы, но сегодня всё сломалось. А просто кто-то внёс незначительное изменение в базовый класс, и это оказалось критичным для целого проекта. Называется такое проблемой<a>хрупкого ("незащищённого") базового класса</a>.</p>
39
<p>Решение использовать класс повторно кажется быстрым и эффективным, но в перспективе может обойтись слишком дорого. Иными словами, чем чаще пользуешься наследованием, тем тяжелее поддерживать работоспособность кода.</p>
39
<p>Решение использовать класс повторно кажется быстрым и эффективным, но в перспективе может обойтись слишком дорого. Иными словами, чем чаще пользуешься наследованием, тем тяжелее поддерживать работоспособность кода.</p>
40
<p>Наследование - мягкое и пушистое, когда мы берём свойства одного класса и передаём его другим. А если нужно смешать свойства двух разных классов?</p>
40
<p>Наследование - мягкое и пушистое, когда мы берём свойства одного класса и передаём его другим. А если нужно смешать свойства двух разных классов?</p>
41
<p>Увы, просто и элегантно это сделать не получится.</p>
41
<p>Увы, просто и элегантно это сделать не получится.</p>
42
<p>Например, у нас есть класс Copier. Он описывает копировальный аппарат, который сканирует документ и печатает его на чистом листе.</p>
42
<p>Например, у нас есть класс Copier. Он описывает копировальный аппарат, который сканирует документ и печатает его на чистом листе.</p>
43
<p>Вопрос: подклассом чего Copier должен быть - сканера (Scanner) или принтера (Printer)?</p>
43
<p>Вопрос: подклассом чего Copier должен быть - сканера (Scanner) или принтера (Printer)?</p>
44
<p>Верного ответа просто не существует. Это называется<a>проблемой ромба</a>. Да, код она не ломает, но обескураживает разработчиков часто.</p>
44
<p>Верного ответа просто не существует. Это называется<a>проблемой ромба</a>. Да, код она не ломает, но обескураживает разработчиков часто.</p>
45
<p>Вопрос выше заключался в том, чей наследник класс Copier. А с ответом я вас обманул: из той ситуации можно выйти изящно. Делаем Copier родительским классом, а Scanner и Printer - подклассами, которые наследуют только подмножество свойств. Вуаля!</p>
45
<p>Вопрос выше заключался в том, чей наследник класс Copier. А с ответом я вас обманул: из той ситуации можно выйти изящно. Делаем Copier родительским классом, а Scanner и Printer - подклассами, которые наследуют только подмножество свойств. Вуаля!</p>
46
<p>Здорово, конечно. Но что, если Copier у нас чёрно-белый, а Printer умеет печатать в цвете? Разве Printer в этом смысле не более общее понятие для Copier? И что делать, если Printer должен подключаться к Wi-Fi, а Copier нет?</p>
46
<p>Здорово, конечно. Но что, если Copier у нас чёрно-белый, а Printer умеет печатать в цвете? Разве Printer в этом смысле не более общее понятие для Copier? И что делать, если Printer должен подключаться к Wi-Fi, а Copier нет?</p>
47
<p>Чем больше свойств добавляется в класс, тем сложнее установить правильную иерархию. В этом примере мы имеем дело с наборами свойств Copier и Printer - среди них есть как общие, так и уникальные. Если попытаться выстроить такие классы в линейную иерархию наследования (особенно в крупном и сложном проекте), то это чревато проблемами. Потому что выбрать родителя из Copier, Printer и Scanner не выходит.</p>
47
<p>Чем больше свойств добавляется в класс, тем сложнее установить правильную иерархию. В этом примере мы имеем дело с наборами свойств Copier и Printer - среди них есть как общие, так и уникальные. Если попытаться выстроить такие классы в линейную иерархию наследования (особенно в крупном и сложном проекте), то это чревато проблемами. Потому что выбрать родителя из Copier, Printer и Scanner не выходит.</p>
48
Не смешивайте иерархии, чтобы не запутаться в нагромождении классов.<em>Фото: <a>Emma Dau</a> / <a>Unsplash</a></em><p>Столкнувшись с проблемой иерархии, вы можете решить: окей, займёмся ОО-программированием в чистом виде - без всяких иерархий. Попросту будем использовать наборы свойств и наследовать их, расширяя или переопределяя когда нужно. Выйдет немного путано, но решение это вполне жизнеспособно, разве нет?</p>
48
Не смешивайте иерархии, чтобы не запутаться в нагромождении классов.<em>Фото: <a>Emma Dau</a> / <a>Unsplash</a></em><p>Столкнувшись с проблемой иерархии, вы можете решить: окей, займёмся ОО-программированием в чистом виде - без всяких иерархий. Попросту будем использовать наборы свойств и наследовать их, расширяя или переопределяя когда нужно. Выйдет немного путано, но решение это вполне жизнеспособно, разве нет?</p>
49
<p>Увы и ах, но нет. Тут возникает иная сложность. Весь смысл инкапсуляции - в том, чтобы обрабатывать данные более эффективно, защищая их друг от друга. А без строгой иерархии это невозможно.</p>
49
<p>Увы и ах, но нет. Тут возникает иная сложность. Весь смысл инкапсуляции - в том, чтобы обрабатывать данные более эффективно, защищая их друг от друга. А без строгой иерархии это невозможно.</p>
50
<p>Допустим, объект A должен взаимодействовать с объектом B. Какие у них отношения - значения не имеет, важно лишь, что A не прямой потомок B.</p>
50
<p>Допустим, объект A должен взаимодействовать с объектом B. Какие у них отношения - значения не имеет, важно лишь, что A не прямой потомок B.</p>
51
<p>Объект A включает в себя ссылку на B, иначе они не смогли бы взаимодействовать. Но если A содержит данные, доступ к которым также есть у дочерних элементов B, то получается, что эти данные можно изменить сразу из нескольких мест. Таким образом, данные в объекте B больше не защищены - инкапсуляция нарушена.</p>
51
<p>Объект A включает в себя ссылку на B, иначе они не смогли бы взаимодействовать. Но если A содержит данные, доступ к которым также есть у дочерних элементов B, то получается, что эти данные можно изменить сразу из нескольких мест. Таким образом, данные в объекте B больше не защищены - инкапсуляция нарушена.</p>
52
<p>И хотя многие ОО-разработчики создают продукты именно с такой архитектурой, это уже не ООП, а попросту бардак.</p>
52
<p>И хотя многие ОО-разработчики создают продукты именно с такой архитектурой, это уже не ООП, а попросту бардак.</p>
53
<p>Все названные проблемы ООП объединяет одно: наследование применяется даже там, где не является лучшим решением. Причём я бы не сказал, что это проблемы именно ОО-подхода - потому что исходная его форма никакого наследования не предполагала. Скорее во всех них виновата боязнь выйти за рамки парадигмы, слепая вера в неё.</p>
53
<p>Все названные проблемы ООП объединяет одно: наследование применяется даже там, где не является лучшим решением. Причём я бы не сказал, что это проблемы именно ОО-подхода - потому что исходная его форма никакого наследования не предполагала. Скорее во всех них виновата боязнь выйти за рамки парадигмы, слепая вера в неё.</p>
54
<p>Однако перестараться можно не только в ООП. Например, в чисто<a>функциональном программировании</a>чрезвычайно сложно обрабатывать ввод данных или вывод сообщений на экран. Для этих целей лучше применять объектно-ориентированный или процедурный подход. Тем не менее некоторые разработчики реализуют ввод-вывод как чистые функции и раздувают свой код до того, что разобраться в нём уже никто не может. Хотя с другим подходом для этого бы хватило пары понятных строк.</p>
54
<p>Однако перестараться можно не только в ООП. Например, в чисто<a>функциональном программировании</a>чрезвычайно сложно обрабатывать ввод данных или вывод сообщений на экран. Для этих целей лучше применять объектно-ориентированный или процедурный подход. Тем не менее некоторые разработчики реализуют ввод-вывод как чистые функции и раздувают свой код до того, что разобраться в нём уже никто не может. Хотя с другим подходом для этого бы хватило пары понятных строк.</p>
55
<p>В парадигмах, как в религиях, хороша умеренность. Бесспорно, Иисус, Мухаммед и Будда явили миру крутые идеи, но если следовать их учениям до последней запятой, можно изрядно испортить жизнь себе и близким. Во всём важна мера.</p>
55
<p>В парадигмах, как в религиях, хороша умеренность. Бесспорно, Иисус, Мухаммед и Будда явили миру крутые идеи, но если следовать их учениям до последней запятой, можно изрядно испортить жизнь себе и близким. Во всём важна мера.</p>
56
<p>Очевидно, что функциональное программирование<a>набирает обороты</a>, тогда как ООП в последние годы сдаёт позиции, его<a>резко критикуют</a>.</p>
56
<p>Очевидно, что функциональное программирование<a>набирает обороты</a>, тогда как ООП в последние годы сдаёт позиции, его<a>резко критикуют</a>.</p>
57
<p>Несомненно и то, что изучать новые парадигмы нужно, только вот применять их следует по необходимости. В конце концов, даже если ООП - тот самый молоток, из-за которого разработчики везде видят лишь гвозди, - разве это причина его выкидывать? Не проще ли добавить в рабочий ящик отвёртку, нож и ножницы - и выбирать тот инструмент, который лучше решает конкретную задачу.</p>
57
<p>Несомненно и то, что изучать новые парадигмы нужно, только вот применять их следует по необходимости. В конце концов, даже если ООП - тот самый молоток, из-за которого разработчики везде видят лишь гвозди, - разве это причина его выкидывать? Не проще ли добавить в рабочий ящик отвёртку, нож и ножницы - и выбирать тот инструмент, который лучше решает конкретную задачу.</p>
58
<p>Все жаркие споры о функциональном и объектно-ориентированном программировании привычно сводятся к одному: пришёл ли ООП конец?</p>
58
<p>Все жаркие споры о функциональном и объектно-ориентированном программировании привычно сводятся к одному: пришёл ли ООП конец?</p>
59
<p>Появляется всё больше задач, для которых эффективнее именно функциональный подход: вспомнить хотя бы анализ данных, машинное обучение или параллельное программирование. И чем больше вы этим занимаетесь, тем сильнее цените функциональное программирование.</p>
59
<p>Появляется всё больше задач, для которых эффективнее именно функциональный подход: вспомнить хотя бы анализ данных, машинное обучение или параллельное программирование. И чем больше вы этим занимаетесь, тем сильнее цените функциональное программирование.</p>
60
<p>Но реальность такова, что на десяток вакансий для ОО-разработчиков есть дай бог одно предложение для "функционалов". Хотя это и не значит, что функциональный программист не найдёт работу, - такие специалисты на рынке пока что в дефиците.</p>
60
<p>Но реальность такова, что на десяток вакансий для ОО-разработчиков есть дай бог одно предложение для "функционалов". Хотя это и не значит, что функциональный программист не найдёт работу, - такие специалисты на рынке пока что в дефиците.</p>
61
<p>Самый вероятный сценарий развития событий, как мне кажется, таков: объектно-ориентированное программирование будет востребовано ещё лет десять. Конечно, за "функционалами" будущее, а если говорить о настоящем, то ОО-разработчики пока что нужнее.</p>
61
<p>Самый вероятный сценарий развития событий, как мне кажется, таков: объектно-ориентированное программирование будет востребовано ещё лет десять. Конечно, за "функционалами" будущее, а если говорить о настоящем, то ОО-разработчики пока что нужнее.</p>
62
<p>Так что в ближайшие несколько лет не стоит выбрасывать ООП из своего ящика с инструментами. Главное, чтобы оно не лежало там в гордом одиночестве.</p>
62
<p>Так что в ближайшие несколько лет не стоит выбрасывать ООП из своего ящика с инструментами. Главное, чтобы оно не лежало там в гордом одиночестве.</p>
63
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
63
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>