Изучение статических объектов в Object Pascal

Страницы работы

Содержание работы

МІНИСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНЕВЕРСИТЕТ

«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»

Звіт до лабораторної роботи №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.

Похожие материалы

Информация о работе