Лекция №

Вид материалаЛекция
1.2Объектно-ориентированное программирование Лекция №4
Инкапсуляция (encapsulation)
Наследование (inheritance)
Полиморфизм (polymorphism)
Перегрузка операций
Виртуальная функция
Параметрический полиморфизм
Этапы разработки ОО программ. Лекция №5
Подобный материал:
1   2   3   4   5   6   7   8   9   10   11

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Этапы разработки ОО программ. Лекция №5


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

"Ключ к искусному проектированию можно подобрать, если непосредственно моделировать некоторые аспекты "окружающей действительности", то есть "поймать" понятия из данной прикладной области в виде классов, представить зависимости между классами формальным образом, например, в виде наследования, и проделывать это повторно на разных уровнях абстракции"[2].

Разработка программ экономических задач, исходя из изложенных ранее их особенностей, состоит из следующих этапов:

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

- программирование классов.

Этап проектирования структурной схемы программы представляет собой итерационный процесс и включает следующие подэтапы:

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

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

Проектирование интерфейсов классов основано на выборе средств инкапсуляции, наследования и полиморфизма.

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

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