WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

Incr TCL (ITCL) — первое из объектно-ориентированных расширений языка TCL. Частично реализовано на языке Си. С его использованием написана библиотека графических виджетов incr Widgets (iWidgets). Название этого расширения является своего рода «переводом» названия С++ на язык 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 в С++), 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
  3. см. Automatic get/set methods for an itcl class
  4. естественное для пространства имён поведение

Литература

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии