Скидки до 60%
00:00:00
Выбрать

Что такое ООП? Гайд для начинающих разработчиков

10.02.2023 / Время чтения: 5 мин.

Время на прочтение: 5 минут(ы) Рассказываем, что такое ООП и как объектно-ориентированное программирование помогает разработчикам.

Что такое ООП? Гайд для начинающих разработчиков
Профессия: Java-разработчик
Время на прочтение: 5 минут(ы)

Большинство языков программирования являются объектно-ориентированными (Java, Python, С++, JavaScript, C#, PHP, Ruby, Scala). Именно поэтому вопросы про ООП – одни из самых популярных на собеседовании в любую IT-компанию. 

Однако если вы новичок, разобраться в изобилии заумных терминов на эту тему может быть непросто. Поэтому мы на пальцах объясним для вас основные принципы ООП, освоив которые вы выйдете победителем с любого собеседования. 

Что такое ООП

Объектно-ориентированное программирование (ООП) – это подход разработки, при котором программу создают из объектов, взаимодействующих друг с другом. 

Объекты – это самостоятельные части программы, внутри которых код и данные обрабатываются вместе, образуя целый собственный мир. По сути, это полноценные блоки с информацией, которые отвечают только за себя и имеют некоторый набор характеристик и возможностей. 

Структура и поведение объектов определяются классом, которому они принадлежат. Создатели ООП разрабатывали этот принцип так, чтобы код было проще читать и понимать, поскольку человек привык видеть мир как множество объектов, поддающихся определенной систематизации. Например, в квартире нас окружают объекты «тостер», «холодильник» и «стиральная машина», которые относятся к классу «бытовая техника». Хотя у каждого из них свое назначение, принадлежность к одной категории наделяет их общими чертами. В данном случае – это электрические приборы, используемые в быту. 

Зачем нужно ООП? 

Ранее в программировании использовался другой подход – процедурный, направленный на работу с функциями и логическими структурами. В процедурном типе разработки инструкции для решения задачи выполняются одна за другой, сверху вниз, образуя цепочку последовательных действий. 

Процедурное программирование отлично справляется в простых программах, где задачи решаются десятком функций. Однако если программа становится сложнее и количество функций возрастает до сотен, появляется риск прийти к огромному количеству строк кода, редактирование которых влияет на работу последующих. В итоге выходит трудночитаемый и громоздкий код, в котором легко запутаться. Отсюда выражение – «спагетти-код». 

Объектно-ориентированное программирование позволяет корректировать код локально и всего один раз, в отличие от процедурного. Правки вносятся в объект, что не нарушает работы всей программы. Если хорошо продумать и спроектировать программу, то можно работать над каждой ее частью отдельно, не охватывая умом всю остальную программу. 

Получается, основные задачи ООП можно сформулировать так: 

  • упорядочивать информацию и избегать путаницы; 
  • повышать читабельность; 
  • ускорять понимание логики программы; 
  • оперативно масштабировать код; 
  • вносить изменения в отдельные участки кода, не ломая общей логики; 
  • повышать безопасность кода и сокращать его дублирование. 

Структура ООП 

Программный код, созданный по канонам ООП, делится на четыре главных составляющих. 

Объекты 

В мире объектно-ориентированного программирования все состоит из объектов. 

Профессия
Java-разработчик
Освойте профессию с нуля и научитесь создавать приложения на Java. Добавите проекты в свое портфолио под руководством опытного разработчика, найдете первую работу с помощью Карьерного Центра, или вам вернут деньги.
Записаться

Объект – это часть кода, которая содержит данные об элементе с конкретным набором характеристик и функций. Объекты контактируют друг с другом, но в то же время являются полностью самостоятельными. Можем представить, что разработчики просто взяли кусок программы, положили его в коробку и закрыли крышкой. Вот этот кусок – и есть объект. 

Это и последующие понятия легко осмыслить на примере онлайн-игры. Представим, что ваш игровой персонаж – это объект. 

Атрибуты

Атрибут – это переменная, связанная с объектом или классом. 

Атрибуты объекта записываются в объект, созданный при помощи класса. В свою очередь, атрибуты класса принадлежат классу и могут применяться для таких ситуаций, когда нам нужно определить некоторые общие данные для всех объектов. 

Короче говоря, атрибуты – это конкретные характеристики, которые могут быть индивидуальными для объекта, если они заданы в самом объекте, а также общими для всех объектов, если заданы в классе. 

Атрибуты – это сила, ловкость, выносливость и другие характеристики персонажа. 

Методы 

Методы – это функции, описанные внутри объекта или класса. 

С методами работает та же логика, что и с атрибутами. То есть методы объекта относятся к конкретному объекту и являются его индивидуальными функциями, а методы класса заложены в самом классе без участия объекта (например, когда мы занимаемся созданием или удалением объекта – для этого никаких действий от самого объекта не требуется). 

Методы персонажа – это его навыки, к примеру, нанесение урона или оглушение противника. 

Классы 

Класс – это схема для создания объекта, которая содержит подробное описание будущих экземпляров, их структуры и поведения. С помощью одного класса можно построить бессчетное множество объектов, которые по умолчанию будут обладать теми свойствами и методами, которые заданы в классе. 

Класс в онлайн-игре – это архетип персонажа, определяющий его умения и направление развития. Это могут быть воины, маги, лучники, лекари и др. Персонажи каждого класса наделены похожими чертами и способностями, что значительно упрощает создание новых героев.

Приведем еще один пример для тех, кто не играет в онлайн-игры. Допустим, у нас есть два друга – Игорь и Аркадий. Они оба принадлежат к классу «Человек», то есть обладают общими для этого класса атрибутами и методами. К атрибутам мы относим наличие у Игоря и Аркадия двух рук и ног, туловища, пальцев и т.д., а к методам – умение дышать, моргать, спать, ходить и т.д. Однако Игорь и Аркадий – это разные люди (объекты), а значит они обладают и индивидуальными характеристиками. Например, индивидуальный атрибут Игоря – темные волосы, а индивидуальный метод – умение играть на гитаре. При этом Аркадий такими атрибутами и методами не обладает – у него светлые волосы, а на гитаре он играть не умеет, зато отлично катается на лыжах, чего не умеет Игорь. 

Ключевые принципы ООП 

Объектно-ориентированное программирование основывается на нескольких принципах, которые обеспечивают удобство использования этой парадигмы. Обычно выделяют три ключевых принципа – инкапсуляцию, наследование и полиморфизм, однако много где можно встретить четвертый принцип – абстракцию. Рассмотрим каждый из них. 

Инкапсуляция 

Согласно этому принципу, вся ключевая информация, важная для работы объекта, находится в нем самом, а его внутренняя структура сокрыта от внешнего мира. Только некоторые данные доступны для внешних функций или объектов. 

В рамках инкапсуляции все объекты взаимодействуют друг с другом как «черные ящики». У каждого из них есть свой публичный интерфейс, посредством которого они общаются со всей остальной программой, но вся их внутренняя реализация видна лишь разработчику. Окружение имеет право запрашивать только «публичные» методы или атрибуты. 

Инкапсуляция обеспечивает высокий уровень безопасности и сокращает шансы на случайное повреждение данных внутри какого-то класса или объекта со стороны. 

Наследование 

Один из самых мощных и важных инструментов в ООП. 

С его помощью можно на основе уже существующего объекта или класса создавать новый объект или класс, который будет наследовать все методы и атрибуты родительского элемента. Можно использовать все унаследованные данные, отбросить часть или добавить новые. 

Наследование значительно упрощает работу с программой, поскольку не нужно по несколько раз переписывать один и тот же код. 

Полиморфизм 

Полиморфизм переводится как «множество форм». 

Это свойство, которое позволяет использовать один и тот же метод для решения внешне схожих, но технически разных задач. 

Для наглядности вернемся к примерам из онлайн-игр. Допустим, у нас есть класс «Персонаж», у которого задан метод «Атаковать». Для воина это будет означать удар мечом, для мага – чтение заклинания, а для лучника – выстрел из лука. В сущности, все три этих действия – атака, однако в программном коде они будут реализованы совершенно по-разному. 

Абстракция 

Принцип, который позволяет работать с объектами, не вдаваясь в маловажные особенности их реализации. 

На самом деле, в жизни мы используем метод абстрагирования достаточно часто. Например, чтобы сесть за руль автомобиля, нам не нужно разбираться в особенностях его строения, наизусть знать все системы и механизмы. Абстракция позволяет игнорировать нерелевантные детали и обращать внимание только на то, что позволяет нам совершить действие. 

В программировании происходит то же самое. Чтобы удалить какой-либо объект, нам будет достаточно просто нажать на кнопку удаления, не вникая в подробности того, как именно оно будет происходить. 

Это сильно упрощает работу и помогает концентрироваться на том, что действительно важно. 

Преимущества ООП 

Структурированность 

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

Простота восприятия 

ООП визуально делает код проще, поскольку иметь дело приходится с отдельными объектами, а не с логикой всего кода. Не нужно углубляться в дебри программы, чтобы редактировать ее. 

Возможность реализовать большой функционал 

ООП позволяет упростить большие и сложные объекты, разделив их на более маленькие и простые. Это упрощает код и позволяет создавать крупные системы и программы, над которыми могут одновременно работать сотни и тысячи разработчиков. При этом ни один из них не будет знать всей системы целиком, поскольку будет работать только над своей частью. 

Безопасность 

Извне получить доступ к инкапсулированному коду нельзя, поэтому сломать код – задача не из простых. 

Недостатки ООП 

Высокий порог входа 

ООП – парадигма гораздо более сложная и трудоемкая, чем процедурное программирование. Чтобы начать работать с объектно-ориентированным программированием, нужно быть теоретически подкованным. 

Большой размер программы 

ООП действительно помогает создавать более сложные и объемные приложения, однако здесь есть и другая сторона. Написанный с помощью объектов код обычно более длинный и потому занимает больше места в оперативной памяти, а программа, написанная с помощью ООП, работает медленнее. 

Подпишись на нашу рассылку и получай свежие полезные материалы каждую неделю

Какой-то текст ошибки
Какой-то текст ошибки

Нас читает 11 000 человек

Профессия
Java-разработчик
Освойте профессию с нуля и научитесь создавать приложения на Java. Добавите проекты в свое портфолио под руководством опытного разработчика, найдете первую работу с помощью Карьерного Центра, или вам вернут деньги.
Подробнее