Лекция №
Вид материала | Лекция |
- «Социальная стратификация и социальная мобильность», 46.19kb.
- Первая лекция. Введение 6 Вторая лекция, 30.95kb.
- Лекция Сионизм в оценке Торы Лекция Государство Израиль испытание на прочность, 2876.59kb.
- Текст лекций н. О. Воскресенская Оглавление Лекция 1: Введение в дисциплину. Предмет, 1185.25kb.
- Собрание 8-511 13. 20 Лекция 2ч режимы работы эл оборудования Пушков ап 8-511 (ррэо), 73.36kb.
- Концепция тренажера уровня установки. Требования к тренажеру (лекция 3, стр. 2-5), 34.9kb.
- Лекция по физической культуре (15. 02.; 22. 02; 01. 03), Лекция по современным технологиям, 31.38kb.
- Тема Лекция, 34.13kb.
- Лекция посвящена определению термина «транскриптом», 219.05kb.
- А. И. Мицкевич Догматика Оглавление Введение Лекция, 2083.65kb.
1.2Объектно-ориентированное программирование Лекция №4
Методы объектно-ориентированного программирования
Рассмотрим в обобщенном плане основные методы объектно-ориентированного программирования, преимущества их использования по сравнению с традиционным процедурным методом. Механизм реализации методов объектно-ориентированного программирования изучается на конкретных примерах в следующих главах.
В настоящее время внедрение программирования в экономику и управление производством привело к появлению больших по объему программ с большим количеством функций и к необходимости использования различных собственных типов данных пользователя, например, структур данных, представляющих собой совокупность реквизитов документов. Такие типы данных называются абстрактными типами данных или типами данных, определяемые пользователем.
В связи с этим, проявились недостатки метода процедурного программирования:
- сложности создания больших программ;
- для множества типов данных, определяемых пользователем, необходимо программировать множество комплексов похожих функций для обработки этих типов данных;
- типы данных и функции для их обработки не объединены в структуре программы, поэтому, отсутствует механизм управления доступом к этим данным и функциям; любая функция может обработать эти данные;
- наличие похожих типов данных, определяемых пользователем, отличающихся некоторыми компонентами, приводит дублированию компонент;
Процедурное программирование не обеспечивает в достаточной степени абстракции данных. Потребовался основной принцип абстрактного типа данных: никакие другие функции, кроме специальных не должны иметь доступа к этим данным. Для реализации абстрактного типа данных был предложен новый тип - класс, как совокупность данных и функций.
Появился новый метод программирования – метод объектно-ориентированного программирования. Метод основывается на модели построении программы как иерархии классов.
"Объектно-ориентированное программирование - это основная методология программирования 90-х годов. Она представляет собой продукт 25 лет практики и опыта"[4].
Основными методами программирования являются средства инкапсуляции, наследования, полиморфизма.
Инкапсуляция (encapsulation) - это объединение данных и функций для работы с этими данными в абстрактные типы данных - классы. Инкапсуляция даёт сокрытие элементов-данных (data members) и элементов-функций (members functions) в классе с управлением доступа к ним. Переменные типа класс называются объектами (object). Состояние объекта определяется элементами-данными соответствующего класса. Поведение объекта определяется элементами- функциями соответствующего класса.
Преимущества инкапсуляции проявляются в следующем:
- Упрощение написания больших программ. В больших про-грамммах большое количество функций и переменных усложняет создание и сопровождение программ. Концепция объектно-ориентированного программирования - это разделение программы на отдельные небольшие части - классы, в каждом из которых сгруппированы определенные элементы-данные и элементы-функции для их обработки.
- Управление доступом к элементам класса. Атрибуты доступа private, protected, public объявляют элементы класса соответственно закрытыми, защищенными и открытыми для доступа.
- Возможность изменения содержимого класса (например, до-бавление новых элементов) без изменения других частей программы, использующих этот класс.
Наследование (inheritance) - это порождение новых абстрактных типов данных (производных классов) на основе существующих абстрактных типов данных (базовых классов), причём производный класс наследует данные и функции базового класса, а также имеет собственные данные и функции. Наследование позволяет исключить множество типов данных, определяемых пользователем, и множество функций для их обработки за счет выделения одинаковых элементов из классов и помещения их в базовый класс с целью повторного их использования через механизм наследования.
Преимущества наследования проявляются в следующем:
- Исключение дублирования элементов-данных и элементов-функций за счет повторного использования элементов класса в производных классах.
- Упрощение программирования, т.к. наследуемые и собственные элементы класса находятся в одной иерархии классов и не разбросаны по всей программе.
- Возможность оптимального моделирования связей объектов реального мира в прикладной области (например, в информационных системах в экономике и управлении) за счет иерархии классов.
Полиморфизм (polymorphism) означает способность объекта изменять свои действия (операции, функции) в зависимости от типов данных.
Полиморфизм имеет следующие методы программирования:
- общий полиморфизм (перегрузка операций, преобразование типов, перегрузка функций);
- чистый полиморфизм (виртуальные функции, абстрактные классы);
- параметрический полиморфизм (шаблоны функций и классов).
Перегрузка операций - это переопределение действий операций применительно к объектам конкретных классов. Преобразование типов данных при совместном их использовании тоже является одним из методов полиморфизма. Перегрузка функции - это использование одинакового имени для функций, выполняющих действия над различными типами данных.
Виртуальная функция - это элемент-функция базового класса в иерархии наследования, переопределенная в производных классах и вызываемая в зависимости от класса через указатель или ссылку на базовый класс.
Параметрический полиморфизм - это механизм использования обобщенного определения функции или класса (шаблона) для автоматической генерации новых функций или классов для различных типов данных.
Преимущества полиморфизма проявляются в следующем:
- Облегчение и удобство написания программ за счет перегрузки операций и функций, что позволяет использовать их для типов данных, определяемых пользователем.
- Обеспечение виртуальными функциями чистого полиморфизма, т.е. свойства использовать один и тот же оператор для вызова множества функций, но конкретная функция определяется по типу вызываемого объекта.
- Механизм виртуальных функций – это возможность написания простых функций общего назначения для иерархии классов.
- Обеспечение компактности программ и расширяемости иерархии классов за счет использования виртуальных функций.
- Автоматическая генерация по обобщенному шаблону новых функций или классов для различных типов данных, реализуемая механизмом параметрического полиморфизма.
Объектно-ориентированное программирование принципиально отличается от процедурного программирования. Процедурное программирование основывается на алгоритмах, т.е. на функциях обработки задачи. При этом структуры данных не учитываются, как части организации программы. Объектно-ориентированное программирование основывается на понятиях прикладной области, являющихся классами. Программы строятся как иерархия классов.
Объектно-ориентированное программирование эффективно в нереализованных, с точки зрения программирования, прикладных областях. "В некоторых приложениях ,таких как интерактивная графика, простор для объектно-ориентированного программирования воистину неисчерпаем. В других областях, таких как классическая арифметика и вычисления в ней, по-видимому, трудно найти возможности для чего-то большего, чем простая абстракция данных, поэтому средства для поддержки объектно-ориентированного программирования там избыточны"[2].
Этапы разработки ОО программ. Лекция №5
Метод объектно-ориентированного программирования основан на модели построения программы, как иерархии классов. Этапы разработки программ задач принципиально отличаются от процедурного программирования, так как проектирование программы ведется в терминах (понятиях) прикладной области и отражает ее иерархию.
"Ключ к искусному проектированию можно подобрать, если непосредственно моделировать некоторые аспекты "окружающей действительности", то есть "поймать" понятия из данной прикладной области в виде классов, представить зависимости между классами формальным образом, например, в виде наследования, и проделывать это повторно на разных уровнях абстракции"[2].
Разработка программ экономических задач, исходя из изложенных ранее их особенностей, состоит из следующих этапов:
- проектирование структуры программы, включающее проектирование структурной схемы программы, представляющей собой иерархию взаимосвязанных классов, и интерфейсов классов;
- программирование классов.
Этап проектирования структурной схемы программы представляет собой итерационный процесс и включает следующие подэтапы:
- составление начальной иерархии классов, являющимися понятиями прикладной области, входящие в условие задачи, и определение для каждого класса совокупности элементов-данных и элементов-функций для их обработки;
- реорганизация иерархии классов, т.е. либо выделение общих элементов нескольких классов в новый класс, либо разделение класса на несколько новых.
Проектирование интерфейсов классов основано на выборе средств инкапсуляции, наследования и полиморфизма.
В проектировании должен участвовать менеджер соответствующей службы предприятия, т.е. пользователь разрабатываемой системы управления. Можно рекомендовать в качестве классов документы, циркулирующие в разрабатываемой системе. Взаимозависимость документов определяет взаимозависимость классов. Каждый класс-документ будет содержать совокупность собственных и наследуемых реквизитов и функций. Поскольку управление задачей осуществляется с помощью меню, файл управления будет содержать главную функцию main, функции меню и объявления объектов классов, с помощью которых будут вызываться соответствующие элементы-функции классов.
Этап программирования заключается в программировании элементов-функций целых взаимосвязанных классов, начиная с базовых классов, и не подчиняется правилам программирования "сверху - вниз".