ЛАБОРАТОРНАЯ РАБОТА №23 Тема: Разработка программ с использованием объектно-ориентированной технологии

Цель:Развить умения разрабатывать программы с использованием объектно-ориентированной технологий

Программное обеспечение: TURBO PASCAL 7.1

Оснащение:персональный компьютер, практикум

Время проведения: 2 уч. часа

 

Литература:

1. Дж. Кьоу, М.Джеанини. Объектно-ориентированное программирование. Учебный курс. СПб.: Питер,2005. С. 15-33, 38-41, 54-55, 68-75-93, 101-130.

2. Немнюгин С.А. Turbo Pascal. Практикум. 2-е изд. СПб.: Питер, 2007. С. 156-172.

3. Немнюгин С. , Перколаб Л. Изучаем Turbo Pascal. СПб.: Питер, 2008. С. 293-309.

4. Павловская Т.А. Паскаль. Программирование на языке высокого уровня. Учебник для вузов. СПб.: Питер, 2008. С. 175-198.

Время выполнения:2 часа.

ВОПРОСЫ ВХОДНОГО КОНТРОЛЯ:

1. Опишите структуру процедурного и функционального типов.

2. Перечислите процедуры и функций обработки прерываний.

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

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

Структурная программа состоит из совокупности подпрограмм, связанных с помощью интерфейсов.

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

Скрытие деталей реализации называется инкапсуляция.

 

Объект ― инкапсулированная абстракция с четко определенным интерфейсом.

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

 

Наследование позволяет создавать иерархии объектов.

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

 

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

 

Преимущества ООП:

― использование при программировании понятий, более близких к предметной области;

― более простая структура программы в результате инкапсуляции, т.е. объединения свойств и поведения объекта и скрытия деталей его реализации;

― возможность повторно использования кода за счет наследования;

― сравнительно простая возможность модификации программы;

― возможность создания библиотек.

Эти преимущества проявляются при создании программ большого объема и классов программ. Объектная модель по сравнению с другими языками является упрощенной. Тем не менее на ее примере удобно изучить основные положения ООП, не увязнув в многообразии возможностей и деталей.

 

Описание объектов

Объект ― это это тип данных, поэтому он определяется в разделе описания типов. В других языках объектный тип называют классом. Методами называются подпрограммы, предназначенные для работы с полями объекта.

Type имя = object

[private (закрытые)]

описание полей

[public (открытые)]

заголовки методов

end;

 

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

 

Для реализации принципа инкапсуляции, т.е. ограничения видимости элементов, объекты обычно описывают в модулях.

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

Переменная объектного типа называется экземпляром объекта. Часто экземпляры называь просто объектами. Время жизни и видимости объектов зависят от вида и места их описания и подчиняются общим правилам Паскаля.

Var Vasya: monstr; {описывается статистический объект}

pm: ^monstr; {описывается указатель на объект}

new (pm); {создается динамический объект}

 

Доступ к экземплярам объекта осуществляется так же, как к полям записи.

 

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

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

Type deamon = object(monstr)

Наследование полей. Унаследованные поля доступны в объекте точно так же, как и его собственные. Изменить или удалить поле при наследовании нельзя. Таким образом, потомок всегда содержит количество полей, большее или равное количеству полей своего предка.

 

Наследование методов. В потомке объектаможно не только описывать новые методы, но и переопределять существующие, в отличи от полей. Метод можно переопределить полностью или дополнит метод предка.

 

Ранним связываниям называется механизм разрешение компилятором всех ссылок на подпрограммы до выполнения программы.

 

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

 

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

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

Type monstr = object

procedure init(x_, y_, health, ammo_:word);

procedure attack;

procedure draw;

procedure erase;

procedure hit;

procedure move(x_, y_:word);

private

x, y: word;

health, ammo: word;

color: word;

end;

Имена параметров не должны совпадать с именами полей объекта.

 

Описание методов размещается вне объекта в разделе описания процедуры и функций, при этом имени метода предшествует имя объекта, отделенное точкой, например:

Procedure monstr.init (x_, y_, health, ammo_:word);

begin

x: = x_;

y: = y_;

health: = health_;

ammo: = ammo_;

color: = yellow;

end;

procedure monstr.draw;

begin

setcolor(color);

outtextXY(x, y, ‘@’);

end;

 

СОДЕРЖАНИЕ РАБОТЫ:Создать программу с использованием объектно-ориентированной технологии.

Program polytest;

uses crt;

type

fatherprt = ^father;

father = object

age : integer;

constructor init;

procedure talk; virtual;

end;

sonprt = ^ son;

son = object (father)

girlfriend : integer;

constructor init;

procedure talk; virtual;

end;

Var

sergei : father;

anton : son;

link : fatherprt;

constructor father.init;

begin

age := 41;

end;

procedure father.talk;

begin

write ('????');

end;

constructor son.init;

begin

age := 14;

girlfriend := 2;

end;

procedure son.talk;

begin

write ('!!!!!');

end;

begin

clrscr;

sergei.init;

anton.init;

link := @sergei;

link^.talk;

Readln;

link := @anton;

link^.talk;

readln;

end.

 

ВОПРОСЫ ВЫХОДНОГО КОНТРОЛЯ:

1. Сформулируйте определение объектно-ориентированного программирования.

2. Дайте понятие наследования.

3. Перечислите преимущества объектно-ориентированного программирования.

ДОМАШНЕЕ ЗАДАНИЕ

Выучить правила объявления объектов и особенности работы с ними.