Interested Article - Incr Tcl

Incr TCL (ITCL) — первое из объектно-ориентированных расширений языка TCL . Частично реализовано на языке Си . С его использованием написана библиотека графических виджетов incr Widgets (iWidgets). Название этого расширения является своего рода «переводом» названия C++ на язык Tcl , команда incr , как и операция ++ , увеличивает свой аргумент на 1.

Наряду с XOtcl и SNIT — одно из трёх наиболее популярных объектно-ориентированных расширений Tcl .

Команды

ITCL — определяет следующие команды:

  • itcl:: body — определяет и переопределяет тело методов;
  • itcl:: class — описание класса, см. ниже;
  • itcl:: code — даёт доступ к закрытым ( private ) членам класса, и при нормальном дизайне программы не должна использоваться прикладным программистом;
  • itcl:: configbody — позволяет связывать с переменной класса один или несколько конфигураторов (что-то вроде триггеров SQL ), см. ниже;
  • itcl:: delete — удаляет объекты, классы и пространства имён;
  • itcl:: ensemble — создаёт и модифицирует составные команды, см. ниже;
  • itcl:: find — создаёт список классов и объектов текущего пространства имён, удовлетворяющих образцу;
  • itcl:: local — создаёт локальный экземпляр класса (внутри определения процедуры);
  • itcl:: scope — ограничивает обращение к переменной текущим контекстом для передачи в не объектно-ориентированные команды Tcl/Tk .
  • 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 методами доступа к ним .

Составные команды

Составная команда (или ансамбль) определяется в виде:

ensemble имяСост команда арг арг 

или

ensemble имяСост {
    part имяЧасти аргументы тело
      
    ensemble имяПодСост {
        part имяПодЧасти аргументы тело
          
    }
}

Ансамбли Tcl - это удобная синтаксическая надстройка над стандартным механизмом namespace ensemble Tcl. Это механизм позволяет сгруппировать несколько команд в одно пространство имён - ансамбль. Обращение к команде - части ансамбля выглядит как:

имяСост имяЧасти аргументы

Может существовать любое количество конструкций ensemble с одним и тем же именем, все определённые в них части войдут в один и тот же ансамбль .

Ссылки

  • (англ.) — Проект Incr Tcl
  • (англ.) — incr Widgets
  • (англ.) — официальная документация
  • (англ.) — incr Tcl в Tcl Wiki

См. также

Примечания

  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. детали реализации см. в от 20 февраля 2007 на Wayback Machine
  3. см. от 7 октября 2007 на Wayback Machine
  4. естественное для пространства имён поведение

Литература

  • 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] // . — Elsevier, 2012. — С. 667-670. — 817 с. — ISBN 9780123847188 .
Источник —

Same as Incr Tcl