Λύσεις — Κεφάλαιο 9: Εφαρμογές με χρήση API (σελ. 167-170) – ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Γ΄ ΕΠΑΛ

Λύσεις — Κεφάλαιο 9: Εφαρμογές με χρήση API (σελ. 167-170)

Λύσεις των 3 Δραστηριοτήτων (κώδικας Tkinter), της επέκτασης της Εργαστηριακής άσκησης (πίτα matplotlib), των 3 Θεμάτων για συζήτηση και των 8 Ερωτήσεων του κεφαλαίου 9.


Δραστηριότητα 1 — Δικά μας μηνύματα με Label (τροποποίηση Παραδείγματος 1)

Ερώτηση: Τροποποιήστε κατάλληλα τον κώδικα του 1ου παραδείγματος για τη δημιουργία μηνυμάτων, ώστε να εμφανίσετε τα δικά σας μηνύματα με χρήση του Label.

Απάντηση:

  • Κρατάμε τη δομή του Παραδείγματος 1 (σελ. 160-161): δημιουργία παραθύρου με Tk(), ένα ή περισσότερα Label με το δικό μας κείμενο, pack() για κάθε στοιχείο, κουμπί εξόδου και mainloop(). Παράδειγμα με τρία μηνύματα, τίτλο παραθύρου και μορφοποίηση (γραμματοσειρά, χρώμα):

  • # -*- coding: utf-8 -*-
    from Tkinter import *
    
    window = Tk()                                   # το αρχικό παράθυρο
    window.title('Τα μηνύματά μου')                 # τίτλος στη μπάρα τίτλου
    window.wm_geometry('300x150+50+50')             # μέγεθος και θέση
    
    a = Label(window, text='Καλημέρα Ελλάδα!', font=('Arial', 16, 'bold'), fg='blue')
    a.pack()
    b = Label(window, text='Καλώς ήρθατε στο μάθημα Προγραμματισμού Υπολογιστών')
    b.pack()
    c = Label(window, text='Γ΄ ΕΠΑ.Λ. - Τομέας Πληροφορικής', fg='red')
    c.pack()
    
    buttonA = Button(window, text='Έξοδος', command=window.destroy)
    buttonA.pack()
    window.mainloop()                               # εμφάνιση του παραθύρου
  • Τι αλλάξαμε: το κείμενο της παραμέτρου text (τα δικά μας μηνύματα), προσθέσαμε περισσότερα Label (καθένα με δικό του pack, εμφανίζονται το ένα κάτω από το άλλο), και προαιρετικά χρήση font/fg (χρώμα γραμμάτων) και title. Η πρώτη γραμμή # -*- coding: utf-8 -*- χρειάζεται στην Python 2 για ελληνικούς χαρακτήρες (όπως στο Παράδειγμα 2). Σε Python 3 το άρθρωμα λέγεται tkinter (πεζό).

Σύνοψη: Ίδια δομή με το Παράδειγμα 1: Tk() → Label(window, text='δικό μας μήνυμα') → pack() (όσα Label θέλουμε) → Button Quit → mainloop()· προαιρετικά font, fg, title, wm_geometry.

Κριτήρια αξιολόγησης:

  • Λειτουργικός κώδικας Tkinter με τουλάχιστον ένα προσωπικό μήνυμα + εξήγηση των αλλαγών.

Δραστηριότητα 2 — Δικό μας quiz γνώσεων (τροποποίηση Παραδείγματος 2)

Ερώτηση: Τροποποιήστε κατάλληλα το 2ο παράδειγμα, που παρουσιάστηκε παραπάνω, ώστε να δημιουργήσετε το δικό σας quiz γνώσεων.

Απάντηση:

  • Αλλάζουμε την ερώτηση, τη λίστα των επιλογών (πλειάδες κείμενο-τιμή) και τη σωστή τιμή στη συνάρτηση ελέγχου. Επιπλέον βελτίωση: το μήνυμα ανατροφοδότησης εμφανίζεται σε ένα Label που ενημερώνεται (με config) αντί να προστίθεται νέο Label σε κάθε κλικ, και κρατάμε σκορ:

  • # -*- coding: utf-8 -*-
    from Tkinter import *
    
    root = Tk()
    root.title('Quiz Πληροφορικής')
    c = IntVar()
    c.set(0)                                  # αρχικοποίηση επιλογής
    score = [0]                               # σκορ (λίστα για να αλλάζει μέσα στη συνάρτηση)
    
    answers = [
        ('Στοίβα', 1),
        ('Ουρά', 2),
        ('Λεξικό', 3),
        ('Πλειάδα', 4),
        ('Έξοδος', 5)
    ]
    
    def ShowChoice():
        # ενέργειες ανάλογα με την επιλογή του παίκτη
        if c.get() == 5:
            root.destroy()
        elif c.get() == 2:                    # η σωστή απάντηση είναι η Ουρά (FIFO)
            score[0] += 10
            msg.config(text='Μπράβο!! Σωστά. Σκορ: ' + str(score[0]), fg='green')
        else:
            msg.config(text='Λάθος απάντηση, ξαναπροσπάθησε', fg='red')
    
    Label(root, text='Ποια δομή δεδομένων λειτουργεί ως FIFO (First In First Out);',
          justify=LEFT, padx=20).pack()
    for txt, val in answers:
        Radiobutton(root, text=txt, indicatoron=0, width=20, padx=20,
                    variable=c, command=ShowChoice, value=val).pack(anchor=W)
    msg = Label(root, text='')                # ετικέτα ανατροφοδότησης
    msg.pack()
    mainloop()
  • Τι αλλάξαμε σε σχέση με το βιβλίο: ερώτηση και επιλογές (θεωρία κεφ. 8), η σωστή τιμή στο elif c.get() == 2, η τιμή εξόδου (5), και η ανατροφοδότηση μέσω msg.config(...) (ενημέρωση υπάρχοντος Label) με σκορ. Τα Radiobutton μοιράζονται την ίδια μεταβλητή c (variable=c) ώστε μόνο ένα να είναι επιλεγμένο, και κάθε πάτημα καλεί τη ShowChoice (command). Μπορούμε να επεκτείνουμε με λίστα ερωτήσεων και κουμπί «Επόμενη».

Σύνοψη: Ίδια δομή με το Παράδειγμα 2: IntVar c, λίστα πλειάδων (κείμενο, τιμή), Radiobutton με variable=c/command=ShowChoice/value, συνάρτηση που ελέγχει c.get() για σωστό/λάθος/έξοδο· δικές μας ερωτήσεις, απαντήσεις και σωστή τιμή.

Κριτήρια αξιολόγησης:

  • Λειτουργικό quiz Tkinter με Radiobutton + εξήγηση των αλλαγών.

Δραστηριότητα 3 — Εμπλουτισμός της φόρμας εισαγωγής στοιχείων μαθητή (Παράδειγμα 4)

Ερώτηση: Δοκιμάστε στο 4ο παράδειγμα, που παρουσιάστηκε παραπάνω, να εμπλουτίσετε κατάλληλα τη φόρμα εισαγωγής στοιχείων, ώστε να εισάγονται και στη συνέχεια να εμφανίζονται περισσότερες πληροφορίες για το μαθητή, όπως το τμήμα και η τάξη του, η ηλικία, το φύλο, ο Μ_Ο των βαθμών τριμήνου κ.ά.

Απάντηση:

  • Προσθέτουμε για κάθε νέα πληροφορία ένα ζεύγος Label + Entry σε νέα γραμμή του grid, και για το φύλο δύο Radiobutton με κοινή μεταβλητή StringVar. Η συνάρτηση εμφάνισης διαβάζει όλα τα πεδία με get(), τα τυπώνει και τα καθαρίζει με delete(0, END):

  • # -*- coding: utf-8 -*-
    from Tkinter import *
    
    def show_eisodo():
        print 'First Name: %s\nLast Name: %s' % (fname.get(), lname.get())
        print 'Class/Section: %s   Age: %s   Sex: %s' % (tmima.get(), age.get(), sex.get())
        print 'Average grade: %s' % mo.get()
        for e in (fname, lname, tmima, age, mo):
            e.delete(0, END)                      # καθαρισμός των πεδίων
    
    window = Tk()
    window.title('Στοιχεία μαθητή')
    labels = ['First Name', 'Last Name', 'Class - Section', 'Age', 'Average (term)']
    for i in range(len(labels)):
        Label(window, text=labels[i]).grid(row=i, sticky=W)
    
    fname = Entry(window)
    lname = Entry(window)
    tmima = Entry(window)
    age = Entry(window)
    mo = Entry(window)
    entries = (fname, lname, tmima, age, mo)
    for i in range(len(entries)):
        entries[i].grid(row=i, column=1)
    
    sex = StringVar()
    sex.set('Boy')
    Label(window, text='Sex').grid(row=5, sticky=W)
    Radiobutton(window, text='Boy', variable=sex, value='Boy').grid(row=5, column=1, sticky=W)
    Radiobutton(window, text='Girl', variable=sex, value='Girl').grid(row=5, column=2, sticky=W)
    
    Button(window, text='Quit', command=window.quit).grid(row=6, column=0, sticky=W, pady=4)
    Button(window, text='Print', command=show_eisodo).grid(row=6, column=1, sticky=W, pady=4)
    mainloop()
  • Εξήγηση: ο grid οργανώνει τα widgets σε γραμμές (row) και στήλες (column) — ετικέτες στη στήλη 0, πεδία στη στήλη 1· sticky=W στοιχίζει αριστερά. Οι τιμές των Entry είναι συμβολοσειρές — αν θέλουμε υπολογισμούς (π.χ. έλεγχος ότι ο Μ.Ο. είναι 0-20) μετατρέπουμε με float(mo.get()). Αντί για print στην κονσόλα, μπορούμε να εμφανίζουμε τα στοιχεία σε ένα Label μέσα στο παράθυρο (result.config(text=...)), όπως στη δραστηριότητα 2.

Σύνοψη: Επέκταση του Παραδείγματος 4: νέα ζεύγη Label+Entry (τμήμα/τάξη, ηλικία, Μ.Ο.) σε επόμενες γραμμές του grid, Radiobutton με StringVar για το φύλο, η show_eisodo διαβάζει όλα τα get() και καθαρίζει με delete(0, END).

Κριτήρια αξιολόγησης:

  • Λειτουργική φόρμα με τουλάχιστον τρία επιπλέον πεδία + ανάγνωση/καθαρισμός.

Εργαστηριακή άσκηση 1 (επέκταση) — Γράφημα πίτας με matplotlib για τις μουσικές προτιμήσεις

Ερώτηση: Επέκταση της άσκησης: τροποποιήστε το παράδειγμα οπτικοποίησης δεδομένων με πίτα, ώστε να απεικονιστούν, όπως στην εικόνα, τα δεδομένα του προβλήματος (έρευνα σε 200 μαθητές: 60 Λαϊκό, 40 Rock, 15 Metal, 30 Pop, 25 Hip hop, 30 άλλο) με αξιοποίηση της βιβλιοθήκης matplotlib και χρήση της pie() και με αυτόματη απεικόνιση των ποσοστών.

Απάντηση:

  • Δεδομένα: 200 μαθητές — Λαϊκό 60, Rock 40, Metal 15, Pop 30, Hip hop 25, Άλλο 30. Τα ποσοστά υπολογίζονται αυτόματα από τη pie() (παράμετρος autopct): Λαϊκό 30,0%, Rock 20,0%, Metal 7,5%, Pop 15,0%, Hip hop 12,5%, Άλλο 15,0% — ακριβώς όσα δείχνει η εικόνα του βιβλίου (σελ. 168).

  • # -*- coding: utf-8 -*-
    import matplotlib.pyplot as plt
    
    labels = ['laiko', 'Rock', 'Metal', 'Pop', 'Hip hop', 'Other']   # είδη μουσικής
    sizes = [60, 40, 15, 30, 25, 30]                                # πλήθος μαθητών
    
    plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)   # autopct: ποσοστά με 1 δεκαδικό
    plt.axis('equal')                 # ίσοι άξονες -> κυκλική (όχι ελλειπτική) πίτα
    plt.title('music preferences')
    plt.show()
  • Εξήγηση: η pie(sizes, labels=…, autopct='%1.1f%%') παίρνει τις απόλυτες τιμές και υπολογίζει μόνη της τα ποσοστά (τιμή/άθροισμα), τα οποία εμφανίζει πάνω στα τμήματα με τη μορφή του autopct (ένα δεκαδικό και το σύμβολο %). Η axis('equal') κάνει την πίτα κυκλική, το startangle περιστρέφει την αρχή. Προαιρετικά: explode=(0, 0.1, 0, 0, 0, 0) για να «ξεχωρίσει» ένα τμήμα, shadow=True, colors=[…], ή plt.savefig('pie.png') για αποθήκευση σε αρχείο. Εγκατάσταση: σε Debian/Ubuntu sudo apt-get install python-matplotlib (το βιβλίο αναφέρει build-dep), ή pip install matplotlib. Το πρόγραμμα εκτελέστηκε και τα ποσοστά επαληθεύτηκαν.

  • Αξία της οπτικοποίησης (μέρος της συζήτησης): ένα γράφημα δείχνει με μια ματιά τη σχετική βαρύτητα κάθε κατηγορίας (το Λαϊκό είναι σχεδόν το 1/3, το Metal ελάχιστο), κάτι που από τον πίνακα αριθμών απαιτεί υπολογισμούς· η matplotlib δίνει με λίγες γραμμές πίτες, ραβδογράμματα, γραμμές, ιστογράμματα, διασπορές — έτοιμος κώδικας (API) που δεν χρειάζεται να ξαναγράψουμε.

Σύνοψη: labels/sizes με τα 6 είδη και τα πλήθη (60, 40, 15, 30, 25, 30)· plt.pie(sizes, labels=labels, autopct='%1.1f%%')· axis('equal'), title, show() — ποσοστά 30/20/7,5/15/12,5/15 %.

Κριτήρια αξιολόγησης:

  • Σωστά δεδομένα + pie με autopct + εξήγηση παραμέτρων.

Θέμα για συζήτηση 1 — Κλήση από το ευρετήριο: έξυπνο vs παραδοσιακό κινητό

Ερώτηση: Σε ένα έξυπνο τηλέφωνο πόσες κινήσεις χρειάζονται για να κάνουμε μία κλήση από το ευρετήριο; Σε σχέση με ένα «παραδοσιακό» κινητό τηλέφωνο είναι πιο σύνθετη ή πιο απλή διαδικασία; Τι θα προτείνατε για να βελτιώσετε τη διαδικασία αυτή;

Απάντηση:

  • Καταμέτρηση (τυπικό smartphone): ① ξεκλείδωμα (δακτυλικό αποτύπωμα/πρόσωπο ή κωδικός), ② άνοιγμα της εφαρμογής Τηλέφωνο, ③ μετάβαση στην καρτέλα Επαφές, ④ αναζήτηση/κύλιση στο όνομα (πληκτρολόγηση μερικών γραμμάτων), ⑤ επιλογή της επαφής, ⑥ πάτημα του εικονιδίου κλήσης — περίπου 5-6 κινήσεις, ενίοτε λιγότερες αν υπάρχει η επαφή στα «Αγαπημένα» ή στις «Πρόσφατες». Παραδοσιακό κινητό: ① πάτημα του πλήκτρου ευρετηρίου, ② πληκτρολόγηση των πρώτων γραμμάτων ή κύλιση με τα βελάκια, ③ πάτημα του πράσινου πλήκτρου κλήσης — 3 κινήσεις, με φυσικά πλήκτρα που «αισθανόμαστε».
  • Σύγκριση με κριτήρια ευχρηστίας (σελ. 155-156): το παραδοσιακό είναι πιο απλό ως προς τον αριθμό των βημάτων (κανόνας «διάλογοι σε λίγα βήματα») και πιο εύκολο στη συγκράτηση (πάντα το ίδιο πράσινο πλήκτρο — συνέπεια)· το smartphone είναι πιο σύνθετο στην αρχή (περισσότερα βήματα, οθόνη αφής, πιθανά λάθη αφής), αλλά προσφέρει αναζήτηση που κάνει την εύρεση σε μεγάλα ευρετήρια πολύ γρηγορότερη, καθώς και shortcuts για τους έμπειρους (widget επαφών, φωνητική εντολή «κάλεσε τον…», αγαπημένα). Δεν υπάρχει μονοσήμαντη απάντηση — για έναν ηλικιωμένο χρήστη το παραδοσιακό είναι σαφώς ευχρηστότερο.
  • Προτάσεις βελτίωσης: κλήση απευθείας από την οθόνη κλειδώματος για τα αγαπημένα· φωνητική κλήση· μεγάλα εικονίδια/«απλή λειτουργία» για ηλικιωμένους· εμφάνιση πλήκτρου κλήσης δίπλα σε κάθε επαφή στη λίστα (ώστε να μη χρειάζεται άνοιγμα της καρτέλας)· έξυπνες προτάσεις (συχνές επαφές πρώτες)· σαφής ανατροφοδότηση (δόνηση/ήχος) ότι η κλήση ξεκίνησε — εφαρμογή των κανόνων του Shneiderman: λίγα βήματα, shortcuts, ανατροφοδότηση, έλεγχος από τον χρήστη.

Σύνοψη: (ενδεικτική) Smartphone ≈ 5-6 κινήσεις (ξεκλείδωμα, εφαρμογή, επαφές, αναζήτηση, επιλογή, κλήση) έναντι ≈ 3 στο παραδοσιακό (ευρετήριο, επιλογή, πράσινο πλήκτρο)· το παραδοσιακό απλούστερο σε βήματα, το smartphone ευέλικτο (αναζήτηση, shortcuts)· βελτιώσεις: αγαπημένα στην οθόνη κλειδώματος, φωνητική κλήση, πλήκτρο κλήσης δίπλα σε κάθε επαφή, απλή λειτουργία, ανατροφοδότηση.

Κριτήρια αξιολόγησης:

  • Καταμέτρηση βημάτων και στις δύο συσκευές + τεκμηρίωση με κριτήρια ευχρηστίας + τουλάχιστον δύο προτάσεις.

Θέμα για συζήτηση 2 — Κατάλληλα εικονίδια για πέντε λειτουργίες

Ερώτηση: Ποια εικονίδια πιστεύετε ότι είναι τα πιο κατάλληλα να χρησιμοποιήσουμε σε μια εφαρμογή για να δηλώσουμε στο χρήστη ότι με αυτά μπορεί αντίστοιχα: να αλλάξει τη γλώσσα γραφής από το πληκτρολόγιο, να εκτυπώσει ένα κείμενο, να ζητήσει βοήθεια για τη χρήση του, να αναζητήσει ένα στοιχείο, να διαγράψει ένα στοιχείο;

Απάντηση:

  • Η επιλογή στηρίζεται στην αρχή της μεταφοράς (σελ. 157): γνώριμο οπτικό αντικείμενο που συνδέεται νοηματικά με την ενέργεια, ώστε ο χρήστης να καταλαβαίνει το νόημα χωρίς να διαβάσει κείμενο — και στη συνέπεια με τα εικονίδια που ήδη χρησιμοποιούν τα διαδεδομένα προγράμματα.
  • Αλλαγή γλώσσας πληκτρολογίου: μια υδρόγειος σφαίρα 🌐 (διεθνές σύμβολο γλώσσας/περιοχής) ή η ένδειξη EN/EL (τα αρχικά της τρέχουσας γλώσσας, όπως στη γραμμή εργασιών των Windows) — ενδεχομένως και σημαία, αν και η σημαία δηλώνει χώρα και όχι γλώσσα. • Εκτύπωση: το εικονίδιο εκτυπωτή 🖨️ — καθιερωμένο σε όλες τις εφαρμογές γραφείου. • Βοήθεια: το ερωτηματικό ❓ (συχνά μέσα σε κύκλο) ή ένα σωσίβιο· καθιερωμένο και το πλήκτρο F1. • Αναζήτηση: ο μεγεθυντικός φακός 🔍 — παγκόσμια μεταφορά για την εύρεση. • Διαγραφή: ο κάδος απορριμμάτων 🗑️ (μεταφορά του «πετάω») ή ένα κόκκινο Χ· επειδή η διαγραφή είναι μη αναστρέψιμη, καλό είναι να συνοδεύεται από επιβεβαίωση και δυνατότητα αναίρεσης (κανόνες 5 και 6 του Shneiderman).
  • Γενικοί κανόνες: εικονίδια απλά και ευδιάκριτα, με συνοδευτική ετικέτα/tooltip για τους αρχάριους, συνεπή σε όλη την εφαρμογή, αρκετά μεγάλα για οθόνες αφής και χρήστες με προβλήματα όρασης.

Σύνοψη: (ενδεικτική) Γλώσσα: υδρόγειος ή ένδειξη EN/EL· εκτύπωση: εκτυπωτής· βοήθεια: ερωτηματικό (ή σωσίβιο)· αναζήτηση: μεγεθυντικός φακός· διαγραφή: κάδος απορριμμάτων ή Χ με επιβεβαίωση/αναίρεση — βάσει της αρχής της μεταφοράς και της συνέπειας.

Κριτήρια αξιολόγησης:

  • Πέντε εικονίδια με αιτιολόγηση (μεταφορά, συνέπεια).

Θέμα για συζήτηση 3 — Πληρωμή λογαριασμών τηλεφώνου μέσω ATM με τους κανόνες του Shneiderman

Ερώτηση: Στις υπηρεσίες τράπεζας εξυπηρέτησης πελατών, προστίθεται ως νέα υπηρεσία η δυνατότητα πληρωμής λογαριασμών τηλεφώνων μέσω των ΑΤΜ με αυτόματη χρέωση του λογαριασμού του ενδιαφερόμενου πελάτη. Λαμβάνοντας υπόψη τους βασικούς κανόνες του Shneiderman: Ποια είναι τα βασικά στοιχεία προσοχής των σχεδιαστών της εφαρμογής για τη νέα αυτή υπηρεσία, ώστε να μη γίνουν λάθη κατά τη διαδικασία πληρωμής; Πώς μπορούν να αποτραπούν λάθη κατά την είσοδο της ταυτότητας του λογαριασμού τηλεφώνου που θα πληρωθεί; Πώς ο πελάτης θα γνωρίζει ότι τελικά η διαδικασία πληρωμής ολοκληρώθηκε με επιτυχία;

Απάντηση:

  • Βασικά στοιχεία προσοχής των σχεδιαστών:Συνέπεια με τις υπάρχουσες λειτουργίες του ATM — ίδια ορολογία, ίδια θέση των πλήκτρων «Επιβεβαίωση/Ακύρωση», ίδια χρώματα και γραμματοσειρές με την ανάληψη, ώστε ο πελάτης να μη μάθει κάτι καινούργιο· ② διάλογος σε λίγα βήματα (επιλογή υπηρεσίας → εταιρεία τηλεφωνίας → κωδικός λογαριασμού → ποσό → επιβεβαίωση) και ελαχιστοποίηση της βραχύχρονης μνήμης (7±2): το σύστημα να θυμάται και να προτείνει τους λογαριασμούς που πληρώθηκαν στο παρελθόν, να εμφανίζει το ποσό αυτόματα από τον κωδικό πληρωμής· ③ πρόβλεψη σφαλμάτων — μεγάλα, ευανάγνωστα μηνύματα, δυνατότητα ακύρωσης/αναίρεσης σε κάθε βήμα πριν την τελική επιβεβαίωση, χρονικό όριο· ④ ο χρήστης να ελέγχει την αλληλεπίδραση (τίποτα να μην εκτελείται χωρίς ρητή επιβεβαίωση)· ⑤ σχεδιασμός για όλους τους χρήστες (ηλικιωμένοι, προβλήματα όρασης — μεγάλη γραμματοσειρά, ηχητικές οδηγίες).
  • Αποτροπή λάθους στην είσοδο της ταυτότητας του λογαριασμού: χρήση κωδικού πληρωμής με ψηφίο ελέγχου (check digit), ώστε ένα λάθος ψηφίο να εντοπίζεται αμέσως («Μη έγκυρος κωδικός»)· σάρωση του barcode/QR του λογαριασμού ή ανάγνωση από την κάρτα του πελάτη (χωρίς πληκτρολόγηση)· επιλογή από λίστα αποθηκευμένων λογαριασμών του πελάτη· οθόνη επιβεβαίωσης που εμφανίζει το όνομα του συνδρομητή, τον αριθμό τηλεφώνου, την εταιρεία και το ποσό πριν την οριστική χρέωση («Πληρωμή 45,30 € για τον αριθμό 210-… στο όνομα Χ. Παπαδόπουλος — Επιβεβαίωση;»)· έλεγχος μορφής (πλήθος ψηφίων) κατά την πληκτρολόγηση με άμεση ανατροφοδότηση.
  • Επιβεβαίωση επιτυχούς ολοκλήρωσης (συνεχής ανατροφοδότηση): μήνυμα προόδου κατά την επεξεργασία («Παρακαλώ περιμένετε…»), κατόπιν σαφές μήνυμα επιτυχίας στην οθόνη με τα στοιχεία της συναλλαγής και αριθμό αναφοράς, εκτύπωση απόδειξης (ή επιλογή αποστολής με SMS/e-mail), εμφάνιση του νέου υπολοίπου, και σε περίπτωση αποτυχίας ξεκάθαρο μήνυμα («Η πληρωμή ΔΕΝ πραγματοποιήθηκε — ο λογαριασμός σας δεν χρεώθηκε») ώστε ο πελάτης να μην μείνει σε αμφιβολία.

Σύνοψη: (ενδεικτική) Συνέπεια με τις γνωστές λειτουργίες, λίγα βήματα, ελάχιστος φόρτος μνήμης (αποθηκευμένοι λογαριασμοί), πρόβλεψη σφαλμάτων και ακύρωση, έλεγχος από τον χρήστη· είσοδος κωδικού με ψηφίο ελέγχου, σάρωση barcode, επιλογή από λίστα και οθόνη επιβεβαίωσης με όνομα/αριθμό/ποσό· ολοκλήρωση με μήνυμα επιτυχίας, αριθμό αναφοράς, απόδειξη, νέο υπόλοιπο και σαφές μήνυμα σε αποτυχία.

Κριτήρια αξιολόγησης:

  • Σύνδεση κάθε πρότασης με συγκεκριμένο κανόνα του Shneiderman· απάντηση και στα τρία ερωτήματα.

Ερώτηση 1 — Τι είναι η επικοινωνία ανθρώπου-υπολογιστή

Ερώτηση: Τι είναι η επικοινωνία ανθρώπου υπολογιστή;

Απάντηση:

  • Η Επικοινωνία Ανθρώπου-Υπολογιστή (ΕΑΥ) (Human Computer Interaction, HCI) είναι ένας πολλά υποσχόμενος και ταχύτατα αναπτυσσόμενος τομέας που ασχολείται με τον σχεδιασμό, την υλοποίηση και την αξιολόγηση διαδραστικών υπολογιστικών συστημάτων προορισμένων για ανθρώπινη χρήση, καθώς και με τη μελέτη των σημαντικών φαινομένων γύρω από αυτά (ορισμός της ACM, σελ. 155).
  • Αντικείμενό της είναι ό,τι μεσολαβεί στην αλληλεπίδραση: τα αντικείμενα, τα εικονίδια και τα μηνύματα της οθόνης, οι επιλογές αφής, η είσοδος με ποντίκι/πληκτρολόγιο, ο τρόπος ανατροφοδότησης του χρήστη μετά από κάθε ενέργεια. Βασικός στόχος της ΕΑΥ είναι η βελτίωση της ευχρηστίας (usability) του συστήματος· η αλληλεπίδραση υλοποιείται στο επίπεδο της διεπαφής χρήστη.

Σύνοψη: (ενδεικτική) Τομέας που ασχολείται με τον σχεδιασμό, την υλοποίηση και την αξιολόγηση διαδραστικών υπολογιστικών συστημάτων για ανθρώπινη χρήση και τη μελέτη των σχετικών φαινομένων (ACM)· στόχος η ευχρηστία.

Κριτήρια αξιολόγησης:

  • Ορισμός ACM + στόχος.

Ερώτηση 2 — Τι είναι η διεπαφή χρήστη

Ερώτηση: Τι είναι η διεπαφή χρήστη;

Απάντηση:

  • Η διεπαφή χρήστη (user interface) είναι το επίπεδο στο οποίο γίνεται η αλληλεπίδραση μεταξύ χρηστών και υπολογιστών, μέσω κατάλληλου λογισμικού και υλικού (σελ. 156). Περιλαμβάνει εκείνα τα στοιχεία του υλικού και του λογισμικού του υπολογιστή με τα οποία ο άνθρωπος έρχεται σε άμεση επαφή: οθόνη, πληκτρολόγιο, ποντίκι, οθόνη αφής, και τα παράθυρα, μενού, κουμπιά, εικονίδια, μηνύματα των εφαρμογών.
  • Η μελέτη ανάπτυξης της διεπαφής επικεντρώνεται στην κατάλληλη δημιουργία και προσαρμογή αυτών των στοιχείων και αποτελεί μέρος του ευρύτερου τομέα της Επικοινωνίας Ανθρώπου-Υπολογιστή, με σκοπό τη βελτίωση της ευχρηστίας. Ειδική περίπτωση είναι η γραφική διεπαφή χρήστη (GUI), που στην Python υλοποιείται με βιβλιοθήκες όπως η Tkinter (παράθυρα, Label, Button, Entry…).

Σύνοψη: (ενδεικτική) Το επίπεδο (στοιχεία υλικού και λογισμικού άμεσης επαφής με τον άνθρωπο: οθόνη, πληκτρολόγιο, ποντίκι, παράθυρα, μενού, κουμπιά) μέσω του οποίου γίνεται η αλληλεπίδραση χρήστη-υπολογιστή· η ανάπτυξή της είναι μέρος της ΕΑΥ, με στόχο την ευχρηστία.

Κριτήρια αξιολόγησης:

  • Ορισμός + παραδείγματα στοιχείων.

Ερώτηση 3 — Ευχρηστία συστήματος και χαρακτηριστικά της

Ερώτηση: Τι είναι η ευχρηστία συστήματος και ποια βασικά χαρακτηριστικά έχει ένα σύστημα με αυξημένη ευχρηστία;

Απάντηση:

  • Ευχρηστία (usability): σύμφωνα με το διεθνές πρότυπο ISO 9241, η ικανότητα ενός συστήματος να λειτουργεί αποτελεσματικά και αποδοτικά, παρέχοντας υποκειμενική ικανοποίηση στους χρήστες του (σελ. 155). Είναι ο βασικός στόχος της Επικοινωνίας Ανθρώπου-Υπολογιστή.
  • Χαρακτηριστικά συστήματος με αυξημένη ευχρηστία — η επικοινωνία γίνεται μέσω περιβάλλοντος με: ① ευκολία εκμάθησης· ② υψηλή απόδοση εκτέλεσης έργου (επίδοση)· ③ χαμηλή συχνότητα εμφάνισης λαθών χρήστη· ④ ευκολία συγκράτησης της γνώσης της χρήσης του (ο χρήστης θυμάται πώς χρησιμοποιείται)· ⑤ υποκειμενική ικανοποίηση του χρήστη — πόσο ικανοποιημένοι είναι οι χρήστες από τη χρήση (σελ. 156).

Σύνοψη: (ενδεικτική) Ευχρηστία (ISO 9241) = αποτελεσματική και αποδοτική λειτουργία με υποκειμενική ικανοποίηση· χαρακτηριστικά: ευκολία εκμάθησης, υψηλή επίδοση, χαμηλή συχνότητα λαθών, ευκολία συγκράτησης της γνώσης χρήσης, ικανοποίηση χρήστη.

Κριτήρια αξιολόγησης:

  • Ορισμός ISO + τα πέντε χαρακτηριστικά.

Ερώτηση 4 — Βασικοί κανόνες σχεδίασης διεπαφής

Ερώτηση: Ποιοι είναι οι βασικοί κανόνες για το σχεδιασμό μιας διεπαφής;

Απάντηση:

  • Γενική αρχή: ο σχεδιαστής σχεδιάζει για ευρεία ποικιλία χρηστών (όχι μόνο έμπειρους) λαμβάνοντας υπόψη τις ανθρώπινες ιδιαιτερότητες (χρώματα, ετικέτες, θέση πλήκτρων σύμφωνα με τις συνήθειες· μεγαλύτερα εικονίδια και ηχητικά μηνύματα για ΑμεΑ/ηλικιωμένους), με σκοπό όσο το δυνατόν πιο εύχρηστα συστήματα (σελ. 157-158).
  • Οι κανόνες του Shneiderman (Shneiderman & Plaisant, 2005): 1. Ομοιομορφία και συνέπεια (consistency) — αποφυγή απροσδόκητης συμπεριφοράς στην ορολογία, τα μηνύματα, τα μενού, τις οθόνες βοήθειας, τις γραμματοσειρές, το χρώμα, τη μορφή. 2. Σύντομοι χειρισμοί (shortcuts) για έμπειρους χρήστες — συντμήσεις, ειδικά πλήκτρα, μακροεντολές. 3. Συνεχής ανατροφοδότηση της κατάστασης (informative feedback) — π.χ. μπάρα προόδου αντιγραφής αρχείου. 4. Διάλογοι χρήστη-υπολογιστή που ολοκληρώνονται σε λίγα βήματα. 5. Πρόβλεψη για σφάλματα των χρηστών και τον χειρισμό τους. 6. Δυνατότητα αναίρεσης μιας ή περισσότερων ενεργειών με ευκολία. 7. Έλεγχος της αλληλεπίδρασης από τον χρήστη, όχι από το σύστημα. 8. Ελαχιστοποίηση του αριθμού των αντικειμένων που πρέπει να συγκρατεί ο χρήστης στη βραχύχρονη μνήμη (κανόνας των 7±2 αντικειμένων).

Σύνοψη: (ενδεικτική) Σχεδίαση για όλους τους χρήστες + οι 8 κανόνες Shneiderman: συνέπεια, shortcuts, συνεχής ανατροφοδότηση, διάλογοι σε λίγα βήματα, πρόβλεψη σφαλμάτων, αναίρεση, έλεγχος από τον χρήστη, ελαχιστοποίηση φόρτου βραχύχρονης μνήμης (7±2).

Κριτήρια αξιολόγησης:

  • Και οι οκτώ κανόνες με σύντομη εξήγηση.

Ερώτηση 5 — Τι είναι τα API

Ερώτηση: Τι είναι οι διεπαφές προγραμματισμού εφαρμογών – Application Programming Interfaces (APIs);

Απάντηση:

  • Οι Διεπαφές Προγραμματισμού Εφαρμογών (APIs) είναι συλλογές έτοιμου κώδικα (τμήματα κώδικα, συναρτήσεις, κλάσεις) για πάρα πολλές εφαρμογές, που παρέχει η μεγάλη κοινότητα προγραμματιστών της γλώσσας — γνωστές και ως βιβλιοθήκες λογισμικού· οι περισσότερες ανήκουν στην κατηγορία του ελεύθερου λογισμικού (σελ. 154). Η ύπαρξή τους αποτελεί ισχυρό πλεονέκτημα της Python.
  • Ένα API ορίζει τι μπορούμε να ζητήσουμε από τη βιβλιοθήκη (τις συναρτήσεις/μεθόδους και τις παραμέτρους τους — τη «διεπαφή» της), κρύβοντας το πώς υλοποιείται. Κατά την ανάπτυξη μιας εφαρμογής είναι καλή πρακτική η αξιοποίηση διαθέσιμων τμημάτων έτοιμου κώδικα ενός API αντί να τα ξαναγράφουμε: εξοικονόμηση χρόνου, λιγότερα λάθη, πιο ελκυστικά και φιλικά προγράμματα. Παραδείγματα: Tkinter (γραφικές διεπαφές), matplotlib (οπτικοποίηση δεδομένων), sqlite3 (βάσεις δεδομένων), math, random.

Σύνοψη: (ενδεικτική) Συλλογές έτοιμου κώδικα (βιβλιοθήκες λογισμικού, συνήθως ελεύθερο λογισμικό) που παρέχει η κοινότητα για την ανάπτυξη εφαρμογών· ορίζουν τι προσφέρει η βιβλιοθήκη κρύβοντας την υλοποίηση· καλή πρακτική η αξιοποίησή τους (Tkinter, matplotlib, sqlite3).

Κριτήρια αξιολόγησης:

  • Ορισμός + πλεονέκτημα + παραδείγματα.

Ερώτηση 6 — Σε τι χρησιμεύει η Tkinter

Ερώτηση: Σε τι μας χρησιμεύει η βιβλιοθήκη Tkinter της Python;

Απάντηση:

  • Η Tkinter είναι η πρότυπη βιβλιοθήκη της Python για την υλοποίηση γραφικών διεπαφών χρήστη (Graphical User Interface, GUI) (σελ. 154). Μας επιτρέπει να κάνουμε τα προγράμματά μας πιο ελκυστικά και φιλικά προς τον χρήστη, δίνοντας δυνατότητα αλληλεπίδρασης με το περιβάλλον της εφαρμογής, με χρήση έτοιμων τμημάτων κώδικα.
  • Βασικό στοιχείο της είναι τα παράθυρα (Tk()), μέσα στα οποία τοποθετούμε γραφικά στοιχεία — widgets — που είναι αντικείμενα/στιγμιότυπα κλάσεων της βιβλιοθήκης: Label (μηνύματα ανατροφοδότησης), Button (κουμπιά που εκτελούν ενέργειες), Radiobutton (πολλαπλές επιλογές), Entry και Text (εισαγωγή/εμφάνιση κειμένου), εικόνες κ.ά., με διάταξη μέσω pack() ή grid() και τον βρόχο γεγονότων mainloop(). Παραδείγματα του βιβλίου: μήνυμα χαιρετισμού, quiz, ζάρι, φόρμα εισαγωγής στοιχείων.

Σύνοψη: (ενδεικτική) Πρότυπη βιβλιοθήκη GUI της Python: παράθυρα και widgets (Label, Button, Radiobutton, Entry, Text) για φιλικές, αλληλεπιδραστικές διεπαφές — μηνύματα, κουμπιά, φόρμες εισόδου.

Κριτήρια αξιολόγησης:

  • Ορισμός + widgets + σκοπός.

Ερώτηση 7 — Απλό μήνυμα ανατροφοδότησης με Tkinter

Ερώτηση: Πώς μπορούμε να εμφανίσουμε ένα απλό μήνυμα ανατροφοδότησης προς το χρήστη με χρήση της Tkinter στην γλώσσα Python;

Απάντηση:

  • Με το widget Label (ετικέτα κειμένου), όπως στο Παράδειγμα 1 (σελ. 160): ① εισάγουμε τη βιβλιοθήκη, ② δημιουργούμε το παράθυρο με Tk() (πριν από κάθε άλλο στοιχείο), ③ δημιουργούμε ένα στιγμιότυπο της κλάσης Label με γονέα το παράθυρο και το κείμενο του μηνύματος, ④ το τοποθετούμε στο παράθυρο με pack(), ⑤ εμφανίζουμε το παράθυρο με mainloop():
  • from Tkinter import *                       # εισαγωγή του module Tkinter
    window_test = Tk()                          # δημιουργία του παραθύρου (δεν εμφανίζεται ακόμη)
    a = Label(window_test, text='Hello Greece!')  # ετικέτα με το μήνυμα, γονέας το παράθυρο
    a.pack()                                    # τοποθέτηση της ετικέτας στο παράθυρο
    window_test.mainloop()                      # εμφάνιση του παραθύρου, αναμονή μέχρι να κλείσει
  • Αν το μήνυμα πρέπει να εμφανιστεί ως απάντηση σε ενέργεια του χρήστη (π.χ. πάτημα κουμπιού), δημιουργούμε το Label μέσα στη συνάρτηση που καλείται από το command του κουμπιού (όπως το «Μπράβο!!» στο quiz, σελ. 163) ή αλλάζουμε το κείμενο υπάρχοντος Label με a.config(text='...'). Εναλλακτικά, παράθυρο διαλόγου με tkMessageBox.showinfo('Τίτλος', 'Μήνυμα').

Σύνοψη: Με Label: from Tkinter import * → window = Tk() → a = Label(window, text='μήνυμα') → a.pack() → window.mainloop()· για ανατροφοδότηση σε ενέργεια, Label μέσα στη συνάρτηση του command ή config(text=...).

Κριτήρια αξιολόγησης:

  • Τα πέντε βήματα με κώδικα.

Ερώτηση 8 — Σε τι χρησιμεύουν τα Radiobuttons

Ερώτηση: Σε τι μας χρησιμεύουν τα RadioButtons;

Απάντηση:

  • Τα Radiobutton είναι widgets της Tkinter που χρησιμοποιούνται για να δώσουμε στον χρήστη πολλαπλές επιλογές, από τις οποίες μπορεί να επιλέξει μία μόνο κάθε φορά (σελ. 162) — όπως τα κουμπιά επιλογής σταθμού στα παλιά ραδιόφωνα, όπου το πάτημα ενός απελευθερώνει τα υπόλοιπα.
  • Όλα τα Radiobutton μιας ομάδας συνδέονται με την ίδια μεταβλητή ελέγχου (π.χ. c = IntVar(), παράμετρος variable=c) και καθένα έχει τη δική του τιμή (value=val)· όταν ο χρήστης επιλέξει ένα, η μεταβλητή παίρνει την τιμή του και τη διαβάζουμε με c.get(). Με την παράμετρο command ορίζουμε συνάρτηση που εκτελείται σε κάθε επιλογή. Στο παράδειγμα του βιβλίου υλοποιούν quiz γνώσεων: κάθε πόλη είναι ένα Radiobutton (δημιουργούνται με βρόχο από λίστα πλειάδων), η ShowChoice() ελέγχει την τιμή και εμφανίζει μήνυμα σωστού/λάθους ή τερματίζει το πρόγραμμα. Γενικά: επιλογή φύλου, τάξης, μεγέθους, τρόπου πληρωμής — όπου οι επιλογές είναι αμοιβαία αποκλειόμενες.

Σύνοψη: (ενδεικτική) Για την προσφορά πολλαπλών, αμοιβαία αποκλειόμενων επιλογών (μία κάθε φορά)· κοινή μεταβλητή variable, διαφορετικό value, ανάγνωση με get(), command για ενέργεια — π.χ. quiz γνώσεων.

Κριτήρια αξιολόγησης:

  • Μία επιλογή από πολλές + μηχανισμός variable/value/get + παράδειγμα.

 ΣΧΟΛΙΚΟ ΒΙΒΛΙΟ