Pzl-Компонента: различия между версиями
(Новая: Любой класс, порождающий объекты, с незначительными ограничениями может быть преобразован в pzl-компо...) |
|||
Строка 9: | Строка 9: | ||
#Имя интерфейса и имя класса должны различаться | #Имя интерфейса и имя класса должны различаться | ||
#Декларация класса должна содержать конструктор new(object ИспользуемыйОбъект) | #Декларация класса должна содержать конструктор new(object ИспользуемыйОбъект) | ||
# | #Интерфейс класса должнен поддерживать интерфейс 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''''' | ||
<vip> | <vip> | ||
interface iComponentExample | interface iComponentExample | ||
Строка 45: | Строка 49: | ||
end interface iComponentExample | end interface iComponentExample | ||
</vip> | </vip> | ||
Имплементация класса должна содержать директиву наследования | '''Имплементация класса''' должна содержать директиву наследования '''''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> | ||
#requires ... | #requires ... | ||
#include @"System\Packs\pzlcomponent\pzlcomponent.ph" | #include @"System\Packs\pzlcomponent\pzlcomponent.ph" |
Версия 14:44, 10 октября 2007
Любой класс, порождающий объекты, с незначительными ограничениями может быть преобразован в pzl-компоненту.
Напомним, что класс порождает объекты, если он имеет интерфейс, что в декларации класса выглядит как (имена класса и интерфейса условные)
class компонентныйКласс : компонентныйИнтерфейс end class
Для того, чтобы быть pzl-компонентой, класс должен удовлетворять следующим условиям:
- Имя интерфейса и имя класса должны различаться
- Декларация класса должна содержать конструктор new(object ИспользуемыйОбъект)
- Интерфейс класса должнен поддерживать интерфейс pzlComponent
- Интерфейс класса должен включать декларацию константы сomponentDescriptor_C с типом pzlDomains::pzlComponentInfo_D
- Имплементация класса должна наследовать от класса pzlComponent
- Пакетный файл деклараций класса должен включать файл "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"