Файл: Оглавление заданий.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 07.11.2023

Просмотров: 55

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


ООП используется при написании операционных систем, СУБД, компиляторов, драйверов, множества прикладных программ. Например, достаточно сказать, что почти все известные браузеры, Microsoft Office — продукты объектно-ориентированного программирования.

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

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

Подведём итог.

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



Рисунок 1.2. Преимущества ООП-подхода
1.5 Базовые особенности ООП

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


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

Выделяют четыре основных “столпа” ООП- это:

  • абстракция.

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

  • наследование,

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


1.5.1 Абстракция в ООП

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

Абстракция позволяет:

  • Выделить главные и наиболее значимые свойства предмета.

  • Отбросить второстепенные характеристики.


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


Зачем нужна абстракция? Если мыслить масштабно - то она позволяет бороться со сложностью реального мира. Мы отбрасываем все лишнее, чтобы оно нам не мешало, и концентрируемся только на важных чертах объекта (рисунок 1.3).



Рисунок 1.3. Иллюстрация к понятию «Абстракция»
1.5.2 Инкапсуляция

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

Инкапсуляция в ООП понимается двояко.

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

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

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

Инкапсуляция решает проблему разделения программного кода и сокрытия данных.

Если принцип абстракции и его реализация «утверждают» следующее: "Объект может быть рассмотрен с общей точки зрения", то инкапсуляция от «себя» «добавляет»:

"И это единственная точка зрения, с которой вы вообще можете рассмотреть этот объект.".

Если вы внимательно посмотрите на название, то увидите в нем слово "капсула". В этой самой "капсуле" спрятаны данные, которые мы хотим защитить от изменений извне.

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

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

Таким образом, при реализация в ООП принципа инкапсуляции:

  • Упрощается процесс разработки, т. к. позволяет программисту не вникать в тонкости реализации того или иного объекта.

  • Становится более легким обмен компонентами между программами

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


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

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

  • Класс-потомок = Свойства и методы родителя + Собственные свойства и методы.

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

  • Класс-потомок может дополняться новыми свойствами.

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




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

  2. Способствует быстрой разработке нового ПО на основе уже существующих открытых классов.

  3. Наследование позволяет делать процесс написания кода более простым.

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

Снова рассмотрим объект Дом. Дом можно построить, отремонтировать, заселить или снести. В нем есть фундамент, крыша, окна и двери. В виде списка это может выглядеть следующим образом (таблица 1.3):
Таблица 1.3

Методы

Свойства

Построить

Тип фундамента

Отремонтировать

Материал крыши

Заселить

Количество окон

Снести

Количество дверей



Если создавать (в программе) объект Частный Дом, то он может унаследовать многие методы и свойства от объекта Дом, но в него надо привнести новые атрибуты. Соответствующая таблица будет выглядеть следующим образом (таблица 1.4):
Таблица 1.4

Методы

Свойства

Построить (унаследовано)

Тип фундамента (унаследовано)

Отремонтировать (унаследовано)

Материал крыши (унаследовано)

Заселить (унаследовано)

Количество окон (унаследовано)

Снести (унаследовано)

Количество дверей (унаследовано)

Изменить фасад

Количество комнат

Утеплить

Тип отопления

Сделать пристройку

Наличие огорода


С такой же легкостью мы можем создать еще один класс-потомок - Многоэтажный дом. Придумать для него специфические свойства и методы.



Рисунок 1.4

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

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

В данном контексте под полиморфизмом понимается наличие множество реализаций (форм) одного и того же (по названию) метода.

Полиморфизм (многоформие) - это поддержка нескольких реализаций на основе общего интерфейса.

Другими словами, полиморфизм позволяет перегружать одноименные методы родительского класса в классах-потомках.

Также для понимания работы этого принципа важным является понятие абстрактного метода:

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

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

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