4 основы ооп: Шпаргалка по принципам ООП

Принципы объектно-ориентированного программирования / Хабр

Привет, Хабр! Меня зовут Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

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


Введение


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

Вообще устроено все следующим образом: есть само объектно-ориентированное программирование. У него есть принципы. Из принципов объектно-ориентированного программирования следуют разобранные нам шаблоны GRASP (как вариант — SOLID принципы), из которых, в свою очередь, следуют шаблоны GoF. Из них же следует ряд интересных вещей, например, enterprise паттерны.

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


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

Таким образом, система представляется в виде набора объектов предметной области, которые взаимодействуют между собой некоторым образом. Каждый объект обладает тремя cоставляющими: идентичность (identity), состояние (state) и поведение (behaviour).

Состояние объекта — это набор всех его полей и их значений.

Поведение объекта — это набор всех методов класса объекта.

Идентичность объекта — это то, что отличает один объект класса от другого объекта класса. С точки зрения Java, именно по идентичности определяется метод equals.

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


Объектно-ориентированное программирование обладает рядом принципов. Представление об их количестве расходится. Кто-то утверждает, что их три (старая школа программистов), кто-то, что их четыре (новая школа программистов):

  1. Абстрация
  2. Инкапсуляция
  3. Наследование
  4. Полиморфизм


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

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


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

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

Таким образом, получается, что если класс A обращается к полям класса B напрямую, это приводит не к тому, что «нарушается информационная безопасность», а к тому, что класс A завязывается на внутренне устройство класса B, и попытка изменить внутреннее устройство класса B приведет к изменению класса А. Более того, класс A не просто так работает с полями класса B, он работает по некоторой бизнес-логике. То есть логика по работе с состоянием класса В лежит в классе А, и когда мы захотим переиспользовать класс В, это не удастся сделать, ведь без кусочка класса А класс В может быть бесполезным, что приведет к тому, что класс В придется отдавать вместе с классом А. Экстраполируя это на всю систему, получается, что переиспользовать можно будет только всю систему целиком.

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

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


Наследование — это возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (суперкласса), добавляя при необходимости новые свойства и

методы.

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

Полиморфизм


Полиморфизм — это возможность использовать классы – потомки в контексте, который был предназначен для класса – предка.

За самым садистским определением кроется возможность языка программирования для декомпозиции задачи и рефакторинга if’ов и switch’ей.

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

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

Вся парадигма объектно-ориентированной парадигмы – это концепция объектов. Эти объекты содержат данные, которые мы также называем атрибутами (свойствами), и методы. Объекты могут взаимодействовать друг с другом.

В этой статье школа программирования для детей «Пиксель» разберет основы объектно-ориентированного программирования и расскажет, как легко объяснить ООП детям.

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

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

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

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

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

Объектно-ориентированные языки разнообразны, но наиболее популярными являются языки, основанные на классах, в которых объекты являются экземплярами классов. Важные объектно-ориентированные языки включают Java, C++, C#, Python и JavaScript.

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

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

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

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

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

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

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

Абстракция

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

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

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

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

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

Полиморфизм

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

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

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

В современном мире детям будет полезно освоить не только популярные языки, но и концепции программирования. С нуля начать знакомство с кодом можно на примере изучения языка Scratch и Scratch Junior. 

Пример создания игры в Scratch

Бесплатные видеоуроки вы сможете посмотреть на YouTube-канале школы «Пиксель» здесь. 

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

404: Страница не найдена

Архитектура приложения

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

Что я могу сделать сейчас?

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

Поиск

  • Узнайте последние новости.
  • Наша домашняя страница содержит последнюю информацию об архитектуре приложений.
  • Наша страница «О нас» содержит дополнительную информацию о сайте, на котором вы находитесь, «Архитектура приложений».
  • Если вам нужно, свяжитесь с нами, мы будем рады услышать от вас.

Просмотр по категории

Качество ПО


  • Как сбалансировать доступ к данным и безопасность в финтех-тестировании

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


  • Тестовые фреймворки и примеры для модульного тестирования кода Python

    Модульное тестирование является важным аспектом разработки программного обеспечения. Команды могут использовать Python для модульного тестирования, чтобы оптимизировать преимущества Python…


  • Атрибуты эффективной стратегии тестирования базы данных

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

Облачные вычисления


  • Как работает маршрутизация на основе задержки в Amazon Route 53

    Если вы рассматриваете Amazon Route 53 как способ уменьшить задержку, вот как работает этот сервис.


  • 4 рекомендации, чтобы избежать привязки к поставщику облачных услуг

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


  • Подходит ли вам облачная стратегия?

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

TheServerSide.com


  • Как избежать выгорания удаленного инженера-программиста

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


  • JavaScript против TypeScript: в чем разница?

    TypeScript и JavaScript — две дополняющие друг друга технологии, которые лежат в основе как клиентской, так и серверной разработки. Вот…


  • Как применить принцип единой ответственности в Java

    Как работает модель единой ответственности в программе Java? Здесь мы покажем вам, что означает этот принцип SOLID и как . ..

Объектно-ориентированное программирование (ООП) Концепции в C++

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

Что такое концепции ООП в C++?

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

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

Зачем вам нужно объектно-ориентированное программирование?

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

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

Теперь взглянем на некоторые основные концепции ООП C++.

Базовая концепция объектно-ориентированного программирования (ООП) в C++

Есть несколько основных концепций, которые служат строительными блоками ООП.

  • Классы и объекты
  • Абстракция
  • Инкапсуляция
  • Наследство
  • Полиморфизм

Итак, теперь вы подробно разберетесь с каждой из этих концепций.

  • Объект

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

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

  • Классы

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

Класс содержит данные-члены (переменные) и функции-члены. Эти функции-члены используются для управления данными-членами внутри класса.

  • Абстракция

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

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

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

  • Наследство

Наследование — это процесс, в котором два класса имеют отношение друг к другу, а объекты одного класса приобретают свойства и особенности другого класса. Класс, который наследует функции, называется дочерним классом, а класс, функции которого он унаследовал, называется родительским классом. Например, Class Vehicle — родительский класс, а Class Bus, Car и Bike — дочерние классы.

Давайте рассмотрим пример наследования.

Как мы видим, есть два класса с именами родительский и дочерний. В строке 12 дочерний класс наследует родительский класс. Изначально вы создали экземпляр дочернего класса, через который вы вызываете переменные name1 и name2; обе эти строковые переменные содержат Harley и Davidson соответственно.

Поскольку дочерний класс наследует родительский класс, при вызове с использованием объекта дочернего класса вы получаете результат name1 как Harley и name2 как Davidson.

Ниже приведен вывод.

  • Полиморфизм

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

Давайте посмотрим на пример, где мы реализуем переопределение функции.

Как видно из приведенного выше примера, существует три класса. Класс Animal является родительским классом, класс Cheetah является производным классом, а класс Dolphin снова является производным классом класса Animal.

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

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

Теперь рассмотрим преимущества ООП C++.

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

Существуют различные преимущества объектно-ориентированного программирования.

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

Освойте интерфейсные и серверные технологии и продвинутые аспекты в нашей программе последипломного образования в области веб-разработки полного стека. Раскройте свою карьеру в качестве опытного разработчика полного стека. Свяжитесь с нами СЕЙЧАС!

Заключение

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

This entry was posted in Популярное