Отличительной особенностью технологии Clarion является язык шаблонов (template language), опирающийся на словарь данных и репозитарий приложения (процедурная модель). С его помощью формируется системный репозитарий на основе языка макрообработки с визуальным интерфейсом, что позволяет генерировать произвольные (!) исходные тексты, а не только тексты на языке Clarion. Специалисты используют эту особенность для создания систем кроссразработки под разные языки и платформы. Язык шаблонов может применяться в компонентном программировании для формирования скелета (component framework), на который "наращивают" различные компоненты (например, ОСХ).
При создании в среде Clarion конкретного приложения после постановки задачи и формулировки требований следует проектирование, причем, что весьма важно, не конечного приложения, а информационной модели, с которой этому приложению предстоит в дальнейшем работать. Словарь данных, в котором хранится информационная модель, является отправной точкой для автоматического создания исполняемого файла вашего конечного приложения. При этом вы избегаете явного участия в этапах кодирования, отладки и тестирования. За счет эксперт-программ и механизма шаблонов все они проходят "на автомате". Таким образом, после этапа проектирования вы переходите к макетированию и в результате получаете действующий макет вашего приложения. Если теперь потребуется доведение макета до "товарного вида", то это можно будет сделать за счет корректировки в генераторе приложений (Application Generator) структуры и параметров программы, быть может, даже не прибегая к ручному кодированию отдельных участков на языке Clarion. Замечательное свойство технологии Clarion состоит в том, что если расхождения между автоматически полученным макетом и требуемым приложением достаточно значительны, то, изучив язык шаблонов и накопив немного опыта, вы сможете самостоятельно готовить для себя нужные эксперт-программы, настроенные на специфику решаемых вами задач, а затем просто "штамповать" готовые приложения.
Шаблоны подгоняются друг к другу и к общему каркасу всего приложения таким образом, чтобы дать возможность разработчику использовать их почти столь же легко, как и детали известного детского конструктора LEGO. Давайте теперь попробуем разобраться в том, что же на самом деле представляет собой программный шаблон для среды Clarion.
Шаблон - это параметризованный фрагмент исходного текста, написанный на специальном языке - языке шаблонов (Template Language). Средства языка от целевого исходного текста отделены за счет простых синтаксических соглашений (перед операторами языка ставится префикс #, а перед переменными - префикс %).
Язык шаблонов выполняет следующие функции:
- предоставляет средства (#PROMPT, #VALIDATE, #BUTTON, #IMAGE, #FIELD и др.) для организации внешнего интерфейса с разработчиком (инженером-конструктором) приложения;
- результаты заполнения визуальных форм запоминаются в переменных языка шаблонов;
- через встроенные переменные (%FieldName, %RelationKey, %Target32, %DriveSQL, %LocalData, %ProgramTimeCreated и др.) обеспечивает своеобразный мост со словарем данных, а также с самой инструментальной средой Clarion;
- на основе заданных и встроенных переменных обеспечивает управление процессом генерации исходного текста с использованием операторов ветвления и цикла (#IF, #CASE, #FOR, #LOOP);
- обладает богатыми средствами работы с файлами, которые участвуют в процессе генерации исходных текстов (#INCLUDE, #CREATE, #OPEN, #READ, #REPLACE, #REDIRECT, #APPEND, #EXPORT, #IMPORT и др.);
- управляет генерацией комментария;
- имеет большой набор разных типов шаблонов, начиная от процедурного (#PROCEDURE), кодового (#CODE), диалогового (#CONTROL) и распределенного (#EXTENSION) и заканчивая утилитами (#UTILITY);
- позволяет создавать эксперт-программы (wizard), формирующие различные технологические цепочки для синтеза и анализа программной системы.
Язык шаблонов обладает такой выразительностью, что его вполне можно использовать в качестве обычного языка программирования (например, при написании вспомогательных утилит инструментальной среды). Другое дело, что эффективность его работы может заметно уступать обычным языкам.
Итак, шаблон - это особым образом оформленный полуфабрикат (каркас) исходного текста на некоем целевом языке программирования (в нашем случае - на языке Clarion). Одно из самых замечательных свойств языка шаблонов состоит в том, что он позволяет управлять логикой генерации текстов для любых языков (C/C++, Java, Object Pascal, Modula-2, Fortran, Prolog, Lisp и др.) и даже генерацией простых текстовых файлов произвольной структуры (например, HTML, XML).
Шаблоны задают первый уровень (каркасный) компонентного программирования в технологии Clarion. Второй уровень (кодовый) определяют компоненты в традиционном понимании (VBX, OCX, ActiveX-компоненты).
В Clarion активно используются решения объектно-ориентированного программирования в качестве основы исходного текста, что позволяет заменить программные копии на ссылки и еще больше сократить объем генерируемого объектного кода. Фирма TopSpeed заметно продвинулась в этом направлении, переведя в среде Clarion 4 часть своих базовых шаблонов на рельсы ООП и предоставив разработчику на выбор две функционально идентичные архитектуры на основе шаблонов - классическую и объектно-ориентированную. Как известно, новое - это хорошо забытое старое. И в этом смысле шаблоны по своей сути очень близки развитым средствам макропроцессоров, весьма популярным еще в 70-х годах. Но в отличие от тех средств шаблоны не просто параметризуют текст, а имеют средства организации пользовательского интерфейса для инженера-конструктора, четкую структуризацию элементов специального языка шаблонов и программный интерфейс (встроенные и заданные переменные) с контекстом макрообработки.
Если шаблоны столь всемогущи, то возникает вполне законный вопрос: зачем понадобилось изобретать специальный язык программирования, когда все можно сделать на том же C++? Дело в том, что при подобном акценте на программные шаблоны универсальный язык программирования, не обладающий специальными высокоуровневыми языковыми средствами, ничем не лучше обычного ассемблера (тем более, что фирма TopSpeed откровенно подчеркивает свою ориентацию именно на платформу Wintel). Вот почему язык Clarion в дополнение к традиционным средствам обычных языков добавляет некие новые возможности, обеспечивает компактность представления и надежность статического контроля ошибок еще на этапе компиляции. Наиболее важными среди них являются средства обработки событий, ненаследуемые классы (WINDOW, FILE, VIEW, QUEUE, REPORT и др.), которые как бы являются дальнейшим уточнением процедурных шаблонов, а также средства для процедурной работы с файлами баз данных, являющиеся надстройкой над ODBC/SQL-уровнем коммерческих СУБД. Еще один немаловажный момент состоит в том, что какими бы изощренными ни были сделаны шаблоны, в любой момент может появиться потребность слегка их подправить. Вот почему в шаблонах Clarion активно используются для этой цели программные вставки (embeds). Так что, чем компактнее и понятнее запись кода, тем проще будет сопровождать весь проект.