На самом деле общая структура модуля при наличии в нем класса несколько сложнее. Обсудим ее более подробно.
Написание собственного модуля (unit) начинается с указания имени модуля. В нашем случае он называется myFigure. Он должен храниться в файле с тем же именем, но с расширением .pas (файл языка PASCAL), т.е. myFigure.pas.
unit myFigure;
{- секция декларации -}
interface
uses ... , m1,…; {наш модуль кроме списка модулей, автоматически созданного Delphi, использует модули m1 и т. Д.}
type
tDot=
object
active:Boolean;
X,Y:integer;
procedure Show;
procedure Hide;
procedure MoveBy(dX,dY:Integer);
procedure MoveTo(NewX_,NewY_:Integer);
procedure Init(X_,Y_,:Integer);{процедура инициализации объекта}
{если в объекте есть поля X и Y, то эти имена нельзя использовать в
качестве формальных параметров. Выход из этой ситуации — добавлять
символ _ после имени, чтобы было понятно, к использованию какого поля
объекта относится передаваемый параметр}
end;
tCircle=
object(tDot)
...
end;
procedure... {описание процедур и функций, видимых в других модулях}
var... {описание глобальных переменных, видимых в других модулях}
{- секция реализации -}
implementation
uses m2,m3; {модули m2 и m3 доступны процедурам и функциям области
реализации}
var ...; {описание глобальных переменных,доступных только в данном модуле}
{-описание реализации методов объектов-}
procedure tDot.Show;
begin
...
end;
procedure tDot.Hide;
begin
...
end;
procedure tDot.Move(dX,dY:Integer);
begin
...
end;
procedure tDot.MoveTo(NewX,NewY:Integer);
begin
...
end;
procedure tDot.Init(X_,Y_:Integer);
begin
X:=X_;
Y:=Y_;
tDot.Hide;
end;
procedure tCircle...;
begin
...
end;
...
begin {секция инициализации — обычно пустая}
end.
Декларация использования других модулей в области интерфейса аналогична вставлению соответствующих модулей (а на самом деле ссылки на модуль) вместо этой декларации. Поэтому в интерфейсе модуля m1 нельзя писать uses myFigure, т.к. тогда получилось бы, что в модуль myFigure вложен модуль m1, который, с свою очередь, вложен в модуль myFigure, т.е. myFigure вложен сам в себя. Для раздела реализации подобных ограничений нет, и в модулях m2 и m3 может стоять ссылка uses myFigure. В интерфейсе всегда надо ссылаться на модули, в которых описаны классы-прародители, а также на те, из которых надо брать определенные в них типы для использования в интерфейсе своего модуля.