Объектно-ориентированное программирование: что это, суть
Программирование неоднородно — существуют принципы и подходы, которые позволяют писать программы по-разному в зависимости от контекста и задачи. Один из таких подходов — объектно-ориентированное программирование. Рассказываем, что такое парадигма ООП, его структура, принципы, преимущества.
- Что такое ООП
- Структура объектно-ориентированного программирования
- Основные принципы объектно-ориентированного программирования
- Преимущества и недостатки ООП
- Популярные языки объектно-ориентированного программирования
- Главное об ООП
Что такое ООП
Объектно-ориентированное программирование, или ООП — это одна из парадигм разработки. Парадигмой называют набор правил и критериев, которые соблюдают разработчики при написании кода. Если представить, что код — это рецепт блюда, то парадигма — то, как рецепт оформлен в кулинарной книге. Парадигма помогает стандартизировать написание кода. Это снижает риск ошибок, ускоряет разработку и делает код более читабельным для других программистов.Суть понятия объектно-ориентированного программирования в том, что все программы, написанные с применением этой парадигмы, состоят из объектов. Каждый объект — это определённая сущность со своими данными и набором доступных действий.
Например, нужно написать для интернет-магазина каталог товаров. Руководствуясь принципами ООП, в первую очередь нужно создать объекты: карточки товаров. Потом заполнить эти карточки данными: названием товара, свойствами, ценой. И потом прописать доступные действия для объектов: обновление, изменение, взаимодействие.
Так схематично выглядит программа, написанная по парадигме ООП
Кроме ООП, существуют и другие парадигмы. Из них наиболее распространена функциональная, в которой работают не с объектами, а с функциями. Если использовать функциональную парадигму, чтобы сделать каталог товаров, то начинать нужно не с карточек, а с функций, заполняющих эти карточки. То есть объект будет не отправной точкой, а результатом работы функции.Обычно написать функцию быстрее, чем создавать объекты и прописывать взаимодействие между ними. Но если объём кода большой, работать с разрозненными функциями сложно.
Материал по теме:
Что такое парадигмы программирования и зачем они нужны
Структура объектно-ориентированного программирования
В коде, написанном по парадигме ООП, выделяют четыре основных элемента:
1. Объект.
Часть кода, которая описывает элемент с конкретными характеристиками и функциями. Карточка товара в каталоге интернет-магазина — это объект. Кнопка «заказать» — тоже.
2. Класс.
Шаблон, на базе которого можно построить объект в программировании. Например, у интернет-магазина может быть класс «Карточка товара», который описывает общую структуру всех карточек. И уже из него создаются конкретные карточки — объекты.Классы могут наследоваться друг от друга. Например, есть общий класс «Карточка товара» и вложенные классы, или подклассы: «Карточка бытовой техники», «Карточка ноутбука», «Карточка смартфона». Подкласс берёт свойства из родительского класса, например, цену товара, количество штук на складе или производителя. При этом имеет свои свойства, например, диагональ дисплея для «Карточки ноутбука» или количество сим-карт для «Карточки смартфона».
3. Метод.
Функция внутри объекта или класса, которая позволяет взаимодействовать с ним или другой частью кода. В примере с карточками товара метод может:● Заполнить карточку конкретного объекта нужной информацией.
● Обновлять количество товара в наличии, сверяясь с БД.
● Сравнивать два товара между собой.
● Предлагать купить похожие товары.
4. Атрибут.
Характеристики объекта в программировании — например, цена, производитель или объём оперативной памяти. В классе прописывают, что такие атрибуты есть, а в объектах с помощью методов заполняют эти атрибуты данными.
Так связаны между собой элементы ООП
Разберём, как выглядят эти структурные элементы объектно-ориентированной системы в коде, на примере языка Java.Класс — это общая абстракция, которая описывает структуру объектов. Создадим класс “Item” для товара, у которого есть два параметра, то есть атрибута — название и цена. Сделаем это с помощью конструктора класса — метода, который инициализирует объект.
Здесь мы сразу задаём ещё и метод card, который позволит вывести название и стоимость конкретного товара. А также задаём атрибуты name и price.
Теперь создадим подкласс, у которого имя всегда будет «Телефон», а вот цена может отличаться.
Вызовем подкласс и создадим объект — телефон с конкретной ценой:
И теперь мы с помощью метода card из класса сможем вызывать информацию о конкретном телефоне:
Эта строчка кода выведет информацию: «Телефон стоит 30000».На курсе Практикума «Java-разработчик» наставники со студентами разбирают основы объектно-ориентированного программирования, учат работать с объектами и рассказывают, как писать чистый и понятный код. Вводную часть можно попробовать бесплатно.
Получите востребованную профессию в IT
Научитесь создавать приложения с нуля за 10 месяцев, получите 5 проектов в портфолио и помощь с трудоустройством. Начните с бесплатной вводной части курса «Java-разработчик».
Основные принципы объектно-ориентированного программирования
Объектно-ориентированное программирование базируется на трёх основных принципах, которые обеспечивают удобство использования этой парадигмы.
Инкапсуляция
Вся информация, которая нужна для работы конкретного объекта, должна храниться внутри этого объекта. Если нужно вносить изменения, методы для этого тоже должны лежать в самом объекте — посторонние объекты и классы этого делать не могут. Для внешних объектов доступны только публичные атрибуты и методы.Например, метод для внесения данных в карточку товара должен обязательно быть прописан в классе «Карточка товара». А не в классе «Корзина» или «Каталог товаров».
Такой принцип обеспечивает безопасность и не даёт повредить данные внутри какого-то класса со стороны. Ещё он помогает избежать случайных зависимостей, когда из-за изменения одного объекта что-то ломается в другом.
Наследование
В этом принципе — вся суть объектно-ориентированного программирования.
Разработчик создаёт:
● Класс с определёнными свойствами;
● Подкласс на его основе, который берёт свойства класса и добавляет свои;
Каждый дочерний элемент наследует методы и атрибуты, прописанные в родительском. Он может использовать их все, отбросить часть или добавить новые. При этом заново прописывать эти атрибуты и методы не нужно.
Например, в каталоге товаров:
- У класса «Карточка товара» есть атрибуты тип товара, название, цена, производитель, а также методы «Вывести карточку» и «Обновить цену».
- Подкласс «Смартфон» берёт все атрибуты и методы, записывает в атрибут «тип товара» слово «смартфон плюс добавляет свои атрибуты — «Количество сим-карт» и «Ёмкость аккумулятора».
- Объект «Смартфон Xiaomi 11» заполняет все атрибуты своими значениями и может использовать методы класса «Карточка товара».
Полиморфизм
Один и тот же метод может работать по-разному в зависимости от объекта, где он вызван, и данных, которые ему передали. Например, метод «Удалить» при вызове в корзине удалит товар только из корзины, а при вызове в карточке товара — удалит саму карточку из каталога.То же самое с объектами. Можно использовать их публичные методы и атрибуты в других функциях и быть уверенным, что всё сработает нормально.
Этот принцип ООП, как и другие, обеспечивает отсутствие ошибок при использовании объектов.
Преимущества и недостатки ООП
Преимущества
● Читать код гораздо проще. Даже в чужом коде обычно сразу видны конкретные объекты и методы, их удобно искать, чтобы посмотреть, что именно они делают.
● Код легче обновлять. Класс или метод достаточно изменить в одном месте, чтобы он изменился во всех наследуемых классах и объектах. Не нужно переписывать каждый объект отдельно, выискивая, где именно в коде он расположен.
● Программистам удобнее работать в команде. Разные люди могут отвечать за разные объекты и при этом пользоваться плодами трудов коллег.
● Код можно переиспользовать. Один раз написанный класс или объект можно затем переносить в другие проекты. Достаточно однажды написать объект «Кнопка заказа» и потом можно вставлять его в почти неизменном виде в разные каталоги товаров и мобильные приложения.
● Шаблоны проектирования. Именно на базе ООП построены готовые решения для взаимодействия классов друг с другом, которые позволяют не писать этот код с нуля, а взять шаблон.
Недостатки
● Громоздкость. Там, где в функциональном программировании хватит одной функции, в ООП нужно создать класс, объект, методы и атрибуты. Для больших программ это плюс, так как структура будет понятной, а для маленьких может оказаться лишней тратой времени.
● Низкая производительность. Объекты потребляют больше памяти, чем простые функции и переменные. Скорость компиляции от этого тоже страдает.
Получается, что основная функция объектно-ориентированного программирования — облегчить написание больших, сложных программ, над которыми трудятся группы разработчиков.
Популярные языки объектно-ориентированного программирования
Сами по себе языки не могут быть объектно-ориентированными. ООП — это парадигма, которую можно применять для написания кода на любом языке.
Определённые языки подходят для использования объектно-ориентированного программирования больше, так как предоставляют удобные инструменты для работы с классами и объектами:
● Java;
● Go;
● Python;
● C++;
● JavaScript;
● C#;
● PHP;
● Ruby;
● Scala;
● Kotlin;
● Swift;
● Dart.
Главное об ООП
- ООП — это парадигма разработки, набор правил и критериев, по которым пишут код. Её суть в том, что весь код состоит из объектов, которые взаимодействуют друг с другом. Существуют и другие парадигмы, например, функциональное программирование.
- В ООП выделяют четыре основных элемента: классы, объекты, методы и атрибуты.
- Объектно-ориентированный подход к программированию строится на трёх основных принципах: наследование, инкапсуляция и полиморфизм.
- Программы, созданные по принципам ООП, более структурированные, легче читаются и хорошо масштабируются. При этом они сложнее в написании.
- В парадигме ООП удобнее всего писать на языках Java, C++, C#, JavaScript и некоторых других.
Статью подготовили:
Поделиться
Читать также:
Главный язык программирования для фронтендера: зачем учить JavaScript
Читать статью
Всё, что нужно знать новичку о Java
Читать статью
Принципы объектно-ориентированного программирования / Хабр
Привет, Хабр! Меня зовут Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.Специально к старту занятий в новом потоке курса «Архитектура и шаблоны проектирования» я подготовил еще один авторский материал.
Введение
Когда речь заходит о классических паттернах проектирования, нельзя не вспомнить о самом объектно-ориентированном программировании. Ведь паттерны GoF являются паттернами именно объектно-ориентированного программирования. В функциональном же программировании есть свои собственные паттерны.Вообще устроено все следующим образом: есть само объектно-ориентированное программирование. У него есть принципы. Из принципов объектно-ориентированного программирования следуют разобранные нам шаблоны GRASP (как вариант — SOLID принципы), из которых, в свою очередь, следуют шаблоны GoF. Из них же следует ряд интересных вещей, например, enterprise паттерны.
Объектно-ориентированная парадигма
Определение гласит, что «Объектно-ориентированное программирование – это парадигма программирования, в которой основной концепцией является понятие объекта, который отождествляется с предметной областью.»Таким образом, система представляется в виде набора объектов предметной области, которые взаимодействуют между собой некоторым образом. Каждый объект обладает тремя cоставляющими: идентичность (identity), состояние (state) и поведение (behaviour).
Состояние объекта — это набор всех его полей и их значений.
Поведение объекта — это набор всех методов класса объекта.
Идентичность объекта — это то, что отличает один объект класса от другого объекта класса. С точки зрения Java, именно по идентичности определяется метод equals.
Принципы объектно-ориентированного программирования
Объектно-ориентированное программирование обладает рядом принципов. Представление об их количестве расходится. Кто-то утверждает, что их три (старая школа программистов), кто-то, что их четыре (новая школа программистов):- Абстрация
- Инкапсуляция
- Наследование
- Полиморфизм
Инкапсуляция
Вопреки мнению многих собеседующихся (а иногда и собеседуемых), инкапсуляция это не «когда все поля приватные». Инкапсуляция является фундаментальнейшим принципом проектирования ПО, ее следы наблюдаются на только на уровне микро-, но и на уровне макропроектирования.Научное определение гласит, что «Инкапсуляция – это принцип, согласно которому любой класс и в более широком смысле – любая часть системы должны рассматриваться как «черный ящик»: пользователь класса или подсистемы должен видеть только интерфейс (т.е. список декларируемых свойств и методов) и не вникать во внутреннюю реализацию.»
Таким образом, получается, что если класс A обращается к полям класса B напрямую, это приводит не к тому, что «нарушается информационная безопасность», а к тому, что класс A завязывается на внутренне устройство класса B, и попытка изменить внутреннее устройство класса B приведет к изменению класса А. Более того, класс A не просто так работает с полями класса B, он работает по некоторой бизнес-логике. То есть логика по работе с состоянием класса В лежит в классе А, и когда мы захотим переиспользовать класс В, это не удастся сделать, ведь без кусочка класса А класс В может быть бесполезным, что приведет к тому, что класс В придется отдавать вместе с классом А.
Инкапсуляция является самым недооцененным принципом, который, к сожалению, мало кем интерпретируется правильно. Она позволяет минимизировать число связей между классами и подсистемами и, соответственно, упростить независимую реализацию и модификацию классов и подсистем.
Наследование
Наследование — это возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (суперкласса), добавляя при необходимости новые свойства иметоды.
Наследование является самым переоцененным принципом. Когда-то считалось, что «У идеального программиста дерево наследования уходит в бесконечность и заканчивается абсолютно пустым объектом», потому как когда-то люди не очень хорошо понимали то, что наследование — это способ выразить такое свойство реального мира как иерархичность, а не способ переиспользовать код, отнаследовав машину от холодильника, потому что у обоих предметов есть ручка. Наследования желательно по возможности избегать, потому что наследование является очень сильной связью. Для уменьшения количества уровней наследования рекомендуется строить дерево «снизу-вверх».
Полиморфизм
Полиморфизм — это возможность использовать классы – потомки в контексте, который был предназначен для класса – предка.За самым садистским определением кроется возможность языка программирования для декомпозиции задачи и рефакторинга if’ов и switch’ей.
404: Страница не найдена
Архитектура приложенияСтраница, которую вы пытались открыть по этому адресу, похоже, не существует. Обычно это результат плохой или устаревшей ссылки. Мы извиняемся за любые неудобства.
Что я могу сделать сейчас?
Если вы впервые посещаете TechTarget, добро пожаловать! Извините за обстоятельства, при которых мы встречаемся. Вот куда вы можете пойти отсюда:
Поиск- Узнайте последние новости.
- Наша домашняя страница содержит последнюю информацию об архитектуре приложений.
- Наша страница «О нас» содержит дополнительную информацию о сайте, на котором вы находитесь, «Архитектура приложений».
- Если вам нужно, свяжитесь с нами, мы будем рады услышать от вас.
Просмотр по категории
Качество ПО- Google дразнит расширение генеративного ИИ в собственном облаке
Новые генеративные функции искусственного интеллекта Google, включая помощника по кодированию, были тесно связаны с GCP в предварительных демонстрациях на этой неделе, в то время как …
- Лучше ли ChatGPT для кодирования, чем платформы с низким кодом?
ChatGPT может писать код, но не может интегрировать код или генерировать дизайнерские идеи. Кроме того, это создает риски безопасности и лицензирования. Пока…
- Несколько простых стратегий для уменьшения избыточности тестирования программного обеспечения
Несмотря на то, что всеобъемлющее покрытие тестами является обязательным, разработчики программного обеспечения должны прилагать сознательные усилия, чтобы наборы программ не превратились в . ..
- Как создать виртуальную машину Google Cloud Spot
Виртуальная машина Google Cloud Spot может помочь вам воспользоваться скидками, но вы должны быть осторожны, чтобы не запускать на ней определенные приложения. Узнать…
- Google удваивает генеративный ИИ
На Google I/O 2023 Пол Нашавати из Enterprise Strategy Group комментирует улучшения ИИ в поиске Google, фотографиях, картах и …
- Эксперты по безопасности делятся передовым опытом облачного аудита
Аудит облачных вычислений позволяет организациям оценить производительность поставщиков облачных услуг. Эксперты по аудиту Шинеса Камбрик и Майкл Ратемо рассказывают …
- 5 примеров лидера слуг Scrum
Термин «лидер-слуга» был удален из Руководства по Scrum 2020, но это не значит, что он не важен. Вот пять примеров. ..
- Как решить проблемы с производительностью Python
Python — отличный язык для решения математических и научных задач непрограммистами, даже если такая оптимизация влияет на …
- Скрам против водопада: в чем разница?
Большинство организаций выбирают между методологиями Waterfall и Agile, что часто означает сравнение Scrum и Waterfall. Вот…
Концепции ООП Java — Javatpoint
следующий → ← предыдущая
На этой странице мы узнаем об основах ООП. Объектно-ориентированное программирование — это парадигма, которая предоставляет множество концепций, таких как наследование , привязка данных , полиморфизм и т. д. Simula считается первым объектно-ориентированным языком программирования. Парадигма программирования, в которой все представляется в виде объекта, известна как истинно объектно-ориентированный язык программирования. Smalltalk считается первым действительно объектно-ориентированным языком программирования. Популярными объектно-ориентированными языками являются Java, C#, PHP, Python, C++ и т. д. Основной целью объектно-ориентированного программирования является реализация реальных сущностей, например объектов, классов, абстракций, наследования, полиморфизма и т. д. ООП (система объектно-ориентированного программирования)Объект означает объект реального мира, такой как ручка, стул, стол, компьютер, часы и т. д. Объектно-ориентированное программирование — это методология или парадигма разработки программы с использованием классов и объектов. Он упрощает разработку и обслуживание программного обеспечения, предоставляя некоторые концепции:
Помимо этих понятий, в объектно-ориентированном проектировании используются и другие термины:
ОбъектЛюбая сущность, имеющая состояние и поведение, называется объектом. Например, стул, ручка, стол, клавиатура, велосипед и т. д. Оно может быть физическим или логическим. Объект может быть определен как экземпляр класса. Объект содержит адрес и занимает некоторое место в памяти. Объекты могут общаться, не зная деталей данных или кода друг друга. Единственная необходимая вещь — это тип принимаемого сообщения и тип ответа, возвращаемого объектами. Пример: Собака является объектом, потому что у нее есть такие состояния, как цвет, имя, порода и т. д., а также поведение, такое как виляние хвостом, лай, еда и т. д. КлассКоллекция объектов называется классом. Это логическая сущность. Класс также можно определить как схему, из которой можно создать отдельный объект. Класс не занимает места. НаследствоКогда один объект приобретает все свойства и поведение родительского объекта , это известно как наследование. Он обеспечивает возможность повторного использования кода. Он используется для достижения полиморфизма во время выполнения. ПолиморфизмЕсли одна задача выполняется разными способами , это называется полиморфизмом. Например: убедить заказчика в другом, нарисовать что-то, например, фигуру, треугольник, прямоугольник и т.д. В Java мы используем перегрузку методов и переопределение методов для достижения полиморфизма. Другим примером может быть что-то сказать; например, кошка мяукает, собака гавкает и т. д. АбстракцияСокрытие внутренних деталей и демонстрация функциональности называется абстракцией. Например, телефонный звонок, внутреннюю обработку мы не знаем. В Java мы используем абстрактный класс и интерфейс для достижения абстракции. ИнкапсуляцияСвязывание (или упаковка) кода и данных вместе в единое целое называется инкапсуляцией . Например, капсула, в нее заворачивают разные лекарства. Класс Java является примером инкапсуляции. Java bean — это полностью инкапсулированный класс, потому что все данные-члены здесь закрыты. МуфтаСвязывание относится к знанию, информации или зависимости другого класса. Оно возникает, когда классы знают друг о друге. Если класс имеет подробную информацию о другом классе, существует сильная связь. В Java мы используем модификаторы private, protected и public для отображения уровня видимости класса, метода и поля. Вы можете использовать интерфейсы для более слабой связи, потому что нет конкретной реализации. СплоченностьСплоченность относится к уровню компонента, который выполняет одну четко определенную задачу. Единая четко определенная задача выполняется с помощью согласованного метода. Слабо связный метод разделит задачу на отдельные части. Пакет java.io является очень связным пакетом, поскольку он имеет классы и интерфейс, связанные с вводом-выводом. Однако пакет java.util является слабо связным пакетом, поскольку он имеет несвязанные классы и интерфейсы. АссоциацияАссоциация представляет отношения между объектами. Здесь один объект может быть связан с одним объектом или со многими объектами. Между объектами может быть четыре типа ассоциации:
Давайте разберемся с отношениями на примерах реального времени. Например, в одной стране может быть один премьер-министр (один к одному), а у премьер-министра может быть много министров (один ко многим). Кроме того, у многих депутатов может быть один премьер-министр (многие к одному), а у многих министров может быть много департаментов (многие ко многим). Ассоциация может быть однонаправленной или двунаправленной. АгрегацияАгрегация — это способ достижения ассоциации. Агрегация представляет собой отношение, в котором один объект содержит другие объекты как часть своего состояния. Он представляет собой слабую связь между объектами. Это также называется отношением имеет- в Java. Например, наследование представляет собой отношение есть . Это еще один способ повторного использования объектов. СоставКомпозиция также является способом достижения ассоциации. Композиция представляет собой отношение, в котором один объект содержит другие объекты как часть своего состояния. Существует сильная связь между содержащим объектом и зависимым объектом. Это состояние, в котором содержащие объекты не имеют независимого существования. Если вы удалите родительский объект, все дочерние объекты будут удалены автоматически. Преимущество ООП перед процедурно-ориентированным языком программирования1) ООП упрощает разработку и обслуживание, тогда как в процедурно-ориентированном языке программирования непросто управлять, если код растет по мере увеличения размера проекта. 2) ООП обеспечивает сокрытие данных, тогда как в процедурно-ориентированном языке программирования доступ к глобальным данным возможен из любого места. Оставить комментарий
|