Базовые принципы объектно-ориентированного программирования
Объектно-ориентированное программирование основывается на трех основных концепциях: инкапсуляции, полиморфизме и наследовании.
Инкапсуляция (пакетирование) представляет собой механизм, связывающий вместе данные и код, обрабатывающий эти данные, и сохраняющий их от внешнего воздействия и ошибочного использования. Инкапсуляция позволяет создавать объект, являющийся логическим целым, включающим данные и код для работы с этими данными. Объект обеспечивает защиту против случайной или несанкционированной модификации частных (private) составляющих его членов. Закрытые данные или коды (методы) доступны только для других частей этого объекта и не доступны вне его. Открытая часть объекта предназначена для обеспечения контролируемого интерфейса его закрытой части.
Полиморфизм - принцип (подход), обеспечивающий возможность использования одного и того же кода для решения разных задач. Полиморфизм позволяет уменьшить сложность программы посредством использования одного и того же интерфейса для задания целого класса действий. Задача выбора специфического действия (метода) в зависимости от конкретной ситуации (количества и типа передаваемых аргументов) возлагается на компилятор.
Ключевым в понимании полиморфизма является то, что он позволяет манипулировать объектами различной степени сложности путем создания общего для них стандартного интерфейса для реализации похожих действий.
Наследование представляет собой процесс, благодаря которому один объект может наследовать (приобретать) свойства от другого объекта. Объект, используя наследование, нуждается только в определении специфичных только для этого объекта свойств, отличающих его от других объектов этого класса. Наследование позволяет поддерживать концепцию иерархии классов.
Различают полиморфные и мономорфные языки. Для мономорфных языков характерно то, что используемые функции, процедуры и операторы имеют уникальный тип. Полиморфные языки поддерживают концепцию полиморфизма в теории типов, когда одно и то же имя может быть использовано для выражения различных действий. Поддержка полиморфизма осуществляется через виртуальные функции, механизм перегрузки функций и операторов.
Передача сообщений выражает основную методологию построения объектно-ориентированных программ. Программы представляются в виде набора объектов и передачи сообщений между ними.
При построении объектно-ориентированной программы одним из основных является вопрос иерархии классов. Пусть имеется некоторая иерархия (структура, взаимосвязь) классов. В этом случае можно:
- определить объект для заданного класса;
- построить новый класс, наследуя его из существующего класса;
- изменить поведение нового класса (изменить существующие и добавить новые функции).
Построение нового класса, наследуя его из существующего, предполагает:
- добавление в новый класс новых компонент-данных;
- добавление в новый класс новых компонент-функций;
- замену в новом классе наследуемых из старого класса компонент-функций;
Наследование может быть одиночным и множественным (рис. 1). При множественном наследовании производный (новый) класс имеет более одного наследуемого (старого) класса, из которых образуется новый класс. При этом новый класс наследует поведение этих классов.
Таким образом, объектно-ориентированное программирование – метод построения программ в виде множества взаимодействующих объектов, структура и поведение которых описаны соответствующими классами. Все эти классы образуют иерархию классов, выражающую отношение наследования.
При разработке объектно-ориентированных программ часто используются библиотеки классов. Библиотека может рассматриваться как заданная базовая иерархическая структура. Для разрабатываемой программы из библиотеки может быть выбрана некоторая подструктура и затем расширена новыми классами с использованием принципов наследования.
Язык программирования называется объектно-ориентированным, если :
- он поддерживает абстрактные типы данных (объекты с определенным интерфейсом и скрытым внутренним состоянием);
- объекты имеют связанные с ними типы (классы);
- поддерживается механизм наследования.
Основные достоинства языка С++
Язык С++ основывается на языке С, сохраняя большую часть возможностей языка С и расширяя их новыми, ориентированными на реализацию идей ООП. Язык С++ является легко переносимым языком. Получаемый программный код обладает высоким быстродействием и компактными размерами.
Особенности языка С++
Отметим некоторые дополнительные возможности языка С++. Далее в процессе рассмотрения материала мы более подробно остановимся на этих и других, не отмеченных здесь особенностях языка С++.
Необходимо четко представлять, что достоинство языка С++ состоит не в добавлении в С новых типов, операций и т.д., а в возможности поддержки объектно-ориентированного подхода к разработке программ.
Ключевые слова
Язык С++ расширяет множество ключевых слов принятых в языке С следующими ключевыми словами:
class protected friend inline
private new operator virtual
public delete this template
Константы и переменные
В С++ односимвольные константы имеют тип char, в то же время в С++ поддерживается возможность работы с двухсимвольными константами типа int:
’aB’ , ’\n\t’ .
При этом первый символ располагается в младшем байте, а второй - в старшем.
Операции
В языке С++ введены следующие новые операции:
:: - операция разрешения контекста;
.* и ->* - операции обращения через указатель к компоненте класса;
new и delete - операции динамического выделения и освобождения памяти.
Использование этих и других операций при разработке программ будет показано далее, при изучении соответствующего материала.
Типы данных
В С++ поддерживаются все типы данных, предопределенные в С. Кроме того, введены несколько новых типов данных: классы и ссылки.
Ссылки расширяют и упрощают передачу аргументов в функцию (по значению или по адресу).