Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР20-С++-16-сентября-2012 (1).doc
Скачиваний:
33
Добавлен:
12.11.2019
Размер:
1.18 Mб
Скачать

1.5. Концепции ооп

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

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

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

Инкапсуляция — это механизм защиты данных от несанкционированного изменения. При описании класса программист выделяет части класса, доступные внешней программе, другим объектам (public) и недоступные им (private и protected). Целесообразно как можно больше полей делать закрытыми, а для взаимодействия с ними предусматривать открытые методы. При такой организации класса говорят, что закрытые части инкапсулированы в классе. Считается, что инкапсуляция приводит к увеличению надёжности программ, запрещая несанкционированное изменение данных. Кроме того, инкапсуляция позволяет выделить интерфейсную часть класса, предназначенную для взаимодействия объекта с окружающей средой и реализацию класса. При неизменной интерфейсной части реализация класса может меняться от версии к версии, не влияя на работоспособность остальных компонент приложения.

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

2. Полиморфизм – это свойство различных объектов выполнять одно и то же действие (с одним и тем же названием) по-своему.

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

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

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

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

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

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

Подробнее о механизмах инкапсуляции, наследования и полиморфизма можно почитать в [6] – [9].