Теория и практика объектно-ориентированного программирования. Ноткин А.М. - 75 стр.

UptoLike

Составители: 

76
Для каждого типа объектов должна быть создана своя запись
TStreamRec, если вы собираетесь помещать объект этого типа в поток. Од-
нако для стандартных классов такие записи уже существуют. Итак, для
каждого нестандартного класса вы должны подготовить запись типа
TStreamRec.
В поле ObjType вы должны поместить константу-идентификатор
класса. Константы 0..99 уже зарезервированы
в TV, поэтому в вашем рас-
поряжении константы в диапазоне 100..65535.
Поле VMTLink должно содержать смещение VMT класса. Получить
адрес VMT можно функцией typeof, а смещениефункцией ofs.
Поля Load, Store должны содержать адреса методов Load и Store ре-
гистрируемого класса. Для получения адреса метода применяется операция
@.
Поле Next организует связь записей в списке.
Обычно регистрация организуется
в конструкторе приложения:
Const
RMyWindow:TStreamRec=(
Objtype:100;
VMTLink:ofs(typeof(TMyWindow)^);
Load:@TMyWindow.load;
Store:@TMyWindow.store;
)
constructor TMyApp.Init
begin
inherited Init;
RegisterType(RMyWindow)
end;
Можно также выделить отдельную процедуру для регистрации всех
объектов.
Для упрощения регистрации стандартных объектов предусмотрены
процедуры – RegisterXXX, где XXX – имя соответствующего модуля (Reg-
isterDialogs, RegisterViews и т.д.).
Создание и удаление потока. Поток TStream является абст-
рактным потомком, потому что он не привязан ни к какому конкретному
носителю информации.
TDosStream реализует не буферизованный доступ к файлу.
TBufStreamреализует буферизованный доступ к файлу. Буфериза-
ция позволяет согласовать формат данных с размерами дискового сектора
и обычно значительно ускоряет доступ к потоку.
                                  76

      Для каждого типа объектов должна быть создана своя запись
TStreamRec, если вы собираетесь помещать объект этого типа в поток. Од-
нако для стандартных классов такие записи уже существуют. Итак, для
каждого нестандартного класса вы должны подготовить запись типа
TStreamRec.
      В поле ObjType вы должны поместить константу-идентификатор
класса. Константы 0..99 уже зарезервированы в TV, поэтому в вашем рас-
поряжении константы в диапазоне 100..65535.
      Поле VMTLink должно содержать смещение VMT класса. Получить
адрес VMT можно функцией typeof, а смещение – функцией ofs.
      Поля Load, Store должны содержать адреса методов Load и Store ре-
гистрируемого класса. Для получения адреса метода применяется операция
@.
      Поле Next организует связь записей в списке.
      Обычно регистрация организуется в конструкторе приложения:

Const
RMyWindow:TStreamRec=(
Objtype:100;
VMTLink:ofs(typeof(TMyWindow)^);
Load:@TMyWindow.load;
Store:@TMyWindow.store;
)
constructor TMyApp.Init
begin
inherited Init;
RegisterType(RMyWindow)
end;
       Можно также выделить отдельную процедуру для регистрации всех
объектов.
       Для упрощения регистрации стандартных объектов предусмотрены
процедуры – RegisterXXX, где XXX – имя соответствующего модуля (Reg-
isterDialogs, RegisterViews и т.д.).
       •      Создание и удаление потока. Поток TStream является абст-
рактным потомком, потому что он не привязан ни к какому конкретному
носителю информации.
       TDosStream – реализует не буферизованный доступ к файлу.
       TBufStream – реализует буферизованный доступ к файлу. Буфериза-
ция позволяет согласовать формат данных с размерами дискового сектора
и обычно значительно ускоряет доступ к потоку.