ООП (объектно-ориентированное программирование): что это

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

Идеология объектно-ориентированного программирования (ООП) разрабатывалась, чтобы связать поведение определенного объекта с его классом. Людям проще воспринимать окружающий мир как объекты, которые поддаются определенной классификации (например, разделение на живую и неживую природу).

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

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

Пример «спагетти-кода»

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

Объектно-ориентированное программирование используется, чтобы:

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

Возможности ООП поддерживает большинство популярных языков программирования, включая JavaScript, PHP, Python и другие.  

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

Объекты и классы

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

Класс — это «шаблон» для объекта, который описывает его свойства. Несколько похожих между собой объектов, например профили разных пользователей, будут иметь одинаковую структуру, а значит, принадлежать к одному классу. Каждый объект — это экземпляр какого-нибудь класса.

Понять, что такое ООП, поможет аналогия.

  • Понятие «программист» — это класс.
  • Конкретный разработчик по имени Иван — это объект, принадлежащий к классу «программист» (экземпляр класса).
  • Зарплата, рабочие обязанности, изученные технологии и должность в компании — это свойства, которые есть у всех объектов класса «программист», в том числе у Ивана. У разных объектов свойства различаются: зарплата и обязанности Ивана будут отличаться от таковых у другого разработчика Миши.

Атрибуты и методы

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

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

Принципы ООП

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

Абстракция

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

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

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

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

Каждый объект — независимая структура. Все, что ему нужно для работы, уже есть у него внутри. Если он пользуется какой-то переменной, она будет описана в теле объекта, а не снаружи в коде. Это делает объекты более гибкими. Даже если внешний код перепишут, логика работы не изменится.

Инкапсуляция помогает с легкостью управлять кодом. Выше мы сказали, что для обращения к объекту не нужно понимать, как работают его методы. Начальнику разработчика Ивана не обязательно знать, как именно он программирует: главное — чтобы выполнялись поставленные задачи.

Внутреннее устройство одного объекта закрыто от других: извне «видны» только значения атрибутов и результаты выполнения методов.

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

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

Упомянутый программист Иван — это человек. Но «человек» — более общее определение, которое не описывает свойства, важные именно для программиста. Можно сказать, что класс «программист» унаследован от класса «человек»: программист тоже является человеком, но у него есть дополнительные свойства.

В таком случае разработчик Иван будет и человеком, и программистом одновременно. У него будут наборы свойств от обоих классов.

У одного «родителя» может быть несколько дочерних структур. Например, от «человека» можно наследовать не только «программиста», но и «директора».

Одиночное и множественное наследие

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

Полиморфизм

Одинаковые методы разных объектов могут выполнять задачи разными способами. Например, у «человека» есть метод «работать». У «программиста» реализация этого метода будет означать написание кода, а у «директора» — рассмотрение управленческих вопросов. Но глобально и то, и другое будет работой.

Тут важны единый подход и договоренности между специалистами. Если метод называется delete, то он должен что-то удалять. Как именно — зависит от объекта, но заниматься такой метод должен именно удалением. Более того: если оговорено, что «удаляющий» метод называется delete, то не нужно для какого-то объекта называть его remove или иначе. Это вносит путаницу в код.

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

Модульность

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

Гибкость

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

Экономия времени

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

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

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

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

Сложный старт

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

Снижение производительности

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

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

Код, написанный с использованием ООП, обычно длиннее и занимает больше места на диске, чем «процедурный». Это происходит, потому что в такой программе хранится больше конструкций, чем в обычном процедурном скрипте. 

Объектно-ориентированное программирование: что это, суть

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

  • Что такое ООП
  • Структура объектно-ориентированного программирования
  • Основные принципы объектно-ориентированного программирования
  • Преимущества и недостатки ООП
  • Популярные языки объектно-ориентированного программирования
  • Главное об ООП

Что такое ООП

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

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

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

Так схематично выглядит программа, написанная по парадигме ООП

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

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

Материал по теме:

Что такое парадигмы программирования и зачем они нужны

Структура объектно-ориентированного программирования

В коде, написанном по парадигме ООП, выделяют четыре основных элемента:

1. Объект.

Часть кода, которая описывает элемент с конкретными характеристиками и функциями. Карточка товара в каталоге интернет-магазина — это объект. Кнопка «заказать» — тоже.

2. Класс.

Шаблон, на базе которого можно построить объект в программировании. Например, у интернет-магазина может быть класс «Карточка товара», который описывает общую структуру всех карточек. И уже из него создаются конкретные карточки — объекты. 

Классы могут наследоваться друг от друга. Например, есть общий класс «Карточка товара» и вложенные классы, или подклассы: «Карточка бытовой техники», «Карточка ноутбука», «Карточка смартфона». Подкласс берёт свойства из родительского класса, например, цену товара, количество штук на складе или производителя. При этом имеет свои свойства, например, диагональ дисплея для «Карточки ноутбука» или количество сим-карт для «Карточки смартфона».

3. Метод.

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

● Заполнить карточку конкретного объекта нужной информацией. 

● Обновлять количество товара в наличии, сверяясь с БД. 

● Сравнивать два товара между собой. 

● Предлагать купить похожие товары.

4. Атрибут.

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

Так связаны между собой элементы ООП

Разберём, как выглядят эти структурные элементы объектно-ориентированной системы в коде, на примере языка Java. 

Класс — это общая абстракция, которая описывает структуру объектов.

Создадим класс “Item” для товара, у которого есть два параметра, то есть атрибута — название и цена. Сделаем это с помощью конструктора класса — метода, который инициализирует объект.

Здесь мы сразу задаём ещё и метод card, который позволит вывести название и стоимость конкретного товара. А также задаём атрибуты name и price. Теперь создадим подкласс, у которого имя всегда будет «Телефон», а вот цена может отличаться.

Здесь мы взяли общий класс Item со всеми его атрибутами и методами и создали подкласс, в котором закрепили атрибут name. Теперь, вызывая этот подкласс, мы будем указывать только цену — а имя будет задано автоматически. 

Вызовем подкласс и создадим объект — телефон с конкретной ценой:

И теперь мы с помощью метода card из класса сможем вызывать информацию о конкретном телефоне:

Эта строчка кода выведет информацию: «Телефон стоит 30000».

На курсе Практикума «Java-разработчик» наставники со студентами разбирают основы объектно-ориентированного программирования, учат работать с объектами и рассказывают, как писать чистый и понятный код. Вводную часть можно попробовать бесплатно.

Получите востребованную профессию в IT

Научитесь создавать приложения с нуля за 10 месяцев, получите 5 проектов в портфолио и помощь с трудоустройством. Начните с бесплатной вводной части курса «Java-разработчик».

Основные принципы объектно-ориентированного программирования

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

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

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

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

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

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

В этом принципе — вся суть объектно-ориентированного программирования. 
Разработчик создаёт: 

● Класс с определёнными свойствами;
● Подкласс на его основе, который берёт свойства класса и добавляет свои;
● Объект подкласса, который также копирует его свойства и добавляет свои. 

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

Например, в каталоге товаров:

  1. У класса «Карточка товара» есть атрибуты тип товара, название, цена, производитель, а также методы «Вывести карточку» и «Обновить цену».
  2. Подкласс «Смартфон» берёт все атрибуты и методы, записывает в атрибут «тип товара» слово «смартфон плюс добавляет свои атрибуты — «Количество сим-карт» и «Ёмкость аккумулятора».
  3. Объект «Смартфон Xiaomi 11» заполняет все атрибуты своими значениями и может использовать методы класса «Карточка товара».
Наследование хорошо видно в примере кода выше, когда сначала создавали класс, потом подкласс, а затем объект с общими свойствами.

Полиморфизм

Один и тот же метод может работать по-разному в зависимости от объекта, где он вызван, и данных, которые ему передали. Например, метод «Удалить» при вызове в корзине удалит товар только из корзины, а при вызове в карточке товара — удалит саму карточку из каталога. 

То же самое с объектами. Можно использовать их публичные методы и атрибуты в других функциях и быть уверенным, что всё сработает нормально. 

Этот принцип ООП, как и другие, обеспечивает отсутствие ошибок при использовании объектов.

Преимущества и недостатки ООП

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

● В парадигме объектов легче писать код. Удобно один раз создать класс или метод, а потом его использовать. Не нужно повторно переписывать десятки строк кода. Можно пользоваться специальными рекомендациями по написанию ООП-кода — SOLID. 

● Читать код гораздо проще. Даже в чужом коде обычно сразу видны конкретные объекты и методы, их удобно искать, чтобы посмотреть, что именно они делают. 

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

● Программистам удобнее работать в команде. Разные люди могут отвечать за разные объекты и при этом пользоваться плодами трудов коллег. 

● Код можно переиспользовать. Один раз написанный класс или объект можно затем переносить в другие проекты. Достаточно однажды написать объект «Кнопка заказа» и потом можно вставлять его в почти неизменном виде в разные каталоги товаров и мобильные приложения. 

● Шаблоны проектирования. Именно на базе ООП построены готовые решения для взаимодействия классов друг с другом, которые позволяют не писать этот код с нуля, а взять шаблон.

Недостатки

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

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

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

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

Популярные языки объектно-ориентированного программирования

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

Определённые языки подходят для использования объектно-ориентированного программирования больше, так как предоставляют удобные инструменты для работы с классами и объектами:

 ● Java; 
● Go;
● Python;
● C++;
● JavaScript;
● C#;
● PHP;
● Ruby;
● Scala;
● Kotlin;
● Swift;
● Dart.

Главное об ООП

  1. ООП — это парадигма разработки, набор правил и критериев, по которым пишут код. Её суть в том, что весь код состоит из объектов, которые взаимодействуют друг с другом. Существуют и другие парадигмы, например, функциональное программирование.
  2. В ООП выделяют четыре основных элемента: классы, объекты, методы и атрибуты.
  3. Объектно-ориентированный подход к программированию строится на трёх основных принципах: наследование, инкапсуляция и полиморфизм.
  4. Программы, созданные по принципам ООП, более структурированные, легче читаются и хорошо масштабируются. При этом они сложнее в написании.
  5. В парадигме ООП удобнее всего писать на языках Java, C++, C#, JavaScript и некоторых других.

Статью подготовили:

Еженедельный дайджест блога Практикума

Подписаться

Поделиться 

Читать также:

Главный язык программирования для фронтендера: зачем учить JavaScript

Читать статью

Всё, что нужно знать новичку о Java

Читать статью

Лето ― самое время выбрать новую профессию, не спеша пройти бесплатный курс и начать карьеру в IT.

Упс by Mr. Oreke | Галереи Whitewall

Главная / Магазин / Г-н Ореке Упс

г-н Ореке

4 250,00 фунтов стерлингов

Оригинальная рамка

Стандартная доставка по Великобритании БЕСПЛАТНО
Посмотреть варианты доставки Доступен на данный момент

ПОГОВОРИТЕ С КОНСУЛЬТАНТОМ ПО ИСКУССТВУ

Описание продукта

Размер картины: 41 x 42 дюйма

Размер в рамке: 46 x 46 дюймов*

Оригинальная картина на натянутом холсте

Код продукта: ART00182188

Об этом художнике

Родившийся в 1986 году французский художник Mr. Oreke называет свою работу «уличным поп-артом». Его творческая жизнь началась в начале 2000-х годов, когда он начал рисовать граффити, покрывая стены изображениями, нарисованными аэрозолем мерцающими цветами. Тогда, как и сейчас, его ностальгические сюжеты взяты из его собственного детства, связанные с настоящим через память и переосмысление. Он описывает свой творческий процесс как перенос персонажей прошлых поколений в сегодняшний мир, помещая их в современный контекст. Его стиль д… ПОДРОБНЕЕ

Доставка

Стандартная доставка по Великобритании

Доставка по Великобритании в течение 2–4 недель с 7:30 до 18:00 с понедельника по пятницу.

БЕСПЛАТНО

Нажмите и получите

Бесплатно для всех заказов. Часы работы галерей Whitewall могут варьироваться.

БЕСПЛАТНО

Индивидуальная доставка

Иногда из-за носителя мы предлагаем индивидуальную доставку за дополнительную плату. Свяжитесь с нашей службой поддержки клиентов по телефону 01543 624990. Вы также можете связаться с нами по электронной почте [email protected].

ЦЕНЫ МОГУТ МЕНЯТЬСЯ

Международная доставка

Мы можем организовать доставку по всему миру всех наших произведений искусства для наших международных клиентов воздушным или морским транспортом. Свяжитесь с нашей службой поддержки клиентов по телефону 01543 624990. Вы также можете связаться с нами по электронной почте [email protected].

ЦЕНЫ БУДУТ ИЗМЕНЯТЬСЯ

Часто задаваемые вопросы

Могу ли я по-прежнему заказывать онлайн?

Да, вы по-прежнему можете заказывать онлайн, как обычно, и мы по-прежнему можем доставить вам. Конкретные детали доставки и сроки доставки можно найти на странице продукта, когда вы приходите за покупкой.

Когда прибудет мой заказ?

Мы стремимся соблюдать все сроки доставки, но имейте в виду, что доставка вашего заказа может занять немного больше времени, чем обычно. Обратите внимание, что небольшие товары будут доставлены в течение 4 недель с момента размещения заказа. Если вы обеспокоены, свяжитесь с нашей службой поддержки клиентов по телефону 01543 624990 или по электронной почте [email protected]. Мы всегда стремимся доставить ваш заказ в полном объеме, однако в некоторых случаях ваша доставка может быть разделена в процессе выполнения и доставлена ​​позже или на следующий день. Наша служба доставки свяжется с вами, если это произойдет, и сообщит дальнейшую информацию об ожидаемой посылке.

Как я могу изменить свои контактные данные

Пожалуйста, выберите «Мои данные» после входа в систему. Вы можете войти в свою учетную запись здесь. Обратите внимание: вы можете обновить свой адрес, адрес электронной почты и контактный номер через свой онлайн-аккаунт.

ПОДРОБНЕЕ ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Уход за произведениями искусства

Уход за произведениями искусства

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

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

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

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

* Измерение в рамке является приблизительным в пределах 1-2 дюймов.

ДРУГИЕ РАБОТЫ ЭТОГО ХУДОЖНИКА
Добавить в список желаний

Добавить в список желаний

Добавить в список желаний

Добавить в список желаний

ПОСМОТРЕТЬ БОЛЬШЕ ОТ MR. ОРЕКЕ

Рассчитайте свои платежи

Ой! на Еврографике

1 / 3

2 / 3

3 / 3

❮❯

Предыдущий Следующий

Ой!

Художники Берри, Мартин
Пазлы Большие семейные пазлы
Код продукта 8500-5459
Тип продукта 500 штук
Размер коробки 8 х 8 дюймов
Размер пазла 26,5 x 19,25 дюйма

В наличии

20,99 канадских долларов


Описание продукта

Eurographics Ой! by Martin,Berry,Family Oversize Puzzles Пазл из 500 деталей

  • Размер коробки: 8″ x 8″ x 2,37″.