Pzl-Компонента: различия между версиями

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

(Новая: Любой класс, порождающий объекты, с незначительными ограничениями может быть преобразован в pzl-компо...)
 
Строка 9: Строка 9:
#Имя интерфейса и имя класса должны различаться
#Имя интерфейса и имя класса должны различаться
#Декларация класса должна содержать конструктор new(object ИспользуемыйОбъект)
#Декларация класса должна содержать конструктор new(object ИспользуемыйОбъект)
#Интерфес класса должнен поддерживать интерфейс pzlComponent
#Интерфейс класса должнен поддерживать интерфейс pzlComponent
#Интерфейс класса должен включать декларацию константы сomponentDescriptor_C с типом pzlDomains::pzlComponentInfo_D
#Интерфейс класса должен включать декларацию константы сomponentDescriptor_C с типом pzlDomains::pzlComponentInfo_D
#Имплементация класса должна наследовать от класса pzlComponent
#Имплементация класса должна наследовать от класса pzlComponent
Строка 16: Строка 16:
Ниже приведены фрагменты различных составляющих компоненты, удовлетворяющей перечисленным выше условиям.
Ниже приведены фрагменты различных составляющих компоненты, удовлетворяющей перечисленным выше условиям.


Декларация класса
'''Декларация класса'''
<vip>
<vip>
class ComponentExample:iComponentExample
class ComponentExample:iComponentExample
constructors
  new:(object UsingObject).
end class
end class
</vip>
</vip>
Интерфейс должен содержать квалификатор "supports pzlComponent" и декларацию константы componentDescriptor_C типа pzlDomains::pzlComponentInfo_D
'''Интерфейс класса''' должен содержать квалификатор '''''supports pzlComponent''''' и декларацию константы '''''componentDescriptor_C''''' типа '''''pzlDomains::pzlComponentInfo_D'''''
<vip>
<vip>
interface iComponentExample
interface iComponentExample
Строка 45: Строка 49:
end interface iComponentExample
end interface iComponentExample
</vip>
</vip>
Имплементация класса должна содержать директиву наследования "inherits pzlComponent"
'''Имплементация класса''' должна содержать директиву наследования '''''inherits pzlComponent'''''
<vip>
<vip>
implement componentExample
implement componentExample
Строка 60: Строка 64:
end implement componentExample
end implement componentExample
</vip>
</vip>
Файл деклараций пакета ComponentExample.PH должен содержать директиву включения файла PzlComponent.ph
'''Файл деклараций пакета''' ComponentExample.PH должен содержать директиву включения файла '''''PzlComponent.ph'''''
</vip>
<vip>
#requires ...
#requires ...
#include @"System\Packs\pzlcomponent\pzlcomponent.ph"
#include @"System\Packs\pzlcomponent\pzlcomponent.ph"

Версия 15:44, 10 октября 2007

Любой класс, порождающий объекты, с незначительными ограничениями может быть преобразован в 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
 
constructors
  new:(object UsingObject).
 
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

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