- •Тема, цель работы, вариант задания.
- •Тема, цель работы, вариант задания.
- •Модуль GraphObj.
- •Модуль Point.
- •Модуль Circle.
- •Модуль Rect.
- •Модуль Line.
- •Модуль Square.
- •Модуль Trian.
- •Основной модуль oop_Lab3.
- •Тема, цель работы, вариант задания.
- •Тема, цель работы, вариант задания.
- •Тема, цель работы, вариант задания.
-
Тема, цель работы, вариант задания.
-
Описание иерархии классов (рисунок диаграммы классов, текстовое описание свойств и методов каждого класса).
-
Исходный текст модулей программы, выполняющей построение иерархического дерева.
Пример. Программная реализация иерархии классов, представляющих собой графические примитивы.
Программа состоит из следующих модулей: OOP_Lab3, GraphObj, Point, Line, Rect, Circle, Square, Trian. Их тексты приведены ниже.
-
Модуль GraphObj.
unit GraphObj;
interface
uses
Windows, Classes, Controls, Graphics, Grids, SysUtils;
type
{ TGraphObj - это абстрактный базовый класс, для работы с графическими примитивами такими как точка, окружность, прямая, квадрат, прямоугольник и треугольник. Он инкапсулирует в себе основные поля и методы которые есть у каждого из вышеперечисленных объектов.
Свойства:
ClassName - название класса;
Name - имя экземпляра объекта;
Color - цвет прорисовки объекта;
X, Y - координаты реперной точки;
Canvas - область прорисовки;
Visible - свойство установки и индикации видимости объекта.
Методы:
Create - конструктор, создающий экземпляр объекта; объявлен виртуальным, т.к. объекты-наследники могут перекрывать его, добавляя свои свойства.
Draw - вычерчивает объект заданным цветом AColor. Метод - абстрактный,
т.е. его описание отсутствует в родительском классе, т.к. у каждого
наследника TGraphObj есть своя собственная процедура прорисовки.
Show - показывает объект - вычерчивает его цветом Color.
Hide - прячет объект, вычерчивая его цветом фона.
Move - перемещает объекта на dX по оси ОX и dY - по OY.
DrawGrid - отображаение свойств объекта в таблице - AStringGrid. Метод
виртуальный, потому что у каждого наследника есть дополнительные свойства, которые отображаются посредством использования свойства полиморфизма.
ClearGrid - отчищает AStringGrid.
EditGrid - редактирование свойства в строке ARow в AStringGrid.}
TGraphObj = class(TObject)
{ поля и методы, доступные только в модуле (скрыты от пользователя) }
private
FName: string;
FColor: TColor;
FVisible: Boolean;
procedure SetName(Value: string); // методы
procedure SetColor(Value: TColor); // установки
procedure SetVisible(Value: Boolean); // соответствующих
procedure SetCanvas(Value: TCanvas); // свойств
{ поля и методы, доступные только потомкам }
protected
FX: Integer;
FY: Integer;
FCanvas: TCanvas;
FClassName: string;
procedure Show;
procedure Hide;
{ поля и методы доступные всем }
public
constructor Create(ACanvas: TCanvas; AName: string; AX, AY: Integer;
AColor: TColor; AVisible: Boolean);
procedure Draw(AColor: TColor); virtual; abstract;
procedure Move(dX, dY: Integer); virtual; abstract;
procedure ClearGrid(AStringGrid: TStringGrid);
procedure DrawGrid(AStringGrid: TStringGrid); virtual;
procedure EditGrid(AStringGrid: TStringGrid; ARow:integer); virtual;
property ClassName: string read FClassName;
property Name : string read FName write SetName;
property Color: TColor read FColor write SetColor;
property X: Integer read FX write FX;
property Y: Integer read FY write FY;
property Canvas: TCanvas read FCanvas write SetCanvas;
property Visible: Boolean read FVisible write SetVisible;
end;
implementation
procedure TGraphObj.SetName(Value: string);
begin
if (Value <> FName) and (Value <> '') then FName := Value;
end;
procedure TGraphObj.SetColor(Value: TColor);
begin
if FColor <> Value then
begin
FColor := Value;
if FVisible then Show;
end;
end;
procedure TGraphObj.SetVisible(Value: Boolean);
begin
if FVisible <> Value then
begin
if Value = True then Show else Hide;
FVisible := Value;
end
end;
procedure TGraphObj.SetCanvas(Value: TCanvas);
begin
if (FCanvas <> Value) and (Value <> nil) then
begin
FCanvas := Value;
if FVisible then Show;
end;
end;
constructor TGraphObj.Create(ACanvas: TCanvas; AName: string;
AX, AY: Integer; AColor: TColor; AVisible: Boolean);
begin
FCanvas := ACanvas;
FX := AX;
FY := AY;
FName := AName;
FColor := AColor;
FVisible := AVisible;
end;
procedure TGraphObj.Show;
begin
Draw(FColor)
end;
procedure TGraphObj.Hide;
begin
Draw(GetBkColor(FCanvas.Handle))
end;
procedure TGraphObj.ClearGrid(AStringGrid: TStringGrid);
var
i: Byte;
begin
with AStringGrid do
for i := 1 to RowCount - 1 do Rows[i].Clear;
end;
procedure TGraphObj.DrawGrid(AStringGrid: TStringGrid);
var
i: Byte;
begin
// инициализация ячеек таблицы AStringGrid значениями свойств объекта
with AStringGrid do
begin
Cells[0, 1] := 'Class';
Cells[1, 1] := FClassName;
Cells[0, 2] := 'Name';
Cells[1, 2] := FName;
Cells[0, 3] := 'Color';
{ заполнение ячейки значением свойства Color цветом Color }
Canvas.Font.Color := FColor;
Canvas.TextRect(CellRect(1, 3), CellRect(1, 3).Left + 3, CellRect(1,
3).Top + 2, IntToStr(FColor));
for i := 4 to RowCount - 1 do Rows[i].Clear; {отчищаем остальные строки}
end
end;
procedure TGraphObj.EditGrid(AStringGrid: TStringGrid; ARow: Integer);
var
i, j: Integer;
begin
with aStringGrid do
case ARow of { выбор свойства в ячейке AStringGrid'а по строке ARow }
2:FName := Cells[1, 2];
3:begin
Val(Cells[1, 3], i, j);
if j = 0 then FColor := i;
end;
4:FX := StrToInt(Cells[1, 4]);
5:FY := StrToInt(Cells[1, 5]);
end;
end;
end.