Incr Tcl — Википедия
Incr TCL (ITCL) — первое из объектно-ориентированных расширений языка TCL. Частично реализовано на языке Си. С его использованием написана библиотека графических виджетов incr Widgets (iWidgets). Название этого расширения является своего рода «переводом» названия C++ на язык Tcl, команда incr, как и операция ++, увеличивает свой аргумент на 1.
Наряду с XOtcl и SNIT — одно из трёх наиболее популярных объектно-ориентированных расширений Tcl[1].
Команды
[править | править код]ITCL — определяет следующие команды:
- itcl::body — определяет и переопределяет тело методов;
- itcl::class — описание класса, см. пример ниже;
- itcl::code — даёт доступ к закрытым (private) членам класса, и при нормальном дизайне программы не должна использоваться прикладным программистом;
- itcl::configbody — позволяет связывать с переменной класса один или несколько конфигураторов (что-то вроде триггеров SQL), см. пример ниже;
- itcl::delete — удаляет объекты, классы и пространства имён;
- itcl::ensemble — создаёт и модифицирует составные команды, см. подробности ниже;
- itcl::find — создаёт список классов и объектов текущего пространства имён, удовлетворяющих образцу;
- itcl::local — создаёт локальный экземпляр класса (внутри определения процедуры);
- itcl::scope — ограничивает обращение к переменной текущим контекстом для передачи в не объектно-ориентированные команды Tcl/Tk[2].
- 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 методами доступа к ним [3].
Составные команды
[править | править код]Составная команда (или ансамбль) определяется в виде:
ensemble имяСост команда арг арг …
или
ensemble имяСост { part имяЧасти аргументы тело … … ensemble имяПодСост { part имяПодЧасти аргументы тело … … } }
Ансамбли Tcl - это удобная синтаксическая надстройка над стандартным механизмом namespace ensemble Tcl. Это механизм позволяет сгруппировать несколько команд в одно пространство имён - ансамбль. Обращение к команде - части ансамбля выглядит как:
имяСост имяЧасти аргументы
Может существовать любое количество конструкций ensemble с одним и тем же именем, все определённые в них части войдут в один и тот же ансамбль[4].
Ссылки
[править | править код]- 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
См. также
[править | править код]Примечания
[править | править код]- ↑ Clif Flynt. Ch. 9. Basic Object Oriented Programming in Tcl // Tcl/Tk: A Developer's Guide. — 3-rd edition. — Elsevier, 2012. — P. 263. — 792 p. — ISBN 978-0-12-384717-1.
- ↑ детали реализации см. в man itcl::scope Архивная копия от 20 февраля 2007 на Wayback Machine
- ↑ см. Automatic get/set methods for an itcl class Архивная копия от 7 октября 2007 на Wayback Machine
- ↑ естественное для пространства имён поведение
Литература
[править | править код]- Chad Smith. Incr Tcl/Tk from the ground up. — Osborne/McGraw-Hill, 2000. — 746 p. — ISBN 0-07-212106-8.
- Clif Flynt. 17.1 [incr Tcl] // Tcl/Tk: A Developer's Guide. — Elsevier, 2012. — С. 667-670. — 817 с. — ISBN 9780123847188.