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].

Примечания

[править | править код]
  1. 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.
  2. детали реализации см. в man itcl::scope Архивная копия от 20 февраля 2007 на Wayback Machine
  3. см. Automatic get/set methods for an itcl class Архивная копия от 7 октября 2007 на Wayback Machine
  4. естественное для пространства имён поведение

Литература

[править | править код]