Επικοινωνία Ανθρώπου - Μηχανής Επικοινωνία Ανθρώπου - Μηχανής Παρουσίαση TCL/TK Προύντζος Βασίλειος Α.Μ. : 690 Μάτας Αντώνιος Α.Μ. : 559
Εισαγωγή Συστατικά στοιχεία Βασική Αρχή: Αποτελέσματα: TCL : Ενσωματώσιμη scripting γλώσσα ΤΚ : Σειρά εργαλείων GUI & Widgets βασισμένων στην TCL Βασική Αρχή: Μία καθολική scripting γλώσσα έχει τον πλήρη έλεγχο, συναρτήσεων, διεπαφών και επικοινωνίας τους. Αποτελέσματα: Καλύτερες προγραμματιστικές επιδόσεις Περισσότερη δύναμη και ευελιξία (συνεργασία εφαρμογών, σύνθετος προγραμματισμός) Ενεργά αντικείμενα (αντικατάσταση εντολών με scripts)
Διάρθρωση TCL scripting γλώσσα TΚ πρόσθετο πακέτο εργαλείων Επισκόπηση εφαρμογών και επεκτάσεων Περίληψη
TCL : Tool Command Language Τα διαδραστικά προγράμματα χρειάζονται γλώσσες προγραμματισμού με εντολές : Που μπορούν να τροποποιηθούν για κάθε συγκεκριμένη εφαρμογή Αποτέλεσμα : Αδυναμία – Τρομερές ιδιαιτερότητες Τα emacs & csh είναι κατάλληλα, αλλά δεν μπορούν να επαναχρησιμοποιηθούν Λύση : Επαναχρησιμοποιήσιμη scripting γλώσσα Ο διερμηνέας (interpreter) είναι μια βιβλιοθήκη της C Παροχή βασικών χαρακτηριστικών (μεταβλητές, διαδικασίες κ.α.) Εφαρμογές που επεκτείνονται με επιπλέον χαρακτηριστικά
Φιλοσοφία scripting γλώσσας 1 ¥ Μέγεθος προγράμματος, πολυπλοκότητα, επαναχρησιμοποίηση Μεγάλες, σύνθετες εφαρμογές Η απόδοση είναι σημαντικό στοιχείο Χρειάζονται σταθερή δομή Επίτευγμα : Αποφυγή λαθών Διαδραστικές εντολές, scripting Η απόδοση είναι λιγότερο σημαντική Ελάχιστη δομή : Λιγότερες εξαρτήσεις, εύκολη ανταλλαγή στοιχείων Επίτευγμα : Καλύτερος προγραμματισμός Μπορεί μια γλώσσα να ικανοποιήσει όλες τις ανάγκες ;
Διγλωσσική προσέγγιση 1 ¥ Μέγεθος προγράμματος, πολυπλοκότητα, επαναχρησιμοποίηση C Tcl Χρήση TCL για scripting, C ή C++ για μεγαλύτερα πράγματα Επιτεύγματα χρήσης TCL : Ελάχιστη σύνταξη (εύκολη στην εκμάθηση και στον προγραμματισμό) Ελάχιστη δομή (αντικείμενα συνυπάρχουν και αλληλεπιδρούν) Απλές διεπαφές για την C (επεκτασιμότητα)
Ενσωματώνοντας την TCL σε εφαρμογές Η εφαρμογή παράγει scripts H TCL κάνει συντακτική ανάλυση των scripts και περνάει λέξεις προς εκτέλεση διεργασιών Η εφαρμογή επεκτείνει ένα ενσωματωμένο σύνολο εντολών Ορίζει νέους τύπους αντικειμένων σε C Αναπαριστά βασικές λειτουργίες ως νέες εντολές TCL Κατασκευάζει σύνθετα χαρακτηριστικά με TCL scripts Tcl Application Init Command Loop Parser Built-In Commands Application Commands
Επεκτάσεις Οι επεκτάσεις μπορούν να αναπτυχθούν ανεξάρτητα Extension Tcl Application Init Command Loop Parser Extension Commands Built-In Commands Application Commands Οι επεκτάσεις μπορούν να αναπτυχθούν ανεξάρτητα Δικτυακή επικοινωνία, εισαγωγή βάσεων δεδομένων, ασφάλεια… Οι εφαρμογές μπορούν να περιέχουν συνδυασμούς επεκτάσεων
Βασικά Τι είναι ένα TCL script Τι είναι μια TCL εντολή Ακολουθία εντολών Οι εντολές χωρίζονται από νέες γραμμές και ερωτηματικά Τι είναι μια TCL εντολή Μία ή περισσότερες λέξεις χωριζόμενες από κενά Η πρώτη λέξη είναι το όνομα της εντολής, οι υπόλοιπες τα ορίσματά της Η εντολή επιστρέφει αποτέλεσμα σε μορφή string
Βήματα εκτέλεσης εντολής Εντολή Κατακερματισμός εντολών σε λέξεις Αντικαταστάσεις Δεν κάνει interpret τις τιμές των λέξεων Tcl Parser Λέξεις Εκτέλεση του interpret των λέξεων Αποτέλεσμα συναρτήσεων σε string Command Procedure Αποτέλεσμα
TCL : Tool Command Language set a 45 45 Αναθέσεις set b $a 45 set b [$a+10] 55 Quoting set b “a is $a” a is 45 set b {[expr $a+10]} [expr $a+10]
Περισσότερα για την γλώσσα TCL Ευρύ σύνολο ενσωματωμένων εντολών Μεταβλητές, πίνακες, λίστες… Εκφράσεις παρόμοιες της C Συνθήκες, βρόχοι if "$x < 3" { puts "x is too small" } Procedures Πρόσβαση σε TCP/IP sockets, αρχεία, υπορουτίνες Οι μοναδικές αναπαραστάσεις είναι τα strings Εύκολη πρόσβαση από την C Προγράμματα και δεδομένα δυναμικά
Control structures Εντολές ελέγχου ροής προγράμματος if if "$x < 3" {puts “x is too small”} for for {set i 1} { $i <= 3} {incr i} {…body} switch switch -exact -- $value { foo { doFoo; incr count(foo) } default { incr count(other) } } break foreach set n 0; foreach i {1 2 3 4 5} {set n [expr {$n + i*i}]} while while {$i >= 0} {$b = $b+1; incr i} eval set cmd {puts stdout “Hello, World!”} => puts stdout “Hello, World!” eval $cmd => Hello, World! continue Πρόκειται για εντολές που παίρνουν ως ορίσματα TCL scripts
Procedures H εντολή proc ορίζει μια procedure proc sub1 x {expr $x-1} Οι procedures συμπεριφέρονται σαν built-in εντολές sub1 3 2 name body list of argument names
Errors Σε περίπτωση λάθους οι εντολές ακυρώνονται κατά το run time H εφαρμογή εμφανίζει μήνυμα λάθους Υπάρχει global μεταβλητή που παρέχει stack trace
Επιπλέον TCL χαρακτηριστικά Χειρισμός string regexp format split string binary regsub scan join append Εντολές για χειρισμό αρχείων open gets seek flush glob file pid close read tell cd puts source eof pwd Εμβέλεια μεταβλητών global uplevel upvar
Το πακέτο εργαλείων TK Γιατί επινοήθηκε : Η λάθος λύση : Ήταν πολύ δύσκολο να κατασκευαστούν εφαρμογές με όμορφες και χρηστικές διεπαφές Η λάθος λύση : Με C++ θα είχαμε αντικειμενοστρεφή πακέτα εργαλείων Θα είχαμε βελτίωση της τάξης του 10-20% και επιπλέον θα έπρεπε ακόμη να προγραμματίζουμε σε χαμηλό επίπεδο Η σωστή λύση : Ανεβάζουμε το επίπεδο προγραμματισμού Δημιουργούμε διεπαφές με TCL scripts
Κατασκευή διεπαφών με την TK Πρόσθετες εντολές TCL Κατασκευή widgets όπως της βιβλιοθήκης Motif Τακτοποίηση των widgets Ανάθεση γεγονότων σε εντολές TCL Χειρισμός της εκάστοτε επιλογής, απόκτηση ελέγχου, διαχείριση παραθύρου κ.τ.λ. Βιβλιοθήκη συναρτήσεων C Δημιουργία νέων κλάσεων για widgets Δημιουργία νέων εργαλείων προς διαχείριση στοιχείων παραθύρου καθώς και widgets (geometry managers)
Τι είναι μια ΤΚ εφαρμογή O TCL διερμηνέας (interpreter) To σύνολο εργαλείων ΤΚ Συγκεκριμένος για κάθε εφαρμογή κώδικας C Νέοι τύποι αντικειμένων Νέα Widgets TCL scripts (σύνθεση του άνωθεν κώδικα) Κατασκευή διεπαφών χρήστη Αντίδραση σε γεγονότα Εντολές TCL
Wish : Windowing Shell Κατασκευή διεπαφών χρήστη με TCL scripts To παράδειγμα “Hello world” button .hello -text "Hello, world" -command exit pack .hello Γενικά χρειαζόμαστε 10 φορές λιγότερο κώδικα για υλοποίηση εφαρμογών
Γενικά Βασικές δομές : Παράθυρα, Widgets, συναρτήσεις Geometry management Ανάθεση πράξεων σε αντικείμενα (Bindings) Άλλες εντολές (send, focus, selection…)
Δομή μιας ΤΚ εφαρμογής Ιεραρχία των Widget O TCL διερμηνέας Μια διεργασία (μπορούμε να έχουμε >1) Widget : Παράθυρο-Αντικείμενο με συγκεκριμένη όψη και λειτουργίες Κλάσεις Widgets υλοποιήσιμες από TK Frame Menubutton Canvas Label Menu Scrollbar Button Message Scale Checkbutton Entry Listbox Radiobutton Text Toplevel
Ιεραρχία Widget .frame .frame.label .frame.h .frame.v .frame.listbox
Τύποι παραθύρων Internal windows Main window Top-level window . .listbox .menu .scroll .dlg .menu.file .menu.help .dlg.msg .dlg.no .dlg.yes
configuration options Κατασκευή Widgets Κάθε Widget έχει μία κλάση (button, listbox, scrollbar, etc…) Υπάρχει μία εντολή κλάσης σε κάθε κλάση, για την δημιουργία νέου στιγμιότυπου button .a.b -text Quit -command exit scrollbar .x -orient horizontal Όνομα κλάσης configuration options Όνομα παραθύρου
Configuration Options Ορίζονται από την κλάση. Για την .button -activebackground -disabledforeground -justify -underline -activeforeground -font -padx -width -anchor -foreground -pady -wraplength -background -height -relief -bitmap -highlightbackground -state -borderwidth -highlightcolor -takefocus -command -highlightthickness -text -cursor -image -textvariable Αν τα configurations δεν ορίζονται manually Τότε ορίζονται by default από την κλάση
Εντολές Widget Υπάρχουν TCL εντολές για κάθε Widget, ονομαζόμενες από το κάθε Widget Η εντολές για το Widget διαγράφονται όταν το Widget καταστρέφεται Βασική αρχή : Όλα τα Widgets πρέπει να είναι οποιαδήποτε στιγμή Προσβάσιμα Τροποποιήσιμα
Geometry Management Τα Widgets δεν καθορίζουν μόνα τους τη θέση τους και το μέγεθός τους. Αυτό το κάνουν οι Geometry Managers Τα Widgets δεν εμφανίζονται καν στην οθόνη, μέχρι να το κάνει αυτό ένας Geometry Manager Geometry Manager=Αλγόριθμος για την τακτοποίηση θυγατρικών παραθύρων που προέρχονται από ένα πρωταρχικό παράθυρο Parameters from application designer Requested size from slave Geometry of master Geometry Manager Size and location of slave Requested size for master
Callback Για να κάνουμε τα Widget να δουλεύουν μαζί σε μία εφαρμογή χρησιμοποιούμε TCL scripts Η κάθε ενέργεια του Widget είναι μία TCL εντολή Τα Widgets επικοινωνούν με TCL εντολές
Bindings Μπορούμε να συσχετίσουμε TCL scripts με Χ ενέργειες bind .b <Control-h> {backspace .t} Ορισμός γεγονότων <Double-Control-ButtonPress-1> Window(s) Event Script Modifiers Event Type Button or Keysym
Επισκόπηση Εφαρμογών Button Checkbox RadioButton Entry
Επισκόπηση Εφαρμογών File Selection MenuBars
Επισκόπηση Εφαρμογών Tabs Labels & Frames
Περίληψη Η δημιουργία διεπαφών με την ΤΚ είναι εύκολη Δημιουργία Widget Τακτοποίηση με τους geometry managers Σύνδεσή τους με την εφαρμογή και μεταξύ τους Ισχυρή scripting γλώσσα Δημιουργία διεπαφών Επικοινωνία των Widget μεταξύ τους και με την εφαρμογή Επικοινωνία με αντικείμενα εκτός εφαρμογής Μεταβολή όλων δυναμικά
Τέλος Παρουσίασης