Изучите пример использования объектно-ориентированного подхода в написании программ (см. ниже). Включите в предлагаемые программы использование и других объектов и методов, их комбинаций (например, поочередное рисование окружности и точки, "увеличение" квадрата и т.п.).
На основе объектов модуля Figures создайте свой объект (геометрическую фигуру), включите в них дополнительные методы.
Файл figures.pas
Unit Figures;
interface
Uses Graph, Crt;
type
TLocation = object
X,Y: integer;
procedure Init(InitX, InitY: integer);
function GetX: integer;
function GetY: integer;
end;
TPoint = object(TLocation)
Visible: boolean;
constructor Init(InitX, InitY: integer);
destructor Done; virtual;
procedure Show; virtual;
procedure Hide; virtual;
procedure MoveTo(NewX, NewY: integer);
end;
TCircle = object(TPoint)
Radius: integer;
constructor Init(InitX, InitY, InitRadius: integer);
procedure Show; virtual;
end;
implementation
procedure TLocation.Init(InitX, InitY: integer);
begin
X := InitX;
Y := InitY;
end;
function TLocation.GetX: integer;
begin
GetX := X;
end;
function TLocation.GetY: integer;
begin
GetY := Y;
end;
constructor TPoint.Init(InitX, InitY: integer);
begin
TLocation.Init(InitX, InitY);
Visible := false;
end;
destructor TPoint.Done;
begin
Hide;
end;
procedure TPoint.Show;
begin
Visible := true;
PutPixel(X, Y, GetColor);
end;
procedure TPoint.Hide;
var TempColor: byte;
begin
Visible := false;
TempColor := GetColor;
SetColor(GetBkColor);
Show;
SetColor(TempColor);
end;
procedure TPoint.MoveTo(NewX, NewY: integer);
begin
Hide;
X := NewX;
Y := NewY;
Show;
end;
constructor TCircle.Init(InitX, InitY, InitRadius: integer);
begin
TPoint.Init(InitX, InitY);
Radius := InitRadius;
end;
procedure TCircle.Show;
begin
Visible := true;
Circle(X, Y, Radius);
end;
end.
Файл demooop1.pas
program DemoOOp1;
{Пример использования объектов модуля Figures}
uses Crt, Graph, Figures;
var PFigure: ^TCircle;
Gd, Gm : Integer;
Begin
Gd:=Detect;
InitGraph(Gd, Gm, '');
New(PFigure);
PFigure^.Init(100,100,50);
PFigure^.Show;
ReadKey;
PFigure^.MoveTo(200,200);
ReadKey;
Dispose(PFigure);
CloseGraph;
End.
Файл demooop2.pas
program DemoOOp2;
{Пример создания новых объектов (квадрат) на основе объектов модуля Figures}
uses Crt, Graph, Figures;
type
TSquare = object(TPoint)
Leg: integer;
constructor Init(InitX, InitY, InitLeg: integer);
procedure Show; virtual;
end;
constructor TSquare.Init(InitX, InitY, InitLeg: integer);
begin
TPoint.Init(InitX,InitY);
Leg := InitLeg;
end;
procedure TSquare.Show;
begin
Visible := true;
Rectangle(X, Y, X+Leg, Y+Leg);
end;
var PFigure: ^TSquare;
Gd, Gm : Integer;
Begin
Gd:=Detect;
InitGraph(Gd, Gm, '');
New(PFigure);
PFigure^.Init(200,100,100);
PFigure^.Show;
ReadKey;
PFigure^.MoveTo(400,100);
ReadKey;
Dispose(PFigure);
CloseGraph;
End.
Сергеев А.Н. КАГИ ВГПУ. Октябрь 2003