9. Шаблон
Использование ссылок в качестве имён значений в объектах позволяет создавать объекты-шаблоны. Вот примерно как это выглядит:
Специальный класс, запрашивающий значение по имени у вызывающего объекта. Для примера пусть для этого служит функция get(name)
.
{
[тип]=>Класс;
[имя]=>”Запрос параметра”;
[свойства]=>{
[1]=>Свойство имя;
[2]=>Свойство тип;
[3]=>Свойство имя параметра;
}
[интерфейсы]=>{ get(name); }
}
Объект Запрос1 класса Запрос параметра
{
[тип]=>Запрос параметра;
[имя]=>”Запрос1”;
[имя параметра]=>”значение параметра”;
}
Класс, выводящий строку на печать и последовательно передающий управление дочерним объектам. Для примера пусть это будет функция print(), а функция get(name) будет возвращать значение свойства по имени.
{
[тип]=>Класс;
[имя]=>”Класс1”;
[свойства]=>{
[1]=>Свойство имя;
[2]=>Свойство тип;
[3]=>Свойство строка для печати;
[4]=>Свойство дочерние объекты;
}
[интерфейсы]=>{
{ print(); }
{ get(name); }
}
}
Объект Объект1 класса Класс1. Обратите внимание, что он имеет свойство “значение параметра”, которого нет в его типе.
{
[тип]=>Класс1;
[имя]=>”Объект1”;
[строка для печати]=>”Объект1”;
[значение параметра]=>”Дочерний объект Объекта1”;
[дочерние объекты]=>{
[1]=>Шаблон1;
[2]=>Шаблон2;
}
}
Объект Шаблон1, используемый как дочерний объект Объекта1. Обратите внимание, что значением свойства “строка для печати” выступает ссылка на объект Запрос1.
{
[тип]=>Класс1;
[имя]=>”Шаблон1”;
[строка для печати]=>Запрос1;
}
Объект Шаблон2, аналогичный объекту Шаблон1.
{
[тип]=>Класс1;
[имя]=>”Шаблон2”;
[строка для печати]=>Параметр1;
}
Цепочка вызовов в данном примере будет выглядеть так:
...
На печать при этом будет выведено:
Объект1
Дочерний объект Объекта1
Дочерний объект Объекта1
Использование ссылки в качестве имени значения позволяет менять имя свойства “значение параметра”, что позволяет разрешать возможные конфликты имен при использовании шаблонов.
ПРИМЕЧАНИЕ
В C++ есть шаблоны классов, но нет шаблонов шаблонов. Концепция классов и ссылок WYCIWYC позволяет создавать такие шаблоны.
По сути любой класс – это шаблон объекта, свойства которого не заполнены значениями, но WYCIWYC даёт возможность и экземпляры объектов с частично заполненными свойствами делать шаблонами, или строить из объектов структуры, которые пользователь сможет использовать как шаблоны документов.
Далее
Автор: Андрей Шаройко <vanyamboe@gmail.com>