Incr Tcl.html

 
ca de en es fr it nl no pl pt ru ro fi sv tr vo


 

IncrTCL (lub skrótowo Itcl) jest rozszerzeniem języka TCL o obiektowość. Prefiks Incr jest analogią do zastosowanego wobec języka C sufiksu ++ (w języku C operator ++ oznacza inkrementację wartości zmiennej o 1, w TCLu natomiast robi się to za pomocą komendy incr).

Spis treści

edytuj Komendy

Pakiet Itcl dostarcza wielu nowych komend zawartych w jednej przestrzeni nazw - itcl. W wersji 3.2 są to:

itcl::body

itcl::class

itcl::code

itcl::configbody

itcl::delete

itcl::ensemble

itcl::find

itcl::local

itcl::scope


edytuj Struktura klas i obiektów

Wiele elementów zaczerpnięto z C++. Tak jak i w tam, tak tutaj klasa składa się z konstruktora, destruktora, metod, oraz zmiennych. Ponadto klasa może określać poziom dostępu do poszczególnych składowych klasy (metod lub zmiennych) za pomocą słów kluczowych public, protected, oraz private. W klasach można deklarować (lub od razu definiować) stałe procedury, które mogą być wywoływane z klasy - nie wymagają one tworzenia obiektu tej klasy (można porównać je do funkcji statycznych w klasach C++). Kolejną nietypową składową są zmienne wspólne, deklarowane (lub od razu inicjowane) słowem kluczowym common (te zaś można porównać do zmiennych statycznych w klasach C++) - do nich mają dostęp zarówno zwykłe metody klasy, jak i jej procedury. Nie zabrakło też tak istotnej własności języków zorientowanych obiektowo, jak polimorfizm. Każda klasa może dziedziczyć z innych klas (jednej, lub kilku). W Itcl praktycznie każda metoda klasy jest wirtualna.

edytuj Przykładowa klasa Itcl

Oto przykład klasy implementującej stos:

itcl::class Stack {
    private {
        variable stack ""
    }

    public {
        # Dodaje element 'arg' na stos
        method push {arg}

        # Zdejmuje ostatni element ze stosu i zwraca go
        method pop {}

        # Czysci stos
        method clear {}

        # Zwraca liczbe elementow na stosie
        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]
}

Można teraz tej klasy używać w następujący sposób:

Stack st
st push "word 1"
st push "word 2"
st push "word 3"
puts [st pop]
puts [st pop]
puts [st pop]

Spowoduje to wyświetlenie kolejno:

word 3
word 2
word 1

edytuj Itcl i C

W ITCL wprowadzono nowatorskie rozwiązanie. Pisząc rozszerzenie do TCL w oparciu o ITCL możemy użyć funkcji Itcl_RegisterC(), aby "zarejestrować" funkcję C w rejestrze Itcl. Pozwala to na używanie takiej funkcji bezpośrednio w definicji metod klasy, przez poprzedzenie zarejestrowanej nazwy znakiem "@". W ten sposób można napisać implementację rozszerzenia w oparciu jedynie o klasy Itcl.

edytuj Inne rozszerzenia oparte o Itcl

Należą do nich ITk (niejako połączenie Tk i Itcl), oraz IWidgets (zestaw dodatkowych elementów GUI opartych o ITk).

edytuj Przyszłość Itcl

Trwają dyskusje o dołączeniu Itcl do standardowego pakietu TCL, aby dać programistom możliwość swobodnego używania orientacji obiektowej w TCLu. W samym rdzeniu Itcl dodana ma zostać możliwość sprawdzania typów, dostępu do zmiennych na zasadzie składni obiekt.zmienna, oraz wiele innych.

edytuj Zobacz też

edytuj Linki zewnętrzne

Strona domowa projektu

All Right Reserved © 2007, Designed by Stylish Blog.