Объектно-ориентированное программирование
Тема 2.1
Введение в объектно-ориентированное программирование
С ростом объема программы требуется повышать степень абстракции программы (структурировать информацию, выделять главное и отбрасывать несущественное).
Методы повышения абстракции, которые преследуют цель упростить структуру программы, т.е. представить ее в виде меньшего количества более крупных блоков и минимизировать связи между ними:
· Использование функций, позволяющее после написания и отладки функции отвлечься от деталей ее реализации, т.к. для вызова функции требуется знать только ее интерфейс;
· Описание пользовательских типов данных, позволяющих структурировать и группировать информацию, представляя ее в более естественном виде. Для работы с пользовательскими типами данных требуются специальные функции. Для использования этих типов и функций также необходимы только описания интерфейсов. Их лучше сгруппировать в одном месте программы и по возможности отделить от остальных частей;
· Объединение в модули описаний типов данных и функций для работы с ними, со скрытием от пользователя модуля несущественных деталей;
· Использование классов, которые также являются пользовательскими типами данных.В классе задаются поля данных и функций для работы с ними. Таким образом, объединяются данные и функции их обработки. Детали реализации класса скрыты, он используется только через интерфейс. Интерфейсом класса являются заголовки его методов.
Выбор степени абстракции определяется типом задачи, которую требуется решить.
Идея классов является основой объектно-ориентированного программирования (ООП). Классы позволяют моделировать объекты реального мира, т.к. каждый из них обладает набором свойств и поведением. Благодаря этому при программировании используются понятия, более близкие к предметной области, а следовательно, программа легче читается и понимается. Однако проектирование объектно-ориентированной программы представляет собой весьма сложную задачу.
Конкретные величины типа «класс» называются экземплярами класса, или объектами. Объектно-ориентированная программа строится в терминах объектов и их взаимосвязей.
Объекты взаимодействуют между собой, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, содержащий набор необходимых параметров. Механизм сообщений реализуется с помощью вызова соответствующих функций.
Основными свойствами ООП являются инкапсуляция, наследование и полиморфизм.
Инкапсуляция - объединение данных с функциями их обработки в сочетании со скрытием реализации. Инкапсуляция повышает степень абстракции программы, т.к. данные и функции класса находятся ниже уровня абстракции. Кроме того, инкапсуляция позволяет изменить реализацию класса без модификации основной части программы, если интерфейс остался прежним.
Инкапсуляция позволяет использовать класс в другом окружении, а также создавать библиотеки классов для применения во многих программах.
Наследование— создание иерархии классов, когда потомки (подклассы, субклассы) наследуют все свойства своих предков (надклассов, суперклассов), могут их изменять и добавлять новые.
Иерархия классов представляется в виде древовидной структуры, в которой более общие классы располагаются ближе к корню, а более специализированные — на ветвях и листьях. В C++ каждый класс может иметь сколько угодно потомков и предков.
Свойства при наследовании повторно не описываются, что сокращает объем программы. Выделение общих черт различных классов в один класс-предок является механизмом абстракции.
Полиморфизм — использование в различных классах иерархии одного имени для обозначения сходных по смыслу действий и гибко выбирать требуемое действие во время выполнения программы.
Примерами полиморфизма может служить перегрузка функций, когда из нескольких вариантов выбирается наиболее подходящая функция по соответствию ее прототипа передаваемым параметрам. Другой пример — использование шаблонов функций, когда один и тот же код видоизменяется в соответствии с типом, переданным в качестве параметра. Чаще всего понятие полиморфизма связывают с механизмом виртуальных методов.
Тема 2.2