- •Оглавление
- •1 Основные методы программирования. Лекция №2 5
- •2 Методы объектно-ориентированного программирования. Лекция №6. 15
- •2.4 Вопросы по теме 54
- •3 Объектно-ориентированное проектирование. Лекция №12 55
- •3.4 Вопросы по теме 74
- •Введение. Лекция №1.
- •1Основные методы программирования. Лекция №2
- •1.1Процедурное программирование Методы процедурного программирования
- •Этапы разработки программ. Лекция 3.
- •1.2Объектно-ориентированное программирование Лекция №4
- •Этапы разработки оо программ. Лекция №5
- •Конструкторы и деструкторы. Лекция №7.
- •Друзья класса
- •2.2Наследование. Лекция №8
- •Производный класс
- •Простое наследование
- •Множественное наследование. Лекция №9
- •Виртуальные базовые классы
- •2.3Полиморфизм. Лекция №10
- •Перегрузка операций
- •Преобразования типов, определяемые классом
- •Перегрузка функций.
- •Чистый полиморфизм
- •Виртуальные элементы-функции
- •Абстрактные классы. Лекция №11.
- •Параметрический полиморфизм
- •Шаблоны функций
- •Шаблоны классов
- •2.4Вопросы по теме
- •3Объектно-ориентированное проектирование. Лекция №12
- •3.1Концепция объектно-ориентированного проектирования
- •3.2Проектирование структурной схемы программы Составление начальной иерархии и структуры классов
- •Реорганизация иерархии и структуры классов
- •Организационная структура программы
- •3.3Проектирование файлов интерфейсов классов. Лекция № 13. Файл интерфейса базового класса
- •Файлы интерфейсов производных классов
- •Файл управления
- •3.4Вопросы по теме
- •Общие моменты разработки программы на основе объектно-ориентированного подхода
- •Приложение а
1.2Объектно-ориентированное программирование Лекция №4
Методы объектно-ориентированного программирования
Рассмотрим в обобщенном плане основные методы объектно-ориентированного программирования, преимущества их использования по сравнению с традиционным процедурным методом. Механизм реализации методов объектно-ориентированного программирования изучается на конкретных примерах в следующих главах.
В настоящее время внедрение программирования в экономику и управление производством привело к появлению больших по объему программ с большим количеством функций и к необходимости использования различных собственных типов данных пользователя, например, структур данных, представляющих собой совокупность реквизитов документов. Такие типы данных называются абстрактными типами данных или типами данных, определяемые пользователем.
В связи с этим, проявились недостатки метода процедурного программирования:
- сложности создания больших программ;
- для множества типов данных, определяемых пользователем, необходимо программировать множество комплексов похожих функций для обработки этих типов данных;
- типы данных и функции для их обработки не объединены в структуре программы, поэтому, отсутствует механизм управления доступом к этим данным и функциям; любая функция может обработать эти данные;
- наличие похожих типов данных, определяемых пользователем, отличающихся некоторыми компонентами, приводит дублированию компонент;
Процедурное программирование не обеспечивает в достаточной степени абстракции данных. Потребовался основной принцип абстрактного типа данных: никакие другие функции, кроме специальных не должны иметь доступа к этим данным. Для реализации абстрактного типа данных был предложен новый тип - класс, как совокупность данных и функций.
Появился новый метод программирования – метод объектно-ориентированного программирования. Метод основывается на модели построении программы как иерархии классов.
"Объектно-ориентированное программирование - это основная методология программирования 90-х годов. Она представляет собой продукт 25 лет практики и опыта"[4].
Основными методами программирования являются средства инкапсуляции, наследования, полиморфизма.
Инкапсуляция (encapsulation) - это объединение данных и функций для работы с этими данными в абстрактные типы данных - классы. Инкапсуляция даёт сокрытие элементов-данных (data members) и элементов-функций (members functions) в классе с управлением доступа к ним. Переменные типа класс называются объектами (object). Состояние объекта определяется элементами-данными соответствующего класса. Поведение объекта определяется элементами- функциями соответствующего класса.
Преимущества инкапсуляции проявляются в следующем:
- Упрощение написания больших программ. В больших про-грамммах большое количество функций и переменных усложняет создание и сопровождение программ. Концепция объектно-ориентированного программирования - это разделение программы на отдельные небольшие части - классы, в каждом из которых сгруппированы определенные элементы-данные и элементы-функции для их обработки.
- Управление доступом к элементам класса. Атрибуты доступа private, protected, public объявляют элементы класса соответственно закрытыми, защищенными и открытыми для доступа.
- Возможность изменения содержимого класса (например, до-бавление новых элементов) без изменения других частей программы, использующих этот класс.
Наследование (inheritance) - это порождение новых абстрактных типов данных (производных классов) на основе существующих абстрактных типов данных (базовых классов), причём производный класс наследует данные и функции базового класса, а также имеет собственные данные и функции. Наследование позволяет исключить множество типов данных, определяемых пользователем, и множество функций для их обработки за счет выделения одинаковых элементов из классов и помещения их в базовый класс с целью повторного их использования через механизм наследования.
Преимущества наследования проявляются в следующем:
- Исключение дублирования элементов-данных и элементов-функций за счет повторного использования элементов класса в производных классах.
- Упрощение программирования, т.к. наследуемые и собственные элементы класса находятся в одной иерархии классов и не разбросаны по всей программе.
- Возможность оптимального моделирования связей объектов реального мира в прикладной области (например, в информационных системах в экономике и управлении) за счет иерархии классов.
Полиморфизм (polymorphism) означает способность объекта изменять свои действия (операции, функции) в зависимости от типов данных.
Полиморфизм имеет следующие методы программирования:
- общий полиморфизм (перегрузка операций, преобразование типов, перегрузка функций);
- чистый полиморфизм (виртуальные функции, абстрактные классы);
- параметрический полиморфизм (шаблоны функций и классов).
Перегрузка операций - это переопределение действий операций применительно к объектам конкретных классов. Преобразование типов данных при совместном их использовании тоже является одним из методов полиморфизма. Перегрузка функции - это использование одинакового имени для функций, выполняющих действия над различными типами данных.
Виртуальная функция - это элемент-функция базового класса в иерархии наследования, переопределенная в производных классах и вызываемая в зависимости от класса через указатель или ссылку на базовый класс.
Параметрический полиморфизм - это механизм использования обобщенного определения функции или класса (шаблона) для автоматической генерации новых функций или классов для различных типов данных.
Преимущества полиморфизма проявляются в следующем:
- Облегчение и удобство написания программ за счет перегрузки операций и функций, что позволяет использовать их для типов данных, определяемых пользователем.
- Обеспечение виртуальными функциями чистого полиморфизма, т.е. свойства использовать один и тот же оператор для вызова множества функций, но конкретная функция определяется по типу вызываемого объекта.
- Механизм виртуальных функций – это возможность написания простых функций общего назначения для иерархии классов.
- Обеспечение компактности программ и расширяемости иерархии классов за счет использования виртуальных функций.
- Автоматическая генерация по обобщенному шаблону новых функций или классов для различных типов данных, реализуемая механизмом параметрического полиморфизма.
Объектно-ориентированное программирование принципиально отличается от процедурного программирования. Процедурное программирование основывается на алгоритмах, т.е. на функциях обработки задачи. При этом структуры данных не учитываются, как части организации программы. Объектно-ориентированное программирование основывается на понятиях прикладной области, являющихся классами. Программы строятся как иерархия классов.
Объектно-ориентированное программирование эффективно в нереализованных, с точки зрения программирования, прикладных областях. "В некоторых приложениях ,таких как интерактивная графика, простор для объектно-ориентированного программирования воистину неисчерпаем. В других областях, таких как классическая арифметика и вычисления в ней, по-видимому, трудно найти возможности для чего-то большего, чем простая абстракция данных, поэтому средства для поддержки объектно-ориентированного программирования там избыточны"[2].