Разработка программного обеспечения – неоднородный и достаточно сложный процесс. Он предусматривает самые разные подходы и методологии к написанию программных кодов. В зависимости от контекста и поставленной задачи будет меняться концепция программирования. Примерами могут служить функциональная и логическая разработка. Больше внимания заслуживает еще одна концепция – объектно-ориентированное программирование.
Далее предстоит рассмотреть упомянутую методологию более подробно. Она встречается в принципах написания современных программ и утилит достаточно часто. Активно применяется в большинстве IT-областей. Каждый разработчик должен понимать, какими особенностями обладает ООП, где его применять. Информация, представленная далее, поможет не только разобраться в принципах объектно-ориентированного метода, но и познакомит с самыми распространенными языками, используемыми для соответствующего подхода к написанию программ.
Определение
ООП можно охарактеризовать как парадигму разработки приложений и утилит, согласно которой программное обеспечение состоит из объектов и классов. Это одна из самых известных концепций написания программ. Она базируется на организацию исходного кода за счет данных, классов и объектов, а не логических структур и всевозможных функций.
При использовании объектно-ориентированного подхода в разработке программа будет представлять собой некоторую совокупность взаимодействующих друг с другом объектов, каждый из которых является экземпляром определенного класса. Эти классы будут формировать иерархию наследования.
С точки зрения идеологии, ООП – это подход к созданию исходного кода как к моделированию информационных объектов. За счет такой концепции решается ключевая задача структурной разработки – структурирование данных с точки зрения ее управляемости. За счет объектов и классов, а также их взаимодействия, удается значительно улучшить управляемость моделированием. Соответствующая особенность важна для масштабных проектов.
Объекты в приложениях обычно представлены полноценными информационными блоками. Они поддерживают некоторые, заранее определенные характеристики и возможности. Используются для того, чтобы описывать (олицетворять) элементы.
Примером может послужить человек. У каждого есть:
- дата рождения;
- место проживания;
- имя;
- фамилия;
- отчество;
- возраст и так далее.
В качестве объектов в объектно-ориентированном программировании могут выступать небольшие приложения и утилиты с минимальным набором характеристик из реального мира, но с расширенной функциональностью. Объекты умеют взаимодействовать друг с другом, с пользователями и другими составляющими итогового приложения.
Концепции ООП принуждают концентрироваться в процессе написания кода на объектах, которыми требуется управлять. Логика, дающая возможность менять данные или взаимодействовать с компонентами проекта, уходит на второй план. Этот подход к разработке идеален для создания комплексных решений, требующих постоянной поддержки от огромного количества программистов.
Структуризация
Рассматривая ООП в программировании, необходимо запомнить, что это методология выделяет несколько ключевых компонентов. С ними предстоит постоянно взаимодействовать в процессе разработки программного обеспечения:
- методы;
- классы;
- объекты;
- атрибуты.
Соответствующие элементы задают всю концепцию ООП. Иногда допустимо выделение структур, связанных с рассматриваемой методологией. Упомянутые компоненты поддерживаются программами практически всегда. Далее о них будет рассказано более подробно.
Объект
Объект – экземпляр класса, его копия, которая располагается в памяти устройства. Пример – при создании переменной String со значением «Строка» в памяти будет сформирован и записан экземпляр класса String.
Объект – сущность, поддерживающая определенные свойства и поведенческие характеристики. Такой элемент чаще всего выступает экземпляром какого-нибудь класса. Пример – в компьютерной игре может быть персонаж (класс Character). Его экземплярами станут hero и npc.
Свойствами называются данные, которые имеют связь с определенным объектом. В случае с игровыми персонажами простыми словами их можно описать как:
- опыт;
- здоровье;
- сила;
- ловкость;
- интеллект;
- выносливость;
- скорость;
- мана;
- урон.
Чтобы определить поведение конкретного объекта, требуется использовать так называемые методы. Они представляют собой специальные кодовые блоки, которые вызываются из разных частей исходной программы.
Основные методы (функции), которые могут относиться к тому же игровому персонажу:
- использование элемента;
- подбор предмета;
- ведение диалога;
- атака;
- бег;
- прыжки;
- выбрасывание элемента из инвентаря.
При помощи свойств и методов можно значительно упростить процедуру разработки программного обеспечения, а исходный код сделать более читабельным.
Методы и атрибуты
Методы и атрибуты нужно рассмотреть более подробно. Метод – это функция, которая описывается внутри класса или объекта. Он относится к определенному элементу исходного кода. Используется для того, чтобы один объект/класс мог взаимодействовать с другими схожими компонентами или иными кодовыми структурами.
Ранее предложенный пример позволяет простыми словами описать, что собой представляют методы. В случае с игровыми героями (персонажами) они выступают в качестве «способностей» и «навыков». Когда герой будет выполнять определенные действия в игре, он будет использовать методы, прописанные в его объекте.
Определение атрибутов простым языком – это конкретные характеристики класса или объекта. Они представляются переменными с данными. На примере игрового персонажа допускается такая аналогия как характеристики, выраженные:
- скоростью;
- интеллектом;
- выносливостью;
- логикой;
- иными статистическими показателями.
Атрибутами называются параметры компонентов исходного кода. С их помощью удается более точно описывать элементы будущего приложения. Они вносят конкретику.
Класс
Изучая объектно-ориентированное программирование для написания программ, специалист обязательно будет иметь дело с так называемыми классами. Класс – это тип данных, созданный разработчиком. Он включает в себя различные свойства и методы.
Класс – наиболее абстрактное понятие по всей концепции ООП. Он выступает своеобразным шаблоном, который описывает общую структуру определенного элемента кода. Несколько схожих между собой компонентов приложения (примером может послужить карточка товара в интернет-магазине) будут иметь одинаковую структуру. Это указывает на то, что они могут относиться к одному и тому же классу. Каждый объект в программе – это экземпляр какого-нибудь класса.
Для большего погружения в классы и их особенности рекомендуется описать их простыми словами. В случае с аналогией относительно игр можно выделить самых разных героев:
- мистиков;
- воинов;
- зооморфов;
- теней;
- людей;
- орков и так далее.
Для описания каждого героя придется потратить много времени и сил. Исходный код программы окажется длинным, а иногда – еще и весьма запутанным. Писать шаблоны для каждого героя отдельно не придется, если использовать общие методы и характеристики.
Все это влечет за собой необходимость формирования отдельного класса – объекта, который выступит «базой» для остальных элементов программы. Примером может являться class персонаж. Он умеет ходить, бегать, прыгать и нападать, обладает такими параметрами как здоровье и мана. У героев имеются атрибуты, как и у любых рас/классов в игровом мире. Человек-воин (объект) с определенным ником будет обладать более специфичными характеристиками и методами. Они меняются в зависимости от принятых игроком (пользователем) решений. Примерами могут послужить такие ситуации, как выбор снаряжения и оружия, заточка, распределение очков характеристик и влияние иных внешних факторов. Классы – это наглядные примеры наследования и абстракции, упрощающие генерацию новых программных элементов.
Выше – наглядный пример структуры приложения в ООП. Это пример, базирующийся на игровом персонаже.
Принципы
Основные принципы ООП задают некоторые концепции и правила создания/использования всех структурных элементов. В их число входят методы, классы, объекты и другие составляющие приложений. Весь объектно-ориентированный подход базируется на четырех ключевых понятиях:
- абстракция;
- инкапсуляция;
- полиморфизм;
- наследование.
Идеология ООП может быть выражена «привычным» человеческим языком. Иногда предложенные принципы разработки сокращаются до трех составляющих, исключая абстракции. Дальше предстоит познакомиться с каждым предложенным принципом более подробно.
Инкапсуляция
Доступ к данным объекта должен контролироваться. Это необходимо, чтобы пользователи не могли произвольно менять их или взламывать. Для работы с данными разработчикам приходится создавать публичные методы, формирующие интерфейсный объект. Это и есть инкапсуляция.
Она указывает на то, что важные информационные единицы, необходимые для нормальной работы программы/объектов, будут храниться в этих самых элементах. Пользователям становится доступен для внешних функций и компонентов лишь ограниченный набор данных.
Сведения о конкретном объекте или классе сохраняются в пределах каждого соответствующего элемента. Через другие классы вносить изменения в них запрещено. Окружение имеет право исключительно на запрос «публичных» атрибутов и методов.
Инкапсуляция помогает организовывать иерархические структуры, причем быстро и безопасно. Она сводит к минимуму вероятность повреждения данных в пределах конкретного элемента исходного кода.
Абстракции
В процессе создания класса происходит его упрощение до тех методов и атрибутов, которые необходимы в конкретном программном коде. Описывать элемент полностью не приходится, зато удается отбросить все, что является второстепенным. Все это указывает на то, что каждый верхний слой над компонентом кода более абстрактный, чем его «младшая версия».
За счет описанного приема можно не переписывать много раз один и тот же элемент с одинаковыми методами и атрибутами. Абстрактные классы применяются, чтобы формировать более конкретизированные шаблоны и характерные им составляющие без предварительного описания реализаций функций. В конечном итоге у разработчика остаются лишь базовые шаблоны, которые нужно будет настраивать под конкретные нужды.
Абстракция – способ выделения набора наиболее важных методов и атрибутов с последующим исключением малозначимых параметров. Они являются публичными и не имеют конкретных реализаций методов. Подобные особенности отделяют абстракции от дочерних классов.
Полиморфизм
Основные подходы к объектному программированию включают в себя полиморфизм. Соответствующий принцип позволяет применять одинаковые команды к объектам, относящимся к разным классам, даже если манипуляции выполняются различными способами.
В разных языках программирования полиморфизм будет отличаться. В строго типизированных языках вроде C++ используется перегрузка. В языках вроде JavaScript функции по умолчанию могут обрабатывать разные типы данных. Указывать их заранее не придется.
Полиморфизм дает возможность за счет идентичных методов обрабатывать разные типы данных. Примерами могут послужить двузначные числа и числа с плавающей точкой. Полиморфизмом является возможность переопределять методы в дочерних классах для обработки других видов информации или выполнения дополнительных манипуляций при вызове аналогичной функции.
Области применения
Однозначно ответить, для чего нужно ООП, не получится. Это такой же оригинальный подход к созданию программного обеспечения, как и логическое/функциональное программирование. Концепция имеет свои основные преимущества и недостатки, а также используется в определенных областях.
До появления ООП при написании исходных кодов использовался процедурный метод разработки. Эта методология имеет следующие особенности:
- Программа представлена в виде некоторых процедур и функций.
- Процедуры и функции – это подпрограммы, выполняющие определенные блоки кода с необходимыми входными данными.
- У конечного приложения получается простая структура.
Такая концепция не подходит для крупных и сложных проектов. Она привела к образованию объектно ориентированного метода разработки. Такой способ программирования чаще всего используется для:
- качественного структурирования информации;
- точного определения взаимодействия одних элементов с другими;
- повышения уровня управляемости приложением;
- быстрого масштабирования под различные задачи;
- улучшения читаемости кода;
- более эффектной поддержки готовых проектов;
- внедрения изменения без необходимости переписывания всего кода программы.
ООП в программировании – удобный «инструмент» создания сложных приложений. Его концепции поддерживаются основной массой известных языков программирования.
Преимущества и недостатки
ООП-стиль разработки имеет как преимущества, так и недостатки. Разработчики определяют следующие сильные стороны этой методологии:
- Высокий уровень читаемости. В коде не придется искать функции, а также выяснять, за что именно они отвечают.
- Быстрая разработка. Сущности, с которыми должна взаимодействовать программа, создаются очень быстро.
- Простая реализация большого набора функций и команд. На написание исходного кода уходит меньше времени. Многофункциональные программы формируются на порядок быстрее.
- Отсутствие повторений. Однотипные команды не придется переписывать множество раз для различных сущностей.
- Масштабируемость.
- Модульность и безопасность за счет инкапсуляции.
Объектно-ориентированное программирование позволяет создавать различные гибкие приложения. Такая концепция поддерживается самыми распространенными среди современных разработчиков языками.
Недостатки у объектно-ориентированного программирования тоже есть. К ним относят:
- Значительное потребление памяти. В случае с небольшими проектами и простыми структурами этот момент будет незаметен. Но более крупные приложения будут потреблять на порядок больше оперативной памяти.
- Сниженная производительность. Это связано с повышенным расходом ресурсов.
- Проблемы на начальных порах. Рассматриваемая методология сложнее, чем функциональная разработка. Чтобы начать писать проекты, потребуется больше времени.
Алгоритмам и расчетам (вычислениям) здесь уделяется недостаточно много внимания. Несмотря на свои недостатки, рассматриваемая концепция все равно остается одной из самых популярных.
Основные языки
Вот самые известные языки разработки, которые используются при ООП:
- Python. Средство программирования, поддерживающее различные парадигмы программирования. Один из самых популярных ЯП. Относится к высокому уровню и обладает динамической типизацией. Активно применяется при создании программ и игр, автоматизации рутинных процессов, анализе данных. Python поддерживает простой и понятный синтаксис, легко изучается, имеет множество библиотек и фреймворков, а также плагинов и готовых моделей.
- Java. Базируется на objects и classes. Java чаще всего применяется в клиент-серверных моделях, а также веб-приложениях. Он относится к высокоуровневым, кроссплатформенным и бесплатным. Поддерживает параллелизм при помощи многопоточности и многозадачности.
- C++. Один из самых известных и сложных в изучении языков, поддерживающих ООП. За счет этого исходный проект приобретает четкую структуру. При помощи C++ пишутся браузеры, программные проекты, операционные системы и драйверы. Это универсальное средство разработки, которое предоставляет разнообразные типы управления памятью. Имеет в своем составе деструкторы, а также лямбда-выражения. Гибкий и мощный язык. Рекомендован для изучения опытными специалистами.
- JavaScript. Простой programming language, который дает возможность создания динамических веб-страниц. Используется в основном в веб-программировании. Достаточно прост в изучении, обладает хорошей структурой исходного кода и высокой читаемостью.
- PHP. Интерпретируемый объектно-ориентированный язык программирования. Относится к скриптовым. Применяется при написании статических/динамических сайтов, а также веб-программ. Является бесплатным.
Лучше разобраться с рассмотренной парадигмой и ее инструментами помогут дистанционные компьютерные курсы.
Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Концепция ООП-разработки OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Разработка программного обеспечения – неоднородный и достаточно сложный процесс. Он предусматривает самые разные подходы и методологии к написанию программных кодов. В зависимости от контекста и поставленной задачи будет меняться концепция программирования. Примерами могут служить функциональная и логическая разработка. Больше внимания заслуживает еще одна концепция – объектно-ориентированное программирование. Далее предстоит рассмотреть упомянутую методологию более подробно. Она" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/koncepciya-oop-razrabotki/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#article","name":"\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u041e\u041e\u041f-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 OTUS","headline":"\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u041e\u041e\u041f-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2023\/11\/oj-1080x7205-1.jpg","width":2245,"height":1587},"datePublished":"2023-11-04T18:48:00+00:00","dateModified":"2023-11-04T18:48:01+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#listItem","position":2,"name":"\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u041e\u041e\u041f-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#webpage","url":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/","name":"\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u041e\u041e\u041f-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 OTUS","description":"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u2013 \u043d\u0435\u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0439 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041e\u043d \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430. \u0411\u043e\u043b\u044c\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u2013 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u0443\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u041e\u043d\u0430","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2023\/11\/oj-1080x7205-1.jpg","@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#mainImage","width":2245,"height":1587},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/koncepciya-oop-razrabotki\/#mainImage"},"datePublished":"2023-11-04T18:48:00+00:00","dateModified":"2023-11-04T18:48:01+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/7877" /><link rel='shortlink' href='https://otus.ru/journal/?p=7877' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkoncepciya-oop-razrabotki%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkoncepciya-oop-razrabotki%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-7877 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-7877" class="the-post post-7877 post type-post status-publish format-standard has-post-thumbnail category-polza tag-programmirovanie">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Концепция ООП-разработки
</h1>
<a href="https://otus.ru/journal/koncepciya-oop-razrabotki/" class="date-link" data-wpel-link="internal"><time class="post-date">4 ноября, 2023</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x7205-1.jpg" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Концепция ООП-разработки" title="Концепция ООП-разработки" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x7205-1-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x7205-1-270x180.jpg 270w" data-src="https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x7205-1-770x515.jpg" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="Определение">Определение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" title="Структуризация">Структуризация</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82" title="Объект">Объект</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%B8_%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%8B" title="Методы и атрибуты">Методы и атрибуты</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9A%D0%BB%D0%B0%D1%81%D1%81" title="Класс">Класс</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B" title="Принципы">Принципы</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%98%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F" title="Инкапсуляция">Инкапсуляция</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D0%B8" title="Абстракции">Абстракции</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC" title="Полиморфизм">Полиморфизм</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D0%B8_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" title="Области применения">Области применения</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8" title="Преимущества и недостатки">Преимущества и недостатки</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8" title="Основные языки">Основные языки</a></li></ul></nav></div>
<p>Разработка программного обеспечения – неоднородный и достаточно сложный процесс. Он предусматривает самые разные подходы и методологии к написанию программных кодов. В зависимости от контекста и поставленной задачи будет меняться концепция программирования. Примерами могут служить функциональная и логическая разработка. Больше внимания заслуживает еще одна концепция – объектно-ориентированное программирование.</p>
<p>Далее предстоит рассмотреть упомянутую методологию более подробно. Она встречается в принципах написания современных программ и утилит достаточно часто. Активно применяется в большинстве IT-областей. Каждый разработчик должен понимать, какими особенностями обладает ООП, где его применять. Информация, представленная далее, поможет не только разобраться в принципах объектно-ориентированного метода, но и познакомит с самыми распространенными языками, используемыми для соответствующего подхода к написанию программ.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>Определение<span class="ez-toc-section-end"></span></h2>
<p>ООП можно охарактеризовать как парадигму разработки приложений и утилит, согласно которой программное обеспечение состоит из объектов и классов. Это одна из самых известных концепций написания программ. Она базируется на организацию исходного кода за счет данных, классов и объектов, а не логических структур и всевозможных функций.</p>
<p>При использовании объектно-ориентированного подхода в разработке программа будет представлять собой некоторую совокупность взаимодействующих друг с другом объектов, каждый из которых является экземпляром определенного класса. Эти классы будут формировать иерархию наследования.</p>
<p>С точки зрения идеологии, ООП – это подход к созданию исходного кода как к моделированию информационных объектов. За счет такой концепции решается ключевая задача структурной разработки – структурирование данных с точки зрения ее управляемости. За счет объектов и классов, а также их взаимодействия, удается значительно улучшить управляемость моделированием. Соответствующая особенность важна для масштабных проектов.</p>
<p>Объекты в приложениях обычно представлены полноценными информационными блоками. Они поддерживают некоторые, заранее определенные характеристики и возможности. Используются для того, чтобы описывать (олицетворять) элементы.</p>
<p>Примером может послужить человек. У каждого есть:</p>
<ul>
<li>дата рождения;</li>
<li>место проживания;</li>
<li>имя;</li>
<li>фамилия;</li>
<li>отчество;</li>
<li>возраст и так далее.</li>
</ul>
<p>В качестве объектов в объектно-ориентированном программировании могут выступать небольшие приложения и утилиты с минимальным набором характеристик из реального мира, но с расширенной функциональностью. Объекты умеют взаимодействовать друг с другом, с пользователями и другими составляющими итогового приложения.</p>
<p>Концепции ООП принуждают концентрироваться в процессе написания кода на объектах, которыми требуется управлять. Логика, дающая возможность менять данные или взаимодействовать с компонентами проекта, уходит на второй план. Этот подход к разработке идеален для создания комплексных решений, требующих постоянной поддержки от огромного количества программистов.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F"></span>Структуризация<span class="ez-toc-section-end"></span></h2>
<p>Рассматривая ООП в программировании, необходимо запомнить, что это методология выделяет несколько ключевых компонентов. С ними предстоит постоянно взаимодействовать в процессе разработки программного обеспечения:</p>
<ul>
<li>методы;</li>
<li>классы;</li>
<li>объекты;</li>
<li>атрибуты.</li>
</ul>
<p>Соответствующие элементы задают всю концепцию ООП. Иногда допустимо выделение структур, связанных с рассматриваемой методологией. Упомянутые компоненты поддерживаются программами практически всегда. Далее о них будет рассказано более подробно.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82"></span>Объект<span class="ez-toc-section-end"></span></h3>
<p>Объект – экземпляр класса, его копия, которая располагается в памяти устройства. Пример – при создании переменной String со значением «Строка» в памяти будет сформирован и записан экземпляр класса String.</p>
<p>Объект – сущность, поддерживающая определенные свойства и поведенческие характеристики. Такой элемент чаще всего выступает экземпляром какого-нибудь класса. Пример – в компьютерной игре может быть персонаж (класс Character). Его экземплярами станут hero и npc.</p>
<p>Свойствами называются данные, которые имеют связь с определенным объектом. В случае с игровыми персонажами простыми словами их можно описать как:</p>
<ul>
<li>опыт;</li>
<li>здоровье;</li>
<li>сила;</li>
<li>ловкость;</li>
<li>интеллект;</li>
<li>выносливость;</li>
<li>скорость;</li>
<li>мана;</li>
<li>урон.</li>
</ul>
<p>Чтобы определить поведение конкретного объекта, требуется использовать так называемые методы. Они представляют собой специальные кодовые блоки, которые вызываются из разных частей исходной программы.</p>
<p>Основные методы (функции), которые могут относиться к тому же игровому персонажу:</p>
<ul>
<li>использование элемента;</li>
<li>подбор предмета;</li>
<li>ведение диалога;</li>
<li>атака;</li>
<li>бег;</li>
<li>прыжки;</li>
<li>выбрасывание элемента из инвентаря.</li>
</ul>
<p>При помощи свойств и методов можно значительно упростить процедуру разработки программного обеспечения, а исходный код сделать более читабельным.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%B8_%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%8B"></span>Методы и атрибуты<span class="ez-toc-section-end"></span></h3>
<p>Методы и атрибуты нужно рассмотреть более подробно. Метод – это функция, которая описывается внутри класса или объекта. Он относится к определенному элементу исходного кода. Используется для того, чтобы один объект/класс мог взаимодействовать с другими схожими компонентами или иными кодовыми структурами.</p>
<p>Ранее предложенный пример позволяет простыми словами описать, что собой представляют методы. В случае с игровыми героями (персонажами) они выступают в качестве «способностей» и «навыков». Когда герой будет выполнять определенные действия в игре, он будет использовать методы, прописанные в его объекте.</p>
<p>Определение атрибутов простым языком – это конкретные характеристики класса или объекта. Они представляются переменными с данными. На примере игрового персонажа допускается такая аналогия как характеристики, выраженные:</p>
<ul>
<li>скоростью;</li>
<li>интеллектом;</li>
<li>выносливостью;</li>
<li>логикой;</li>
<li>иными статистическими показателями.</li>
</ul>
<p>Атрибутами называются параметры компонентов исходного кода. С их помощью удается более точно описывать элементы будущего приложения. Они вносят конкретику.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D0%B0%D1%81%D1%81"></span>Класс<span class="ez-toc-section-end"></span></h3>
<p>Изучая объектно-ориентированное программирование для написания программ, специалист обязательно будет иметь дело с так называемыми классами. Класс – это тип данных, созданный разработчиком. Он включает в себя различные свойства и методы.</p>
<p>Класс – наиболее абстрактное понятие по всей концепции ООП. Он выступает своеобразным шаблоном, который описывает общую структуру определенного элемента кода. Несколько схожих между собой компонентов приложения (примером может послужить карточка товара в интернет-магазине) будут иметь одинаковую структуру. Это указывает на то, что они могут относиться к одному и тому же классу. Каждый объект в программе – это экземпляр какого-нибудь класса.</p>
<p>Для большего погружения в классы и их особенности рекомендуется описать их простыми словами. В случае с аналогией относительно игр можно выделить самых разных героев:</p>
<ul>
<li>мистиков;</li>
<li>воинов;</li>
<li>зооморфов;</li>
<li>теней;</li>
<li>людей;</li>
<li>орков и так далее.</li>
</ul>
<p>Для описания каждого героя придется потратить много времени и сил. Исходный код программы окажется длинным, а иногда – еще и весьма запутанным. Писать шаблоны для каждого героя отдельно не придется, если использовать общие методы и характеристики.</p>
<p>Все это влечет за собой необходимость формирования отдельного класса – объекта, который выступит «базой» для остальных элементов программы. Примером может являться class персонаж. Он умеет ходить, бегать, прыгать и нападать, обладает такими параметрами как здоровье и мана. У героев имеются атрибуты, как и у любых рас/классов в игровом мире. Человек-воин (объект) с определенным ником будет обладать более специфичными характеристиками и методами. Они меняются в зависимости от принятых игроком (пользователем) решений. Примерами могут послужить такие ситуации, как выбор снаряжения и оружия, заточка, распределение очков характеристик и влияние иных внешних факторов. Классы – это наглядные примеры наследования и абстракции, упрощающие генерацию новых программных элементов.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/fpfelFEzuDNKGLIChevdjVxhvE3l8ZTLYzC4sZxAwmhoR1_dtdZWe2sde24d5JB2WDvm-ZylrSQy6haZ5K68_rQQ3CQYMm4lLEeZ2i-4ol9KX_M20ZCN3vbNvwU3pb-clTKWeegqH_AszjTHoHH2eNi7UG3iieQwyGXZs60WPlBkgQ-6CKZczmsn84OwQtCo" alt="Концепция ООП-разработки"/></figure>
<p>Выше – наглядный пример структуры приложения в ООП. Это пример, базирующийся на игровом персонаже.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B"></span>Принципы<span class="ez-toc-section-end"></span></h2>
<p>Основные принципы ООП задают некоторые концепции и правила создания/использования всех структурных элементов. В их число входят методы, классы, объекты и другие составляющие приложений. Весь объектно-ориентированный подход базируется на четырех ключевых понятиях:</p>
<ul>
<li>абстракция;</li>
<li>инкапсуляция;</li>
<li>полиморфизм;</li>
<li>наследование.</li>
</ul>
<p>Идеология ООП может быть выражена «привычным» человеческим языком. Иногда предложенные принципы разработки сокращаются до трех составляющих, исключая абстракции. Дальше предстоит познакомиться с каждым предложенным принципом более подробно.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F"></span>Инкапсуляция<span class="ez-toc-section-end"></span></h3>
<p>Доступ к данным объекта должен контролироваться. Это необходимо, чтобы пользователи не могли произвольно менять их или взламывать. Для работы с данными разработчикам приходится создавать публичные методы, формирующие интерфейсный объект. Это и есть инкапсуляция.</p>
<p>Она указывает на то, что важные информационные единицы, необходимые для нормальной работы программы/объектов, будут храниться в этих самых элементах. Пользователям становится доступен для внешних функций и компонентов лишь ограниченный набор данных.</p>
<p>Сведения о конкретном объекте или классе сохраняются в пределах каждого соответствующего элемента. Через другие классы вносить изменения в них запрещено. Окружение имеет право исключительно на запрос «публичных» атрибутов и методов.</p>
<p>Инкапсуляция помогает организовывать иерархические структуры, причем быстро и безопасно. Она сводит к минимуму вероятность повреждения данных в пределах конкретного элемента исходного кода.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D0%B8"></span>Абстракции<span class="ez-toc-section-end"></span></h3>
<p>В процессе создания класса происходит его упрощение до тех методов и атрибутов, которые необходимы в конкретном программном коде. Описывать элемент полностью не приходится, зато удается отбросить все, что является второстепенным. Все это указывает на то, что каждый верхний слой над компонентом кода более абстрактный, чем его «младшая версия».</p>
<p>За счет описанного приема можно не переписывать много раз один и тот же элемент с одинаковыми методами и атрибутами. Абстрактные классы применяются, чтобы формировать более конкретизированные шаблоны и характерные им составляющие без предварительного описания реализаций функций. В конечном итоге у разработчика остаются лишь базовые шаблоны, которые нужно будет настраивать под конкретные нужды.</p>
<p>Абстракция – способ выделения набора наиболее важных методов и атрибутов с последующим исключением малозначимых параметров. Они являются публичными и не имеют конкретных реализаций методов. Подобные особенности отделяют абстракции от дочерних классов.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC"></span>Полиморфизм<span class="ez-toc-section-end"></span></h3>
<p>Основные подходы к объектному программированию включают в себя полиморфизм. Соответствующий принцип позволяет применять одинаковые команды к объектам, относящимся к разным классам, даже если манипуляции выполняются различными способами.</p>
<p>В разных языках программирования полиморфизм будет отличаться. В строго типизированных языках вроде C++ используется перегрузка. В языках вроде JavaScript функции по умолчанию могут обрабатывать разные типы данных. Указывать их заранее не придется.</p>
<p>Полиморфизм дает возможность за счет идентичных методов обрабатывать разные типы данных. Примерами могут послужить двузначные числа и числа с плавающей точкой. Полиморфизмом является возможность переопределять методы в дочерних классах для обработки других видов информации или выполнения дополнительных манипуляций при вызове аналогичной функции.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D0%B8_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F"></span>Области применения<span class="ez-toc-section-end"></span></h2>
<p>Однозначно ответить, для чего нужно ООП, не получится. Это такой же оригинальный подход к созданию программного обеспечения, как и логическое/функциональное программирование. Концепция имеет свои основные преимущества и недостатки, а также используется в определенных областях.</p>
<p>До появления ООП при написании исходных кодов использовался процедурный метод разработки. Эта методология имеет следующие особенности:</p>
<ol>
<li>Программа представлена в виде некоторых процедур и функций.</li>
<li>Процедуры и функции – это подпрограммы, выполняющие определенные блоки кода с необходимыми входными данными.</li>
<li>У конечного приложения получается простая структура.</li>
</ol>
<p>Такая концепция не подходит для крупных и сложных проектов. Она привела к образованию объектно ориентированного метода разработки. Такой способ программирования чаще всего используется для:</p>
<ul>
<li>качественного структурирования информации;</li>
<li>точного определения взаимодействия одних элементов с другими;</li>
<li>повышения уровня управляемости приложением;</li>
<li>быстрого масштабирования под различные задачи;</li>
<li>улучшения читаемости кода;</li>
<li>более эффектной поддержки готовых проектов;</li>
<li>внедрения изменения без необходимости переписывания всего кода программы.</li>
</ul>
<p>ООП в программировании – удобный «инструмент» создания сложных приложений. Его концепции поддерживаются основной массой известных языков программирования.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8"></span>Преимущества и недостатки<span class="ez-toc-section-end"></span></h2>
<p>ООП-стиль разработки имеет как преимущества, так и недостатки. Разработчики определяют следующие сильные стороны этой методологии:</p>
<ol>
<li>Высокий уровень читаемости. В коде не придется искать функции, а также выяснять, за что именно они отвечают.</li>
<li>Быстрая разработка. Сущности, с которыми должна взаимодействовать программа, создаются очень быстро.</li>
<li>Простая реализация большого набора функций и команд. На написание исходного кода уходит меньше времени. Многофункциональные программы формируются на порядок быстрее.</li>
<li>Отсутствие повторений. Однотипные команды не придется переписывать множество раз для различных сущностей.</li>
<li>Масштабируемость.</li>
<li>Модульность и безопасность за счет инкапсуляции.</li>
</ol>
<p>Объектно-ориентированное программирование позволяет создавать различные гибкие приложения. Такая концепция поддерживается самыми распространенными среди современных разработчиков языками.</p>
<p>Недостатки у объектно-ориентированного программирования тоже есть. К ним относят:</p>
<ol>
<li>Значительное потребление памяти. В случае с небольшими проектами и простыми структурами этот момент будет незаметен. Но более крупные приложения будут потреблять на порядок больше оперативной памяти.</li>
<li>Сниженная производительность. Это связано с повышенным расходом ресурсов.</li>
<li>Проблемы на начальных порах. Рассматриваемая методология сложнее, чем функциональная разработка. Чтобы начать писать проекты, потребуется больше времени.</li>
</ol>
<p>Алгоритмам и расчетам (вычислениям) здесь уделяется недостаточно много внимания. Несмотря на свои недостатки, рассматриваемая концепция все равно остается одной из самых популярных.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8"></span>Основные языки<span class="ez-toc-section-end"></span></h2>
<p>Вот самые известные языки разработки, которые используются при ООП:</p>
<ol>
<li>Python. Средство программирования, поддерживающее различные парадигмы программирования. Один из самых популярных ЯП. Относится к высокому уровню и обладает динамической типизацией. Активно применяется при создании программ и игр, автоматизации рутинных процессов, анализе данных. Python поддерживает простой и понятный синтаксис, легко изучается, имеет множество библиотек и фреймворков, а также плагинов и готовых моделей.</li>
<li>Java. Базируется на objects и classes. Java чаще всего применяется в клиент-серверных моделях, а также веб-приложениях. Он относится к высокоуровневым, кроссплатформенным и бесплатным. Поддерживает параллелизм при помощи многопоточности и многозадачности.</li>
<li>C++. Один из самых известных и сложных в изучении языков, поддерживающих ООП. За счет этого исходный проект приобретает четкую структуру. При помощи C++ пишутся браузеры, программные проекты, операционные системы и драйверы. Это универсальное средство разработки, которое предоставляет разнообразные типы управления памятью. Имеет в своем составе деструкторы, а также лямбда-выражения. Гибкий и мощный язык. Рекомендован для изучения опытными специалистами.</li>
<li>JavaScript. Простой programming language, который дает возможность создания динамических веб-страниц. Используется в основном в веб-программировании. Достаточно прост в изучении, обладает хорошей структурой исходного кода и высокой читаемостью.</li>
<li>PHP. Интерпретируемый объектно-ориентированный язык программирования. Относится к скриптовым. Применяется при написании статических/динамических сайтов, а также веб-программ. Является бесплатным.</li>
</ol>
<p>Лучше разобраться с рассмотренной парадигмой и ее инструментами помогут дистанционные компьютерные курсы.</p>
<p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a href="https://otus.ru/?utm_source=oj" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">Otus<span class="wpel-icon wpel-image wpel-icon-6"></span></a>!</em></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/programmirovanie/" rel="tag" data-wpel-link="internal">программирование</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fkoncepciya-oop-razrabotki%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkoncepciya-oop-razrabotki%2F&text=%D0%9A%D0%BE%D0%BD%D1%86%D0%B5%D0%BF%D1%86%D0%B8%D1%8F%20%D0%9E%D0%9E%D0%9F-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkoncepciya-oop-razrabotki%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkoncepciya-oop-razrabotki%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2023%2F11%2Foj-1080x7205-1.jpg&description=%D0%9A%D0%BE%D0%BD%D1%86%D0%B5%D0%BF%D1%86%D0%B8%D1%8F%20%D0%9E%D0%9E%D0%9F-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/vnedrenie-etapov-devsecops-v-cikl-razrabotki-postavki-i-ekspluatacii-prilozheniya/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/vnedrenie-etapov-devsecops-v-cikl-razrabotki-postavki-i-ekspluatacii-prilozheniya/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Внедрение этапов DevSecOps в цикл разработки, поставки и эксплуатации приложения" decoding="async" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-1-150x106.png 150w, https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-1-300x212.png 300w, https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-1-1024x724.png 1024w, https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-1-768x543.png 768w, https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-1-1536x1086.png 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-1-150x106.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Внедрение этапов DevSecOps в цикл разработки, поставки и эксплуатации приложения" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/vnedrenie-etapov-devsecops-v-cikl-razrabotki-postavki-i-ekspluatacii-prilozheniya/" data-wpel-link="internal">Внедрение этапов DevSecOps в цикл разработки, поставки и эксплуатации приложения</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/vnedrenie-etapov-devsecops-v-cikl-razrabotki-postavki-i-ekspluatacii-prilozheniya/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2023-11-03T22:18:23+00:00">3 ноября, 2023</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">11 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/issledovanie-o-vliyanii-elektronnogo-upravleniya-personalom-na-modernizaciju-roli-hrm/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/issledovanie-o-vliyanii-elektronnogo-upravleniya-personalom-na-modernizaciju-roli-hrm/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Исследование: О влиянии электронного управления персоналом на модернизацию роли HRM" decoding="async" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-kopiya-1-150x106.png 150w, https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-kopiya-1-300x212.png 300w, https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-kopiya-1-1024x724.png 1024w, https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-kopiya-1-768x543.png 768w, https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-kopiya-1-1536x1086.png 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2023/11/oj-1080x720-kopiya-1-150x106.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Исследование: О влиянии электронного управления персоналом на модернизацию роли HRM" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/issledovanie-o-vliyanii-elektronnogo-upravleniya-personalom-na-modernizaciju-roli-hrm/" data-wpel-link="internal">Исследование: О влиянии электронного управления персоналом на модернизацию роли HRM</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/issledovanie-o-vliyanii-elektronnogo-upravleniya-personalom-na-modernizaciju-roli-hrm/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2023-11-07T14:25:33+00:00">7 ноября, 2023</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">26 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/koncepciya-oop-razrabotki\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 22:16:15 GMT -->