Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / lect14.doc
Скачиваний:
8
Добавлен:
20.05.2014
Размер:
79.87 Кб
Скачать

** cpp1 ** 24.05.2004

Лекция 14

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

14.1 Объекты и процедуры при программировании

Вспомним, что ранее рассматривали следующие группы данных,

т.е. структуры: массивы, строки, структуры struct.

Объектно-ориентированное программирование (ООП) - это способ

(технология, метод) программирования с использованием сложных новых

структур - объектов.

Начало распространения ООП - 1985 г. Объекты в программе соответствуют

физическим объектам задачи и могут возникать, изменяться, взаимодействовать

с другими объектами. Например, объектом может быть окно в Windows,

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

"живут" и действуют. Работа с объектами возможна в Си++, в Паскале

с объектами, VBasic и некоторых других языках, но объектов нет в Cи.

Одно из важных применений ООП - это программирование сложных и

красивых интерфейсов. При ООП физические объекты не "крошатся" на мелкие

неузнаваемые части, а существуют в виде своих различных модификаций. При

этом сложные объекты создаются из более простых. Определение ООП

сформулируем следующим образом.

ООП - это метод программирования, при котором программа

рассматривается как совокупность объектов, которые в процессе

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

с другими объектами, меняют свое состояние и разрушаются.

Для понимания ООП можно считать, что большие программы разбиваются на

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

Для программной реализации объекта используются данные и функции,

объединённые в некоторую структуру, называемую классом. Другими словами,

ООП имеет дело не с отдельными подпрограммами, а с их классами. Класс

характеризует объект, это как бы тип объекта, но очень сложный. Можно

говорить об объекте определенного класса. Есть аналогия с классами в

обычном понимании.

class A

class B

f (x,y)

main( )

Рис. 14.1 - Программа с классами

Класс - это абстрактный тип данных. Для объявления класса используется

слово class. Каждую простую переменную характеризует тип (например, int,

float, char в Си++), а объект характеризует класс т.е. имеем пары:

переменная - тип, объект - класс.

Слово class автор С++ взял из языка Simula-67.

Отметим, что термин " абстрактный тип данных" означает, что это

сложный тип, которые создаётся, т.е. "конструируется", программистом для использования наряду со стандартными типами. Абстрактный тип данных включает функции. Структуры, определяемые словом struct и рассмотренные в разделе 10.5, тоже можно считать новым типом, но термин "класс" соответствует ещё большему усложнению типа, т.к. в него, помимо данных, входят функции класса.

Традиционные программы, не использующие объектов, состоят из подпрограмм,

вызываемых в определенном порядке. Каждая подпрограмма решает какую-то

часть общей задачи и обменивается данными с другими подпрограммами.

Поэтому программист должен прежде всего думать о разбиении большой задачи на

ряд подзадач, из решений которых компонуется общее решение. Такое

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

Рассмотрим примеры применения обоих методов программирования:

процедурного и ООП. Пусть нужна программа, которая перемещает

прямоугольник или овал по экрану. Возможны три подхода к решению этой задачи:

1) составить две независимых программы для каждой фигуры;

2) составить одну программу, но предусмотреть в ней различные функции для

прямоугольника и овала;

3) составить программу для работы с объектами "прямоугольник" и "овал".

Сравним второй и третий подходы, а к первому подходу вернемся в конце

этого раздела.

При процедурном подходе программа на Си++ будет состоять из большого

количества функций, например, f1 - определение координат центра эллипса или

прямоугольника; f2 - определение размеров прямоугольника; f3 - определение

осей эллипса; f4 - определение координат четырех опорных точек для

рисования прямоугольника; f5 - опредление массива опорных точек овала для

соединения их прямыми; f6 - рисование прямой по двум заданным точкам и т.д.

Эти подпрограммы-функции условно показаны на рис.14.2 в виде "кирпичиков"

для построения программы. Между всеми подпрограммами будут очень сложные

связи, показанные в качестве примера линиями.

f1

f1

Фигура

f2

Овал

Прямоугольник

f3

Рис. 14.2 Функции и объекты при процедурном и

объектно-ориентированном программировании

Для ООП на Си++ в этой задаче можно определить 3 объекта: фигура,

прямоугольник, овал, см. рис.14.2. Все преобразования при перемещении

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

конкретного определения ее вида. Прямоугольник или овал задать как

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

прямоугольник и овал делают все, что и фигура, но у каждого есть некоторая

специфика. Другими словами, соответствующими ООП, объекты "прямоугольник"

и "овал" наследуют все свойства объекта "фигура", но к ним добавляют свои

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

будут находиться внутри объектов и поэтому их проще осуществлять и

понимать.

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

Перейдем к взаимодействию программ и объектов. При процедурном

программировании подпрограммы объединяются в программу. Например, пусть

написаны на С++ две больших программы для овала и прямоугольника, о которых

говорилось выше. Каждая содержит основную подпрограмму main и десяток или

более подпрограмм. Первую программу имеет назовем Oval, а вторую - Priam.

Любая законченная работающая программа обычно может связаться с другой

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

программы, например, из Oval, к какой-то функции программы Priam невозможно.

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

объединяет данные и функции, т.е. является как бы самостоятельной

программой, но к которой другой объект может легко обращаться за данными,

модифицировать их, заставлять работать ее функции.

Соседние файлы в папке Лекции