Nextcloud
- 1 year ago
- 0
- 0
Incr TCL (ITCL) — первое из объектно-ориентированных расширений языка TCL . Частично реализовано на языке Си . С его использованием написана библиотека графических виджетов incr Widgets (iWidgets). Название этого расширения является своего рода «переводом» названия C++ на язык Tcl , команда incr , как и операция ++ , увеличивает свой аргумент на 1.
Наряду с XOtcl и SNIT — одно из трёх наиболее популярных объектно-ориентированных расширений Tcl .
ITCL — определяет следующие команды:
В качестве примера приведена объектная оболочка над текстовыми файлами 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 методами доступа к ним .
Составная команда (или ансамбль) определяется в виде:
ensemble имяСост команда арг арг …
или
ensemble имяСост {
part имяЧасти аргументы тело
… …
ensemble имяПодСост {
part имяПодЧасти аргументы тело
… …
}
}
Ансамбли Tcl - это удобная синтаксическая надстройка над стандартным механизмом namespace ensemble Tcl. Это механизм позволяет сгруппировать несколько команд в одно пространство имён - ансамбль. Обращение к команде - части ансамбля выглядит как:
имяСост имяЧасти аргументы
Может существовать любое количество конструкций ensemble с одним и тем же именем, все определённые в них части войдут в один и тот же ансамбль .