Упс и пицца! : Часть 2

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

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

Абстракция и инкапсуляция

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

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

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

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

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

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

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

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

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

Как видно на изображении, каждый этап иерархии наследует функцию от предыдущего этапа. Это похоже на то, как ребенок наследует некоторые особенности, такие как физические атрибуты, от своих родителей, бабушек и дедушек и так далее.

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

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

Полиморфизм

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

Полиморфизмпроисходит от греческих слов 'polus' (много) и 'morphe' (формы) и определяется как способность сообщение, которое следует интерпретировать в нескольких формах.

Еще одним классическим примером полиморфизма может быть написание программы, которая может рисовать фигуры. Мы бы написали одну функцию с именем draw() в классе Shape и передали ее нескольким классам, таким как Triangle, Circle и Square.

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

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