type Class declaration
Public
Field | Property | Method declaration
{...}
end;
Директива Public начинает раздел объявлений определения класса. В разделе public, Поля(Fields), Свойства(Properties) и Методы(Methods) объявлены как доступные для этого класса и классов, происходящих от этого, и код используют экземпляры класса. В Объектно-ориентированных терминах, объект класса кажется черным ящиком. Внутренние операции не уместны. Public и published поля, свойства и методы - внешне видимая часть объекта - управляемая доступом к внутренней организации класса.
Поскольку public и published доступ обеспечивает связь видов с внешним кодом, Вы должны избегать везде, где возможно, создание изменений в этих разделах.
Раздел Published очень похож на раздел Public, за исключением того, что он обеспечивает немного информацией во время выполнения.
|
// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную Form1, которая имеет событие OnCreate названное FormCreate.
unit Unit1;
interface
uses
Forms, Dialogs, Classes, Controls, StdCtrls, SysUtils;
type
// Определение базового класса TSquare :
// Он имеет частные данные, которые могут быть только установлены защищенным методом
TSquare = class
private // Известный только родительскому классу
squareArea : Integer;
protected // Известный всем классам в иерархии
squareWidth, squareHeight : Integer;
procedure setArea;
Public // Внешне видимый пользователями класса
property width : Integer read squareWidth;
property height : Integer read squareHeight;
property area : Integer read squareArea;
published // Внешне видимый: имеет также информацию во время выполнения
constructor Create(width, height : Integer);
end;
// Определение порожденного типа:
// Он должен использовать защищенный родительский метод для установки
// частной площади квадрата
TChangeableSquare = class(TSquare)
Public
procedure ChangeSize(newWidth, newHeight : Integer);
end;
// Определение класса формы используемой этим модулем
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm} // Вложение определений формы
// Создание объекта TSquare
constructor TSquare.Create(width, height: Integer);
begin
// Сохранение ширины и высоты в защищенных полях
squareWidth := width;
squareHeight := height;
// И вычисление площади квадрата
setArea;
end;
// Изменение измерений TChnageableSquare
procedure TChangeableSquare.ChangeSize(newWidth, newHeight: Integer);
begin
// Перезапись первоначальных значений ширины и высоты
squareWidth := newWidth;
squareHeight := newHeight;
// И пересчёт площади квадрата
setArea;
end;
// Установка размера квадрата из его измерений
procedure TSquare.setArea;
begin
// Вычисление площади квадрата и конфиденциальное сохранение
squareArea := width * height;
end;
// Основная линия кода
procedure TForm1.FormCreate(Sender: TObject);
var
mySquare : TChangeableSquare;
begin
// Создание изменяемого квадрата
mySquare := TChangeableSquare.Create(30, 40);
// Какова сейчас площадь квадрата?
ShowMessage('Квадрат 30,40 площадь = '+IntToStr(mySquare.area));
// Изменение измерений квадрата
mySquare.ChangeSize(10,20);
// Какова сейчас площадь квадрата?
ShowMessage('Квадрат 10,20 площадь = '+IntToStr(mySquare.area));
end;
end.
|