Incr Tcl
Incr TCL (ITCL) — первое из объектно-ориентированных расширений языка TCL. Частично реализовано на языке Си. С его использованием написана библиотека графических виджетов incr Widgets (iWidgets). Название этого расширения является своего рода «переводом» названия С++ на язык Tcl, команда incr, как и операция ++, увеличивает свой аргумент на 1.
Команды
ITCL — определяет следующие команды:
- itcl::body — определяет и переопределяет тело методов;
- itcl::class — описание класса, cм. пример ниже;
- itcl::code — даёт доступ к закрытым (private) членам класса, и при нормальном дизайне программы не должна использоваться прикладным программистом;
- itcl::configbody — позволяет связывать с переменной класса один или несколько конфигураторов (что-то вроде триггеров SQL), см. пример ниже;
- itcl::delete — удаляет объекты, классы и пространства имён;
- itcl::ensemble — создаёт и модифицирует составные команды, cм. подробности ниже;
- itcl::find — создаёт список классов и объектов текущего пространства имён, удовлетворяющих образцу;
- itcl::local — создаёт локальный экземпляр класса (внутри определения процедуры);
- itcl::scope — ограничивает обращение к переменной текущим контекстом для передачу в не объектно-ориентированные команды Tcl/Tk[1].
- itcl::is — проверяет, принадлежит ли переменная классу.
Пример определения класса
В качестве примера приведена объектная оболочка над текстовыми файлами Tcl. Показано использование конфигураторов.
<source lang=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 </source>
Различные члены класса описываются с следующих, доступных внутри определения классов, команд: constructor, destructor, method, proc (в отличие от метода не наследуется), variable, common (подобие static в С++), public, protected, private, set и array. Наследование задаётся командой inherit. Допускается множественное наследование. Все методы - виртуальны. При определении класса можно использовать приёмы метапрограммирования, например чтобы определить в цикле несколько локальных переменные, вместе с set и get методами доступа к ним [2].
Составные команды
Составная команда (или ансамбль) определяется в виде:
<source lang="tcl">ensemble имяСост команда арг арг …</source> или <source lang="tcl"> ensemble имяСост {
part имяЧасти аргументы тело
… …
ensemble имяПодСост {
part имяПодЧасти аргументы тело
… …
}
} </source>
Ансамбли Tcl - это удобная синтаксическая надстройка над стандартным механизмом namespace ensemble Tcl. Это механизм позволяет сгруппировать несколько команд в одно пространство имён - ансамбль. Обращение к команде - части ансамбля выглядит как:
<source lang="tcl">имяСост имяЧасти аргументы</source>
Может существовать любое количество конструкций ensemble с одним и тем же именем, все определённые в них части войдут в один и тот же ансамбль[3].
Ссылки
- 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
См. также
Примечания
- ↑ детали реализации см. в man itcl::scope
- ↑ см. Automatic get/set methods for an itcl class
- ↑ естественное для пространства имён поведение
| SQL | Это незавершённая статья о компьютерных языках. Вы можете помочь проекту, исправив и дополнив её. |
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....