МІНИСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНЕВЕРСИТЕТ
«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»
Звіт до лабораторної роботи №1
з курсу “ Объектно-ориентированное программирование ”
Виконав:
Студент гр. КІТ-14в
Богачов О. С.
Перевірив:
Филатова А. Н.
Харків – 2006
Тема: Статические объекты в Object Pascal
Цель работы: Изучение статических объектов и ознакомление с принципами инкапсуляции, наследования и полиморфизма методов в Object Pascal.
Порядок выполнения работы:
1. В соответствии с вариантом индивидуального задания
описать иерархию объектных типов.
2. Описать методы, необходимые для вывода на экран каждого
графического объекта, гашения этого объекта и его движения по
экрану.
3. Добавить в иерархию объектный тип по своему усмотрению.
4. Добавить в каждый объектный тип, кроме первого, методы
увеличения и уменьшения соответствующего графического объекта.
Индивидуальные задания:
точка -> треугольник -> треугольник в окружности -> треугольник в окружности в квадрате
Текст программы:
uses Graph, Crt;
type
TPoint = object
X,Y,R: Integer;
constructor Init(IX, IY, IR: Integer);
procedure Show; virtual;
procedure Hide; virtual;
procedure Zoom(DR: Integer);
procedure Move(DX, DY, DR: Integer);
end;
TSquare = object (TPoint)
constructor Init(IX, IY, IR: Integer);
procedure Show; virtual;
procedure Hide; virtual;
end;
TSqInSq = object (TSquare)
constructor Init(IX, IY, IR: Integer);
procedure Show; virtual;
procedure Hide; virtual;
end;
TCirTwoSq = object (TSqInSq)
constructor Init(IX, IY, IR: Integer);
procedure Show; virtual;
procedure Hide; virtual;
end;
{--------------------------------------------------------}
{ TPoints's method implementations: }
{--------------------------------------------------------}
constructor TPoint.Init(IX, IY, IR: Integer);
begin
X:=IX;
Y:=IY;
R:=IR;
end;
procedure TPoint.Show;
begin
PutPixel(X, Y, 14);
end;
procedure TPoint.Hide;
begin
PutPixel(X, Y, 0);
end;
{Additional method}
procedure TPoint.Zoom(DR: Integer);
begin
R:=R+DR;
end;
procedure TPoint.Move(DX, DY, DR: Integer);
var i:integer;
begin
Hide;
X := X + DX;
Y := Y + DY;
Zoom(DR);
Show;
end;
{--------------------------------------------------------}
{ TSquare's method implementations: }
{--------------------------------------------------------}
constructor TSquare.Init(IX, IY, IR: Integer);
begin
TPoint.Init(IX, IY, IR);
end;
procedure TSquare.Show;
begin
SetColor(11);
Line(X,Y-R,X-round(sqrt(3)/2*R),Y+round(R/2));
Line(X,Y-R,X+round(sqrt(3)/2*R),Y+round(R/2));
Line(X-round(sqrt(3)/2*R),Y+round(R/2),X+round(sqrt(3)/2*R),Y+round(R/2));
end;
procedure TSquare.Hide;
begin
SetColor(0);
Line(X,Y-R,X-round(sqrt(3)/2*R),Y+round(R/2));
Line(X,Y-R,X+round(sqrt(3)/2*R),Y+round(R/2));
Line(X-round(sqrt(3)/2*R),Y+round(R/2),X+round(sqrt(3)/2*R),Y+round(R/2));
end;
{--------------------------------------------------------}
{ TSqInSq's method implementations: }
{--------------------------------------------------------}
constructor TSqInSq.Init(IX, IY, IR: Integer);
begin
TSquare.Init(IX, IY, IR);
end;
procedure TSqInSq.Show;
begin
SetColor(12);
Line(X,Y-R,X-round(sqrt(3)/2*R),Y+round(R/2));
Line(X,Y-R,X+round(sqrt(3)/2*R),Y+round(R/2));
Line(X-round(sqrt(3)/2*R),Y+round(R/2),X+round(sqrt(3)/2*R),Y+round(R/2));
Circle(X,Y,R);
end;
procedure TSqInSq.Hide;
begin
SetColor(0);
Line(X,Y-R,X-round(sqrt(3)/2*R),Y+round(R/2));
Line(X,Y-R,X+round(sqrt(3)/2*R),Y+round(R/2));
Line(X-round(sqrt(3)/2*R),Y+round(R/2),X+round(sqrt(3)/2*R),Y+round(R/2));
Circle(X,Y,R);
end;
{--------------------------------------------------------}
{ TCirTwoSq's method implementations: }
{--------------------------------------------------------}
constructor TCirTwoSq.Init(IX, IY, IR: Integer);
begin
TSqInSq.Init(IX, IY, IR);
end;
procedure TCirTwoSq.Show;
begin
SetColor(10);
Line(X-R, Y, X, Y-R);
Line(X, Y-R, X+R, Y );
Line(X+R, Y, X, Y+R);
Line(X, Y+R, X-R, Y );
Line(X,Y-R,X-round(sqrt(3)/2*R),Y+round(R/2));
Line(X,Y-R,X+round(sqrt(3)/2*R),Y+round(R/2));
Line(X-round(sqrt(3)/2*R),Y+round(R/2),X+round(sqrt(3)/2*R),Y+round(R/2));
Circle(X,Y,R);
end;
procedure TCirTwoSq.Hide;
begin
SetColor(0);
Line(X-R, Y, X, Y-R);
Line(X, Y-R, X+R, Y );
Line(X+R, Y, X, Y+R);
Line(X, Y+R, X-R, Y );
Line(X,Y-R,X-round(sqrt(3)/2*R),Y+round(R/2));
Line(X,Y-R,X+round(sqrt(3)/2*R),Y+round(R/2));
Line(X-round(sqrt(3)/2*R),Y+round(R/2),X+round(sqrt(3)/2*R),Y+round(R/2));
Circle(X,Y,R);
end;
{--------------------------------------------------------}
{ Global variables }
{--------------------------------------------------------}
var
Points: array [1..5] of TPoint;
Squares: array [1..5] of TSquare;
SqInSqs: array [1..5] of TSqInSq;
CirTwoSqs: array [1..5] of TCirTwoSq;
i, Gd, Gm: Integer;
{--------------------------------------------------------}
{ Main program block }
{--------------------------------------------------------}
begin
Gd := Detect;
InitGraph(Gd, Gm, ' ');
if GraphResult <> grOk then Halt(1);
ClearDevice;
for i:=1 to 5 do
begin
Points[i].Init(random(100),100+random(50),0);
Points[i].Show;
Squares[i].Init(random(200),100+random(100),30);
Squares[i].Show;
SqInSqs[i].Init(random(200),100+random(150),50);
SqInSqs[i].Show;
CirTwoSqs[i].Init(random(200),100+random(200),40);
CirTwoSqs[i].Show;
end;
repeat
for i:=1 to 5 do
begin
Points[i].Move(i+1,0,0);
Squares[i].Move(i-1,i+1,2-integer(random(5)));
SqInSqs[i].Move(i+1,i-1,2-integer(random(5)));
CirTwoSqs[i].Move(0,i+1,2-integer(random(5)));
end;
delay(100);
until keypressed;
CloseGraph;
end.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.