Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornye_OOP.doc
Скачиваний:
17
Добавлен:
11.03.2015
Размер:
1.04 Mб
Скачать
  1. Тема, цель работы, вариант задания.

  2. Описание иерархии классов (рисунок диаграммы классов, текстовое описание свойств и методов каждого класса).

  3. Исходный текст модулей программы, выполняющей построение иерархического дерева.

Пример. Программная реализация иерархии классов, представляющих собой графические примитивы.

Программа состоит из следующих модулей: OOP_Lab3, GraphObj, Point, Line, Rect, Circle, Square, Trian. Их тексты приведены ниже.

  1. Модуль 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]