unit Figures; interface uses Graph, Crt; const FigColor = White; { Figure Color - barva objektu } type Figure = object private X,Y: Integer; Visible: Boolean; public constructor Init(InitX, InitY: Integer); function GetX: Integer; function GetY: Integer; function IsVisible: Boolean; procedure Draw; virtual; procedure Show; procedure Hide; procedure MoveTo(NewX, NewY: Integer); end; Point = object (Figure) procedure Draw; virtual; end; Circle = object (Figure) Radius: Integer; constructor Init(InitX, InitY, InitRadius: Integer); procedure Draw; virtual; end; Arc = object (Circle) StartAngle, EndAngle: Integer; constructor Init(InitX, InitY, InitRadius: Integer; InitStartAngle, InitEndAngle: Integer); procedure Draw; virtual; end; Ellipse = object (Circle) Radius2: Integer; constructor Init(InitX, InitY, InitRadius, InitRadius2: Integer); procedure Draw; virtual; end; implementation { Implementace metod tridy Figure } constructor Figure.Init(InitX, InitY: Integer); begin X := InitX; Y := InitY; Visible := False; end; function Figure.GetX: Integer; begin GetX := X; end; function Figure.GetY: Integer; begin GetY := Y; end; function Figure.IsVisible: Boolean; begin IsVisible := Visible; end; procedure Figure.Draw; begin {abstraktni metoda} end; procedure Figure.Show; begin Visible := True; SetColor(FigColor); Draw; end; procedure Figure.Hide; begin Visible := False; SetColor(GetBkColor); Draw; end; procedure Figure.MoveTo(NewX, NewY: Integer); begin Hide; X := NewX; Y := NewY; Show; end; { Implementace metod tridy Point } procedure Point.Draw; begin PutPixel(X, Y, GetColor); end; { Implementace metod tridy Circle } constructor Circle.Init(InitX, InitY, InitRadius: Integer); begin Figure.Init(InitX, InitY); Radius := InitRadius; end; procedure Circle.Draw; begin Graph.Circle(X, Y, Radius); end; { Implementace metod tridy Arc } constructor Arc.Init(InitX, InitY, InitRadius: Integer; InitStartAngle, InitEndAngle: Integer); begin Circle.Init(InitX, InitY, InitRadius); StartAngle := InitStartAngle; EndAngle := InitEndAngle; end; procedure Arc.Draw; begin Graph.Arc(X, Y, StartAngle, EndAngle, Radius); end; { Implementace metod tridy Ellipse } constructor Ellipse.Init(InitX, InitY, InitRadius, InitRadius2: Integer); begin Circle.Init(InitX, InitY, InitRadius); Radius2 := InitRadius2; end; procedure Ellipse.Draw; begin Graph.Ellipse(X, Y, 0, 360, Radius, Radius2); end; end.