Incr TCL (ITCL) — первое из объектно-ориентированных расширений языка TCL. Частично реализовано на языке Си. С его использованием написана библиотека графических виджетов incr Widgets (iWidgets). Название этого расширения является своего рода «переводом» названия C++ на язык Tcl, команда incr, как и операция ++, увеличивает свой аргумент на 1.

Наряду с XOtcl и SNIT — одно из трёх наиболее популярных объектно-ориентированных расширений Tcl.

Команды ITCL — определяет следующие команды:

itcl::body — определяет и переопределяет тело методов; itcl::class — описание класса, см. пример ниже; itcl::code — даёт доступ к закрытым (private) членам класса, и при нормальном дизайне программы не должна использоваться прикладным программистом; itcl::configbody — позволяет связывать с переменной класса один или несколько конфигураторов (что-то вроде триггеров SQL), см. пример ниже; itcl::delete — удаляет объекты, классы и пространства имён; itcl::ensemble — создаёт и модифицирует составные команды, см. подробности ниже; itcl::find — создаёт список классов и объектов текущего пространства имён, удовлетворяющих образцу; itcl::local — создаёт локальный экземпляр класса (внутри определения процедуры); itcl::scope — ограничивает обращение к переменной текущим контекстом для передачи в не объектно-ориентированные команды Tcl/Tkдетали реализации см. в man itcl::scope . itcl::is — проверяет, принадлежит ли переменная классу.

Пример определения класса В качестве примера приведена объектная оболочка над текстовыми файлами Tcl. Показано использование конфигураторов.

class File {

# описываем и задаём начальные значения # локальных переменных private variable fid ""

public variable name "" public variable access "r"

# определяем конструктор и деструктор constructor {args} { eval configure $args # слово configure активирует конфигураторы

destructor { if {$fid != ""} { close $fid

#описываем методы класса method get {} method put {line} method eof {} }

# определяем тела методов

body File::get {} { return [gets $fid] } body File::put {line} { puts $fid $line } body File::eof {} { return [::eof $fid] }

# определяем конфигуратор для # глобальной переменной name # конфигуратор для access не создан

configbody File::name { if {$fid != ""} { close $fid

set fid [open $name $access]

# класс File в действии: #

# создаём объект File x

#конфигурируем его имя x configure -name /etc/passwd

#выводим содержимое файла, строка - за строкой while {![x eof]} { puts "=> [x get]" }

#удаляем объект delete object x

Различные члены класса описываются с следующих, доступных внутри определения классов, команд: constructor, destructor, method, proc (в отличие от метода не наследуется), variable, common (подобие static в C++), public, protected, private, set и array. Наследование задаётся командой inherit. Допускается множественное наследование. Все методы - виртуальны. При определении класса можно использовать приёмы метапрограммирования, например чтобы определить в цикле несколько локальных переменные, вместе с set и get методами доступа к ним см. Automatic get/set methods for an itcl class .

Составные команды Составная команда (или ансамбль) определяется в виде:

ensemble имяСост команда арг арг … или ensemble имяСост { part имяЧасти аргументы тело … … ensemble имяПодСост { part имяПодЧасти аргументы тело … …

Ансамбли Tcl - это удобная синтаксическая надстройка над стандартным механизмом namespace ensemble Tcl. Это механизм позволяет сгруппировать несколько команд в одно пространство имён - ансамбль. Обращение к команде - части ансамбля выглядит как:

имяСост имяЧасти аргументы

Может существовать любое количество конструкций ensemble с одним и тем же именем, все определённые в них части войдут в один и тот же ансамбльестественное для пространства имён поведение.

Ссылки incrtcl.sourceforge.net — Проект Incr Tcl incrtcl.sourceforge.net/iwidgets/iwidgets.html — incr Widgets www.tcl.tk/man/itcl3.1 — официальная документация wiki.tcl.tk/62 — incr Tcl в Tcl Wiki

См. также Tcl XOTcl Snit STOOOP

Примечания

Литература

Категория:Языки программирования семейства Tcl Категория:Скриптовые языки