Spec-Zone.ru › Tcl/Tk

itcl

Имя

itcl — объектно-ориентированные расширения Tcl

Описание

[incr Tcl] предоставляет объектно-ориентированные расширения для Tcl, так же как C++ предоставляет объектно-ориентированные расширения для C. Однако основной целью этой работы не является создание впечатляющей объектно-ориентированной среды программирования. Скорее, она предназначена для поддержки более структурированных практик программирования в Tcl без изменения стиля языка. В первую очередь, [incr Tcl] предоставляет способ инкапсуляции связанных процедур вместе с их общими данными в пространстве имен, скрытом от внешнего мира. Это поощряет лучшие практики программирования, продвигая объектно-ориентированный подход "библиотеки". Также это позволяет повторно использовать код с помощью наследования.

Классы

Основной конструкцией в [incr Tcl] является определение класса. Каждый класс служит шаблоном для фактических объектов, которые могут быть созданы. Каждый объект имеет свой собственный набор данных, который содержит экземпляры "переменных", определённых в классе. Для манипулирования отдельными объектами используются специальные процедуры, называемые "методами". Методы подобны операциям, используемым для манипулирования виджетами Tk. Например, виджет "кнопка" имеет такие методы, как "flash" и "invoke", которые заставляют конкретную кнопку мигать и вызывать её команду.

Внутри тела метода переменные, определённые в классе, автоматически доступны. Их не нужно объявлять с помощью чего-либо вроде команды global. Внутри другого метода класса метод может быть вызван как любая другая команда — просто используя его имя. Из любого другого контекста имя метода должно быть опережено именем объекта, что предоставляет контекст для данных, к которым метод может получить доступ.

Каждый класс имеет своё собственное пространство имен, содержащее элементы, общие для всех объектов, принадлежащих этому классу. Например, "общие" члены данных разделяются всеми объектами в классе. Это глобальные переменные, существующие в пространстве имен класса, но, поскольку они включены в определение класса, их не нужно объявлять с помощью команды global; они автоматически доступны любому коду, выполняющемуся в контексте класса. Класс также может создавать обычные глобальные переменные, но их необходимо объявлять с помощью команды global каждый раз, когда они используются.

Классы также могут иметь обычные процедуры, объявленные как "procs". Внутри другого метода класса или процедуры proc может быть вызван как любая другая команда — просто используя его имя. Из любого другого контекста имя процедуры должно быть квалифицировано пространством имен класса, как "имя_класса::процедура". Процедуры класса выполняются в контексте класса и, следовательно, имеют автоматический доступ ко всем "общим" членам данных. Однако они не могут получить доступ к объектно-специфическим "переменным", так как вызываются без ссылки на какой-либо конкретный объект. Они обычно используются для выполнения общих операций, которые влияют на все объекты, принадлежащие классу.

Каждый элемент в классе может быть объявлен "public", "protected" или "private". К общедоступным элементам могут получить доступ класс, производные классы (другие классы, наследующие этот класс) и внешние клиенты, использующие этот класс. К защищённым элементам могут получить доступ класс и производные классы. К закрытым элементам доступ разрешён только в классе, где они определены.

"Общедоступные" элементы внутри класса определяют его интерфейс с внешним миром. Общедоступные методы определяют операции, которые могут быть использованы для манипулирования объектом. Общедоступные переменные распознаются как параметры конфигурации методами "configure" и "cget", встроенными в каждый класс. Общедоступный интерфейс говорит, *что* сделает объект, но не *как* он это сделает. Защищённые и закрытые члены, а также тела методов класса и процедур, предоставляют детали реализации. Изоляция разработчика приложения от этих деталей позволяет разработчику класса изменять их в любое время, без предупреждения и без влияния на программы, которые полагаются на класс. Именно эта инкапсуляция делает объектно-ориентированные программы более понятными и поддерживаемыми.

Тот факт, что объекты [incr Tcl] похожи на виджеты Tk, не случаен. [incr Tcl] был разработан таким образом, чтобы естественно вписываться в приложение Tcl/Tk. Но [incr Tcl] расширяет парадигму Tk, переходя от просто объектно-ориентированной к полностью объектно-ориентированной. Объектно-ориентированная система поддерживает наследование, позволяющее классам совместно использовать общее поведение, наследуя его от предка или базового класса. Наличие базового класса как общей абстракции позволяет программисту рассматривать родственные классы аналогичным образом. Например, тостер и блендер выполняют разные (специализированные) функции, но оба разделяют абстракцию бытовых приборов. Абстрагировав общее поведение в базовый класс, код можно *разделить*, а не *скопировать*. Полученное приложение легче понять и поддерживать, а производные классы (например, специализированные бытовые приборы) можно добавлять или удалять проще.

Это описание было лишь кратким обзором объектно-ориентированного программирования и [incr Tcl]. Более подробное вводное руководство представлено в статье, прилагаемой к этому распространению. Для получения более подробной информации о создании и использовании классов обратитесь к команде class.

Пространства имён

[incr Tcl] теперь включает полную функциональность пространств имён. Пространство имён — это набор команд и глобальных переменных, изолированных от обычной области видимости. Это позволяет упаковывать библиотеки кода Tcl определённым образом и предотвращает нежелательные взаимодействия с другими библиотеками. Пространство имён также может иметь дочерние пространства имён внутри него, так что одна библиотека может содержать свою собственную копию многих других библиотек. Пространство имён также можно использовать для объединения группы связанных классов. Область видимости (называемая "::") является корневым пространством имен интерпретатора; все остальные пространства имён находятся в нём.

Подробную информацию о создании и использовании пространств имён см. в команде namespace.

Мега-виджеты

Мега-виджеты — это виджеты высокого уровня, созданные с использованием виджетов Tk в качестве составных частей, обычно без использования кода на C. Например, элемент выбора файла может содержать несколько списков, несколько элементов ввода и несколько кнопок управления. Эти отдельные виджеты объединены таким образом, чтобы они работали как один большой виджет.

[incr Tk] — это фреймворк для создания мега-виджетов. Он использует [incr Tcl] для поддержки объектного парадигмы и добавляет базовые классы, которые предоставляют поведение по умолчанию для виджетов. Для получения более подробной информации см. страницу справки для itk.

[incr Widgets] — это библиотека мега-виджетов, созданная с помощью [incr Tk]. Она содержит более 30 различных классов виджетов, которые можно использовать непосредственно для создания приложений Tcl/Tk. Каждый класс виджетов имеет свою страницу справки, описывающую доступные функции.

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/itcl.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/itcl.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API