Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие-ООП - копия.doc
Скачиваний:
20
Добавлен:
17.08.2019
Размер:
907.78 Кб
Скачать

1.2Объектно-ориентированное программирование Лекция №4

Методы объектно-ориентированного программирования

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

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

В связи с этим, проявились недостатки метода процедурного программирования:

- сложности создания больших программ;

- для множества типов данных, определяемых пользователем, необходимо программировать множество комплексов похожих функций для обработки этих типов данных;

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

- наличие похожих типов данных, определяемых пользователем, отличающихся некоторыми компонентами, приводит дублированию компонент;

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

Появился новый метод программирования – метод объектно-ориентированного программирования. Метод основывается на модели построении программы как иерархии классов.

"Объектно-ориентированное программирование - это основная методология программирования 90-х годов. Она представляет собой продукт 25 лет практики и опыта"[4].

Основными методами программирования являются средства инкапсуляции, наследования, полиморфизма.

Инкапсуляция (encapsulation) - это объединение данных и функций для работы с этими данными в абстрактные типы данных - классы. Инкапсуляция даёт сокрытие элементов-данных (data members) и элементов-функций (members functions) в классе с управлением доступа к ним. Переменные типа класс называются объектами (object). Состояние объекта определяется элементами-данными соответствующего класса. Поведение объекта определяется элементами- функциями соответствующего класса.

Преимущества инкапсуляции проявляются в следующем:

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

- Управление доступом к элементам класса. Атрибуты доступа private, protected, public объявляют элементы класса соответственно закрытыми, защищенными и открытыми для доступа.

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

Наследование (inheritance) - это порождение новых абстрактных типов данных (производных классов) на основе существующих абстрактных типов данных (базовых классов), причём производный класс наследует данные и функции базового класса, а также имеет собственные данные и функции. Наследование позволяет исключить множество типов данных, определяемых пользователем, и множество функций для их обработки за счет выделения одинаковых элементов из классов и помещения их в базовый класс с целью повторного их использования через механизм наследования.

Преимущества наследования проявляются в следующем:

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

- Упрощение программирования, т.к. наследуемые и собственные элементы класса находятся в одной иерархии классов и не разбросаны по всей программе.

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

Полиморфизм (polymorphism) означает способность объекта изменять свои действия (операции, функции) в зависимости от типов данных.

Полиморфизм имеет следующие методы программирования:

- общий полиморфизм (перегрузка операций, преобразование типов, перегрузка функций);

- чистый полиморфизм (виртуальные функции, абстрактные классы);

- параметрический полиморфизм (шаблоны функций и классов).

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

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

Параметрический полиморфизм - это механизм использования обобщенного определения функции или класса (шаблона) для автоматической генерации новых функций или классов для различных типов данных.

Преимущества полиморфизма проявляются в следующем:

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

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

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

- Обеспечение компактности программ и расширяемости иерархии классов за счет использования виртуальных функций.

- Автоматическая генерация по обобщенному шаблону новых функций или классов для различных типов данных, реализуемая механизмом параметрического полиморфизма.

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

Объектно-ориентированное программирование эффективно в нереализованных, с точки зрения программирования, прикладных областях. "В некоторых приложениях ,таких как интерактивная графика, простор для объектно-ориентированного программирования воистину неисчерпаем. В других областях, таких как классическая арифметика и вычисления в ней, по-видимому, трудно найти возможности для чего-то большего, чем простая абстракция данных, поэтому средства для поддержки объектно-ориентированного программирования там избыточны"[2].