HTML Diff
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>