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

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

Строка 1: Строка 1:
Любой класс, порождающий объекты, с незначительными ограничениями может быть преобразован в pzl-компоненту.
=Необходимые условия признания класса компонентой=
 
Любой класс, порождающий объекты (имеющий интерфейс), может быть признан компонентой, если
Напомним, что класс порождает объекты, если он имеет интерфейс, что в декларации класса выглядит как (имена класса и интерфейса условные)
#Имя интерфейса и имя класса различаются;
<vip>
#Декларация класса содержит конструктор new(object ИспользуемыйОбъект);
class компонентныйКласс : компонентныйИнтерфейс
#Интерфейс класса поддерживает интерфейс pzlComponent;
end class
#Интерфейс класса включает декларацию константы сomponentDescriptor_C с типом pzlDomains::pzlComponentInfo_D;
</vip>
#Имплементация класса наследует от класса pzlComponent;
Для того, чтобы быть pzl-компонентой, класс должен удовлетворять следующим условиям:
#Пакетный файл деклараций класса включает файл "System\Packs\pzlcomponent\pzlcomponent.ph".
#Имя интерфейса и имя класса должны различаться
#Декларация класса должна содержать конструктор new(object ИспользуемыйОбъект)
#Интерфейс класса должнен поддерживать интерфейс pzlComponent
#Интерфейс класса должен включать декларацию константы сomponentDescriptor_C с типом pzlDomains::pzlComponentInfo_D
#Имплементация класса должна наследовать от класса pzlComponent
#Пакетный файл деклараций класса должен включать файл "System\Packs\pzlcomponent\pzlcomponent.ph"
 
Ниже приведены фрагменты различных составляющих компоненты, удовлетворяющей перечисленным выше условиям.
Ниже приведены фрагменты различных составляющих компоненты, удовлетворяющей перечисленным выше условиям.


'''Декларация класса'''
'''Декларация класса''' содержит коструктор new(...) и имя интерфейса отличается от имени класса
<vip>
<vip>
class ComponentExample:iComponentExample
class сomponentExample:iComponentExample


constructors
constructors
Строка 25: Строка 18:
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
Строка 49: Строка 42:
end interface iComponentExample
end interface iComponentExample
</vip>
</vip>
'''Имплементация класса''' должна содержать директиву наследования '''''inherits pzlComponent'''''
'''Имплементация класса''' содержать директиву наследования '''''inherits pzlComponent''''' и содержит клаузу для конструктора '''''new(UsingObject)'''''
<vip>
<vip>
implement componentExample
implement componentExample
Строка 64: Строка 57:
end implement componentExample
end implement componentExample
</vip>
</vip>
'''Файл деклараций пакета''' ComponentExample.PH должен содержать директиву включения файла '''''PzlComponent.ph'''''
'''Файл деклараций пакета''' ComponentExample.PH содержит директиву включения файла '''''PzlComponent.ph'''''
<vip>
<vip>
#requires ...
#requires ...

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

Необходимые условия признания класса компонентой

Любой класс, порождающий объекты (имеющий интерфейс), может быть признан компонентой, если

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

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

Декларация класса содержит коструктор new(...) и имя интерфейса отличается от имени класса

class сomponentExample: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 и содержит клаузу для конструктора new(UsingObject)

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"