Incr Tcl

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску
Файл:Logo dino.gif
Логотип 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 {}

}

  1. определяем тела методов

body File::get {} {

   return [gets $fid]

} body File::put {line} {

   puts $fid $line

} body File::eof {} {

   return [::eof $fid]

}

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

configbody File::name {

   if {$fid != ""} {
       close $fid
   }
   set fid [open $name $access]

}

  1. класс File в действии:
  1. создаём объект

File x

  1. конфигурируем его имя

x configure -name /etc/passwd

  1. выводим содержимое файла, строка - за строкой

while {![x eof]} {

   puts "=> [x get]"

}

  1. удаляем объект

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

Ссылки

См. также

Примечания

  1. детали реализации см. в man itcl::scope
  2. см. Automatic get/set methods for an itcl class
  3. естественное для пространства имён поведение


en:Incr Tcl es:Incr Tcl fr:Incr Tcl pl:Incr Tcl zh:Incr Tcl

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....