Объекты в турбо ПаскалеРефераты >> Программирование и компьютеры >> Объекты в турбо Паскале
end;
Чтобы описания графических объектов не мешали созданию основной программы, оформим эти описания в отдельном модуле GraphObj:
Unit GraphObj;
Interface
{интерфейсная часть модуля содержит только объявления объектов}
type
TGraphObj = object
end;
TPoint = object (TGraphObj)
end;
TLine = object (TGraphObj)
end;
TCircle = object (TGraphObj)
end;
TRect = object (Tline)
end;
Implementation
{исполняемая часть содержит описания всех объектных методов}
Uses Graph;
Constructor TGraphObj.Init;
end.
В интерфейсной части модуля приводятся лишь объявления объектов, подобно тому как описываются другие типы данных, объявляемые в модуле доступными для внешних программных едениц. Расшифровка объектных методов помещается в исполняемую часть implementation, как если бы это были описания обычных интерфейсных процедур и функций. При описании методов можно опускать повторное описание в заголовке параметров вызова. Если они всё же повторяются, они должны в точности соответствовать ранее объявляемым параметрам в описании объекта. Например, заголовок конструктора TGraphObj.Init может быть таким:
Сonstructor TGraphObj.Init;
или таким:
Сonstructor TGraphObj.Init (aX, aY: Integer; aColor: Word);
3. Использование объектов
Идею инкапсуляции полей и алгоритмов можно применить не только к графическим объектам, но и ко всей программе в целом. Ничто не мешает нам создать объект-программу и “научить” его трём основным действиям: инициации (Init), выполнению основной работы (Run), завершению (Done). На этапе инициации экран переводится в графический режим работы и создаются и отображаются графические объекты (100 экземпляров TРoint и по одному экземпляру TLine, TCircle, TRect). На этапе Run осуществляется сканирование клавиатуры и перемещение графических объектов. Наконец, на этапе Done экран переводится в текстовый режим и завершается работа всей программы.
Создание экземпляра объекта ничуть не отличается от создание экземпляра переменной любого другого типа. Просто в разделе описания переменных мы указываем имя переменной и её тип:
var
App: TGraphApp;
Получив это указание, компилятор зарезервирует нужный объём памяти для размещения всех областей объекта программы. Чтобы обратиться к тому или иному объектному методу или полю, используется составное имя, причём первым указывается не имя объектного типа, а имя соответствующей переменной.
Переменные объектного типа могут быть статическими или динамическими, т.е. располагаться в сегменте данных (статические) или в куче (динамические).
Для инициации динамической переменной используется вызов функции . В этом случае первым параметром указывается имя типа инициируемой переменной, а вторым осуществляется вызов метода-конструктора, который нужен для настройки таблицы виртуальных методов. Такой приём (распределение объектов в динамической памяти с одновременной инициацией их ТВМ) характерен для техники ООП.
Следует иметь в виду, что в отличие от конструктора, осуществляющего настройку ТВМ, деструктор не связан с какими-то специфичными действиями: для компилятора слова destructor и procedure — синонимы. Введение в ООП деструкторов носит, в основном, стилистическую направленность — просто процедуру, разрушающую экземпляр объекта, принято называть деструктором. В реальной практике ООП с деструкторами обычно связывают процедуры, которые не только прекращают работу с объектом, но и освобождают выделенную для него динамическую память.
В заключении следует сказать, что формалистика ООП в рамках реализации этой технологии в Турбо Паскале предельно проста и лаконична. Введение лишь шести зарезервированных слов, из которых действительно необходимыми являются три (object, constructor, virtual), весьма небольшая плата за мощный инструмент создания современного программного обеспечения.
Постановка учебной задачи
При выборе программного продукта на тему: «Объекты языка программирования Turbo Pascal» Я ориентировался на создание графической программы. Поэтому я выбрал программу реализующюю пример из физики, под названием “Броуновское движение”.
Эта программа для начала и завершения работы требует нажатие любой клавиши.
Программа этой курсовой работы предназначена для компьютеров с мощностью процессора не менне 50 MHz (80386sx).
Техническая реализация программы потребует использования средств двух стандартных библиотек – CRT и GRAPH.
Основное тело программы делится на несколько частей:
setcolor(2);
settextstyle(0,0,2);
outtextxy(5,100,'Данная программа покажет тебе пример из');
outtextxy(5,150,'физики: "Броуновское движение"');
setcolor(5);
outtextxy(5,200,'Выполнил студент 2 курса, 21 группы');
outtextxy(200,250,'Ягунов Андрей');
settextstyle(0,0,1);
setcolor(4);
outtextxy(200,430,'Для продолжения нажми любую клавищу'); readln;
setfillstyle(1,0);
floodfill(12,12,13);
Этот блок реализует рисование заставку.
setbkcolor (8);
x1 := 250; y1 := 180;
x2 := 340; y2 := 300;
setfillstyle ( 1, 14 );
bar ( 100, 300, 500, 310 );
bar ( 160, 300, 165, 400 );
bar ( 440, 300, 445, 400 );
setfillstyle ( 1, 11 );
bar ( x1, y1, x2, y2 );
line ( x1-1, y1-30, x1-1, y2+1 );
line ( x2+1, y1-30, x2+1, y2+1 );
line ( x1-1, y2+1, x2+1, y2+1 );
line ( x1-1, y1-1, x2+1, y1-1 );
ellipse ( x1+(x2-x1)div 2, y1-30, 0, 360, (x2-x1) div 2, 4 );
Этот блок реализует рисование объектов (стол, колба), а также присваивает им координаты, которые являются как бы основой.
x[i] := x1 + random (x2-x1);
y[i] := y1 + random (y2-y1);
putpixel ( x[i], y[i], 0 );
end;
Здесь осуществляется начальная прорисовка молекул.
repeat
for i := 1 to N do putpixel ( x[i], y[i], 11 );
for i := 1 to N do begin
dx := 2 - random (5);
dy := 2 - random (5);
if ( x[i] + dx > x1 ) and ( x[i] + dx < x2 ) then x[i] := x[i] + dx;
if ( y[i] + dy > y1 ) and ( y[i] + dy < y2 ) then y[i] := y[i] + dy;
end;
for i := 1 to N do putpixel ( x[i], y[i], 1 );
delay (600);
until keypressed;
Основной блок программы. Здесь осуществляется беспорядочное движение молекул за счет использования цикла.
Пример работы программы
При запуске программы появляется окно с указанием названия программы и имени и фамилии написавшего программу (см. рис. 1):