Το προφίλ μας στο Google Plus
0

Ανάπτυξη εφαρμογών σε C# για το .NET [μέρος 7ο]

Φτάσαμε αισίως στο 7ο μέρος της σειράς και σ’ αυτό το άρθρο θα ασχοληθούμε με το περιβάλλον των Windows 7. Η συγκεκριμένη έκδοση θεωρείται από πολλούς ως η πιο στιβαρή του δημοφιλούς λειτουργικού. Στο παρόν άρθρο εκπληρώνουμε την αρχική μας υπόσχεση και περνάμε, επιτέλους, στο χώρο των παραθυρικών εφαρμογών.

Όταν ξεκινήσαμε αυτή τη σειρά άρθρων στόχος μας ήταν η εκμάθηση της C# με απώτερο σκοπό την εύκολη δημιουργία παραθυρικών εφαρμογών. Μπορεί τα ζητήματα που έχουμε μελετήσει ως τώρα να υποδήλωναν μια σιωπηρή αλλαγή ρότας, αλλά εμείς δεν είμαστε από εκείνους που αθετούν τις υποσχέσεις τους. Η κατασκευή ενός “παραθυρικού” προγράμματος αποτελεί εύκολη υπόθεση. Ωστόσο, η ικανότητα να εκμεταλλευτούμε στο έπακρο αυτή την ευκολία, καθώς κι όλα όσα προσφέρει η C#, δεν είναι δεδομένη. Όσα είδαμε ως τώρα, αποτελούσαν τα πρώτα βήματα ενός σχεδίου για να προλειάνουμε το έδαφος και να δημιουργήσουμε όσο το δυνατόν πιο γερά γνωστικά θεμέλια.

Έφτασε λοιπόν η στιγμή της μετάβασης από την κονσόλα στο παραθυρικό περιβάλλον. Στο μονοπάτι που ξεδιπλώνεται μπροστά μας θα έχουμε σύμμαχο και φίλο το ελαφρύ IDE SharpDevelop, που είναι και προϊόν Ανοιχτού Κώδικα. Αυτό δεν αποτελεί πρόβλημα για τους φίλους που θα ήθελαν να εξοικειωθούν με τα θηριώδη MS Visual Studio και Xamarin Studio. Οι διαφορές που παρουσιάζουν τα διάφορα IDE στον τρόπο ανάπτυξης είναι αμυδρές.

Hello World, à la Desktop!
Αφού ανοίξουμε το αγαπημένο μας IDE, μεταβαίνουμε στο κεντρικό μενού κι ακολουθούμε τη διαδρομή File –> New –> Solution. Στο γνωστό παράθυρο που εμφανίζεται για την επιλογή του τύπου του Project, κάνουμε κλικ στο πολυπόθητο Windows Application. Δίνουμε ένα χαρακτηριστικό όνομα (εμείς επιλέξαμε το HelloDesktopWorld) και πατάμε το κουμπί Create. Έτσι επιστρέφουμε στο περιβάλλον εργασίας του IDE, όπου έχουν δημιουργηθεί πλέον τα βασικά τμήματα της εφαρμογής. Στη δενδροειδή προβολή των στοιχείων του Project, εκτός από το συνηθισμένο αρχείο Program.cs, θα βρούμε δύο ακόμα: το MainForm.cs και το MainForm.Designer.cs, που φαίνεται να βρίσκεται ιεραρχικά “κάτω” από το προηγούμενο.

Η δημιουργία μιας παραθυρικής εφαρμογής από το περιβάλλον του SharpDevelop είναι πολύ απλή. Αρκεί να επιλέξουμε το σχετικό είδος για το νέο Solution.

Αν ανοίξουμε το Program.cs δεν θα βρούμε τον κώδικα που συναντούσαμε ως τώρα. Στην περίπτωση μιας παραθυρικής εφαρμογής, βλέπετε, το Program.cs είναι υπεύθυνο για την προβολή του κεντρικού παράθυρου. Η λειτουργικότητα και η μορφή αυτού του παραθύρου –της λεγόμενης κύριας φόρμας–, καθορίζονται στα άλλα αρχεία. Το MainForm.cs περιέχει τον κώδικα που εκτελείται όταν ο χρήστης αλληλεπιδρά με τη φόρμα (π.χ., όταν πατάει κάποιο κουμπί). Το MainForm.Designer.cs περιγράφει τα στοιχεία που απαρτίζουν τη φόρμα (κουμπιά, μενού, πλαίσια κειμένου κ.λπ.), τη θέση τους, το μέγεθος, το χρώμα κ.ά.

Σχεδίαση με αντικείμενα
Σε αντίθεση με το μυστήριο που κάλυπτε τη σχεδίαση των παραθύρων στη Visual Basic, στο .NET τα πράγματα είναι ξεκάθαρα. Τα διάφορα στοιχεία του περιβάλλοντος σχηματίζονται με τη βοήθεια των αντίστοιχων αντικειμένων, που βρίσκονται στο χώρο ονομάτων System.Windows.Forms. Εν ολίγοις, τα συγκεκριμένα αντικείμενα θυμίζουν τα wxWidgets που είχε παρουσιάσει ο εκλεκτός φίλος και συνάδελφος Sonic, στα άρθρα του για την Python. Μήπως σας δυσαρεστεί η ιδέα του να σχηματίσετε το περιβάλλον μιας εφαρμογής, αρχικοποιώντας χειροκίνητα τα απαιτούμενα αντικείμενα; Δεν υπάρχει λόγος να χαλάτε τη διάθεσή σας! Το βαρετό κομμάτι του κώδικα, που περιγράφει τα διάφορα στοιχεία του παραθύρου, συντάσσεται αυτόματα από το εργαλείο σχεδίασης του SharpDevelop. Ελάχιστες φορές θα χρειαστεί να επέμβουμε σε αυτό το τμήμα του κώδικα και κατ’ επέκταση στο αρχείο MainForm.Designer.cs.

Το περιβάλλον σχεδίασης του SharpDevelop. Στο κέντρο βρίσκεται το παράθυρο της υπερδιαστημικής εφαρμογής που αναπτύσσουμε. Στα δεξιά εμφανίζονται οι ιδιότητες του εκάστοτε επιλεγμένου αντικειμένου, ενώ στα αριστερά βλέπουμε μια εργαλειοθήκη με όλα τα διαθέσιμα controls (προς θεού, όχι capital) που μπορούμε να εισάγουμε στη φόρμα.

Εδώ θα ήταν χρήσιμο να αναφέρουμε ότι η ανάπτυξη των παραθυρικών εφαρμογών ακολουθεί τη λογική του event driven programming, όπως ονομάζεται στα Λεπτόποδα της Χίου. Τα προγράμματα αυτού του είδους περιμένουν να προκύψει κάποιο “συμβάν” και τότε εκτελούν την αντίστοιχη ενέργεια. Τα συμβάντα προκύπτουν ως αποτέλεσμα των ενεργειών του χρήστη (π.χ. το πάτημα ενός κουμπιού), αλλά μπορούν να προκύψουν και σε άλλες περιπτώσεις (π.χ. όταν ολοκληρώνεται μια εργασία που εξελισσόταν στο υπόβαθρο). Θα μπορούσαμε να περιγράψουμε τα συμβάντα σαν ένα είδος interrupt, που υλοποιούνται αποκλειστικά σε επίπεδο software. Η θεωρία όμως είναι ατελείωτη κι ορισμένες φορές λειτουργεί ως κινούμενη άμμος: αν δεν προσέξεις, σε απορροφά. Η πρώτη μας παραθυρική εφαρμογή αποτελεί ένα κλασικό “Hello World”. Ας αναλάβουμε δράση.

Κατασκευή της φόρμας
Ανοίγοντας το αρχείο MainForm.cs, στο κάτω μέρος του editor, παρατηρούμε ότι εμφανίζονται πλέον δύο καρτέλες. Η προεπιλεγμένη καρτέλα ονομάζεται Source και, όπως δηλώνει το όνομά της, περιέχει τον κώδικα για τις διάφορες λειτουργίες του προγράμματός μας. Η άλλη καρτέλα ονομάζεται Design και περιλαμβάνει ένα περιβάλλον σχεδίασης. Μόλις μεταβούμε στη δεύτερη καρτέλα, θα εμφανιστεί μια μικρή κενή φόρμα που έχει δημιουργηθεί αυτόματα από το IDE. Για να τροποποιήσουμε το μέγεθος της φόρμας μπορούμε να χρησιμοποιήσουμε το ποντίκι και να “τραβήξουμε” τη δεξιά ή την κάτω πλευρά της. Αυτός ο τρόπος είναι εύκολος και γρήγορος, αλλά δεν προσφέρει ακρίβεια. Αν θέλουμε να επιβάλλουμε συγκεκριμένες διαστάσεις, πρέπει να καταφύγουμε στο πλαίσιο ιδιοτήτων που βρίσκεται στην καρτέλα Properties, στο δεξί τμήμα του παραθύρου του SharpDevelop. Εκεί θα βρούμε μια πληθώρα ιδιοτήτων που μπορούμε να τροποποιήσουμε ελεύθερα. Για να καθορίσουμε το μέγεθος της φόρμας με ακρίβεια, αρκεί να επέμβουμε στις τιμές των ιδιοτήτων Width και Height, που βρίσκονται στην ομάδα Size. Σε αυτό το σημείο θα μπορούσαμε να περιγράψουμε τις αμέτρητες ιδιότητες που μπορεί κανείς να πειράξει, αλλά έτσι θα σας στερούσαμε τη χαρά να τις ανακαλύψετε μόνοι σας. Αυτό που προτείνουμε, λοιπόν, είναι να πειραματιστείτε άφοβα με όλες. Έχετε υπόψη ότι καθώς η φόρμα δεν περιλαμβάνει άλλα στοιχεία –τουλάχιστον για την ώρα–, οι ιδιότητες αφορούν στην ίδια τη φόρμα και μόνο.

Το επόμενο βήμα είναι να εισάγουμε τα αντικείμενα που θέλουμε να περιλαμβάνει η φόρμα. Για τις ανάγκες της εφαρμογής μας –τουλάχιστον έτσι όπως την έχουμε φανταστεί– θα χρειαστούμε ένα κουμπάκι. Για να προσθέσουμε οποιοδήποτε αντικείμενο, επιλέγουμε την καρτέλα Tools που φαίνεται στο κάτω αριστερό άκρο του παραθύρου του SharpDevelop. Η εν λόγω καρτέλα περιλαμβάνει μια λίστα με τα διάφορα είδη αντικειμένων. Τα κουμπιά βρίσκονται στην ομάδα “Windows Forms”. Μόλις κάνουμε κλικ στο όνομα της συγκεκριμένης ομάδας εμφανίζονται όλα τα στοιχεία γραφικών που μπορούμε να εισαγάγουμε σε μια φόρμα φόρμα. Επιλέγουμε το Button και στη συνέχει κάνουμε κλικ κάπου μέσα στη φόρμα. Με αυτόν τον τρόπο θα δημιουργηθεί ένα κουμπί στο σημείο όπου κάναμε κλικ. Κατά τα γνωστά, μπορούμε να μεταβάλλουμε τις διαστάσεις του κουμπιού με το ποντίκι. Κάνοντας ένα κλικ στο κουμπί, θα παρατηρήσετε ότι η περιοχή στα δεξιά του SharpDevelop εμφανίζει ένα νέο σετ ιδιοτήτων, οι οποίες αφορούν αποκλειστικά στο συγκεκριμένο αντικείμενο. Εδώ μπορείτε και πάλι να πειραματιστείτε ελεύθερα. Εμείς αλλάξαμε το κείμενο που εμφανίζεται πάνω στο κουμπί σε “Say Hello”, τροποποιώντας την ιδιότητα Text. Επιπρόσθετα, αλλάξαμε το όνομα του αντικειμένου του κουμπιού από Button1 σε κάτι πιο περιγραφικό, όπως το ButtonSayHello. Αυτό γίνεται τροποποιώντας κατάλληλα την ιδιότητα Name. Παρεμπιπτόντως, η αλλαγή του ονόματος των διαφόρων αντικειμένων αποτελεί μια πολύ καλή πρακτική, που θα ήταν φρόνιμο να εντάξετε στον τρόπο εργασίας σας. Η χρήση των προεπιλεγμένων ονομάτων, ειδικά σε μια εφαρμογή που περιλαμβάνει αρκετά αντικείμενα της ίδιας κλάσης, προκαλεί μπερδέματα και τελικά καθιστά τον κώδικα δυσανάγνωστο. Μια πρακτική για την επιλογή ονομάτων, είναι να χρησιμοποιούμε ως πρόθεμα μια λέξη που να περιγράφει το είδος του αντικειμένου (π.χ., ButtonSayHello, TextBoxUserName κ.ο.κ.).

Αφού ολοκληρώσουμε το στήσιμο της φόρμας, μπορούμε να προχωρήσουμε στον κώδικα. Στο πρόγραμμά μας θέλουμε να εμφανίζει ένα παράθυρο μηνύματος (MessageBox) με τον κλασικό χαιρετισμό “Hello World”, κάθε φορά που ο χρήστης πατάει στο κουμπί “Say Hello”. Σε αυτό το σημείο θα μπορούσαμε να μεταβούμε στην καρτέλα Source, να ανοίξουμε το αρχείο MainForm.Designer.cs και να ορίσουμε μια μέθοδο που θα εκτελείται όταν γίνεται κλικ επάνω στο κουμπί. Προφανώς, στη συνέχεια θα έπρεπε να γράψουμε τον κώδικα της μεθόδου. Το SharpDevelop, όμως, προσφέρει μια ευκολία που συντομεύει αυτή τη διαδικασία. Αρκεί να κάνουμε δύο κλικ επάνω στο κουμπί μας. Το IDE θα δημιουργήσει αυτόματα την απαιτούμενη μέθοδο, θα την προσθέσει στο MainForm.Designer.cs και θα μας μεταφέρει στην καρτέλα Source, για να εισάγουμε τον κώδικα της μεθόδου. Εμείς κάναμε τα παραπάνω και πληκτρολογήσαμε την ακόλουθη γραμμή:

MessageBox.Show("Hello from the Desktop World!",
"A Message for you", MessageBoxButtons.OK, MessageBoxIcon.Information) ;

Όπως βλέπετε, ο κώδικας καλεί τη στατική μέθοδο Show του αντικειμένου MessageBox, που είναι υπεύθυνο για την εμφάνιση των ομώνυμων παραθύρων των Windows. Εκτός από την εμφάνιση του μηνύματος, η ίδια μέθοδος έχει τη δυνατότητα να επιστρέψει ένα αντικείμενο τύπου DialogResult με την απόκριση του χρήστη (το κουμπί που πάτησε). Στην περίπτωση του δικού μας προγράμματος, όμως, δεν μας ενδιαφέρει να χειριστούμε κάπως την απόκριση του χρήστη. Ακριβώς γι’ αυτό, αδιαφορούμε για το αντικείμενο που επιστρέφει η μέθοδος Show και δεν το αποθηκεύουμε σε κάποια μεταβλητή.

Η πρώτη παράμετρος που δώσαμε στη μέθοδο Show αποτελεί το κείμενο που θέλουμε να εμφανίζεται, ενώ η δεύτερη παράμετρος καθορίζει τον τίτλο του σχετικού παραθύρου. Σημειώστε ότι η δεύτερη παράμετρος, όπως και όλες όσες ακολουθούν, δεν είναι υποχρεωτική. Η τρίτη παράμετρος ορίζει τα κουμπιά που περιλαμβάνει το MessageBox. Για τα κουμπιά μπορούμε να χρησιμοποιήσουμε τα μέλη της απαρίθμησης (enumeration) ονόματι MessageBoxButtons. Τέλος, για τον καθορισμό του εικονιδίου που θα έχει το MessageBox, χρησιμοποιούμε τα μέλη της απαρίθμησης MessageBoxIcon.

Μετά τη συγγραφή του σπουδαίου μας κώδικα, μπορούμε να αποθηκεύσουμε το project και να προχωρήσουμε σε μια δοκιμαστική εκτέλεση του προγράμματος. Πιστεύουμε ότι αν και πρόκειται για κάτι εξαιρετικά απλό, θα το χαρείτε.

Παιχνίδι νεύρων
Τι θα λέγατε αν καθιστούσαμε το πρόγραμμά μας λίγο εκνευριστικό; Κάθε φορά που ο χρήστης θα προσπαθεί να κλείσει την εφαρμογή, πατώντας στο κόκκινο κουμπί με το X, θα εμφανίζεται ένα παράθυρο που θα τον ρωτάει αν όντως επιθυμεί τον τερματισμό. Εδώ που τα λέμε, αυτή η λειτουργία ενσωματώνεται σε αρκετά προγράμματα και πολύ συχνά αποδεικνύεται σωτήρια, για τα τυχόν δεδομένα που δεν έχουμε αποθηκεύσει. Βέβαια, στην περίπτωση του δικού μας προγράμματος, αυτή η ερώτηση θα είναι απλά εκνευριστική — τελεία.

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

DialogResult result =
MessageBox.Show("Θέλετε σίγουρα να τερματίσετε τη λειτουργία αυτής της υπέροχης εφαρμογής;",
"Πού πας;", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) ;

if(result == DialogResult.No) {
	e.Cancel = true ;
}

Όπως βλέπετε χρησιμοποιούμε και πάλι ένα MessageBox. Αυτή τη φορά, όμως, θέλουμε να τσεκάρουμε την απόκριση του χρήστη και γι’ αυτό αποθηκεύουμε το αντικείμενο που επιστρέφει η μέθοδος Show(), στη μεταβλητή result. Παρατηρείστε ότι από την απαρίθμηση MessageBoxButtons έχουμε επιλέξει το μέλος ονόματι YesNo. Αυτό το μέλος αντιστοιχεί σε δύο κουμπιά με τα σχετικά ονόματα (ένα Yes κι ένα No). Επιπρόσθετα, μετά τον καθορισμό του επιθυμητού εικονιδίου, δηλώσαμε και την προεπιλεγμένη απάντηση. Αυτό επιτυγχάνεται με την τελευταία παράμετρο, όπου χρησιμοποιήσαμε την απαρίθμηση MessageBoxDefaultButton. Όπως βλέπετε επιλέξαμε ως προεπιλεγμένη απάντηση το δεύτερο κουμπί, που αντιστοιχεί στο No. Ο χρήστης θα πρέπει να το ξανασκεφτεί πριν κλείσει την εφαρμογή μας.

Στις επόμενες γραμμές ελέγχουμε την τιμή του αντικειμένου DialogResult, που λαμβάνουμε από τη μέθοδο Show(). Αν ο χρήστης έχει πατήσει το No (κι επειδή εμείς δεν είμαστε σαν ορισμένους πολιτικούς) θα σεβαστούμε την απόφασή του και το πρόγραμμα δεν θα τερματιστεί. Αυτό επιτυγχάνεται τροποποιώντας κατάλληλα την ιδιότητα του συμβάντος (event) που ονομάζεται Cancel.

Προσωπικός χαιρετισμός
Για να καλοπιάσουμε τους χρήστες της εφαρμογής –και πριν τους ωθήσουμε στην αγανάκτηση– αποφασίσαμε να μεταβάλλουμε το περιεχόμενο του χαιρετισμού. Σκεφτήκαμε ότι το μήνυμα θα γινόταν πιο φιλικό, αν περιλάμβανε το όνομα του χρήστη.

Μα γιατί κάποιος που επέλεξε τον τερματισμό της εφαρμογής, να επιθυμεί πραγματικά κάτι τέτοιο; Ας τον ρωτήσουμε, μην τυχόν και φύγει κατά λάθος από την υπέροχη εφαρμογή μας.

Για να πετύχουμε κάτι τέτοιο, χρειαζόμαστε δύο πρόσθετα στοιχεία: Ένα Label κι ένα TextBox. Όπως υποψιάζεστε, τα εν λόγω αντικείμενα εμφανίζονται στην περιοχή tools και στην ίδια ομάδα με τα κουμπιά (Windows Forms). Αφού προσθέσουμε τα δύο αντικείμενα και τα μετακινήσουμε στις επιθυμητές θέσεις, προχωράμε σε μια μικρή τροποποίηση των ονομάτων τους. Έτσι, αποδίδουμε στο αντικείμενο Label το όνομα LabelUsername και στο αντικείμενο TextBox το όνομα TextBoxUsername. Επιπρόσθετα, για να βοηθήσουμε το χρήστη να καταλάβει τι πρέπει να κάνει, αλλάζουμε την ιδιότητα Text του αντικειμένου Label σε “Όνομα χρήστη”. Μετά από αυτή την επέμβαση, πρέπει να τροποποιήσουμε τον κώδικα του προγράμματός μας ώστε να αξιοποιεί τη συμβολοσειρά που έχει εισάγει ο χρήστης στο TextBox. Ανοίγουμε λοιπόν την καρτέλα Source, μεταβαίνουμε στη μέθοδο ButtonSayHelloClick κι αφού διαγράψουμε τον κώδικα που είχαμε γράψει νωρίτερα, εισάγουμε τα εξής:

string name = textBoxUsername.Text ;
DateTime now = DateTime.Now ;
string greeting ;

if(now.Hour > 5 && now.Hour < 12){
	greeting = "καλημέρα" ;
}else if(now.Hour >= 12 && now.Hour <= 20){
	greeting = "καλησπέρα" ;
}else{
	greeting = "καλό βράδυ" ;
}

MessageBox.Show("Αγαπητέ " + name + ",\n" + greeting +
" από το περιβάλλον των παραθύρων!", "Ένα μήνυμα για 'σένα",
MessageBoxButtons.OK, MessageBoxIcon.Information) ;	

Στην πρώτη γραμμή λαμβάνουμε τη συμβολοσειρά που έδωσε ο χρήστης, από την ιδιότητα Text του αντικειμένου TextBoxUsername. Στη συνέχεια χρησιμοποιούμε την ιδιότητα Now του αντικειμένου DateTime (DateTime.Now), για να πάρουμε την τρέχουσα ημερομηνία και ώρα. Το αποτέλεσμα αποθηκεύεται σε ένα ομοειδές αντικείμενο (DateTime) με το όνομα now (προσοχή στη διάκριση πεζών και κεφαλαίων). Στις επόμενες γραμμές αξιοποιούμε την τιμή του αντικειμένου now και συγκεκριμένα την ιδιότητα Hour. Έτσι, επιλέγουμε τον χαιρετισμό που αρμόζει στην τρέχουσα ώρα και τον αποθηκεύουμε στη συμβολοσειρά string. Στο τέλος, αξιοποιούμε τα δεδομένα που έχουμε συλλέξει (όνομα χρήστη και χαιρετισμός) προκειμένου να δημιουργήσουμε ένα MessageBox με το νέο μήνυμα.

Ζήτημα οργάνωσης
Όλος ο κώδικας που εξετάσαμε βρισκόταν μέσα στις μεθόδους που χειρίζονται τα διάφορα συμβάντα. Αυτό μοιάζει απολύτως λογικό κι αναμενόμενο, αλλά πρέπει να τονίσουμε ότι δεν αποτελεί καλή τακτική. Για την ακρίβεια, αποτελεί συνταγή για προβλήματα. Σε επόμενα άρθρα της σειράς θα δούμε ότι είναι προτιμότερο να τοποθετούμε τον κώδικα σε ξεχωριστές μεθόδους, οι οποίες θα καλούνται από τις μεθόδους χειρισμού των συμβάντων. Με μια τέτοια διάρθρωση του κώδικα μπορούμε να ανακυκλώνουμε ορισμένα τμήματά του, αξιοποιώντας τα σε πολλές μεθόδους χειρισμού διαφορετικών συμβάντων. Έτσι ο κώδικας είναι μικρότερος και πιο συμμαζεμένος, ενώ κάθε επιμέρους λειτουργία υλοποιείται μόνο μια φορά. Το γεγονός αυτό διευκολύνει τον εντοπισμό των πιθανών προβλημάτων, όπως επίσης και μια ενδεχόμενη αναβάθμιση. Μήπως αναρωτιέστε τώρα γιατί επιλέξαμε να οργανώσουμε το δικό μας κώδικα διαφορετικά; Σ’ ένα τόσο μικρό πρόγραμμα σαν αυτό που παρουσιάσαμε, η τοποθέτηση του κώδικα σε ξεχωριστές μεθόδους δεν θα προσέφερε κανένα όφελος ενώ ενδέχεται να δυσκόλευε και την παρουσίαση.

Η εξελιγμένη μορφή της εφαρμογής μας μοιράζει προσωποποιημένες και χρονικά αρμόζουσες χαιρετούρες :P

Μια (ακόμα) υπόσχεση
Το πρώτο μας “παραθυρικό” πρόγραμμα δεν αποτελεί και την πιο χρήσιμη εφαρμογή. Να είστε σίγουροι, όμως, ότι η συνέχεια θα σας ανταμείψει. Ανανεώνουμε το ραντεβού μας για το επόμενο τεύχος και, όπως πάντα, σας προτρέπουμε να πειραματιστείτε με τον κώδικά μας ελεύθερα. Μπορείτε να τον κατεβάσετε από τη διεύθυνση http://bit.ly/dh045_dnet_p7, αν και είμαστε σίγουροι ότι σύντομα θα γράφετε μόνοι σας πολύ πιο σύνθετα προγράμματα. Καλή διασκέδαση και, για να μην ξεχνιόμαστε, καλά μπάνια.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων