Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
1Tööjaamade tarkvara
Tcl - Tool Command Language● John Ousterhout● University of California, Berkeley● 1980ndate keskpaik● tõsisem kasutuspind tekkis 90ndate
alguses● tänapäevane kuju: 1997-1999...● siiani aktiivses arenduses
2Tööjaamade tarkvara
Tcl - Tool Command Language● skriptimiskeel / interpretaator
● algselt mõeldud kompileeritud koodi kõrgtasemel sidumiseks
– tegelikult on ka suuri, iseseisvaid Tcl/Tk rakendusi
● liidesed erinevate keeltega (C, C++, Java)
– Tcl interpretaatori saab lihtsal viisil oma rakenduse sisse ehitada
● laiendatav
● hääldatakse nagu „tickle
3Tööjaamade tarkvara
Tk - Tcl toolkit● Tcl tähtsaim laiendus
● graafiliste liideste loomiseks
● koos kasutades nimetatakse Tcl/Tk
● mitmed head küljed:
– arendustöö kiirus (interpreteeritav keel, pole vaja kompileerida)
– lihtsate kasutajaliideste defineerimine ongi lihtne
– kasutajaliides ja sisuline osa võivad olla üsnagi lahus
– mõistlikud vaikeväärtused Tk's
4Tööjaamade tarkvara
Tcl - põhialused● sõnepõhine keel
– on ainult üks andmetüüp: sõne– ka käsud ise on sõned
● lihtne süntaks● suhteliselt vähe juhtkonstruktsioone● kõik on käsud, ka juhtkonstruktsioonid
on lihtsalt käsud
5Tööjaamade tarkvara
Tcl - põhialused● käsu süntaks
käsk arg1 arg2 arg3● kaks käsku samal real:
käsk1; käsk2● käsu täitmine:
– argumentide grupeerimine (vajadusel)– väärtuste asendamine (käsu-
asendused,muutujate väärtused, varjestatud märgid)
– käsu väljakutsumine
6Tööjaamade tarkvara
Tcl - esimene katseputs stdout {Hello, World!}
puts - käsk väljastamiseks
stdout - väljundkanali nimi
{} - stringi grupeerimseks, võiks kasutada ka ““
7Tööjaamade tarkvara
Tcl - muutujad● sõnetüüpi muutujad● väärtustamine:
set muutuja väärtus● kasutamine
set teinemuutuja $muutuja● muutuja kaotamine
unset muutujaunset -nocomplain muutuja
8Tööjaamade tarkvara
Tcl – eeldefineeritud muutujad
argc – käsureaargumentide arv
argv – käsureaargumentide massiiv
argv0 – käivitatud skripti nimi
env – keskkonnamuutujate massiiv
9Tööjaamade tarkvara
Tcl - käsu asendamine● käsu väljund asendatakse teise käsu
sisse:set pikkus [string length minusõne]● sarnane konstruktsioon teistes shellides `käsk`
● ühel real saab olla mitu käsuasendamist, täidetakse vasakult paremale
● ühe käsuasendamise sees võib olla teisi, täidetakse seest väljapoole
10Tööjaamade tarkvara
Tcl - juhtstruktuure
while {loog-avaldis} { käsud}
while {loog-avaldis} \{ käsud}
11Tööjaamade tarkvara
Tcl - juhtstruktuureif {loog-avaldis} { käsud} elseif { käsud} else { käsud}
12Tööjaamade tarkvara
Tcl - juhtstruktuurefor {algkäsk} {tingimus} {tsüklikäsk} { käsud}
for {set i 0} {$i < 10} {incr i} { set value [expr $value*$i]}
13Tööjaamade tarkvara
Tcl - juhtstruktuureforeach muutuja {list} { käsud}
foreach {muut1 muut2} {l1 u1 l2 u2 l3 u3} { käsud}
14Tööjaamade tarkvara
Tcl - juhtstruktuure● foreach üle mitme listi paralleelselt:foreach jrk {1 2 3} nimi {"Ülo" "Mart"\ "Kadri"} {
puts "Jrk: $jrk Nimi: $nimi"}
break - katkestab korduse
continue - alustab uut kordust
15Tööjaamade tarkvara
Tcl - juhtstruktuureswitch -omadused -- $muutuja { väärtus1 {käsud} väärtus2 {käsud}}
● -omadused:– -exact– -glob– -regexp
16Tööjaamade tarkvara
Tcl - juhtstruktuure● catch - vigade "püüdmine"
catch {käsk}
if {[catch {käsk} tulemus]} { veatöötluskäsud} else { eduka-tulemuse-käsud}
17Tööjaamade tarkvara
Tcl - matemaatilised avaldised● Tcl matemaatilisi avaldisi ei arvuta● avaldiste väärtuste leidmiseks expr● expr avaldise süntaks sarnane C
avaldiste süntaksile
expr 1+2expr $x + $yset pi [expr 2*asin(1.0)]set pi [expr {2*asin(1.0)}]
18Tööjaamade tarkvara
Tcl – varjestamine● varjestamiseks kasutatakse \set dollarigasõne \$10set teinesõne $dollarigasõneset unicode \u001bset hex \0x1bset oct \033
19Tööjaamade tarkvara
Tcl – grupeerimine● grupeerimine "" abil
– asendused viiakse läbiset s Tereputs stdout "Sõne $s pikkus on [string length $s]."
Sõne Tere pikkus on 4.● grupeerimine {} abil
– asendusi ei tehtaputs stdout {Sõne $s pikkus on [string length $s].}
Sõne $s pikkus on [string length $s].
20Tööjaamade tarkvara
Tcl – protseduurid● defineerimine:
proc nimi argumendid käsud
proc liitmine {a b} { return [expr {$a+$b}]}● väljakutsumine
liitmine 10 23
21Tööjaamade tarkvara
Tcl - käivitamine UNIX'is
● interaktiivne käivitamine
> tclsh> wish (Koos Tk'ga)
● käivitamine käsufailina
#!/usr/bin/tclsh#!/usr/bin/wish
22Tööjaamade tarkvara
Tcl: sõnetöötlus● funktsioon string
– esimene argument määrab operatsiooni, mida teostatakse
N.
string length "Tere"4● üle 20 võimaliku operatsiooni● operatsioonide nimekirja näeb, kui anda vale
argument:
string valeargument
23Tööjaamade tarkvara
Tcl: sõnetöötlusfunktsioon string operatsioone:
length, bytelength - pikkus märkides, baitides
compare, equal - võrdlemine
match - pattern matching
tolower, toupper - suur/väiketähtede teisendamine
trimleft, trimright - sümbolite eemaldamine sõnest
24Tööjaamade tarkvara
Tcl: sõnetöötlus● sõned ja expr:● sõnede võrdlemiseks saab kasutada eq, ne, ==, !=, < , >
● kõik peale eq, ne üritavad tõlgendada sõne arvuna
if {"0xa" == "10"} {puts stdout "võrdsed!"}
võrdsed!● sõnede puhul ohutum kasutada string compare, eq, ne
25Tööjaamade tarkvara
Tcl: sõnetöötlus● märgiklassid, string is
– saab kontrollida, kas sõne märgid kuuluvad mingisse klassi või mitte
string is digit 101string is digit sõna0string is alnum sõna101
26Tööjaamade tarkvara
Tcl: sõnetöötlus● väljastamine käsuga format
– printf analoog
format vormindus väärtus1 väärtus2 ...
format "%1\$d on hex: %1\$x" 46
27Tööjaamade tarkvara
Tcl: grupeerimine● grupeerimine ({}, "")
– kaitseb ebasoovitavate asenduste eest– hoiab ära tarbetuid edasi-tagasi teisendusi– aitab koodi struktureerida
set x [expr {sqrt(2.0)}]set y [expr $x * $x]vs.
set y [expr {$x * $x}]
28Tööjaamade tarkvara
Tcl: kommentaarid● # peab olema käsu alguses
# korrektne kommentaarset x 10 #ebakorrektne kommentaarset x 10;#korrektne kommentaar
29Tööjaamade tarkvara
Tcl: kommentaarid● sulgude ja jutumärkide tasakaalu
arvestuses on kommentaarid kaasa arvatud!!
# if {avaldis1} {if {avaldis2} {käsud}● ülalolev kood põhjustab veateate
30Tööjaamade tarkvara
Tcl: eval● sõne käsitlemine käsuna
set string "Hello Eval!"set cmd {puts stdout $string}eval $cmd
set cmd "puts stdout $string"eval $cmd
31Tööjaamade tarkvara
Tcl: eval, koodi genereerimine● koodi käigu pealt genereerimine
– võimas vahend– ohtlik vahend– kergem vigu teha, raskem vigu leida
● käsud on tegelikult listid● keerulisemaid liste on raskem "käsitsi"
luua● kasutada saab protseduuri list
32Tööjaamade tarkvara
Tcl: sh koodi peitmine Tcl koodi● Tcl ja sh käsitlevad kommentaare
erinevalt
#!/bin/sh#\sh-käsk#\sh-käsk#\exec wish -f "$0" "$@"
33Tööjaamade tarkvara
Tk - Tcl Toolkit● Tcl laiendus graafiliste liideste
programmeerimiseks● loodud X Window Systemi jaoks
– porditud ka Mac ja Windowsi platvormidele
● dünaamiline side alloleva Tcl programmiga
● algajale lihtne● sobib prototüüpimiseks
34Tööjaamade tarkvara
Tk - aknad, aknaelemendid● liides koosneb aknaelementidest
(widget)/akendest (window)● aknaelement - mingi omase käitumise
ja väljanägemisega objekt/aken– nupp– kerimisriba– menüü– tekstiaken– ...
35Tööjaamade tarkvara
Tk - aknad, aknaelemendid● kasutajaliides luuakse elemente
kombineerides
● aknaelemendid on hierarhias
– peaaken (primary, main)– alamaknad
● alamakende alamaknad jne jne
– iseseisvad aknad● hierarhia kajastub ka aknaelementide
nimedes
● hierarhia on kasulik elementide paigutamisel (peaakna piires)
36Tööjaamade tarkvara
Tk - paigutushaldurid● paigutushaldur otsustab elementide
mõõtmete ja paiknemise üle
● seni, kuni aknaelement pole esitatud paigutushaldurile, seda ekraanil näha pole
● Tk paigutushaldurid on suurte võimalustega, kuid siiski lihtsad õppida
● keerulisemaid paigutusi luuakse frame elementide (konteinerelemendid) abil
● Tk kolm paigutushaldurit: pack, grid, place
37Tööjaamade tarkvara
Tk - sündmused● Tk rakendusi juhivad sündmused
(event)● aknaelementide vaikekäitumine
erinevate sündmuste puhul on Tk's mõistlik– tavaliselt tulebki seadistada vaid käitumine
eriliste, spetsiifiliste sündmuste puhul
● sündmuste sidumiseks täidetava koodiga on käsk bind
● virtuaalsed sündmused
38Tööjaamade tarkvara
Tk - sündmused● sündmuste seoste klassid - bindtags
– kogum sündmuste seoseid– elemendi, nimega, ülemaknaga seotud– aknaelementi võib ümber häälestada
teistele klassidele, muuta järjekorda– klasse võib muuta
● fookus (sisendfookus)– hiirega juhitav– otse juhitav– fookuse „haaramine“ (grab)
39Tööjaamade tarkvara
Tk - programmi struktuur● aknaelementide loomine● aknaelementide paigutamine● aknaelementide sidumine koodiga● sündmuste sidumine koodiga● algab „event loop“
40Tööjaamade tarkvara
Tk - programmi käivitamine● interaktiivselt (koheselt luuakse
„tööaken“)
wish
● skriptina
#!/usr/bin/wish
41Tööjaamade tarkvara
Tk - esimene näide
#!/usr/bin/wishbutton .hello -text Hello \ -command {puts stdout "Hello World!"}pack .hello -padx 20 -pady 10
● pole küll päris puhas graafiline liides, väljastab standardväljundisse
42Tööjaamade tarkvara
Tk - aknaelemendikäsk● pärast elemendi loomist luuakse
"elemendikäsk", mis töötab konkreetse isendi peal
button .nupp -text "Flash!!".nupp flash.nupp configure -text "Muudetud!"
43Tööjaamade tarkvara
Tk - elementide nimetamine● nimetamine käib hierarhia järgi:
– ülemaken .
– ülemakna järglane .frame1– .frame1 alam: .frame1.button1– jne
● elemendi nime esitäht peab olema väike
44Tööjaamade tarkvara
Tk – elementide nimetamine● aknaelemendi nime tasub hoida
muutujas:– kasutajaliidese muutumisel võivad
muutuda alluvusvahekorrad - kõik elemendiga seotu tuleks sel juhul ümber kirjutada
45Tööjaamade tarkvara
Tk - elementide konfigureerimine● konfigureerimine:
– välimus– seotud kood– suhted ümbritsevaga
.element -parameeter väärtus● parameetreid saab määrata
– elementi luues– aknaelemendi nimelise käsu kaudu .element configure -parameeter väärtus
46Tööjaamade tarkvara
Tk - elementide konfigureerimine● sõltuvalt aknaelemendist kümneid
parameetreid● parameetri peab andma vaid siis, kui
vaikeväärtus ei sobi● parameetrite väärtuseid saab ka
päringuga küsida
.element cget -parameeter
.element configure -parameeter
47Tööjaamade tarkvara
Tk - ressursside andmebaas● kõiki elementide parameetreid on
võimalik esitada ka ressursiandmebaasi kaudu
● ressursiandmebaas kirjeldab sarnaste elemendiklasside välimuse
● lihtne teha liidest läbivaid muutuseid● kood vabaneb välimust puudutavatest
parameetritest● lihtne teha mitmele rakendusele läbivat
stiili
48Tööjaamade tarkvara
Tk - paigutushaldur pack● programmeerija määrab igale elemendile
"kitsendused", mille piires pack tohib paigutada
● ülejäänud otsused teeb pack
● pack juures on oluline tunda tema tööpõhimõtteid, algoritmi
● pack'i põhiline mõiste on järelejäänud tühi ruum, cavity, seda jaotatakse paigutusjärjekorra alusel aknaelementide vahel
● paiguta ülemelemendid enne järglasi
49Tööjaamade tarkvara
Tk - paigutushaldur pack● pack parameetreid:
-before/after win (pakkimisjärjekord)
-anchor anchor (asetus vaba ruumi piires)
-expand boolean (kas kastutada kogu vaba ruum)
-fill style (milline osa vabast ruumist kasutada)
50Tööjaamade tarkvara
Tk - paigutushaldur pack-in win (millise akna sisse asetada)
-ipadx/ipady amount-padx/pady amount (padding
parameetrid)
-side side (millisele vaba ruumi osale pretendeerida)
51Tööjaamade tarkvara
Tk - paigutushaldur grid● paigutab aknaelemendid ridadesse ja
veergudesse● programmeerija määrab, mitmendas
reas/veerus element asub, mitu rida ja veergu ta enda alla võtab
● ridasid ja veerge tehakse vastavalt vajadusele dünaamiliselt juurde
52Tööjaamade tarkvara
Tk - paigutushaldur grid● grid parameetreid
-column col (veerg)
-row row (rida)
-columnspan n (mitu veergu enda alla võtta)
-rowspan n (mitu rida enda alla võtta)
-sticky how (kuidas paigutada element välja piires)
53Tööjaamade tarkvara
Tk - paigutushaldur place● programmeerija ütleb täpselt, kuhu
element paigutada● parim kontroll paigutuse üle● suurte liideste puhul liiga palju tööd● tekivad ülekattumised
-x coord-y coord-relx coord-rely coord
54Tööjaamade tarkvara
Tk - paigutushaldurite kombineerimine● pack ja grid kombineerimine tavaline● ei tohi tekkida seisu, kus haldurid
võistlevad sama ruumi pärast● nt: kaks alamakent frame, ühte haldab
pack, teist grid: OK● nt: alamaken frame, tema sees kaks
elementi label, ühte haldab pack, teist grid: NOT OK