Σύγχρονες γλώσσες προγραμματισμού
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Οι υπολογιστές και ο προγραμματισμός τους
Καλώς ήρθατε
Σύγχρονες γλώσσες προγραμματισμού H/Y
Τι περιλαμβάνει το μάθημα
- Οι υπολογιστές και ο προγραμματισμός τους
- Το περιβάλλον της Visual Basic
- Υπολογισμοί με μεταβλητές, είσοδος και έξοδος
- Τελεστές σύγκρισης, λογικής και επαναλήψεις
- Προγραμματισμός με συμβολοσειρές, αποφάσεις
- Πρόσθετες δομές ελέγχου: select, on error
- Ορισμός συναρτήσεων και διαδικασιών
- Συναρτήσεις και διαδικασίες της Visual Basic
- Βασικές αρχές αντικειμενοστρεφούς προγραμματισμού
- Διεπαφή χρήστη
- Ιδιότητες και μέθοδοι για υλοποίηση διεπαφών
- Μεταγλώττιση και εγκατάσταση προγραμμάτων
- Διαχείριση δεδομένων: σύνδεση με βάσεις δεδομένων, συλλογές αντικειμένων, πίνακες, αρχεία κειμένου, πολυμέσα
- Προγραμματισμός με εξαρτήματα, σύνδεση με άλλες εφαρμογές
- Προγραμματισμός στο διαδίκτυο
- Από τη Visual Basic στη Java
Τρόπος διδασκαλίας
- Συμμετοχή
- Ερωτήσεις
- Ασκήσεις
Οι σημειώσεις
Υλικό και λογισμικό
- Υλικό (hardware) καλούμε τα φυσικά στοιχεία του
υπολογιστή.
- Λογισμικό (software) καλούμε το σύνολο των προγραμμάτων
που χρησιμοποιεί ο υπολογιστής.
- Τα προγράμματα είναι αποθηκευμένες οδηγίες που εκτελούνται από το
υλικό.
Ιστορική ανασκόπηση
- Προγραμματισμός με διακόπτες
- Γλώσσα μηχανής
- Συμβολική γλώσσα
- Fortran
- Algol, C, Pascal, Modula-2
- Lisp, Simula, Prolog, ML
- Smalltalk, C++, Java
- Visual Basic, TCL/TK, Perl
Χαρακτηριστικές αλγοριθμικές γλώσσες
Σε μια αλγοριθμική (imperative) γλώσσα
το πρόγραμμα εκφράζει άμεσα τα βήματα που επιθυμούμε να
εκτελέσει ο υπολογιστής.
- Fortran, Fortran 9X
- Cobol
- Algol-60
- Basic
- PL/I
- Pascal, Modula-2, Oberon
- C
- Ada
- Smalltalk
- C++
- Awk, Perl, Tcl/Tk
- Java
- Python
Χαρακτηριστικές δηλωτικές γλώσσες
Σε μια δηλωτική (declarative) γλώσσα
το πρόγραμμα εκφράζει τη δομή του προβλήματος που θέλουμε
να επιλύσουμε.
Η γλώσσα προγραμματισμού παρέχει τον κατάλληλο μηχανισμό ελέγχου
ο οποίος χρησιμοποιώντας τη δομή που έχουμε ορίσει καταλήγει
στο επιθυμητό αποτέλεσμα.
Γλώσσες βασισμένες στη λογική
Γλώσσες βασισμένες σε συναρτήσεις
Βασικά γλωσσικά εργαλεία
- Προετοιμαστής/Διορθωτής (Editor)
- Επιτρέπει τη συγγραφή και την αλλαγή του προγράμματος.
- Προεπεξεργαστής (Preprocessor)
- Επεξεργάζεται το πρόγραμμα εκτελώντας απλούς
συμβολικούς μετασχηματισμούς και παράγει ένα αντίστοιχο πρόγραμμα.
Χρησιμοποιείται σε συμβολικές γλώσσες, τη Fortran (Ratfor), τη C, και τη C++.
- Συμβολομεταφραστής (Assembler)
- Μετατρέπει τη συμβολική γλώσσα του επεξεργαστή σε γλώσσα
μηχανής.
- Μεταγλωττιστής (Compiler)
- Μεταφράζει μια γλώσσα υψηλού επιπέδου σε γλώσσα επιπέδου μηχανής.
- Διερμηνευτής (Interpreter)
- Εκτελεί άμεσα ένα πρόγραμμα σε γλώσσα υψηλού επιπέδου.
- Συνδέτης (Linker)
- Συρράφει τμήματα ενός προγράμματος που έχουν μεταγλωττιστεί ξεχωριστά
σε ένα συνεχές πρόγραμμα.
- Φορτωτής (Loader)
- Φορτώνει το πρόγραμμα στη μνήμη του επεξεργαστή διορθώνοντας αναφορές
σε σχετικές θέσεις μνήμης.
Συνήθως τμήμα του λειτουργικού συστήματος.
- Αποσφαλματωτής (Debuger)
- Επιτρέπει την εκτέλεση του προγράμματος βήμα-βήμα, την
εξέταση και αλλαγή μεταβλητών του
και γενικά ενέργειες που αποσκοπούν στην ανίχνευση
λαθών που μπορεί να περιέχει το πρόγραμμα.
- Διερμηνευτής (Interpreter)
- Εκτελεί απευθείας τις εντολές του προγράμματος χωρίς ενδιάμεσο στάδιο
μεταγλώττισης.
Η διεργασία του προγραμματισμού
- Προσδιορισμός απαιτήσεων
- Ανάλυση / σχεδίαση
- Συγγραφή σε ψευδοκώδικα
- Συγγραφή στη γλώσσα προγραμματισμού
- Μεταγλώττιση
- Εκτέλεση
- Έλεγχος / επαλήθευση
- Αποσφαλμάτωση
Βιβλιογραφία
- Michael Halvorson
Visual Basic 6 Βήμα προς βήμα.
Εκδόσεις Κλειδάριθμος, Αθήνα.
- Alfred V. Aho, Ravi Sethi,
and Jeffrey D. Ullman.
Compilers, Principles, Techniques, and Tools.
Addison-Wesley, 1985.
- Alfred V. Aho, Brian W.
Kernighan, and Peter J. Weinberger.
The
AWK Programming Language.
Addison-Wesley, 1988.
- J.W. Backus, F.L.
Bauer, J.Green, C.Katz, J.McCarthy, P. Naur, A.J.Perlis, H. Rutishauser,
K. Samuelson, B. Vauquois, J.H. Wegstein, A. van Vinjgaarden, and M. Woodger.
Revised report on the algorthmic language ALGOL 60.
IFIP, 1960.
- David Boctor.
Microsoft Office 2000 Visual Basic Fundamentals.
Microsoft Press, Redmond, WA, USA, 1999.
- Jean D. Ichbiah et al.
Reference Manual for the Ada Programming Language, ANSI/MIL-STD-1815
A-1983.
Castle House Publication Ltd., 1983.
- David Flanagan.
Java
in a Nutshell.
O'Reilly and Associates, Sebastopol, CA, USA, 1997.
- Kathleen Jensen and
Niklaus Wirth.
PASCAL User Manual and Report.
Springer Verlag, second edition, 1975.
- Brian W. Kernighan
and Dennis M. Ritchie.
The C
Programming Language, pages ix–4.
Prentice-Hall, second edition, 1988.
- Brian W. Kernighan.
Why Pascal is not my favorite programming language.
Technical Report 100, Bell Laboratories, Murray Hill, New Jersey 07974, July
1981.
- Günther Lamprecht.
Introduction to SIMULA-67.
Friedr. Vieweg & Sohn, Braunschweig, Wiesbaden, Germany, 1981.
- Mark Lutz.
Programming Python.
O'Reilly and Associates, 1996.
- Charles Petzold.
Code: The Hidden Language of Computer Hardware and Software.
Microsoft Press, Redmond, Washington, USA, 1999.
- Martin
Richards and Colin Whitby-Strevens.
BCPL — The Language and its Compiler.
Cambridge University Press, 1979.
- Michael L. Scott.
Programming Language Pragmatics.
Morgan Kaufmann Publishers, 1999.
- Ravi Sethi.
Programming Languages: Concepts and Constructs.
Addison-Wesley, 1989.
- Bjarne Stroustrup.
The
C++ Programming Language.
Addison-Wesley, second edition, 1991.
- R. D. Tennent.
Princliples of Programming Languages.
Prentice Hall, 1981.
- Larry Wall and
Randal L. Schwartz.
Programming Perl.
O'Reilly and Associates, Sebastopol, CA, USA, 1990.
- Richard L. Wexelblat.
Maxims for malfeasant designers, or how to design languages to make programming
as difficult as possible.
In Proceedings of the 2nd International Conference on Software
Engineering, pages 331–336, San Fransisco, CA, USA, October 1976.
IEEE Computer Society Press.
Το περιβάλλον της Visual Basic
Το περιβάλλον της Visual Basic
Το περιβάλλον υλοποίησης της Visual Basic έχει την παρακάτω μορφή:
- Στο κέντρο γράφεται ο κώδικας της εφαρμογής
- Αριστερά επιλέγονται τα όργανα που τοποθετούνται στη φόρμα.
- Άνω δεξιά μπορεί κανείς να επιλέξει τις φόρμες και τα αρθρώματα
της εφαρμογής.
- Με την πάνω γραμμή εργαλείων μπορεί κανείς μεταξύ άλλων να
ξεκινήσει και να σταματήσει την εφαρμογή.
Πως γράφουμε απλά προγράμματα
Για λόγους απλούστευσης,
τα πρώτα προγράμματα που θα δούμε δεν αποτελούνται από φόρμες αλλά
από ένα κύριο σώμα κώδικα.
Για να υλοποιήσουμε τέτοια προγράμματα ακολουθούμε την παρακάτω διαδικασία:
- Όταν ξεκινήσει η Visual Basic επιλέγουμε τη δημιουργία "Standard EXE"
- Με το πλήκτρο F4 κλείνουμε το παράθυρο με τη φόρμα που εμφανίζεται.
- Από το μενού Project επιλέγουμε Add module και από τις επιλογές που
εμφανίζονται "Module".
- Στο παράθυρο που εμφανίζεται στο Project - Properties, στην κατηφορία
General επιλέγουμε ως Startup Object "Sub Main".
Το πρώτο μου πρόγραμμα
Το πρώτο πρόγραμμα έχει ως στόχο να εμφανίσει στην οθόνη το μήνυμα "hello, world".
Έχει την παρακάτω μορφή:
Sub main()
MsgBox "hello, world"
End Sub
Για να το εκτελέσουμε, πατάμε το πλήκτρο F5 και, αν δεν έχουμε κάνει
κάποιο λάθος, θα δούμε στην οθόνη μας το παρακάτω αποτέλεσμα:
Μορφή του προγράμματος
- Η γραμμή "Sub Main" ορίζει μια διαδικασία (procedure),
στη δική μας περίπτωση το σημείο απ' όπου ξεκινάει το πρόγραμμα.
- MsgBox
- Το κείμενο μέσα στα εισαγωγικά είναι μια
συμβολοσειρά (string).
- End Sub
- Κάθε γραμμή περιέχει μια εντολή
- Μπορούμε να προσθέσουμε δικά μας
σχόλια (comments) αν αρχίσουμε ή συνεχίσουμε μια γραμμή με μονά
εισαγωγικά.
Υπολογισμοί με μεταβλητές, είσοδος και έξοδος
Σταθερές
- Η συμβολοσειρά "hello, world" την
οποία είδαμε στην προηγούμενη ενότητα είναι μια
σταθερά (constant) της Visual Basic.
- Οι σταθερές αυτές χρησιμοποιούνται συχνά για να παραστήσουν μηνύματα
προς το χρήστη (π.χ. "Παρακαλώ βάλτε την κάρτα σας στην υποδοχή") ή
και μεταξύ υπολογιστών (π.χ. "RCPT TO: dspin@aegean.gr").
- Ένα άλλο είδος σταθερών είναι αυτές που παριστάνουν αριθμητικές
τιμές (π.χ. 42 ή 3.1415927).
- Στη Visual Basic ξεχωρίζουμε της ακέραιες (integer)
σταθερές (π.χ. 42, 123456, -3) και τις σταθερές που παριστάνουν
αριθμούς κινητής υποδιαστολής (floating point numbers)
(π.χ. 3.1415827, -2.0, 6.023e-23).
Εκτύπωση τιμών
Απλές πράξεις
Οι αριθμητικές τιμές της Visual Basic μπορούν να συνδυαστούν με τη
χρήση των παρακάτω τελεστών (operands):
Πράξη | Τελεστής της Visual Basic |
Πρόσθεση | + |
Αφαίρεση | - |
Πολλαπλασιασμός | * |
Διαίρεση | / |
Υπόλοιπο ακέραιας διαίρεσης | mod |
Ύψωση σε δύναμη | ^ |
- Για τον υπολογισμό μιας τιμής, πρώτα εκτελούνται οι πράξεις ανάμεσα
στον τελεστή ^, μετά ανάμεσα στους τελεστές * / mod και
μετά οι πράξεις ανάμεσα στους τελεστές + -.
- Η παραπάνω σειρά μπορεί να μεταβληθεί με τη χρήση παρενθέσεων.
Παραδείγματα
- MsgBox "ένα συν ένα = " + Str(1 + 1)
- MsgBox "Το εμβαδό του δωματίου είναι " + Str(3 * 5) + " τετραγωνικά μέτρα."
- MsgBox Str(36.7) + " βαθμοί Celsius = " + Str(32 + 9.0 / 5.0 * 36.7) + " βαθμοί Fahrenheit."
- MsgBox Str(1 + 2 * 3) 'Τυπώνει 7
- MsgBox Str((1 + 2) * 3) ' Τυπώνει 9
Μεταβλητές
- Οι αριθμητικές τιμές μπορούν να αποθηκευτούν σε
μεταβλητές (variables)
- Το όνομα μιας μεταβλητής πρέπει να αρχίζει με έναν λατινικό αλφαβητικό
χαρακτήρα και να ακολουθείται από λατινικού αλφαβητικούς
χαρακτήρες ή/και ψηφία.
Παράδειγμα: Temperature, X1, Y1, X2, Y2, Total
- Τα ονόματα των μεταβλητών δεν πρέπει να ταυτίζονται με
δεσμευμένες λέξεις (reserved words)
της Visual Basic (Sub, MsgBox, End, κ.λπ.).
- Ο ορισμός τους γίνεται γράφοντας τη λέξη Dim,
το όνομα της μεταβλητής και
τον τύπο της μεταβλητής (integer για ακέραιες τιμές,
double για τιμές κινητής υποδιαστολής,
string για συμβολοσειρές).
- Μπορούμε να ορίσουμε πολλές μεταβλητές ίδιου τύπου χωρίζοντάς τις
με ",".
Παράδειγμα:
Dim Faces as Integer
Dim X As Double, Y As Double
- Για να δώσουμε μια τιμή σε μια μεταβλητή χρησιμοποιούμε τη
σύνταξη:
μεταβλητή = τιμή
για παράδειγμα:
Faces = 2 * 8 + 12
- Στη συνέχεια μπορούμε να χρησιμοποιούμε την τιμή της μεταβλητής
όπως και οποιοδήποτε άλλη σταθερά. Παράδειγμα:
Sub Main()
Dim Faces As Integer
Dim Len As Double
Len = 12.5;
Faces = 6;
MsgBox "Επιφάνεια = " + Str(Len * Len * Faces)
End Sub
Είσοδος στοιχείων
Ασκήσεις
Είσοδος έξοδος και υπολογισμοί
- Να γράψετε ένα πρόγραμμα που θα διαβάζει από το χρήστη την
τιμή ενός προϊόντος με το ΦΠΑ και να τυπώνει την τιμή χωρίς το ΦΠΑ.
Παράδειγμα της εκτέλεσης του πρόγραμματος:
Τελεστές σύγκρισης, λογικής και επαναλήψεις
Τελεστές σύγκρισης
Οι αριθμητικές τιμές της Visual Basic μπορούν να συγκριθούν με τη
χρήση των παρακάτω τελεστών:
Σύγκριση | Τελεστής της Visual Basic |
Ίσο | = |
Διάφορο | <> |
Μικρότερο | < |
Μεγαλύτερο | > |
Μικρότερο ή ίσο | <= |
Μεγαλύτερο ή ίσο | >= |
- Για τον υπολογισμό μιας τιμής, πρώτα εκτελούνται οι πράξεις με την
παρακάτω σειρά:
- ^
- * /
- mod
- + -
- = <>. < > <= >=
- Η παραπάνω σειρά μπορεί να μεταβληθεί με τη χρήση παρενθέσεων.
- Το αποτέλεσμα της κάθε σύγκρισης είναι
αληθές (True) αν το αποτέλεσμα της σύγκρισης είναι
αληθές και
ψευδές (False) αν το αποτέλεσμα της σύγκρισης είναι
ψευδές.
- Οι τιμές True και False είναι λογικές σταθερές.
Παραδείγματα
MsgBox 1 + 1 = 2 ' Εμφανίζει True
MsgBox 1 > 2 ' Εμφανίζει False
MsgBox 5 <> 5 ' Εμφανίζει False
MsgBox 1 <= 5 ' Εμφανίζει True
MsgBox 1 <= 1 ' Εμφανίζει True
MsgBox 1 <= 0 ' Εμφανίζει False
Βρόχοι με την εντολή do while
- Μπορούμε να επαναλάβουμε την εκτέλεση ορισμένων εντολών με τη
δομή ελέγχου (control structure) do while ... loop.
- Αυτή χρησιμοποιείται ως εξής:
do while συνθήκη
εντολή
εντολή
...
loop
- Οι εντολές που ακολουθούν το do while εκτελούνται όσο η συνθήκη είναι
αληθής.
Παράδειγμα (εμφανίζει στην οθόνη τους αριθμούς από το 0 μέχρι το 4):
Sub main()
Dim i As Integer
i = 0
Do While i < 5
MsgBox i
i = i + 1
Loop
End Sub
- Αν η συνθήκη δεν είναι αληθής όταν εκτελεστεί το do while για πρώτη
φορά τότε οι εντολές που περιέχονται σε αυτό δε θα εκτελεστούν.
- Η δομή ελέγχου do while ... loop μπορεί να χρησιμοποιηθεί οπουδήποτε θα μπορούσε
και οποιαδήποτε άλλη εντολή (π.χ. η MsgBox) δηλαδή ακόμα και μέσα σε μια άλλη
do while.
Το παρακάτω παράδειγμα εμφανίζει στην οθόνη την προπαίδεια των αριθμών
από το 2 μέχρι το 5.
Sub main()
Dim i As Integer
Dim j As Integer
i = 2
Do While i <= 5
j = i
Do While j <= 5
MsgBox Str(i) + " * " + Str(j) + " = " + Str(i * j)
j = j + 1
Loop
i = i + 1
Loop
End Sub
Βρόχοι με την εντολή loop while
Προσδιορισμός της συνθήκης με τη χρήση της Until
- Μερικές φορές είναι πιο φυσικό να εκφράσουμε τη συνθήκη που
τερματίζει το βρόχο αντί για τη συνθήκη που πρέπει να είναι αληθής
για να εκτελείται ο βρόχος.
- Και οι δύο δομές ελέγχου που είδαμε μπορούν να διατυπωθούν με τη
χρήση του προσδιορισμού "Until συνθήκη" αντί για τον προσδιορισμό
"While συνθήκη".
- Έτσι, τα παραδείγματα που έχουμε δει μπορούν να γραφτούν και ως
εξής:
Παράδειγμα do while ... loop
(εμφανίζει στην οθόνη τους αριθμούς από το 0 μέχρι το 4):
Sub main()
Dim i As Integer
i = 0
Do Until i >= 5
MsgBox i
i = i + 1
Loop
End Sub
Παράδειγμα do ... loop while
(θέλουμε ο χρήστης να εισάγει έναν αριθμό μικρότερο του 10):
Sub main()
Dim Number As Integer
Do
Number = InputBox("Δώστε έναν αριθμό μικρότερο του 10")
Loop Until Number < 10
MsgBox "Δώσατε " + Str(Number)
End Sub
Λογικοί τελεστές
Τα λογικά αποτελέσματα στη Visual Basic μπορούν να συνδυαστούν με τη
χρήση των παρακάτω λογικών τελεστών:
- Τα αποτελέσματα χρήσης των τελεστών παριστάνονται από τους
παρακάτω πίνακες τιμών:
A | B | A And B | A Or B |
False | False | False | False |
False | True | False | True |
True | False | False | True |
True | True | True | True |
A | B | A Xor B | A Eqv B |
False | False | False | True |
False | True | True | False |
True | False | True | False |
True | True | False | True |
A | B | A Imp B |
False | False | True |
False | True | True |
True | False | False |
True | True | True |
A | Not A |
False | True |
True | False |
- Η προτεραιότητα υπολογισμού των λογικών τελεστών ορίζεται ως εξής:
- Not
- And
- Or
- Xor
- Eqv
- Imp
Παράδειγμα
Ο παρακάτω βρόχος μπορεί να αποτελεί τμήμα του προγράμματος
ελέγχου ενός τραπεζικού μηχανήματος αυτομάτων συναλλαγών:
Dim PIN As Integer
Dim Tries As Integer
Const CorrectPIN = 1234
Const MaxTries = 4
Tries = 0
Do
PIN = InputBox("Πληκτρολογήστε τον κωδικό εισόδου")
Tries = Tries + 1
Loop Until PIN = CorrectPIN Or Tries = MaxTries
Με τον προσδιορισμό Const μπορούμε να αντιστοιχούμε ονόματα σε
σταθερές τιμές.
Με τον τρόπο αυτό το πρόγραμμα διαβάζεται και συντηρείται ευκολότερα.
Λογικές τιμές
Ασκήσεις
Βρόχοι
- Να γράψετε ένα πρόγραμμα που να υπολογίζει τη συνολική απόδοση
μιας κατάθεσης με ετήσιο επιτόκιο που μεταβάλλεται κάθε χρόνο.
- Στην αρχή το πρόγραμμα ζητάει από το χρήστη
- το αρxικό ποσό και
- τον αριθμό των περιόδων (ετών).
- Στη συνέχεια ζητάει το επιτόκιο που ισχύει για κάθε περίοδο.
- Στο τέλος εμφανίζει το τελικό ποσό της κατάθεσης.
Αποφάσεις και άλλες δομές ελέγχου
Η εντολή if-else
- Μπορούμε να εκτελέσουμε ορισμένες εντολές υπό συνθήκη με τη
δομή ελέγχου If.
- Αυτή χρησιμοποιείται ως εξής:
If συνθήκη Then
εντολή
...
End If
- Οι εντολή που ακολουθεί το If εκτελείται αν η συνθήκη είναι
αληθής.
-
Παράδειγμα (υπολογίζει και τυπώνει την απόλυτη τιμή των αριθμών που διαβάζει
μέχρι να συναντήσει το 0):
Sub main()
Dim Num As Integer
Do
Num = InputBox("Please enter a number")
If Num < 0 Then
Num = -Num
End If
MsgBox "The absolute value is " + Str(Num)
Loop Until Num = 0
End Sub
- Η δομή ελέγχου If μπορεί να ακολουθηθεί και από τη δομή Else
για να προσδιορίσουμε εντολές που θα εκτελεστούν αν η συνθήκη δεν
ισχύει.
Παράδειγμα:
If grade >= 5 Then
MsgBox "Περνάει"
Else
MsgBox "Απορρίπτεται"
End If
- Μπορούμε να συνδυάσουμε συνεχόμενα Else If για πολλαπλούς
ελέγχους. Παράδειγμα:
If grade >= 9 Then
MsgBox "'Αριστα!"
ElseIf grade >= 7 Then
MsgBox "Λίαν καλώς"
ElseIf grade >= 5 Then
MsgBox "Καλώς"
Else
MsgBox "Κακώς"
End If
H εντολή select
- Η εντολή select μας επιτρέπει να κατευθύνουμε τη ροή του
προγράμματος προς μια συγκεκριμένη τιμή ανάλογα με την
τιμή μιας παράστασης.
- Συντάσσεται ως εξής:
Select Case παράσταση
Case λίστα τιμών1
εντολή1
εντολή1α
...
Case λίστα τιμών2
εντολή2
...
...
Case Else
εντολή ν
...
End Select
- Ανάλογα με ποια από τις τιμές ισούται η τιμή της παράστασης
εκτελούνται οι αντίστοιχες εντολές.
- Αν καμία από τις τιμές δεν ταυτίζεται με την τιμή της παράστασης
τότε εκτελείται η εντολή που ακολουθεί την Case Else (αν υπάρχει), αλλιώς
δεν εκτελείται καμία εντολή.
- Οι τιμές για κάθε case μπορεί να είναι
- μια έκφραση (π.χ. 42 ή i + 9),
- ο ορισμός μιας περιοχής με τη χρήση to (π.χ. 1 to 10)
- μια σύγκριση της τιμής της απόφασης με μια έκφραση με τη χρήση της
λέξης Is (π.χ. Is > 100)
- ή ένα σύνολο από από τα παραπάνω χωρισμένα με , (π.χ. 3 to 5, 50, 90, is > LastVal)
- Παράδειγμα:
Dim Number As Integer
Number = InputBox("Enter a Number")
Select Case Number ' Evaluate Number.
Case 1 To 5 ' Number between 1 and 5.
MsgBox "Between 1 and 5"
Case 6, 7, 8 ' Number between 6 and 8.
MsgBox "Between 6 and 8"
Case Is > 8 And Number < 11 ' Number is 9 or 10.
MsgBox "Greater than 8"
Case Else ' Other values.
MsgBox "Not between 1 and 10"
End Select
Η εντολή for
Έξοδος από το βρόχο
Ασκήσεις
Αποφάσεις
- Να γράψετε ένα πρόγραμμα που να υπολογίζει τη συνολική απόδοση
μιας κατάθεσης με ετήσιο επιτόκιο που μεταβάλλεται κλιμακωτά ανάλογα με το
ποσό που τοκίζεται σύμφωνα με τον παρακάτω πίνακα:
Ποσό | Επιτόκιο |
0-999.999 | 2.25 |
1.000.000-4.999.999 | 2.5 |
5.000.000-10.000.000 | 2.8 |
10.000.000 και άνω | 2.9 |
- Στην αρχή το πρόγραμμα ζητάει από το χρήστη
- το αρxικό ποσό και
- τον αριθμό των περιόδων (ετών).
- Στο τέλος εμφανίζει το τελικό ποσό της κατάθεσης.
Προγραμματισμός με συμβολοσειρές
Ο τύπος της συμβολοσειράς
- Μπορούμε να ορίσουμε μεταβλητές με τύπο
συμβολοσειρά
με τον τύπο string:
Dim Name as String
- Οι μεταβλητές αυτές μπορούν να αποθηκεύσουν μεταβλητό αριθμό από
χαρακτήρες.
- Οι σταθερές τύπου συμβολοσειράς γράφονται με τη χρήση των διπλών εισαγωγικών:
Dim Name as String
Name = "Γιώργος"
- Αν θέλουμε να παραστήσουμε εισαγωγικά σε μια σταθερή συμβολοσειρά τα
γράφουμε με δύο διπλά εισαγωγικά:
Dim Msg as String
Msg = "Πατήστε ""Enter"" για να συνεχίσετε"
Συναρτήσεις για συμβολοσειρές
Στη Visual Basic μπορούμε να χειριστούμε συμβολοσειρές με τη χρήση
διάφορων συναρτήσεων
(έχουμε δει πως μπορούμε να ενώσουμε δύο συμβολοσειρές με τον τελεστή +).
Οι πιο σημαντικές συναρτήσεις είναι οι παρακάτω:
- Len(string)
- Επιστρέφει το μήκος μιας συμβολοσειράς
- Left(string, length)
- Επιστρέφει length χαραρακτήρες από αριστερά
- Right(string, length)
- Επιστρέφει length χαραρακτήρες από δεξιά
- Mid(string, start[, length])
- Επιστρέφει length χαρακτήρες από τη
θέση start (ή όλη τη συμβολοσειρά από τη θέση start και μετά).
- LTrim(string)
- Αφαιρεί κενά στο αριστερό μέρος της συμβολοσειράς
- RTrim(string)
- Αφαιρεί κενά στο δεξί μέρος της συμβολοσειράς
- Trim(string)
- Αφαιρεί κενά αριστερά και δεξιά της συμβολοσειράς
Τέλος, η εντολή
Mid(stringvar, start[, length]) = string
επιστρέπει την αλλαγή ενός μέρους μιας συμβολοσειράς (από τη θέση start
και για length χαρακτήρες) με μια άλλη.
Σύγκριση συμβολοσειρών
Με τον τελεστή Like μπορούμε να συγκρίνουμε αν μια συμβολοσειρά
μοιάζει με ένα συγκεκριμένο πρότυπο.
Τα πρότυπα καθορίζονται με τη χρήση των παρακάτω χαρακτήρων:
- ?
- Ταιριάζει με οποιοδήποτε ένα χαρακτήρα
- *
- Ταιριάζει με μηδέν ή περισσότερους χαρακτήρες
- #
- Ταιριάζει με οποιοδήποτε ψηφίο
- [λίστα]
- Ταιριάζει με οποιοδήποτε χαρακτήρα στη λίστα (π.χ. [aeiyuio])
- [!λίστα]
- Ταιριάζει με οποιοδήποτε χαρακτήρα δεν περιέχεται στη λίστα
Η λίστα μπορεί να περιέχει χαρακτήρες ή μια περιοχή χαρακτήρων με τη σύνταξη
χαρακτήρας-χαρακτήρας (π.χ. [A-Z].
Αν θέλουμε η λίστα να περιέχει το -, τότε αυτό πρέπει να εμφανίζεται πρώτο στη
λίστα.
Παράδειγμα (ο βρόχος ελέγχει αν ο ταχυδρομικός κώδικας είναι γραμμένος σωστά):
Sub main()
Dim PostCode As String
Dim CodeOk As Boolean
Do
PostCode = InputBox("Δώστε ταχυδρομικό κώδικα")
CodeOk = (PostCode Like "##[- ]###" Or PostCode Like "###[- ]##")
If Not CodeOk Then
MsgBox "Λάθος ταχυδρομικός κώδικας, δοκιμάστε ξανά."
End If
Loop Until CodeOk
End Sub
Πρόσβαση στο πρόχειρο
Το πρόχειρο (clipboard) των Windows συχνά περιέχει
κείμενο το οποίο έχουμε αντιγράψει, αποκόψει ή θέλουμε να επικολήσουμε
σε άλλες εφαρμογές.
Μπορούμε να έχουμε πρόσβαση στο πρόχειρο με το
αντικείμενο (object) ClipBoard και τη
μέθοδο (method) GetText ως εξής:
Dim Result as String
Result = Clipbboard.GetText
Αντίστοιχα, μπορούμε να κάνουμε το πρόχειρο να περιέχει μια συμβολοσειρά
με τις μεθόδους Clear και SetText:
Clipboard.Clear
Clipboard.SetText("These are the new clipboard contents")
Ασκήσεις
Συμβολοσειρές
- Να γράψετε ένα πρόγραμμα που να εμφανίζει στατιστικά
στοιχεία για το περιεχόμενο του προχείρου.
Το πρόγραμμα πρέπει να εμφανίζει τον αριθμό των χαρακτήρων,
ψηφίων (0-9), λατινικών πεζών χαρακτήρων (a-z),
λατινικών κεφαλαίων χαρακτήρων (A-Z)
και ελληνικών αντίστοιχων χαρακτήρων που βρέθηκαν στο πρόχειρο.
- Εκτελέστε το πρόγραμμά σας με είσοδο τον εαυτό του και με είσοδο ένα
κείμενο από το Microsoft Word.
Προγραμματισμός με αριθμητικές τιμές
Αριθμητικοί τύποι
Η Visual Basic παρέχει αρκετούς διαφορετικούς τύπους για το χειρισμό αριθμών.
Είναι σημαντικό να επιλέξουμε τον κατάλληλο τύπο σύμφωνα με τις ανάγκες μας.
Ο παρακάτω πίνακας μπορεί να μας οδηγήσει στην κατάλληλη επιλογή:
Integer | -32,768 to 32,767 |
Long (long integer) | -2,147,483,648 to 2,147,483,647 |
Single (single-precision floating-point) | -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values |
Double (double-precision floating-point) | -1.79769313486232E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values |
Currency (scaled integer) | -922,337,203,685,477.5808 to 922,337,203,685,477.5807 |
Decimal | +/-79,228,162,514,264,337,593,543,950,335 with no decimal point; +/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is +/-0.0000000000000000000000000001 |
Αξίζει να προσέξουμε τα παρακάτω:
Μαθηματικές συναρτήσεις
Οι βασικές μαθηματικές συναρτήσεις της Visual Basic είναι οι παρακάτω:
- Abs
- Απόλυτη τιμή
- Sgn
- Πρόσημο
- Fix
- Αφαίρεση του δεκαδικού τμήματος (στρογγύλευση προς το 0)
- Int
- Στρογγύλευση προς τα κάτω
- Sqr
- Τετραγωνική ρίζα
- Log
- Φυσικός λογάριθμος
- Exp
- e υψωμένο σε δύναμη
- Rnd
- Ψευδοτυχαίος αριθμός 0 <= χ < 1.
Αρνητικό όρισμα θέτει νέα αρχή για παραγωγή αριθμών, θετικό επιστρέφει
τον επόμενο αριθμό της σειράς.
- Sin
- Ημίτονο
- Cos
- Συνημίτονο
- Tan
- Εφαπτομένη
- Atn
- Αντίστροφη εφαπτομένη
Λογιστικές συναρτήσεις
Η Visual Basic παρέχει μια σειρά από συναρτήσεις για υπολογισμούς
λογιστικής φύσης σύμφωνα με τον παρακάτω πίνακα:
Υπολογισμός | Συνάρτηση |
Calculate the future value of an annuity based on periodic, fixed payments and a fixed interest rate.
|
FV(rate, nper, pmt[, pv[, type]])
|
Calculate the depreciation of an asset for a specific time period using the double-declining balance method or some other method you specify.
|
DDB(cost, salvage, life, period[, factor])
|
Calculate the interest payment for a given period of an annuity based on periodic, fixed payments and a fixed interest rate.
|
IPmt(rate, per, nper, pv[, fv[, type]])
|
Calculate the internal rate of return for a series of periodic cash flows (payments and receipts).
|
IRR(values()[, guess])
|
Calculate the modified internal rate of return for a series of periodic cash flows (payments and receipts).
|
MIRR(values(), finance_rate, reinvest_rate)
|
Calculate the number of periods for an annuity based on periodic, fixed payments and a fixed interest rate.
|
NPer(rate, pmt, pv[, fv[, type]])
|
Calculate the net present value of an investment based on a series of periodic cash flows (payments and receipts) and a discount rate.
|
NPV(rate, values())
|
Calculate the payment for an annuity based on periodic, fixed payments and a fixed interest rate.
|
Pmt(rate, nper, pv[, fv[, type]])
|
Calculate the principal payment for a given period of an annuity based on periodic, fixed payments and a fixed interest rate.
|
PPmt(rate, per, nper, pv[, fv[, type]])
|
Calculate the present value of an annuity based on periodic, fixed payments to be paid in the future and a fixed interest rate.
|
PV(rate, nper, pmt[, fv[, type]])
|
Calculate the interest rate per period for an annuity.
|
Rate(nper, pmt, pv[, fv[, type[, guess]]])
|
Calculate the straight-line depreciation of an asset for a single period.
|
SLN(cost, salvage, life)
|
Calculate the sum-of-years' digits depreciation of an asset for a specified period.
|
SYD(cost, salvage, life, period)
|
Μετατροπή αριθμών σε συμβολοσειρές
Η συνάρτηση Format επιτρέπει τον ακριβή καθορισμό της μετατροπής
αριθμητικών τιμών σε συμβολοσειρές.
Η σύνταξή της είναι:
Format(έκφραση[, εμφάνιση])
όπου η "εμφάνιση" είναι μια συμβολοσειρά που καθορίζει θα μετατραπεί η
αντίστοιχη έκφραση σύμφωνα με τους παρακάτω κανόνες:
- 0
- Εμφανίζει ένα ψηφίο ή 0
- #
- Εμφανίζει ένα ψηφίο ή κενό
- .
- Καθορίζει το σημείο εμφάνισης των δεκαδικών τιμών
- ,
- Καθορίζει το διαχωρισμό των χιλιάδων
- %
- Εμφανίζει το πηλίκο του αριθμού με το 100 ως ποσοστό
- E+
- Εμφανίζει τον αριθμό σε εκθετική μορφή με πρόσημο στους θετικούς εκθέτες
- E-
- Εμφανίζει τον αριθμό σε εκθετική μορφή χωρίς πρόσημο στους θετικούς εκθέτες
- "σύμβολα"
- Εμφανίζει τα σύμβολα μέσα στα εισαγωγικά
Παράδειγμα:
Sub main()
Dim x As Currency
x = 1500000
MsgBox ("Κερδίσατε " + Format(x, "0,0.00 ""EUR""!"))
End Sub
Εμφανίζει:
Ορισμός συναρτήσεων και διαδικασιών
Ορισμός διαδικασίας
- Για να οργανώσουμε καλύτερα τον κώδικα που γράφουμε, αλλά και
για να μπορούμε να χρησιμοποιούμε τα ίδια τμήματα του κώδικα
πολλές φορές μπορούμε να ορίσουμε ένα σύνολο από εντολές ως
μια διαδικασία (procedure)
(στη Visual Basic υπορουτίνα (subroutine)).
- Μπορούμε να ορίσουμε δικές μας διαδικασίες με τον εξής τρόπο:
Sub όνομα διαδικασίας()
δηλώσεις τοπικών μεταβλητών;
εντολές
end Sub
- Στο πρόγραμμα η κλήση (call) της διαδικασίας
γίνεται κάθε φορά που εμφανίζεται μια εντολή με το όνομα της διαδικασίας
που ορίσαμε.
Στο σημείο αυτό η εκτέλεση συνεχίζει με τις εντολές της διαδικασίας,
και, όταν αυτές ολοκληρωθούν, η εκτέλεση
επιστρέφει στο σημείο απ' όπου ξεκίνησε.
-
Παράδειγμα:
Sub main()
hello
MsgBox "Back from hello"
hello
End Sub
' Display hello world
Sub hello()
MsgBox "Hello, world"
End Sub
-
Κάθε διαδικασία έχει ένα όνομα.
Στο πρόγραμμά μας χρησιμοποιούμε το όνομα της διαδικασίας όταν θέλουμε
να εκτελεστεί ο αντίστοιχος κώδικας.
- Η εντολή exit sub μπορεί να εμφανιστεί σε οποιοδήποτε σημείο της διαδικασίας.
Στο σημείο εκείνο σταματά η εκτέλεση της διαδικασίας και ο
έλεγχος ροής (control flow) του προγράμματος
συνεχίζει από το σημείο που κλήθηκε η συνάρτηση.
- Η διαδικασία Main είναι αυτή από την οποία ξεκινά η εκτέλεση του
προγράμματος.
Ορίσματα
- Μπορούμε να μεταβάλουμε τη λειτουργικότητα μιας διαδικασίας με
τη χρήση ορισμάτων.
Κάθε όρισμα (argument) μεταφέρεται από το σημείο
που καλούμε τη διαδικασία μέσα στη διαδικασία μέσω μιας ειδικής μεταβλητής.
- Τα ορίσματα της διαδικασίας είναι μια σειρά από ονόματα και τύπους
μεταβλητών χωρισμένα με κόμμα.
- Όταν καλείται μια διαδικασία οι μεταβλητές που ορίστηκαν ως όρισμα
παίρνουν τις τιμές που δόθηκαν κατά την κλήση.
- Παράδειγμα:
Sub main()
StrongMessage "Hello", 5, "*"
StrongMessage "world", 10, "!"
End Sub
' Display the message msg prefixed by n instances of the string s
Sub StrongMessage(msg As String, n As Integer, s As String)
Dim head As String
' Could use String(s, n) here
For i = 1 To n
head = head + s
Next i
MsgBox head + msg + head
End Sub
Ορισμός συνάρτησης
- Μπορούμε ακόμα να ορίσουμε δικές μας συναρτήσεις με τον εξής τρόπο:
Function όνομα συνάρτησης(δηλώσεις παραμέτρων) as τύπος αποτελέσματος
δηλώσεις τοπικών μεταβλητών;
εντολές
όνομα = τιμή
end Function
- Οι παράμετροι της συνάρτησης είναι μια σειρά από τύπους και ονόματα
μεταβλητών χωρισμένα με κόμμα.
- Όταν καλείται μια συνάρτηση οι μεταβλητές που ορίστηκαν ως παράμετροι
παίρνουν τις τιμές που δόθηκαν στο όρισμα κατά την κλήση.
- Για να θέσουμε την τιμή που επιστρέφει η συνάρτηση αναθέτουμε μια
τιμή στο όνομά της (δεν ορίζουμε αντίστοιχη μεταβλητή).
- Παράδειγμα:
Sub main()
MsgBox "64!=" + Str(factorial(45))
End Sub
' Return n!
Function factorial(n As Integer) As Double
Dim i As Integer
Dim r As Double ' result
r = 1
For i = 1 To n
r = r * i
Next i
factorial = r
End Function
- Η εντολή exit function μπορεί να εμφανιστεί σε οποιοδήποτε σημείο της συνάρτησης.
Στο σημείο εκείνο σταματά η εκτέλεση της συνάρτησης και ο
έλεγχος ροής του προγράμματος
συνεχίζει από το σημείο που κλήθηκε η συνάρτηση.
Άσκηση
Διαδικασίες και συναρτήσεις
- Να γράψετε μια συνάρτηση που να υπολογίζει τη συνολική απόδοση
μιας κατάθεσης με ετήσιο επιτόκιο που μεταβάλλεται κλιμακωτά ανάλογα με το
ποσό που τοκίζεται σύμφωνα με τον παρακάτω πίνακα:
Ποσό | Επιτόκιο |
0-999.999 | 2.25 |
1.000.000-4.999.999 | 2.5 |
5.000.000-10.000.000 | 2.8 |
10.000.000 και άνω | 2.9 |
- Με βάση την παραπάνω συνάρτηση να γράψετε ένα πρόγραμμα
που ζητάει διαδοχικά (συνεχώς) από το χρήστη
- το αρxικό ποσό και
- τον αριθμό των περιόδων (ετών).
και εμφανίζει το τελικό ποσό της κάθε κατάθεσης.
- Το πρόγραμμα τερματίζει τη λειτουργία του όταν ο χρήστης εισάγει
0 στο αρχικό ποσό.
Βασικές αρχές αντικειμενοστρεφούς προγραμματισμού
Στοιχεία αντικεμενοστρεφούς προγραμματισμού
- Κάθε οντότητα είναι ένα αντικείμενο (object).
- Υπολογισμοί γίνονται όταν ένα αντικείμενο στείλει ένα
μήνυμα (message) σε άλλο αντικείμενο
(ή - σύμφωνα με την επικρατέστερη ορολογία -
καλέσει μια μέθοδο (method) ενός άλλου αντικειμένου.)
Μια μέθοδος μπορεί να έχει ως όρισμα στοιχεία που είναι απαραίτητα
για την εκτέλεση του υπολογισμού.
- Κάθε αντικείμενο έχει τη δική του μνήμη για να αποθηκεύει την
κατάστασή του.
Οι μεταβλητές στις οποίες αποθηκεύεται η κατάσταση αυτή
καλούνται ιδιότητες (properties)
(ή μεταβλητές στιγμιότυπου (instance variables)).
- Κάθε αντικείμενο αποτελεί στιγμιότυπο (instance)
μιας κλάσης.
Η κλάση (class) είναι μια ομάδα από ομοειδή αντικείμενα.
- Η κλάση είναι ο χώρος στον οποίο ορίζεται η συμπεριφορά των αντικειμένων.
Όλα τα αντικείμενα μιας κλάσεις μοιράζονται την ίδια συμπεριφορά
(εκτελούν τις ίδιες μεθόδους).
- Οι κλάσεις μπορούν να οργανωθούν σε μια δενδρική δομή
που ορίζει κληρονομικότητα (inheritance).
Ιδιότητες και μέθοδοι που έχουν οριστεί σε μια μητρική κλάση
κληρονομούνται και είναι προσβάσιμες και από κάθε
υποκλάση (subclass) της.
Υλοποίηση κλάσεων
- Η Visual Basic επιτρέπει τον προγραμματισμό με αντικείμενα και χρησιμοποιεί
αντικείμενα ως βάση για την υλοποίηση γραφικών διεπαφών.
- Μερικά στοιχεία του αντικειμενοστρεφούς προγραμματισμού,
όπως η κληρονομικότητα,
δεν υποστηρίζονται άμεσα από τη γλώσσα, αλλά υλοποιούνται μέσω
συμβάσεων και εργαλείων που τις υλοποιούν.
- Ο ορισμός των κλάσεων (αλλά όχι και οι μετέπειτα αλλαγές)
υποστηρίζεται από το εργαλείο Class Builder.
Το εργαλείο Class Builder
Ορισμός ιδιότητας
Οι ιδιότητες είναι μεταβλητές που αποτελούν τμήμα του κάθε αντικειμένου.
Ορισμός μεθόδου
Κάθε μέθοδος είναι μια διαδικασία ή συνάρτηση που έχει πρόσβαση στις
ιδιότητες του συγκεκριμένου αντικειμένου.
Ορισμός κληρονομικότητας
Οι ιδιότητες και μέθοδοι του αντικειμένουν Point κληρονομούνται από το
αντικείμενο Point3D.
Προγραμματισμός με αντικείμενα
- Αφού ορίσουμε τα στοιχεία μιας κλάσης πρέπει να γράψουμε τον
κώδικα για τις αντίστοιχες μεθόδους.
Παράδειγμα:
Public Function Distance() As Double
Distance = Sqr(x * x + y * y)
End Function
- Για να χρησιμοποιήσουμε αντικείμενα που έχουμε ορίσει πρέπει να
τα δηλώσουμε με την εντολή Dim και στη συνέχεια να τους εκχωρήσουμε χώρο
με τη χρήση της εντολής Set ... New.
- Σε κάθε αντικείμενο έχουμε πρόσβαση στις μεθόδους και τις ιδιότητές του
με τη σύνταξη όνομα.ιδιότητα ή όνομα.μέθοδος όρισμα.
Παράδειγμα:
Sub main()
Dim a As Point
Set a = New Point
a.x = 4
a.y = 3
MsgBox a.Distance
a.MoveTo 3, 4
MsgBox a.Distance
end sub
- Συχνά χρησιμοποιούμε έτοιμα αντικείμενα που υποστηρίζει το περιβάλλον
της Visual Basic:
Sub main()
App.Title = "Hello, world"
Clipboard.Clear
Clipboard.SetText ("New clipboard contents")
MsgBox App.Path
End Sub
Αντικειμενοστρεφής σχεδιασμός με UML
Εισαγωγή
Η ενοποιημένη γλώσσα σχεδιασμού (unified modeling language)
(UML) είναι μια γραφική γλώσσα για την οπτική παράσταση,
τη διαμόρφωση προδιαγραφών και την τεκμηρίωση συστημάτων που βασίζονται
σε λογισμικό.
Η UML στοχεύει στο σχεδιασμό αντικειμενοστρεφών συστημάτων.
Το σχέδιο είναι μια απλοποιημένη παράσταση της πραγματικότητας.
Σχεδιάζουμε για να μπορέσουμε να καταλάβουμε το σύστημα που αναπτύσσουμε.
Έτσι δημιουργώντας ένα σχέδια επιτυγχάνουμε τέσσερις στόχους:
- παριστάνουμε οπτικά το σύστημα που έχουμε ή θέλουμε να κατασκευάσουμε,
- προσδιορίζουμε τη δομή και τη συμπεριφορά του συστήματος,
- δημιουργούμε ένα πρότυπο για να βασίσουμε την κατασκευή του συστήματος,
- τεκμηριώνουμε τις αποφάσεις που λάβαμε.
Σε όλους τους τεχνολογικούς τομείς ο σχεδιασμός βασίζεται σε τέσερις
βασικές αρχές:
- η επιλογή του είδους του σχεδίου έχει επίπτωση στον τρόπο και την
μορφή επίλυσης του προβλήματος,
- όλα τα σχέδια εκφράζονται σε διαφορετικές βαθμίδες ακρίβειας,
- τα καλύτερα σχέδια σχετίζονται με την πραγματικότητα,
- ένα είδος σχεδίων δεν είναι ποτέ αρκετό.
Η UML περιλαμβάνει τρία βασικά στοιχεία:
- Οντότητες
- Σχέσεις
- Διαγράμματα
Η UML είναι μια πλήρης και πλούσια γλώσσα με εξαιρετικά ευρύ πεδίο εφαρμογής.
Στο μάθημα αυτό θα εξετάσουμε εξαιρετικά συνοπτικά τον τρόπο παράστασης
ορισμένων αντικειμενοστρεφών δομών σε UML.
Κλάσεις
- Μια κλάση σχεδιάζεται ως ένα ορθογώνιο με τρία τμήματα όπως
στο παρακάτω σχήμα:
- Τα ονόματα των ιδιοτήτων και μεθόδων της κλάσης μπορούν να
έχουν ένα πρόθεμα ανάλογα με την ορατότητά τους:
- +
- public
- #
- protected
- -
- private
- Οι μεταβλητές και οι συναρτήσεις που αναφέρονται στην κλάση
και όχι σε αντικείμενά της (static στη C++)
σχεδιάζονται υπογραμμισμένες.
- Οι αφηρημένες κλάσεις έχουν το όνομά τους γραμμένο με πλάγια στοιχεία.
- Το σχήμα που ακολουθεί αποτελεί σχέδιο για μια απλή κλάση στοίβας
ακεραίων:
Σχέσεις
Στη UML ορίζονται τρεις βασικές σχέσεις:
- εξάρτηση (dependency)
- γενίκευση (generalisation)
- σύνδεση (association)
Εξάρτηση
Η εξάρτηση δηλώνει πως μια αλλαγή σε μιαν οντότητα θα επηρεάσει μιαν άλλη
αλλά όχι απαραίτητα και το αντίστροφο.
Παριστάνεται με μια διακεκομμένη γραμμή με ανοιχτό βέλος που δείχνει προς
την οντότητα που υπάρχει εξάρτηση:
Γενίκευση
Η γενίκευση δηλώνει μια σχέση ανάμεσα σε κάτι γενικό
(τη βασική κλάση ή αλλιώς γονέα)
και κάτι ειδικό
(μιαν υποκλάση ή αλλιώς παιδί της).
Παριστάνεται με μια συνεχή γραμμή με κλειστό βέλος που δείχνει προς
τη βασική κλάση:
Σύνδεση
Η σύνδεση αναφέρεται σε αντικείμενα τα οποία συνδέονται με κάποιο τρόπο
με άλλα.
Όταν δύο κλάσεις είναι συνδεδεμένες μπορεί κανείς να μεταβεί από αντικείμενα
της μιας σε αντικείμενα της άλλης.
Η σύνδεση παριστάνεται με μια ευθεία γραμμή ανάμεσα στα δύο αντικείμενα.
- Αν η σύνδεση δεν είναι αμφίδρομη τότε η κατεύθυνσή της μπορεί να οριστεί
με ένα ανοιχτό βέλος.
- Το όνομα της σύνδεσης μπορεί να γραφεί πάνω από τη γραμμή, ενώ
η κατεύθυνση του ονόματος ορίζεται από ένα βέλος πλάι στο όνομα.
- Ο ρόλος των οντοτήτων που συνδέονται προσδιορίζεται από ένα όνομα
στην κάθε άκρη της γραμμής.
- Ο αριθμός που δηλώνει πόσα αντικείμενα αντιστοιχούν σε κάθε αντικείμενο
στην άλλη άκρη της σχέσης (πολλαπλότητα (multiplicity))
δηλώνεται από έναν αριθμό (π.χ. 3), ή μια περιοχή αριθμών (π.χ. 1..* για ένα
έως πολλά) πάνω από την αντίστοιχη άκρη της γραμμής.
Αν σε μια σχέση τα αντικείμενα απαρτίζουν τμήματα ενός όλου, τότε
αυτή απεικονίζεται ως συγκρότημα (aggregation)
με την παράσταση ενός διαμαντιού στην άκρη του "όλου".
Αν σχέση τα αντικείμενα που απαρτίζουν τμήματα ενός όλου έχουν
την ίδια διάρκεια ζωής με το όλο, τότε
αυτή απεικονίζεται ως σύνθεση (composition)
με την παράσταση ενός γεμάτου διαμαντιού στην άκρη του "όλου".
Είδη εξαρτήσεων
Με τη χρήση μιας εξάρτησης εκφράζουμε σημασιολογικές (semantic)
σχέσεις ανάμεσα σε στοιχεία του μοντέλου.
Σε τέτοιες περιπτώσεις μια αλλαγή σε ένα στοιχείο της εξάρτησης
μπορεί να έχει επίπτωση στο άλλο.
Διακρίνουμε τα παρακάτω είδη εξάρτησης:
- πρόσβαση (access)
-
Άδεια σε κάποια στοιχεία από ένα τμήμα να έχουν πρόσβαση σε στοιχεία
από άλλο τμήμα (access).
- σύνδεση (binding)
-
Παροχή τιμών σε ένα πρότυπο για να δημιουργήσει ένα νέο στοιχείο (bind).
- κλήση (call)
-
Μια μέθοδος καλεί μια άλλη (call).
- απόρρεια (derivation)
-
Ένα στοιχείο που μπορεί να υπολογιστεί από κάποιο άλλο (derive).
- friend
-
Ένα στοιχείο μπορεί να έχει πρόσβαση σε στοιχεία άλλης κλάσης παρά
τους όποιους περιορισμούς (friend).
- εισαγωγή (import)
-
Άδεια σε ένα τμήμα να εισάγει και να χρησιμοποιήσει τα στοιχεία
ενός άλλου τμήματος (import).
- δημιουργία (instantiation)
-
Μια μέθοδος μιας κλάσης δημιουργεί αντικείμενα μιας άλλης κλάσης (instantiate).
- παράμετρος (parameter)
-
Σχέση ανάμεσα σε μια λειτουργία και τις παραμέτρους της (parameter).
- δημιουργία (realization)
-
Σχέση ανάμεσα σε μια προδιαγραφή και την υλοποίησή της (realize).
- εκλέπτυνση (refinement)
-
Δήλωση για την ύπαρξη απεικόνισης ανάμεσα σε δύο σημασιολογικά επίπεδα (refine).
- αποστολή (send)
-
Σχέση ανάμεσα στον αποστολέα και τον παραλήπτη ενός μηνύματος (send).
- ίχνος (trace)
-
Σχέση ανάμεσα σε δύο στοιχεία δύο διαφορετικών μοντέλων που δεν αποτελεί
όμως απεικόνιση (trace).
- χρήση (usage)
-
Ένα στοιχείο απαιτεί την ύπαρξη ενός άλλου στοιχείο για τη λειτουργία του
(π.χ. call, instantiate, parameter, send) (use).
Στο διάγραμμα της UML γράφουμε μέσα σε εισαγωγικά το είδος της εξάρτησης
(αυτό που εμφανίζεται στο τέλος κάθε ορισμού στον παραπάνω πίνακα)
πάνω από την αντίστοιχη γραμμή με το βέλος:
Διάγραμμα κλάσεων
Το διάγραμμα των κλάσεων ενός συστήματος περιέχει τις κλάσεις μαζί με
του αντίστοιχους δεσμούς εξάρτησης, γενίκευσης και σύνδεσης.
Έτσι ένα διάγραμμα κλάσεων μπορεί να απεικονίσει τη χρήση της
κληρονομικότητας στο σχεδιασμό με τη χρήση δεσμών γενίκευσης όπως
στο παρακάτω σχήμα:
Διάγραμμα αντικειμένων
Τα διαγράμματα αντικειμένων χρησιμοποιούνται για το σχεδιασμό της
στατικής κατάστασης του συστήματος κατά μια συγκεκριμένη χρονική στιγμή.
Κάθε αντικείμενο σχεδιάζεται ως ένα ορθογώνιο με την παρακάτω μορφή:
Το σύνολο των αντικειμένων σχεδιάζεται με βάση τους συνδέσμους που
ορίζονται πάνω σε αυτό.
Βιβλιογραφία
Διεπαφή χρήστη
Παράθυρα, εικονίδια, μενού, και δείκτης
Στο σύγχρονο περιβάλλον διεπαφής με το χρήστη βασίζεται
στα παράθυρα (windows),
τα εικονίδια (icons),
τα μενού (menus) και
το δείκτη (pointer).
Το περιβάλλον αυτό σχεδιάστηκε για πρώτη φορά στο Palo Alto Research Center
της Xerox (PARC) και υλοποιήθηκε με επιτυχία από την Apple για τους υπολογιστές
Macintosh και από τη Micosoft στην οικογένεια Windows.
Η επιφάνεια εργασίας χρησιμοποιεί ως βάση τη
μεταφορά του γραφείου (desktop metaphor).
Ο χρήστης μετακινεί πάνω στην οθόνη παράθυρα με τη χρήση του δείκτη
όπως θα κινούσε έγγραφα στο γραφείο με τα χέρια του.
Βασικά τεχνολογικά στοιχεία για τη λειτουργία του περιβάλλοντος αυτού
είναι η οθόνη χαρτογραφικής απεικόνισης (bitmap display)
και το ποντίκι (mouse) ή κάποιος άλλος αντίστοιχος μηχανισμός
που επιτρέπει στο χρήστη να δείχνει αντικείμενα στην οθόνη.
Με τη χρήση εικονιδίων ορισμένα στοιχεία του περιβάλλοντος μπορούν να
παρασταθούν με αμεσότητα, ενώ τα μενού κάνουν τις λειτουργίες του περιβάλλοντος
προσιτές χωρίς να χρειάζεται ο χρήστης να απομνημονεύει εντολές και τη σύνταξή
τους.
Εικονίδια στο περιβάλλον Windows
Εισαγωγή εικόνας στο κείμενο με τη χρήση μενού στο πρόγραμμα Microsoft Word
<img src="./ui/inspic.gif">
Εισαγωγή εικόνας στο κείμενο στη γλώσσα HTML
Εσωτερική δομή
Εσωτερικά τα συστήματα γραφικής διεπαφής που βασίζονται σε παράθυρα
λειτουργούν με βάση γεγονότα (events) τα οποία
στέλνονται στις εφαρμογές.
Το κάθε παράθυρο είναι μια (τυπικά ορθογώνια)
περιοχή της οθόνης η οποία σχεδιάζεται αυτόνομα
και λαμβάνει γεγονότα.
Κάθε εφαρμογή μπορεί να απαρτίζεται από ένα ή περισσότερα παράθυρα.
Γεγονότα μπορεί να είναι π.χ. η επιλογή μιας εντολής από το μενού,
η αλλαγή του κειμένου που γράφει ο χρήστης,
το πάτημα ενός πλήκτρου,
η κίνηση του ποντικιού ή,
η αλλαγή της ώρας.
Τα γεγονότα μπορεί να δημιουργούνται άμεσα από το χρήστη ή να συνθέτονται
από το σύστημα ως αποτέλεσμα εντολών του χρήστη, ή άλλων εξωτερικών διεπαφών.
Το κάθε γεγονός στέλνεται σε μια ή περισσότερες εφαρμογές.
Οι εφαρμογές με τη σειρά τους στέλνουν τα γεγονότα στα παράθυρα που
μπορούν να τα επεξεργαστούν.
Έτσι, αντί η εφαρμογή να ζητά στοιχεία από το χρήστη, τα στοιχεία από το χρήστη
στέλνονται ως γεγονότα στην εφαρμογή.
Στο περιβάλλον των Windows ορίζονται πάνω από 800 διαφορετικά γεγονότα.
Για την επιβολή συνέπειας στη διεπαφή με το χρήστη αλλά και
τη διευκόλυνση υλοποίησης των εφαρμογών τα παραθυρικά περιβάλλοντα ορίζουν
μια σειρά από όργανα (controls) (ή widgets) τα
οποία ενσωματώνουν και διαθέτουν ένα σύνολο από λειτουργίες που είναι
συχνά χρήσιμες.
Παραδείγματα τέτοιων οργάνων είναι
το πλαίσιο εισαγωγής κειμένου (edit box),
το πιεζόμενο κουμπί (push button) και
το πλαίσιο επιλογής αρχείου.
Η μεταφορά των γεγονότων από το σύστημα στις εφαρμογές και τα παράθυρά
τους βασίζεται συχνά στην κληρονομικότητα.
Έτσι, μια εφαρμογή μπορεί να δημιουργήσει υποκλάσεις για ένα όργανο που
να δίνουν στο όργανο πιο εξειδικευμένη λειτουργικότητα.
Αντίστοιχα, τα μηνύματα από το σύστημα κατεβαίνουν το δέντρο της
κληρονομικότητας μιας εφαρμογής μέχρι και το τελευταίο στην ιεραρχία
παράθυρο ή όργανο να δει το γεγονός και να έχει την ευκαιρία να το
χειριστεί.
Μια εφαρμογή πρέπει να παραλαμβάνει συνέχεια όλα τα μηνύματα που στέλνονται
σε αυτή, να τα διαχωρίζει και να τα προωθεί στους αντίστοιχους παραλήπτες.
Απεικόνιση της δομής στη Visual Basic
Το περιβάλλον προγραμματισμού Visual Basic επιτρέπει τη γραφική σχεδίαση
εφαρμογών με τη χρήση οργάνων και τον άμεσο ορισμό κώδικα που θα αποκρίνεται
σε συγκεκριμένα γεγονότα.
Για το σκοπό αυτό η Visual Basic απλοποιεί το περιβάλλον προγραμματισμού
που ορίζουν τα Windows δίνοντας στο χρήστη μια σειρά από εξειδικευμένα
όργανα (βασισμένα σε αυτά των Windows) και έναν τρόπο να ορίζει ο χρήστης
την εμφάνιση του κάθε οργάνου, τις λειτουργίες του και τον
τρόπο που αυτό ανταποκρίνεται σε γεγονότα.
Έτσι, κάθε όργανο παριστάνεται ως ένα αντικείμενο που διαθέτει:
- ιδιότητες όπως για παράδειγμα τη θέση και το χρώμα του,
- μεθόδους που μπορούν να κληθούν για εκτέλεση όπως για
παράδειγμα τη μέθοδο της επανασχεδίασης και
- γεγονότα στα οποία μπορεί ο χρήστης να συνδέσει κώδικα
π.χ. το γεγονός click.
Ο έλεγχος που έχει ο χρήστης πάνω στα όργανα διαφέρει ανάλογα με
την κατάσταση της εφαρμογής:
-
Κατά τη διάρκεια σχεδιασμού της εφαρμογής, ο χρήστης μπορεί να διαβάσει
και να αλλάξει τιμή στις περισσότερες ιδιότητες καθώς και να συνδέσει
κώδικα με όλα τα γεγονότα κάθε οργάνου.
-
Κατά τη διάρκεια εκτέλεσης της εφαρμογής, το πρόγραμμα μπορεί να διαβάσει
και να αλλάξει τιμή στις περισσότερες ιδιότητες και να καλέσει τις
μεθόδους του κάθε οργάνου.
Όταν παραλαμβάνεται από την εφαρμογή ένα γεγονός, αυτό προωθείται
αυτόματα στον κώδικα που έχει συνδεθεί με το αντίστοιχο όργανο.
Αν δεν υπάρχει τέτοιος κώδικας, τότε η εφαρμογή εκτελεί αυτόματα
κώδικα ο οποίος εκτελεί τη βασική λειτουργία για το αντίστοιχο γεγονός.
Όργανα
Όργανα τοποθετούνται μέσα στην εφαρμογή με γραφικό τρόπο κατά την
υλοποίησή της.
Κάθε όργανο διακρίνεται από το όνομά του.
Αν πολλά όργανα ίδιου τύπου έχουν το ίδιο όνομα τότε αυτά ορίζουν
έναν πίνακα οργάνων τον οποίο μπορούμε να διατρέξουμε με τη χρήση
ενός δείκτη (π.χ. txtTextBox(i).text = "hello").
Το περιβάλλον της Visual Basic ορίζει τα παρακάτω βασικά
όργανα:
- TextBox
-
Όργανο για είσοδο κειμένου
- Label
-
Εμφάνιση κειμένου
- PictureBox
-
Περιοχή για εμφάνιση και σχεδίαση γραφικών κατά τη διάρκεια εκτέλεσης
του προγράμματος.
- CheckBox
-
Επιλογή τύπου ναι/όχι (μπορούν να είναι αληθείς πολλαπλές τέτοιες επιλογές)
- OptionButton
-
Επιλογή τύπου ναι/όχι (δεν μπορούν να είναι αληθείς πολλαπλές τέτοιες επιλογές)
- CommandButton
-
Κουμπί για εντολές
- Image
-
Χαρτογραφική εικόνα που μπορεί να ορίσει ο χρήστης
- Shape
-
Σχήμα που μπορεί να οριστεί κατά τη σχεδίαση της εφαρμογής.
- Timer
-
Χρονόμετρο που δημιουργεί γεγονότα σε τακτά διαστήματα.
- ListBox
-
Λίστα με επιλογές.
- ComboBox
-
Λίστα με επιλογές σε συνδυασμό με περιοχή που μπορεί να γραφτεί κείμενο
- VScrollBar
-
Κάθετο όργανο ελέγχου της θέσης στο παράθυρο.
- HScrollBar
-
Οριζόντιο όργανο ελέγχου της θέσης στο παράθυρο.
- Frame
-
Περιοχή στην οποία μπορούν να ομαδοποιηθούν πολλά όργανα (ειδικά
OptionButton)
Εκτός από τα παραπάνω βασικά όργανα μπορεί κανείς να ορίσει ή να αγοράσει
πολλά άλλα όργανα που εκτελούν χρήσιμες λειτουργίες όπως π.χ. σύνδεση
με βάσεις δεδομένων και το Internet, εμφάνιση γραφημάτων και πινάκων.
Τα όργανα αυτά μπορούν να θεωρηθούν εξαρτήματα (components)
για την υλοποίηση εφαρμογών.
Γεγονότα
Κάθε όργανο έχει το δικό του σύνολο από γεγονότα τα οποία μπορεί να δεχτεί.
Ορισμένα από τα γεγονότα τα οποία αφορούν πολλά όργανα είναι τα παρακάτω:
- Click
- Click του ποντικιού πάνω στο όργανο.
- DblClick
- Διπλό click του ποντικιού πάνω στο όργανο.
- GotFocus
- Το όργανο γίνεται η εστία εισόδου.
- LostFocus
- Το όργανο παύει να είναι η εστία εισόδου.
- KeyDown
- Ένα πλήκτρο πατιέται πάνω από το όργανο.
- KeyUp
- Ένα πλήκτρο αφήνεται πάνω από το όργανο.
- KeyPress
- Ένας χαρακτήρας γράφεται πάνω από το όργανο.
- MouseDown
- Ένα πλήκτρο του ποντικιού πατιέται πάνω από το όργανο.
- MouseUp
- Ένα πλήκτρο του ποντικιού αφήνεται πάνω από το όργανο.
- MouseMove
- Το ποντίκι κινείται πάνω από το όργανο.
- Change
- Τα δεδομένα που περιέχει το όργανο άλλαξαν.
Η σύνδεση του γεγονότος με κώδικα της Visual Basic γίνεται με τον
ορισμό μιας συνάρτησης που έχει ως όρισμα παραμέτρους που αφορούν το
συγκεκριμένο όργανο.
Παράδειγμα:
Private Sub Check1_KeyPress(KeyAscii As Integer)
End Sub
Private Sub Check1_KeyUp(KeyCode As Integer, Shift As Integer)
End Sub
Private Sub Check1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
End Sub
Private Sub Command1_Click()
End Sub
Private Sub Text1_Change()
End Sub
Ιδιότητες
Οι ιδιότητες που αφορούν κάθε όργανο μπορούν να μεταβληθούν τόσο κατά το
σχεδιασμό, όσο και κατά την εκτέλεση της εφαρμογής.
Πρόσβαση στις ιδιότητες κατά την εκτέλεση της εφαρμογής έχουμε με τη
σύνταξη όργανο.ιδιότητα.
Μερικές ιδιότητες που εμφανίζονται σε πολλά όργανα είναι οι παρακάτω:
- Name
- Το όνομα του συγκεκριμένου οργάνου.
- BackColor
- Το χρώμα του φόντου.
- ForeColor
- Το χρώμα σχεδίασης.
- Enabled
- Αληθές αν το όργανο είναι ενεργό.
- Visible
- Αληθές αν το όργανο είναι ορατό.
- Text
- Το κείμενο που περιέχει το όργανο.
- Caption
- Το κείμενο που εμφανίζει το όργανο.
- Value
- Η τιμή που έχει το όργανο (π.χ. αληθές/ψευδές).
- ToolTipText
- Το αναδυόμενο κείμενο σύντομης βοήθειας.
- Height
- Το ύψος του οργάνου.
- Left
- Η θέση του οργάνου στη φόρμα από αριστερά.
- Top
- Η θέση του οργάνου στη φόρμα από πάνω.
- Width
- Το πλάτος του οργάνου.
Υλοποίηση προγραμμάτων
- Τα προγράμματα που υλοποιούν γραφική επαφή σε Visual Basic αποτελούνται
από μια ή περισσότερες φόρμες και τα όργανα που υπάρχουν πάνω σε αυτές.
- Για κάθε όργανο που τοποθετούμε στη φόρμα (αλλά και για την ίδια
τη φόρμα) ορίζουμε τις αρχικές ιδιότητές του από στην αντίστοιχη
περιοχή του περιβάλλοντος εργασίας:
- Στα προγράμματα που ορίζοτν διεπαφή με φόρμες
σπάνια ορίζουμε η εκτέλεση να αρχίζει από τη διαδικασία Main.
- Η λειτουργία του προγράμματος βασίζεται σε κώδικα που ανταποκρίνεται
σε συγκεκριμένα γεγονότα (π.χ. το click σε ένα κουμπί).
- Για παράδειγμα με ο παρακάτω κώδικας υλοποιεί
(λανθασμένα ως προς τη στρογγυλοποίηση)
το πρόγραμμα μετατροπής μεταξύ Ευρώ και δραχμών.
Private Sub cmdExit_Click()
End
End Sub
Private Sub cmdToGRD_Click()
txtGRD.Text = Format(Val(txtEUR.Text) * 340.57, "#")
End Sub
Private Sub cmdToEUR_Click()
txtEUR.Text = Format(Val(txtGRD.Text) / 340.75, ".##")
End Sub
Βιβλιογραφία
-
Microsoft Developer Network Library
Visual Studio Documentation -
Visual Basic -
Reference -
Controls Reference -
Intrinsic Controls
- Michael Halvorson
Visual Basic 6 Βήμα προς βήμα. Εκδόσεις Κλειδάριθμος, Αθήνα.
- Stuart K. Card, Thomas P.
Moran, and Allen Newell.
The
Psychology of Human-Computer Interaction.
Lawrence Erlbaum Associates, Publishers, New Jersey, USA, 1983.
- Adele Goldberg.
Smalltalk 80: The Language and its Implementation.
Addison Wesley, 1980.
- Brian W. Kernighan.
Experience with Tcl slash Tk for scientific and
engineering visualization.
In Proceedings of the Tcl slash Tk Workshop, pages 269–278,
Toronto, Ontario, Canada, July 1995.
- Microsoft Corp.
Windows Interface Guidelines for Software Design.
Microsoft Press, Redmond, WA, USA, 1995.
- Donald A. Norman.
The
Psychology of Everyday Things.
BasicBooks, New York, NY, USA, 1988.
- Donald A. Norman.
The
Invisible Computer.
MIT Press, 1998.
- John K. Ousterhout.
Tcl
and the Tk Toolkit.
Addison-Wesley, 1994.
- Diomidis Spinellis.
A critique of the Windows application programming interface (http://kerkis.math.aegean.gr/~dspin/pubs/jrnl/1997-CSI-WinApi/html/win.html).
Computer Standards & Interfaces, 20:1–8, November 1998.
- J. J. Thomas and
G. Hamlin.
Graphical input interaction technique workshop summary.
Computer Graphics, pages 5–30, January 1983.
- Edward R. Tufte.
The Visual Display of Quantitative Information.
Graphics Press, 1983.
Ασκήσεις
Διεπαφές
- Να υλοποιήσετε μια φιλική γραφική διεπαφή για ένα από τα προγράμματα
που έχετε γράψει στα πλαίσια του μαθήματος.
Διαχείριση δεδομένων: σύνδεση με βάσεις δεδομένων, πίνακες, τύποι
Πρόσβαση σε βάσεις δεδομένων
Συχνά προγράμματα σε Visual Basic αποθηκεύουν τα στοιχεία τους σε
μια βάση δεδομένων και υλοποιούν μόνο τη διεπαφή του χρήστη για
πρόσβαση στη βάση αυτή.
Η ανάπτυξη τέτοιων προγραμμάτων
πελάτη εξυπηρετητή (client/server) δεν είναι τετριμμένη.
Ο τρόπος σύνδεσης που θα παρουσιαστεί αφορά τη σύνδεση σε προσωπικές βάσεις
δεδομένων ή την άντληση στοιχείων από απλές εταιρικές πηγές δεδομένων.
Πιο σύνθετες εφαρμογές πρέπει μεταξύ άλλων να λάβουν υπόψη τους
- τη βέλτιστη τεχνολογία
πρόσβασης στα δεδομένα (η Microsoft αναβαθμίζει συχνά τις τεχνολογίες
αυτές με ονόματα όπως ODBC, DAO, RDO, ADO, .net),
- τον τρόπο με τον οποίο είναι υλοποιημένη η επιχειρηματική λογική,
- τις άδειες πρόσβασης των χρηστών,
- προβλήματα πολλαπλής χρήσης της βάσης,
- τον τρόπο κίνησης και εμφάνισης σε μεγάλο όγκο δεδομένων.
Πρόσβαση από τη διεπαφή του χρήστη
- H Visual Basic επιτρέπει την εύκολη πρόσβαση σε βάσεις και άλλες
πηγές δεδομένων με τη χρήση του Data Control.
- Το data control συνδέει πεδία της φόρμας στην οποία το τοποθετούμε
με τη βάση δεδομένων.
- Στο data control καθορίζουμε τη σύνδεση με τις παρακάτω παραμέτρους:
- Connect
- Τύπος της σύνδεσης, π.χ. Access για βάσεις δεδομένων Excel για
φύλα εργασίας ή το όνομα πηγής δεδομένων ODBC.
- DefaultType
- UseODBC ή UseJet.
- DatabaseName
- To αρχείο της βάσης δεδομένων.
- Exclusive
- Αν η πρόσβαση στη βάση θα είναι αποκλειστική.
- ReadOnly
- Αν η πρόσβαση στη βάση θα είναι μόνο για ανάγνωση.
- RecordSource
- Ο πίνακας ή η θέα της βάσης που θέλουμε να έχουμε πρόσβαση.
- Κατά τη λειτουργία του προγράμματος το data control επιτρέπει στο χρήστη
την κίνηση από εγγραφή σε εγγραφή.
- Στη φόρμα τοποθετούμε
πεδία συνδεδεμένα με τη βάση δεδομένων (data bound controls)
και τα συνδέουμε με το data control.
Εμφάνιση και αλλαγή στοιχείων
- Πολλά από τα όργανα της Visual Basic επιτρέπουν την άμεση σύνδεσή τους
με μια πηγή δεδομένων μέσω του data control.
- Ορισμένα από τα όργανα αυτά είναι τα παρακάτω:
- CheckBox
- ComboBox
- Image
- Label
- ListBox
- MaskedEdit
- PictureBox
- ProgressBar
- RichTextBox
- TextBox
- Η σύνδεση γίνεται με δύο ιδιότητες.
- DataSource:
- ορίζει το data control με το οποίο θα γίνεται η πρόσβαση
στην πηγή των δεδομένων.
- DataField:
- ορίζει το πεδίο του πίνακα ή της θέας που θα αντιστοιχεί
στο συγκεκριμένο όργανο.
- Όταν ένα όργανο συνδεθεί με μια πηγή δεδομένων, κινήσεις ανάμεσα σε
εγγραφές που γίνονται από το data control, ενημερώνουν αυτόματα τα
περιεχόμενά του με τα αντίστοιχα περιεχόμενα των εγγραφών της βάσης.
- Αντίστροφα, αλλαγές που κάνει ο χρήστης στα περιεχόμενα του οργάνου
μεταφέρονται στη βάση όταν ο χρήστης μετακινηθεί σε άλλη εγγραφή.
Πρόσβαση στη βάση από το πρόγραμμα
- Πολλές φορές η απλοϊκή πρόσβαση στη βάση μέσω του data control δεν
είναι αρκετή και απαιτείται ανάγνωση και εγγραφή των δεδομένων μέσα
από το πρόγραμμα.
- Το πρώτο βήμα είναι η σύνδεση με τη βάση δεδομένων:
Dim dbsDb As Database
Set dbsDb = OpenDatabase("Inventory.mdb")
- Επειδή η σύνδεση αυτή απαιτεί συχνά χρόνο για να δημιουργηθεί
συχνά την κρατάμε για όλο το διάστημα λειτουργίας του προγράμματος
σε μια καθολική μεταβλητή (global variable):
Global dbsDb As Database
Sub Main()
Set dbsDb = OpenDatabase("Inventory.mdb")
- Πρόσβαση στα δεδομένα έχουμε μέσω του συνόλου εγγραφών RecordSet.
- Για να μη βασιζόμαστε στη δομή των πινάκων της βασης προτείνουμε
κάθε πρόσβαση να γίνεται μέσω μιας ερώτησης (query)
ή αποθηκευμένης διαδικασίας (stored procedure) της
βάσης με τις αντίστοιχες παραμέτρους.
- Πρόσβαση στις ερωτήσεις έχουμε μέσω του αντικειμένου QueryDef.
Dim qry As QueryDef
Dim rst As Recordset
Set qry = dbsDb.QueryDefs("ComputerById")
qry.Parameters("Id") = "34673"
- Με βάση την ερώτηση μπορούμε να ανακτήσουμε τις εγγραφές:
Set rst = qry.OpenRecordset
- Στη συνέχεια μπορούμε να περάσουμε από κάθε εγγραφή με ένα βρόχο:
do while not rst.EOF
...
loop
- ή να ελέγξουμε να υπάρχουν αποτελέσματα που να ικανοποιούν τη
συνθήκη αυτή:
If not rst.EOF Then
...
- Πρόσβαση στα πεδία των εγγραφών έχουμε με βάση το όνομα του κάθε πεδίου:
MsgBox rst("ItemName")
- Όταν θέλουμε να μεταβάλλουμε τα περιεχόμενα των πεδίων πρέπει πρώτα
να καλέσουμε τη μέθοδο Edit, ενώ για να προσθέσουμε μια νέα εγγραφή καλούμε
τη μέθοδο AddNew:
if rst.EOF
rst.AddNew
Else
rst.Edit
End If
rst("ItemName") = "The Art of Computer Programming"
- Όταν ολοκληρωθούν οι αλλαγές καλούμε τη μέθοδο Update:
rst.Update
- Στο τέλος της πρόσβασης στα δεδομένα καλούμε τη μέθοδο Close
για κάθε Open που χρησιμοποιήσαμε:
rst.Close
qry.Close
dbsDB.Close
Πίνακες
- Ορισμένες φορές χρειάζεται να ομαδοποιήσουμε δεδομένα ίδιου τύπου.
- Αν τα δεδομένα αυτά δεν απαιτούνται όταν το πρόγραμμα τερματίσει
τη λειτουργία του, αντί να τα φυλάξουμε σε βάση δεδομένων, μπορούμε
να χρησιμοποιήσουμε έναν πίνακα (array).
- Ο ορισμός του πίνακα γίνεται με τη σύνταξη:
Dim όνομα([κάτω-όριο Το] άνω-όριο [, [κάτω-όριο Το] άνω-όριο] ...) as τύπος
- Αν δεν οριστεί το κάτω όριο είναι το 0 (ή αυτό που έχουμε ορίσει με την εντολή
option base).
- Αν δώσουμε πολλαπλές τιμές ορίζουμε πίνακα πολλαπλών διαστάσεων.
- Παράδειγμα:
Dim Values(10) as Integer
Dim RoomEmpty(100 to 999) as Boolean
Dim ChessBoard(7, 7) as String
- Πρόσβαση στα δεδομένα του πίνακα έχουμε με το όνομα της μεταβλητής
και τον ακέραιο δείκτη στο στοιχείο που μας ενδιφέρει μέσα σε παρένθεση:
Values(3) = 178
For i= 100 to 999
RoomEmpty(i) = True
Next i
ChessBoard(0, 1) = "Castle"
Τύποι καθοριζόμενοι από το χρήστη
- Ορισμένες φορές χρειάζεται να ομαδοποιήσουμε δεδομένα διαφορετικών
τύπων μεταξύ τους.
Για το σκοπό αυτό μπορούμε να ορίσουμε έναν νέο
τύπο (type) δεδομένων ως μια
δομή (structure).
- Τη δυνατότητα αυτή μας δίνει η εντολή Type με την παρακάτω σύνταξη:
Type όνομα
πεδίο1 As τύπος
πεδίο2 As τύπος
...
End Type
- Παράδειγμα:
Type CustomerEntry
Name As String
Phone As String
Balance As Currency
End Type
- Τα στοιχεία μπορούν να είναι και πίνακες σύμφωνα με τη σύνταξη
που ορίζουμε τις αντίστοιχες μεταβλητές.
- Με βάση τον τύπο που ορίσαμε μπορούμε να ορίσουμε νέες μεταβλητές:
Dim CurrentCustomer As CustomerEntry
Dim AllCustomers(100) As CustomerEntry
- Πρόσβαση στα πεδία της δομής έχουμε με τη σύνταξη μεταβλητή.πεδίο:
Dim TotalBalance as Currency
MsgBox CurrentCustomer.Name + CurrentCustomer.Phone
For i = 1 to 100
TotalBalance = TotalBalance + AllCustomers(i).Balance
Next i
Βιβλιογραφία
- Timothy Andrew and
Craig Harris.
Combining language and database advances in an object-oriented development
environment.
ACM SIGPLAN Notices, 22(12):430–440, December 1987.
Special Issue: Object-Oriented Programming Systems, Languages and Applications,
OOPSLA '87 Conference Proceedings, October 4–8 Orlando, Florida, USA.
- Peter
Duchessi and InduShobha Chengalur-Smith.
Client/server benefits, problems, best practices.
Communications of the ACM, 41(5):87–94, May 1998.
- John G. Hughes.
Object-Oriented Databases.
Prentice Hall, 1991.
- Joel Kanter.
Understanding Thin-Client/Server Computing.
Microsoft Press, Redmond, WA, USA, 1998.
- Henry F. Korth
and Abraham Silberschatz.
Database System Concepts.
McGraw-Hill, second edition, 1991.
- Scott M. Lewandowski.
Frameworks for component-based client/server computing.
ACM Computing Surveys, 30(1):3–27, March 1998.
- Alok Sinha.
Client-server computing.
Communications of the ACM, 35(7):77–98, July 1992.
- Diomidis Spinellis.
The computer's new clothes (http://softlab.icsd.aegean.gr/~dspin/pubs/jrnl/1998-IEEESoft-CliServ/html/CliServ.html).
IEEE Software, 15(6):14–17, November/December 1998.
- D. C.
Tsichritzis and O. M. Nierstrasz.
Directions in object-oriented research.
In Won Kim and Frederick H. Lochovsky, editors, Object-Oriented Concepts,
Databases, and Applications, chapter 20, pages 523–536.
Addison-Wesley, 1989.
ACM Press Frontier Series.
Ασκήσεις
Πρόσβαση σε βάσεις δεδομένων
- Να ορίσετε με τη χρήση του προγράμματος Microsoft Access μια βάση δεδομένων
(ΒΔ) που να περιέχει έναν πίνακα για τον καθορισμό του ετήσιου επιτοκίου μιας
κατάθεσης με ετήσιο επιτόκιο που μεταβάλλεται κλιμακωτά ανάλογα με το
ποσό που τοκίζεται σύμφωνα με τα παρακάτω στοιχεία:
Ποσό | Επιτόκιο |
0-999.999 | 2.25 |
1.000.000-4.999.999 | 2.5 |
5.000.000-10.000.000 | 2.8 |
10.000.000 και άνω | 2.9 |
- Να ορίσετε στη ΒΔ μια ερώτηση που να επιστρέφει - με βάση τον πίνακα -
το επιτόκιο που ισχύει για ένα συγκεκριμένο ποσό.
- Να γράψετε μια συνάρτηση που να υπολογίζει τη
συνολική απόδοση μια κατάθεσης για ένα έτος αντλώντας
το επιτόκιο από τη ΒΔ.
- Με βάση την παραπάνω συνάρτηση να γράψετε ένα πρόγραμμα
που ζητάει από το χρήστη
- το αρxικό ποσό και
- τον αριθμό των περιόδων (ετών).
και εμφανίζει το τελικό ποσό της κατάθεσης.
- Προσπαθήστε η διεπαφή του προγράμματος να είναι φιλική προς το χρήστη.
- Εναλλακτικά, να υλοποιήσετε με βάση το data control μια διεπαφή που
να επιστρέπει στο χρήστη την ανάγνωση και αλλαγή των στοιχείων του πίνακα.
Προγραμματισμός στο διαδίκτυο
Αρχιτεκτονική του παγκόσμιου ιστού
- Ο παγκόσμιος ιστός (world wide web)
είναι υλοποιημένες σύμφωνα με το μοντέλο
πελάτη-υπηρέτη (client-server).
- Υπηρέτες ακούν για εντολές του πρωτοκόλλου HTTP
στη θύρα TCP 80 και απαντούν ανάλογα με το περιεχόμενο της εντολής.
- Οι απαντήσεις είναι συνήθως υπερκείμενο (hypertext)
δομημένο σύμφωνα με το πρότυπο HTML.
- Παραπομπές σε άλλες σελίδες ή περιεχόμενο γίνονται με την
τυποποιημένη χρήση των Uniform Resource Locators (URL).
- Τόσο ο πελάτης, όσο και ο υπηρέτης μπορούν να προσαρμόσουν
δυναμικά το περιεχόμενο μιας σελίδας.
Προσδιορισμός στοιχείων με URI
Ο προσδιορισμός στοιχείων στο πρωτόκολλο HTTP
γίνεται με τη χρήση των Uniform Resource Identifiers.
Αυτά ορίζονται από την παρακάτω γραμματική (RFC 2068):
URI = ( absoluteURI | relativeURI ) [ "#" fragment ]
absoluteURI = scheme ":" *( uchar | reserved )
relativeURI = net_path | abs_path | rel_path
net_path = "//" net_loc [ abs_path ]
abs_path = "/" rel_path
rel_path = [ path ] [ ";" params ] [ "?" query ]
path = fsegment *( "/" segment )
fsegment = 1*pchar
segment = *pchar
params = param *( ";" param )
param = *( pchar | "/" )
scheme = 1*( ALPHA | DIGIT | "+" | "-" | "." )
net_loc = *( pchar | ";" | "?" )
query = *( uchar | reserved )
fragment = *( uchar | reserved )
pchar = uchar | ":" | "@" | "&" | "=" | "+"
uchar = unreserved | escape
unreserved = ALPHA | DIGIT | safe | extra | national
escape = "%" HEX HEX
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+"
extra = "!" | "*" | "'" | "(" | ")" | ","
safe = "$" | "-" | "_" | "."
unsafe = CTL | SP | <"> | "#" | "%" | "<" | ">"
national = <any OCTET excluding ALPHA, DIGIT,
reserved, extra, safe, and unsafe>
Η χρήση τους επιτρέπει τον προσδιορισμό άλλων σελίδων τοπικά, σε άλλα
μηχανήματα, καθώς και ερωτήσεων:
http://kerkis.math.aegean.gr/~dspin/
http://www.altavista.com/cgi-bin/query?pg=q&text=yes&q=link%3akerkis%2emath%2eaegean%2egr%2f%7edspin+%2dhost%3akerkis%2emath%2eaegean%2egr&stq=10&c9k
Σημαντικά προβλήματα ασφάλειας που μπορούν να προκύψουν είναι τα παρακάτω:
- Το σύστημα DNS που μετατρέπει τα ονόματα σε διευθύνσεις δεν είναι ασφαλές
- Οποιοσδήποτε μπορεί να δημιουργήσει ένα URI.
Δεν πρέπει η ασφάλειά μας να βασίζεται σε "κρυμμένα" αρχεία ή στη χρήση
συγκεκριμένων URI.
- Με τον προσδιορισμό άλλων θυρών μπορεί ένα "αθώο" URI να "μιλήσει" σε άλλο
πρωτόκολλο (όχι HTTP) με καταστροφικά αποτελέσματα.
- Όταν ένα URI περιέχει συνθηματικό αυτό δεν μπορεί να είναι εμπιστευτικό.
Το πρωτόκολλο HTTP
Το πρωτόκολλο HTTP υποστηρίζει τις παρακάτω μεθόδους επικοινωνίας:
- GET
- HEAD
- POST
- PUT
- DELETE
- TRACE
Παράδειγμα:
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
Βασικά προβλήματα ασφάλειας που έχουν σχέση με το HTTP είναι τα παρακάτω:
Διασφάλιση συναλλαγών HTTP
Συναλλαγές που χρησιμοποιούν HTTP μπορούν να ασφαλιστούν ως προς
την εμπιστευτικότητα και την ακεραιότητα σε τρία διαφορετικά επίπεδα:
- Κάτω από το πρωτόκολλο HTTP μέσω SSL ή IPSEC
- Επεκτείνοντας το πρωτόκολλο HTTP (π.χ. secure HTTP)
- Πάνω από το πρωτόκολλο HTTP με λ.χ. με εξειδικευμένες εφαρμογές σε
Java που κρυπτογραφούν τα μηνύματα.
Περιγραφή σελίδων με HTML
H HTML είναι μια εφαρμογή της SGML για την περιγραφή σελίδων στο Web.
Περιοχές του κειμένου σημειώνονται με ετικέτες (tags).
Κάθε ετικέτα περιλαμβάνει το όνομά της και παραμέτρους.
Οι ετικέτες γράφονται ως εξής:
<όνομα ετικέτας παράμετροι>
Μια περιοχή του κειμένου μπορεί να σημειωθεί ως εξής:
<ετικέτα>
περιοχή που σημειώνεται
</ετικέτα>
Βασικές ετικέτες που υποστηρίζει η HTML είναι οι παρακάτω:
- HTML
- περιγραφή ολόκληρης σελίδας
- HEAD
- επικεφαλίδα της σελίδας
- BODY
- κείμενο της σελίδας
- H1-H6
- επικεφαλίδες του κειμένου
- P
- αλλαγή παραγράφου
- UL
- λίστα με τελείες
- OL
- αριθμημένη λίστας
- LI
- στοιχείο λίστας
- BR
- αλλαγή γραμμής
- HR
- οριζόντια γραμμή
- IMG
- εικόνα
- A
- (anchor) σημείο πρόσβασης από ή σε υπερκείμενο
- PRE
- προστοιχειοθετημένο κείμενο
- DL, DT, DD
- λίστα περιγραφών, περιγραφές
- I
- πλάγιοι χαρακτήρες
- B
- έντονοι χαρακτήρες
Παράδειγμα σελίδας:
<!doctype html public "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<TITLE>Τίτλος της σελίδας</title>
<META NAME="GENERATOR" CONTENT="thread.pl">
<META NAME="AUTHOR" CONTENT="Diomidis Spinellis">
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=ISO-8859-7">
<LINK REV="made" HREF="mailto:dspin@aegean.gr">
<LINK REL="ToC" href="./web/index.htm">
<LINK REV="Subdocument" href="./web/index.htm">
<LINK REL="previous" href="./web/http.htm">
<LINK REL="next" href="./web/cgi.htm">
</HEAD>
<BODY> <H1>Επικεφαλίδα πρώτου επιπέδου</H1><HR>
Κείμενο που περιέχει ένα σημείο κατάληξης υπερκειμένου
<a name="G42"> (<em>με έντονο κείμενο</em>)</a>
και μια λίστα:
<ul>
<li> στοιχείο 1
<li> στοιχείο 2
</ul>
<p>
Νέα παράγραφος με ένωση υπερκειμένου στο
<A HREF="http://www.aegean.gr">Πανεπιστήμιο Αιγαίου</A>
<HR>
</BODY>
</HTML>
Προβλήματα ασφάλειας που σχετίζονται με την HTML είναι τα εξής:
- Χρήση προβληματικών URI μέσω εικόνων ή anchors.
- Οι μέθοδοι αποστολής στοιχείων μέσω HTTP και SMTP δε διασφαλίζουν
την εμπιστευτικότητά τους.
Web browser control
Internet transfer control
-
Ένας δεύτερος τρόπος πρόσβασης στο Web μέσα από την εφαρμογή μας είναι με τη
χρήση του Internet Transfer Control (προσθήκη από το Project - Components).
-
Το όργανο αυτό δεν εμφανίζεται όταν εκτελείται η εφαρμογή μας, αλλά
μας επιτρέπει την πρόσβαση σε περιεχόμενο δικτυακών τόπων μέσα
από το πρόγραμμα.
-
Για διαβάσουμε το περιεχόμενο μιας συγκεκριμένης σελίδας χρησιμοποιούμε τη
μέθοδο OpenURL που επιστρέφει μια συμβολοσειρά με τα περιεχόμενα
της σελίδας όπως στο παρακάτω παράδειγμα:
Private Sub Command1_Click()
Dim weather As String
weather = Inet1.OpenURL("http://www.ntua.gr/weather")
MsgBox "Wind speed is " + Mid(weather, InStr(weather, "beaufort") - 2, 1) + " beaufort", vbOKOnly, "Current wind speed"
End Sub
- Προσοχή: τα περιεχόμενα της σελίδας είναι - στην καλύτερη περίπτωση -
κωδικοποιημένα σε HTML.
- Αν τα περιεχόμενα της σελίδας είναι πολλά πρέπει να χρησιμοποιήσουμε
τις μεθόδους Execute και GetChunk για να τη διαβάσουμε σε τμήματα.
- Η μέθοδος GetHeader επιτρέπει την πρόσβαση στις επικεφαλίδες HTTP.
Βιβλιογραφία
- T. Berners-Lee and D. Connolly.
RFC 1866: Hypertext Markup
Language — 2.0, November 1995.
- T. Berners-Lee,
L. Masinter, and M. McCahill.
RFC 1738: Uniform Resource
Locators (URL), December 1994.
- R. Fielding,
J. Gettys, J. Mogul, H. Frystyk, T. Berners-Lee, et al.
RFC 2068: Hypertext transfer
protocol — HTTP/1.1, January 1997.
- Stefanos
Gritzalis and Diomidis Spinellis.
Addressing threats and security issues in World Wide Web
technology.
In Proceedings CMS '97 3rd IFIP TC6/TC11 International joint working
Conference on Communications and Multimedia Security, pages 33–46,
Athens, Greece, September 1997. IFIP, Chapman & Hall.
- Gary McGraw and
Edward W. Felten.
Securing Java.
Wiley, 1999.
- Aviel D. Rubin, Daniel
Geer, and Marcus J. Ranum.
Web
Security Sourcebook.
John Wiley & Sons, 1997.
Προγραμματισμός με εξαρτήματα, μεταγλώττιση και εγκατάσταση
Προγραμματισμός με εξαρτήματα
Πολλές γλώσσες προσφέρουν τη δυνατότητα προγραμματισμού με έτοιμα εξαρτήματα.
Στη Visual Basic μπορούμε να χρησιμοποιησούμε δύο είδη εξαρτημάτων:
- Εξαρτήματα ActiveX τα οποία εμφανίζονται στην εργαλειοθήκη και τα οποία
μπορούμε να τοποθετήσουμε σε φόρμες.
Για τα εξαρτήματα αυτά μπορούμε να ορίσουμε τις ιδιότητές τους από το
αντίστοιχο παράθυρο.
Παραδείγματα τέτοιων εξαρτημάτων είναι τα:
- Calendar
- Chart
- Common Dialog
- Flex Grid
- Outline
- Multimedia
- Internet
- Rich Textbox
- Tabbed Dialog
- Media Player
Τα εξαρτήματα αυτά ορίζονται στην επιλογή Project - Components
- Συλλογές αντικειμένων
(βιβλιοθήκες (libraries)
στα οποία έχουμε πρόσβαση μέσα από τον κώδικα της εφαρμογής.
Μπορούμε να ορίσουμε μεταβλητές που να αντιστοιχούν στα αντικείμενα αυτά
και μέσω αυτών να έχουμε πρόσβαση σε άλλες σύνθετες εφαρμογές.
Παραδείγματα τέτοιων αντικειμένων είναι τα:
- Microsoft Excel
- Corel Draw
- Microsoft DAO (Data Access Objects)
- Microsoft Word
- Real Player
- Microsoft Media Player
Τα εξαρτήματα αυτά ορίζονται στην επιλογή Project - References
Πρόσβαση σε πολυμέσα
Το πρότυπο επικοινωνίας MCI (Media Control Interface) καθορίζει μια σειρά από
εντολές που υποστηρίζονται από συσκευές multimedia για την επικοινωνία
τους με το λογισμικό εφαρμογών.
Έτσι όπως το BIOS (Basic Input Output System) των προσωπικών υπολογιστών
παρέχει μία τυποποιημένη δυνατότητα ελέγχου της οθόνης, του δίσκου και του
πληκτρολογίου μέσω των αντίστοιχων κλήσεων σε
συναρτήσεις εξυπηρέτησης διακοπών (interrupt service function),
έτσι και το πρότυπο MCI παρέχει την τυποποιημένη δυνατότητα ελέγχου περιφερειακών
συσκευών multimedia.
Για την επίτευξη όσο το δυνατό μεγαλύτερης συμβατότητας με πολλά περιβάλλοντα
προγραμματισμού οι κλήσεις στον οδηγό MCI δεν είναι απαραίτητα συνδεδεμένες
με κάποια συγκεκριμένη γλώσσα προγραμματισμού όπως η Visual Basic ή η C,
αλλά αποτελούνται από απλές συμβολοσειρές με τις οποίες τα Windows επικοινωνούν
με την αντίστοιχη συσκευή.
Στη Visual Basic το όργανο Microsoft Multimedia Control
(το προσθέτουμε από την επιλογή Project - Components) επιτρέπει την εύκολη
πρόσβαση σε πολυμέσα.
Το όργανο εμφανίζεται με την παρακάτω μορφή:
Για να χρησιμοποιήσουμε το όργανο αυτό ακολουθούμε τα παρακάτω
βήματα:
-
Καθορίζουμε το είδος της συσκευής με την οποία θέλουμε να μιλήσουμε.
Αυτό γίνεται με ανάθεση στην ιδιότητα DeviceType η οποία υποστηρίζει τις
ακόλουθες συσκευές:
- AVIVideo
- CDAudio
- DAT
- DigitalVideo
- MMMovie
- Other
- Overlay
- Scanner
- Sequencer
- VCR
- Videodisc
- WaveAudio
-
Kαθορίζουμε το όνομα του αρχείου που θέλουμε να γράψουμε ή να
διαβάσουμε στην ιδιότητα FileName.
- Καθορίζομε άλλες ιδιότητες που έχουν να κάνουν με τον τρόπο
εγγραφής ή αναπαραγωγής όπως Notify, Wait, Shareable.
- Θέτουμε στην ιδιότητα Command την εντολή που θέλουμε να εκτελεστεί.
Υποστηρίζονται οι παρακάτω εντολές:
Command | Description |
Open | Opens a device using the MCI_OPEN command. |
Close | Closes a device using the MCI_CLOSE command. |
Play | Plays a device using the MCI_PLAY command. |
Pause | Pauses playing or recording using the MCI_PLAY command. If executed while the device is paused, tries to resume playing or recording using the MCI_RESUME command. |
Stop | Stops playing or recording using the MCI_STOP command. |
Back | Steps backward using the MCI_STEP command. |
Step | Steps forward using the MCI_STEP command. |
Prev | Goes to the beginning of the current track using the Seek command. If executed within three seconds of the previous Prev command, goes to the beginning of the previous track or to the beginning of the first track if at the first track. |
Next | Goes to the beginning of the next track (if at last track, goes to beginning of last track) using the Seek command. |
Seek | If not playing, seeks a position using the MCI_SEEK command. If playing, continues playing from the given position using the MCI_PLAY command. |
Record | Records using the MCI_RECORD command. |
Eject | Ejects media using the MCI_SET command. |
Sound | Plays a sound using the MCI_SOUND command. |
Save | Saves an open file using the MCI_SAVE command. |
- Μπορούμε τέλος να επιτρέψουμε στο χρήστη να χρησιμοποιήσει τα πλήκτρα
ελέγχου ή να προσθέσουμε δικό μας κώδικα σε κάθε πλήκτρο.
Κάθε πλήκτρο έχει μια καθορισμένη λειτουργία ή μπορεί να καλέσει και μια
συνάρτηση με βάση το όνομα του πλήκτρου.
Τα πλήκτρα έχουν τα παρακάτω ονόματα:
- Prev
- Next
- Play
- Pause
- Back
- Step
- Stop
- Record
- Eject
Αντίστοιχα μπορούμε να ενεργοποιήσουμε ή να απενεργοποιήσουμε συγκεκριμένα
πλήκτρα ανάλογα με την εφαρμογή μας.
Παράδειγμα (αφού προσθέσουμε ένα όργανο με όνομα mcictrl):
Private Sub Form_Load()
mcictrl.Notify = False
mcictrl.Shareable = False
mcictrl.DeviceType = "AVIVideo"
mcictrl.filename = "C:\Program Files\Microsoft Office\Clipart\MMedia\globe.AVI"
mcictrl.Command = "Open"
mcictrl.Wait = True
mcictrl.Command = "Play"
mcictrl.Command = "Close"
mcictrl.filename = "C:\Program Files\Microsoft Office\Clipart\MMedia\sonata8.wav"
mcictrl.Command = "Open"
mcictrl.Wait = True
mcictrl.Command = "Play"
mcictrl.Wait = True
mcictrl.Command = "Close"
End Sub
Γραφικές παραστάσεις
Η σχεδίαση τυποποιημένων γραφικών παραστάσεων από αριθμητικά δεδομένα
γίνεται στη Visual Basic το όργανο Chart
(το προσθέτουμε ως Microsoft Chart Control από την επιλογή Project - Components).
Το όργανο εμφανίζεται με την παρακάτω μορφή:
Για να χρησιμοποιήσουμε το όργανο αυτό ακολουθούμε τα παρακάτω βήματα:
- Θέτουμε την ιδιότητα chartType σύμφωνα με το είδος του γραφήματος
που θέλουμε να σχεδιάσουμε.
Υποστηρίζονται οι παρακάτω σταθερές για τους αντίστοιχους τύπους γραφημάτων:
Constant | Description |
VtChChartType3dBar | 3D Bar |
VtChChartType2dBar | 2D Bar |
VtChChartType3dLine | 3D Line |
VtChChartType2dLine | 2D Line |
VtChChartType3dArea | 3D Area |
VtChChartType2dArea | 2D Area |
VtChChartType3dStep | 3D Step |
VtChChartType2dStep | 2D Step |
VtChChartType3dCombination | 3D Combination |
VtChChartType2dCombination | 2D Combination |
VtChChartType2dPie | 2D Pie |
VtChChartType2dXY | 2D XY |
- Θέτουμε την ιδιότητα columnCount στον αριθμό στηλών των δεδομένων που θέλουμε να εμφανίσουμε.
- Θέτουμε την ιδιότητα rowCount στον αριθμό στηλών των δεδομένων που θέλουμε να εμφανίσουμε.
- Για κάθε τιμή που περιέχεται στο γράφημα θέτουμε τις ιδιότητες
Row και Column στις συντεταγμένες της αντίστοιχης τιμής και στη
συνέχεια την ιδιότητα Data στην τιμή που αντιστοιχεί στις συντεταγμένες εκείνες.
- Θέτουμε άλλες ιδιότητες για να αλλάξουμε τον τρόπο εμφάνισης του
γραφήματος.
Μερικές από τις ιδιότητες αυτές είναι οι AllowDithering,
BorderStyle, Chart3d, Backdrop, ColumnLabel, Legend, Stacking, TitleText.
- Μερικές φορές για να αυξήσουμε την ταχύτητα του εμφάνισης των στοιχείων
κάνουμε το όργανο αρχικά αόρατο με την ιδιότητα Visible και το εμφανίζουμε μόνο
όταν θέσουμε τιμές σε όλα τα στοιχεία.
- Μπορούμε να μεταφέρουμε δεδομένα από ένα τμήμα του γραφήματος σε άλλο
με τις μεθόδους SelectPart, EditCopy, EditPaste.
- Μπορούμε να συνδέσουμε ένα γράφημα με δεδομένα σε έναν πίνακα ή
σε μια βάση δεδομένων με την ιδιότητα DataGrid.
Παράδειγμα (αφού προσθέσουμε ένα όργανο με όνομα MSChart1):
Private Sub Command1_Click()
With Form1.MSChart1
' Displays a 3d chart with 8 columns and 8 rows
.chartType = VtChChartType3dArea
.ColumnCount = 8
.ShowLegend = False
.RowCount = 8
For Column = 1 To 8
For Row = 1 To 8
.Column = Column
.Row = Row
.Data = Row * 10 + Column * 3 + Rnd * 40
Next Row
Next Column
End With
End Sub
Εμφανίζει το παρακάτω γράφημα:
Πρόσβαση σε αρχεία κειμένου
Για να δημιουργήσουμε ένα αρχείο (file)
με κείμενο από τη Visual Basic ακολουθούμε την παρακάτω διαδικασία:
- Συσχετίζουμε το αρχείο με έναν ακέραιο αριθμό με τον οποίο θα αναφερόμαστε
στο αρχείο αυτό με την εντολή open
open "names.txt" for output as #1
- Γράφουμε στο αρχείο με την εντολή print # αν το αρχείο θα διαβαστεί
από ανθρώπους
print #1, Name, Number
- Γράφουμε στο αρχείο με την εντολή write # αν το αρχείο θα διαβαστεί
από άλλο πρόγραμμα
write #1, Name, Number
- Όταν γράψουμε όλα τα στοιχεία που θέλουμε στο αρχείο, διακόπτουμε το
συσχετισμό με την εντολή close
close #1
Παράδειγμα:
open "numbers.txt" for output as #1
for i = 1 to 10
write #1, i, string(i, ".")
next i
close #1
Για να διαβάσουμε αρχεία με κείμενο ακολουθούμε την παρακάτω διαδικασία:
- Συσχετίζουμε το αρχείο με έναν ακέραιο αριθμό με τον οποίο θα αναφερόμαστε
στο αρχείο αυτό με την εντολή open
open "names.txt" for input as #1
- Διαβάζουμε από το αρχείο με την εντολή input #
input #1, Name, Number
- Ελέγχουμε αν το αρχείο έχει άλλα στοιχεία με τη συνάρτηση eof
- Όταν διαβάσουμε όλα τα στοιχεία που θέλουμε στο αρχείο, διακόπτουμε το
συσχετισμό με την εντολή close
close #1
Παράδειγμα:
open "numbers.txt" for input as #1
do while not eof(1)
input #1, num, s
msgbox str(num) + s
loop
close #1
- Σε μεγάλα προγράμματα μπορούμε να αφήνουμε το σύστημα να βρίσκει
ακέραιους αριθμούς με την εντολή FreeFile της οποίας το αποτέλεσμα αναθέτουμε
σε μια μεταβλητή.
- Αντί για output μπορούμε να ανοίξουμε ένα αρχείο σε τρόπο εγγραφής
append για να προσθέσουμε στοιχεία σε ένα υπάρχον αρχείο.
- Κάθε εγγραφή (record) παράγει μια νέα γραμμή.
Αν θέλουμε να ετοιμάσουμε την εγγραφή με πολλαπλά print μπορούμε να
τερματίσουμε το print με , για να ακολουθήσει
άλλο πεδίο (field) ή με ; για να συνεχίσει το προηγούμενο
πεδίο.
Πρόσβαση σε δυαδικά αρχεία
Εκτός από τη μορφή κειμένου μπορούμε να αποθηκεύσουμε στοιχεία και στη
μορφή που φυλάσσονται στη μνήμη του υπολογιστή.
Τα πλεονεκτήματα του τρόπου αυτού φύλαξης είναι:
- Ακρίβεια μια και δε μετατρέπονται τα στοιχεία από και σε κείμενο.
- Ταχύτητα.
- Εναλλαγή εγγραφής και ανάγνωσης στο ίδιο αρχείο.
- Τυχαία προσπέλαση (random access) στις
εγγραφές.
Η δομή των δυαδικών αρχείων ορίζεται τυπικά με έναν τύπο οριζόμενο από το
χρήστη, ενώ πρόσβαση στα στοιχεία έχουμε με τις εντολές Get και Put.
Παράδειγμα:
Type Record
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record
Open "TESTFILE.dat" For Random As #1 Len = Len(MyRecord)
Put #1, 5, MyRecord
Get #1, 5, MyRecord
Close #1
- Το δεύτερο όρισμα των Get/Put είναι ο αριθμός της εγγραφής.
Αν αυτό παραληφθεί οι εγραφές διαβάζονται και γράφονται σειριακά.
- Μπορούμε να ανακτήσουμε και να θέσουμε τη θέση ανάγνωσης
ή εγγραφής αρχείου με τη συνάρτηση / εντολή seek.
Χειρισμός λαθών
- Μερικές φορές θέλουμε να αποφύγουμε ο κώδικας που γράφουμε να διακόπτεται
από λάθη.
- Για το σκοπό αυτό μπορούμε να απενεργοποιήσουμε τον έλεγχο λαθών με την
εντολή on error resume next και να ελέγχουμε να λάθη μετά από κάθε εντολή
που μπορεί να τα δημιουργήσει με βάση τη μεταβλητή err.
- Όταν ολοκληρώσουμε το τμήμα του κώδικα που θέλουμε να ελέγχουμε τα λάθη
επαναφέρουμε τον τρόπο ελέγχου με την εντολή on error goto 0.
Παράδειγμα:
on error resume next
open "names.txt" for input as #1
if err <> 0 then
msgbox "names.txt: " + err.description
exit sub
end if
on error goto 0
Σύνδεση με άλλες εφαρμογές
Η Visual Basic επιτρέπει τη σύνδεση του προγράμματός μας με άλλες
εφαρμογές όπως το Word και το Excel.
Με τον τρόπο αυτό μπορούμε να διαβάσουμε ή να δημιουργήσουμε σύνθετα
έγγραφα ή να έχουμε πρόσβαση σε δυνατότητες των προγραμμάτων αυτών
(π.χ στον έλεγχο ορθογραφίας).
Βασικό στοιχείο για τον έλεγχο της εφαρμογής είναι να ενεργοποιήσουμε
στο πρόγραμμά μας την αντίστοιχη βιβλιοθήκη αντικειμένων
από την επιλογή Project - References.
Τεκμηρίωση για κάθε βιβλιοθήκη αντικειμένων βρίσκουμε συχνά αν τοποθετήσουμε
το δρομέα πάνω στη βασική λέξη της βιβλιοθήκης μέσα στο πρόγραμμά μας
(π.χ. Word, ή Excel) και ζητήσουμε βοήθεια με το πλήκτρο F1.
Σύνδεση με το Excel
Η σύνδεση με το Excel μας επιτρέπει να δημιουργήσουμε αυτόματα
φύλλα εργασίας ή να διαβάσουμε υπάρχοντα.
Η πρόσβαση στο Excel γίνεται μέσα από το αντικείμενο Excel.Application
και τις κλάσεις που το αποτελούν.
Ο παρακάτω πίνακας των βασικών κλάσεων προέρχεται από την τεκμηρίωση
που παρέχει η Microsoft:
Στο παράδειγμα που ακολουθεί δημιουργούμε ένα νέο φύλλο εργασίας,
γεμίζουμε ορισμένα κελιά από έναν πίνακα και άλλα με τυχαίες
τιμές και δημιουργούμε ένα γράφημα από τις τιμές αυτές.
Sub main()
Dim xl As Excel.Application
Dim ws As Excel.Worksheet
Dim wb As Excel.Workbook
Dim regions(4, 1) As String
regions(0, 0) = "Europe"
regions(1, 0) = "Americas"
regions(2, 0) = "Asia"
regions(3, 0) = "Africa"
Set xl = New Excel.Application
xl.Visible = True
Set wb = xl.Workbooks.Add
Set ws = wb.Worksheets(1)
ws.Range("A2:A5") = regions
For i = 2 To 5
ws.Range("B" & Format(i)).Value = i * 110 * Rnd
Next i
Dim chart As Excel.chart
Dim rn As Range
Set rn = ws.Range("A1:B5")
Set chart = wb.Charts.Add
chart.ChartWizard rn, xl3DPie, 7, xlColumns, 1, 1, 1, "Sales by area", "Areas", "Sales"
End Sub
Σύνδεση με το Word
Η σύνδεση με το Word μας επιτρέπει να δημιουργήσουμε αυτόματα
σύνθετα έγγραφα ή να διαβάσουμε και να επεξεργαστούμε υπάρχοντα.
Η πρόσβαση στο Word γίνεται μέσα από το αντικείμενο Word.Application
και τις κλάσεις που το αποτελούν.
Ο παρακάτω πίνακας των βασικών κλάσεων προέρχεται από την τεκμηρίωση
που παρέχει η Microsoft:
Στο παράδειγμα που ακολουθεί δημιουργούμε αυτόματα ένα νέο έγγραφο
παραγγελίας:
Sub main()
Dim wd As Word.Application
Dim doc As Word.Document
Set wd = New Word.Application
wd.Visible = True
Set doc = Word.Documents.Add
' Insert title date and items
Dim r As Word.Range
Set r = doc.Paragraphs(1).Range
r.InsertAfter ("Replacement Part Order")
r.InsertParagraphAfter
r.InsertAfter ("Date:" & Date)
r.InsertParagraphAfter
r.InsertAfter ("Please dispatch the following parts:")
r.InsertParagraphAfter
r.InsertParagraphAfter
' 7 random parts
For i = 1 To 7
r.InsertAfter Str(i) + ". Part code " + Format(Int(Rnd * 10000 + 1), "000000") + " qty " + Str(Int(Rnd * 100 + 1))
r.InsertParagraphAfter
Next i
r.Paragraphs(1).Alignment = wdAlignParagraphCenter
' Format title
Dim pr As Word.Range
Set r = doc.Paragraphs(1).Range
Set pr = doc.Range(r.Start, r.End)
pr.Font.Bold = True
pr.Font.Size = 14
pr.Font.Name = "Arial"
End Sub
Μεταγλώττιση
- Η μεταγλώττιση του προγράμματος μας επιτρέπει την εκτέλεσή του έξω από
το περιβάλλον της Visual Basic.
- Κατά τη μεταγλώττιση δημιουργείται ένα αρχείο με το
επίθεμα (extension) .exe το οποίο μπορούμε να εκτελέσουμε
αυτόματα από το περιβάλλον των Windows.
- Για να δημιουργήσουμε το αρχείο αυτό εκτελούμε την εντολή "File - Make .exe".
- Η μεταγλώττιση του προγράμματος μπορεί να αυξήσει την ταχύτητα
εκτέλεσης και δεν επιτρέπει σε τρίτους να έχουν πρόσβαση στον πλήρη
πηγαίο κώδικα της εφαρμογής μας.
- Προσοχή: η μεταγλωττισμένη εφαρμογή μπορεί να εκτελεστεί μόνο
σε υπολογιστές που έχουν εγκαταστημένα τα βοηθητικά αρχεία της
Visual Basic (ως Visual Basic ή με την εγκατάσταση κάποιας άλλης εφαρμογής).
Εγκατάσταση προγραμμάτων
- Η διαδικασία δημιουργίας εγκατάστασης ενός προγράμματος μας
επιτρέπει την εύκολη διανομή του σε τρίτους σε έναν αποθηκευτικό
φορέα ή μέσα από το δίκτυο.
- Η διαδικασία αυτή γίνεται (αφού αποθηκεύσουμε το πρόγραμμά μας)
μέσα από την ξεχωριστή εφαρμογή Application Setup Wizard.
Άσκηση
Προγραμματισμός με εξαρτήματα
- Να προσθέσετε στο πρόγραμμα υπολογισμού της συνολικής απόδοσης
τη δυνατότητα δημιουργίας αναφοράς σε κείμενο του Word ή την απεικόνιση
του κεφαλαίου με βάση το χρόνο σε μορφή γραφήματος.
- Δημιουργήστε πρόγραμμα εγκατάστασης για την εφαρμογή σας.
Βιβλιογραφία
- David Boctor.
Microsoft Office 2000 Visual Basic Fundamentals.
Microsoft Press, Redmond, WA, USA, 1999.
- Desmond Francis
D' Souza and Alan Cameron Wills.
Objects, Components, and Frameworks With UML : The Catalysis
Approach.
Addison-Wesley, 1998.
- Scott M. Lewandowski.
Frameworks for component-based client/server computing.
ACM Computing Surveys, 30(1):3–27, March 1998.
- Peter M. Maurer.
Components: What if they gave a revolution and nobody came.
IEEE Software, 33(6):28–34, June 2000.
- Oscar Nierstrasz,
Simon Gibbs, and Dennis Tsichritzis.
Component-oriented software development.
Communications of the ACM, 35(9):160–165, September 1992.
- Diomidis Spinellis
and Konstantinos Raptis.
Component mining: A process and its pattern language (http://softlab.icsd.aegean.gr/~dspin/pubs/jrnl/2000-IST-Components/html/comp.html).
Information and Software Technology, 42(9):609–617, June 2000.
- Diomidis Spinellis.
Explore, excogitate, exploit: Component mining (http://softlab.icsd.aegean.gr/~dspin/pubs/jrnl/1999-Computer-Components/html/comp.html).
IEEE Computer, 32(9):114–116, September 1999.
- Clemens Szyperski.
Component Software: Behind Object-Oriented Programming.
Addison-Wesley, 1998.
- Jeffrey M. Voas.
The challenges of using COTS software in component-based development.
Computer, 31(6):44–45, June 1998.
- Alan Cameron Wills.
Designing component
kits and architectures.
In L. Barroca, J. Hall, and P. Hall, editors, Software Architectures:
Advances and Applications. Springer Verlag, 1999.
Εργασία του μαθήματος
Περιγραφή της εργασίας
Αντικείμενο της εργασίας είναι η υλοποίηση μιας μη απλοϊκής εφαρμογής
σε Visual Basic.
Η υλοποίηση πρέπει να γίνει στα πλαίσια του μαθήματος και περιλαμβάνει τα παρακάτω
στάδια:
Η παρουσίαση θα γίνει στα πλαίσια του μαθήματος και θα είναι διάρκειας 10
λεπτών.
Θα πρέπει να καλυφθούν τα παρακάτω:
- Απαιτήσεις της εφαρμογής
- Σχεδιασμός
- Βασικά στοιχεία της υλοποίησης
- Ενδιαφέροντα σημεία που παρουσίασαν δυσκολίες
- Συμπεράσματα, διδάγματα, βελτιώσεις
Η βαθμολογία θα γίνει με βάση την παρουσίαση και μια εκτύπωση του πηγαίου
κώδικα της εργασίας.
Θα ληφθούν υπόψη η πρωτοτυπία του θέματος,
η φιλικότητα διεπαφής της εφαρμογής,
και το πόσο ευανάγνωστος είναι ο κώδικας.
Θέματα εργασιών
Όνομα |
Θέμα |
Γνώσεις |
ΠΑΠΑΓΙΑΝΝΗΣ ΓΙΩΡΓΟΣ |
Πρόγραμμα για τον έλεγχο μετατροπέα αναλογικού σε ψηφιακό
(A/D converter) |
7 (κυρίως σε C για έλεγχο hardware) |
Ανδρέας Ιωαννίδης |
Κάποια μαθηματική εφαρμογή (ενδεχομένως με γραφικά fractal) |
6 |
Αγγελακόπουλος Δημήτριος |
Τηλεφωνικός κατάλογος |
2 |
ΧΑΤΖΗΑΝΤΩΝΙΟΥ ΜΑΡΙΑΝΘΗ |
Κάποιο παιχνίδι ή κάποιο screensaver |
1 |
Γιάννης Θεοδώρου |
Τηλεφωνική ατζέντα |
1 |
Πετρόπουλος Αθανάσιος |
Απεικόνιση σημείων από 3D laser scanner σε επιφάνεια |
6 |
ΣΕΡΔΑΡΗ ΒΑΣΙΛΙΚΗ |
ΤΙΜΟΚΑΤΑΛΟΓΟΣ ΠΡΟΙΟΝΤΩΝ - ΤΙΜΟΛΟΓΙΑ |
4 |
Χριστίνα Κριτσιδήμα |
Δημιουργία Calendar, Phonebook, Reminder |
0 |
Αγνή Σκαπέρδα |
Σχεδιασμός barcode προϊόντων |
1 |
Έλλη Καραγιάννη |
Οροσκόπιο |
2 |
Νίκη Δανδόλου |
Υπολογισμός γωνιών με βάση συντεταγμένες |
1 |
Γεώργιος Πατρής |
Βάση με αρχεία MP3 |
1 |
Τζαβάρας Κωνσταντίνος |
Πρόγραμμα Στατιστικής Επεξεργασίας Μετρήσεων Ποιοτικού
Ελέγχου |
3 |
Tsiampa Athanasia |
A program which will convert Grd to Euro in a database chosen by the user
|
4 |
Ευγενία Τριανταφυλλοπούλου |
Το πρόγραμμα θα λύνει μια δευτεροβάθμια εξίσωση. Συγκεκριμένα θα ζητάει τους συντελεστές α, β, γ και θα βρίσκει τα χ1
και χ2. Στη συνέχεια δε θα εμφανίζει τις λύσεις, αλλά θα περιμένει από εμάς να εισάγουμε τις δικές μας, ελέγχοντας αν
έχουμε λύσει σωστά την εξίσωση και τυπώνοντας ανάλογα μηνύματα.
|
4 |
Λύσεις ασκήσεων
'Ασκηση 0
Sub main()
Dim Ammt As Double
Ammt = InputBox("Δώστε την αρχική τιμή")
MsgBox "Η τιμή χωρίς το ΦΠΑ είναι " + Str(Ammt / 1.18)
End Sub
'Ασκηση 1
Sub main()
Dim Ammt As Double
Dim nyears As Integer
Dim interest As Double
Dim i As Integer
Ammt = InputBox("Δώστε το αρxικό ποσό")
nyears = InputBox("Δώστε τον αριθμό των περιόδων")
i = 0
Do While i < nyears
interest = InputBox("Δώστε επιτόκιο για την περίοδο " + str(i + 1))
Ammt = Ammt * (1 + interest / 100)
i = i + 1
Loop
MsgBox "Το τελικό ποσό είναι " + Str(Ammt)
End Sub