- •1. Краткие теоретические сведения
- •1.1. Объектно-ориентированный подход-Бузюков
- •1.2. Этапы разработки ооп систем
- •1.3. Декомпозиция
- •1.5. Концепции ооп
- •1.6. Синтаксис объявления класса
- •1.7. Методы класса
- •1.8. Объявление объектов
- •1.9. Конструктор
- •1.10. Деструктор
- •1.11. Инкапсуляция
- •1.12. Полиморфизм
- •1.13. Указатель this
- •1.14. Статические члены класса
- •1.15. Дружественные функции и классы
- •1.16. Вложенные классы
- •1.17. Элементы класса
- •1.17.1. Данные-элементы
- •1.17.2. Элементы-функции
- •1.17.3. Доступ к данным-элементам
- •1.17.4. Вызов функций-элементов
- •1.17.5. Указатели на компоненты-функции.
- •2. Задание
- •2.4.1.2. Пример для варианта 30
- •2.4.1.2.1. Разработка алгоритма решения.
- •2.4.1.2.2. Описание структуры класса.
- •2.4.1.2.2.1. Описание полей класса.
- •2.4.1.2.2.2. Функции-аксессоры.
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Простейшие классы и объекты
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Простейший класс. Объединение данных и методов
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример
- •2.4.3.3. Программы
- •2.4.3.3.1. Первый принцип инкапсуляции: объединение данных и методов
- •2.4.3.3.2. Второй принцип инкапсуляции: защита от внешнего вмешательства
- •2.4.3.3.3. Независимость интерфейса от реализации
- •2.4.3.3.4. Конструктор, деструктор
- •2.4.3.3.5. Определение методов вне класса
- •2.4.3.3.6. Конcтантные поля, методы и объекты
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Пользовательский класс
- •2.4.4.1. Условие задания
- •2.4.4.2. Методические указания.
- •1. Пример определения класса.
- •2. Пример реализации конструктора с выдачей сообщения.
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Объектно-ориентированный подход-Бузюков 2
1.5. Концепции ооп
Идея ООП заключается в описании задачи на уровне объектов, которые в языке С++ называются классами. Например, класс может описывать объект линию, эллипс, прямоугольник. Но в отличие от структур, которые также могут комплексно описывать свойства каких-либо объектов, между классами возможны взаимодействия, которые выражаются тремя категориями: наследование, полиморфизм и инкапсуляция.
Объектно-ориентированные языки программирования обеспечивают механизмы, которые помогают реализовывать объектно-ориентированную модель. К ним относятся инкапсуляция, наследование и полиморфизм.
1. Инкапсуляция – механизм, связывающий воедино программный код и данные, которыми он манипулирует, а также обеспечивающий их защиту от внешнего вмешательства и неправильного использования.
Инкапсуляция — это механизм защиты данных от несанкционированного изменения. При описании класса программист выделяет части класса, доступные внешней программе, другим объектам (public) и недоступные им (private и protected). Целесообразно как можно больше полей делать закрытыми, а для взаимодействия с ними предусматривать открытые методы. При такой организации класса говорят, что закрытые части инкапсулированы в классе. Считается, что инкапсуляция приводит к увеличению надёжности программ, запрещая несанкционированное изменение данных. Кроме того, инкапсуляция позволяет выделить интерфейсную часть класса, предназначенную для взаимодействия объекта с окружающей средой и реализацию класса. При неизменной интерфейсной части реализация класса может меняться от версии к версии, не влияя на работоспособность остальных компонент приложения.
Инкапсуляция – это способ представления класса в виде «черного ящика». Это значит, что конечному пользователю класса (программисту) доступен лишь определенный набор функций и переменных для работы с классом. Часто ограничение доступа применяется для записи значений в переменные класса через функции, при запрещенном непосредственном доступе к переменным.
2. Полиморфизм – это свойство различных объектов выполнять одно и то же действие (с одним и тем же названием) по-своему.
Полиморфизм — это механизм использования одинаковых имен для методов, объектов и т.д. Существует несколько проявлений полиморфизма в объектно-ориентированном программировании. Первое из них связано с применением одинаковых имён методов в родительском и дочернем классах. В этом случае говорят, что дочерний метод перекрывает родительский. Какой из методов будет вызван зависит от контекста его использования. Второе проявление также связано с применением одинаковых имён методов, но имеющих разные типы параметров и результатов. Это позволяет найти третье применение полимирфизма — хранение данных разных типов в полях объекта с одинаковыми именами.
Полиморфизм – это процесс вызова и переопределение функций базового класса в дочерних. Полиморфизм позволяет общие функции дочерних классов выносить в базовый, а затем их вызывать из дочернего, полагая, что они определены в нем. Вместе с тем это не исключает возможности переопределения функций базового класса в дочерних.
3. Наследование – это такое отношение между объектами, когда дочерний объект повторяет элементы структуры и поведения родительского.
Наследование — это механизм такой организации отношений между классами, когда один класс может использовать поля и методы другого класса, а в результате один объект приобретает свойства другого. Родительский класс называют базовым, дочерний — производным.
Наследование – это механизм создания нового класса на основе ранее созданного. Наследование имеет смысл, если множество разнородных объектов имеют общие характеристики или функции. Так, в случае с графическими примитивами тип линии, цвет и толщина описываются одинаково на уровне языка программирования и логически отностятся к одной категории – свойства графического примитива. Поэтому эти элементы целесообразно выделить в отдельный класс – базовый и на основе него создавать новые классы – дочерние для более детального описания линии, эллипса и прямоугольника, используя механизм наследования.
Классы верхних уровней обычно не имеют конкретных экземпляров объектов. Такие классы называют абстрактными. Конкретные экземпляры объектов относятся, как правило, к классам самых нижних уровней объектной иерархии.
Подробнее о механизмах инкапсуляции, наследования и полиморфизма можно почитать в [6] – [9].