Задания по программированию (М3)

Занятие 9-11. Основы объектно-ориентированного программирования

  1. Изучите пример использования объектно-ориентированного подхода в написании программ (см. ниже). Включите в предлагаемые программы использование и других объектов и методов, их комбинаций (например, поочередное рисование окружности и точки, "увеличение" квадрата и т.п.).

  2. На основе объектов модуля 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