Pzl-Компонента

Материал из wikiru.visual-prolog.com

Версия от 14:39, 10 октября 2007; Victor Yukhtenko (обсуждение | вклад) (Новая: Любой класс, порождающий объекты, с незначительными ограничениями может быть преобразован в pzl-компо...)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

Любой класс, порождающий объекты, с незначительными ограничениями может быть преобразован в pzl-компоненту.

Напомним, что класс порождает объекты, если он имеет интерфейс, что в декларации класса выглядит как (имена класса и интерфейса условные)

class компонентныйКласс : компонентныйИнтерфейс
end class

Для того, чтобы быть pzl-компонентой, класс должен удовлетворять следующим условиям:

  1. Имя интерфейса и имя класса должны различаться
  2. Декларация класса должна содержать конструктор new(object ИспользуемыйОбъект)
  3. Интерфес класса должнен поддерживать интерфейс pzlComponent
  4. Интерфейс класса должен включать декларацию константы сomponentDescriptor_C с типом pzlDomains::pzlComponentInfo_D
  5. Имплементация класса должна наследовать от класса pzlComponent
  6. Пакетный файл деклараций класса должен включать файл "System\Packs\pzlcomponent\pzlcomponent.ph"

Ниже приведены фрагменты различных составляющих компоненты, удовлетворяющей перечисленным выше условиям.

Декларация класса

class ComponentExample:iComponentExample
end class

Интерфейс должен содержать квалификатор "supports pzlComponent" и декларацию константы componentDescriptor_C типа pzlDomains::pzlComponentInfo_D

interface iComponentExample
  supports pzlComponent
 
open core
constants
  componentDescriptor_C:pzlDomains::pzlComponentInfo_D=pzlDomains::pzlComponentInfo
    (
    componentAlias_C,
    componentID_C,
    componentRunAble_C,
    componentMetaInfo_C
    ).
  componentID_C:pzlDomains::entityUID_D=pzlDomains::str("ComponentExample").
  componentAlias_C="ПримерКомпоненты".
  componentRunAble_C=b_True.
  componentMetaInfo_C:namedValue_List=[].
 
predicates
  show:().
 
end interface iComponentExample

Имплементация класса должна содержать директиву наследования "inherits pzlComponent"

implement componentExample
    inherits pzlComponent
 
clauses
  new(UsingObject):-
    pzlComponent::new(),
    ...
 
clauses
  show():-
  ...
end implement componentExample

Файл деклараций пакета ComponentExample.PH должен содержать директиву включения файла PzlComponent.ph </vip>

  1. requires ...
  2. include @"System\Packs\pzlcomponent\pzlcomponent.ph"
  1. include @"pfc\core.ph"

</vip>