Incr Tcl
Paradigma | Multiparadigmatický: imperativní, strukturovaný, procedurální, funkcionální, objektově orientovaný, řízený událostmi |
---|---|
Vznik | 1993 |
Autor | Michael McLennan |
Vývojář | Michael McLennan |
Poslední verze | Itcl4.1.1 (2017-12-21) |
Typová kontrola | dynamická, reprezentací všech typů je textový řetězec |
Ovlivněn jazyky | Tcl, C++ |
Web | itcl na SourceForge |
Incr Tcl, případně [Incr Tcl] (zkráceně Itcl) je rozšíření jazyka Tcl o objektově orientované programování. Název (včetně hranatých závorek) je nápodobou použití operátoru ++
pro název jazyka C++ znamenající zvýšení hodnoty jména jazyka o jedničku. Itcl je implementováno jako balíček (package) do jazyka Tcl i jako samostatný interpret.
Příkazy
[editovat | editovat zdroj]Balíček Itcl poskytuje několik nových příkazů obsažených ve jmenném prostoru itcl
. Ve verzi 4.1.1 jsou tyto příkazy:
- itcl::Root
- itcl::addcomponent
- itcl::adddelegatedmethod
- itcl::adddelegatedoption
- itcl::addobjectoption
- itcl::addoption
- itcl::body
- itcl::class
- itcl::clazz
- itcl::code
- itcl::configbody
- itcl::delete
- itcl::delete_helper
- itcl::ensemble
- itcl::extendedclass
- itcl::filter
- itcl::find
- itcl::finish
- itcl::forward
- itcl::is
- itcl::local
- itcl::mixin
- itcl::nwidget
- itcl::scope
- itcl::setcomponent
- itcl::type
- itcl::widget
- itcl::widgetadaptor
Struktura tříd a objektů
[editovat | editovat zdroj]Itcl přejalo mnoho konceptů z C++: Třída může obsahovat konstruktory, destruktor, metody a proměnné. Lze určit míru přístupu k jednotlivým členům třídy (metodám a proměnným) pomocí klíčových slov public, protected a private. Třídy mohou deklarovat (nebo bezprostředně definovat) procedury, které lze volat z třídy – není nutné vytvářet objekt této třídy (odpovídají statickým funkcím v C++ třídách). Další netypickou složkou jsou sdílené proměnné, které jsou deklarovány (nebo okamžitě inicializovány) klíčovým slovem common (odpovídají statickým proměnným v C++ třídách) – mají přístup jak k metodám třídy, tak k jejím procedurám. Nechybí ani polymorfismus . Každá třída může dědit z jiných tříd (jedné nebo více). Každá třídní metoda je v Itcl virtuální.
Itcl umožňuje (stejně jako Tcl) používání jmenných prostorů pro oddělení jmen příkazů a proměnných.
Příklad třídy v Itcl
[editovat | editovat zdroj]Příklad třídy implementující zásobník:
itcl::class Stack {
private {
variable stack ""
}
public {
# Přidá prvek "arg" na vrchol zásobníku
method push {arg}
# Odstraní poslední položku z vrcholu zásobníku a vrátí ji
method pop {}
# Vyprázdní zásobník
method clear {}
# Vrátí počet prvků v zásobníku
method count {}
}
}
itcl::body Stack::push {arg} {
lappend stack $arg
}
itcl::body Stack::pop {} {
if {[count] == 0} {return}
set last [lindex $stack end]
set stack [lrange $stack 0 end-1]
return $last
}
itcl::body Stack::clear {} {
set stack ""
}
itcl::body Stack::count {} {
return [llength $stack]
}
Tuto třídu lze používat takto:
Stack zasobnik
zasobnik push "jedna"
zasobnik push "dva"
zasobnik push "tři"
puts [zasobnik pop]
puts [zasobnik pop]
puts [zasobnik pop]
Výstupem bude:
tři dva jedna
Itcl a jazyk C
[editovat | editovat zdroj]Itcl představilo inovativní řešení: Při psaní rozšíření pro Tcl na základě Itcl lze použít funkci Itcl_RegisterC(), pro „registraci” funkce napsané v jazyce C v registru Itcl. Funkci pak lze používat přímo v definici třídních metod, jejímu jménu bude v Itcl předřazen znak @
. Tímto způsobem lze napsat implementaci rozšíření založenou pouze na třídě Itcl.[1]
Další rozšíření založená na Itcl
[editovat | editovat zdroj]Mezi rozšíření založená na Itcl patří Itk (kombinace Tk a Itcl) a IWidgets (sada dalších komponent GUI založených na Itk).
Licence
[editovat | editovat zdroj]Itcl má stejně jako Tcl/Tk velmi volné licenční podmínky. Itcl lze můžete používat, kopírovat, upravovat a dokonce dále šířit bez jakéhokoli písemného souhlasu nebo licenčního poplatku za předpokladu, že veškerá upozornění o autorských právech zůstanou nedotčena. Nemůžete nárokovat vlastnictví softwaru; autoři a jejich instituce si ponechávají vlastnictví, jak je popsáno v souborech "license.terms" zahrnutých do standardní distribuce. Další informace naleznete na adrese incrtcl.sourceforge.net/itcl/copyright.html.[2]
Referenční příručka
[editovat | editovat zdroj]Kniha Chada Smithe „Incr Tcl from the Ground Up“[3] je úplná referenční příručka [incr Tcl], která pokrývá základy jazyka, problémy návrhu OO, přetížení, opakované použití kódu, vícenásobnou dědičnost abstraktní základní třídy a problémy s výkonem. Navzdory svému rozsahu je uspořádána spíše výukově než encyklopedicky. Od září 2004 není v tisku.
Budoucnost Itcl
[editovat | editovat zdroj]Probíhají diskuse o tom, jak začlenit Itcl do standardního Tcl, aby vývojáři mohli volně používat objektové vlastnosti v Tcl. Začlenění Itcl do jádra Tcl by přineslo možnost typové kontroly, přístup k proměnným pomocí syntaxe objekt.proměnná a další.
Odkazy
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]V tomto článku byly použity překlady textů z článků Incr Tcl na polské Wikipedii a Incr Tcl na anglické Wikipedii.
- ↑ [incr Tcl] Package C API, version 4.1.0: RegisterC [online]. 1998 [cit. 2017-11-28]. Dostupné online.
- ↑ Licence Terms for [incr Tcl] [online]. 1998 [cit. 2017-11-29]. Dostupné online.
- ↑ SMITH, Chad. Incr Tcl from the Ground Up. [s.l.]: [s.n.], leden 2000.
Související články
[editovat | editovat zdroj]Externí odkazy
[editovat | editovat zdroj]- Domovská stránka projektu
- Projekt tclweb s mailing listem, sourceforge.net