Использование ссылок в качестве имён значений в объектах позволяет создавать объекты-шаблоны. Вот примерно как это выглядит:
Специальный класс, запрашивающий значение по имени у вызывающего объекта. Для примера пусть для этого служит функция 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>