Object-Oriented Programming: Classes and Objects
Software 12/5/2014 Development 2
Introduction Η βασική ορολογία και οι έννοιες του αντικειµενοστραφούς προγραµµατισµού έχουν εισαχθεί στην ενότητα 1.14. Πολλές εφαρµογές συνίστανται από µια ή περισσότερες κλάσεις που κάθε µια περιέχει µια ή περισσότερες µεθόδους. Αν γίνετε µέλος µια οµάδας ανάπτυξης λογισµικού πιθανό να τύχει να εργαστείτε σε εφαρµογές που περιέχουν εκατοντάδες ή ακόµη και χιλιάδες κλάσεις. Στο κεφάλαιο αυτό, ενεργοποιείται η σηµειολογία των κλάσεων µε παραδείγµατα του πραγµατικού κόσµου και χρησιµοποιούνται ολοκληρωµένες εφαρµογές που επιδεικνύουν τη δηµιουργία των δικών σας κλάσεων και η διαχείριση των αντικειµένων των κλάσεων αυτών. 3
Classes, Objects, Methods and Instance Variables Ξεκινάµε µε ένα ανάλογο του πραγµατικού κόσµου που θα βοηθήσει στην κατανόηση των κλάσεων και των συστατικών τους. Έστω ότι θέλεις να οδηγήσεις ένα αυτοκίνητο και να το κάνεις να πάει γρηγορότερα πατώντας προς τα κάτω το πηδάλιο επιτάχυνσης (γκάζι). Τι θα πρέπει συµβεί πριν το κάνεις; Πριν καταφέρεις να οδηγήσεις ένα αυτοκίνητο, κάποιος θα πρέπει να το σχεδιάσει. 4
Classes, Objects, Methods and Instance Variables Ένα αυτοκίνητο τυπικά ξεκινά ως ένα σχέδιο του µηχανικού, όπως τα σχέδια που αποτυπώνουν ένα σπίτι. Αυτά τα σχέδια µηχανικού περιλαµβάνουν το σχεδιασµό του γκαζιού που κάνει το αυτοκίνητο να πηγαίνει γρηγορότερα. Το γκάζι αποκρύπτει τους πολύπλοκους µηχανισµούς που στην πραγµατικότητα κάνουν το αυτοκίνητο να πηγαίνει γρηγορότερα, ακριβώς όπως το φρένο αποκρύπτει τους µηχανισµούς που επιβραδύνουν το αυτοκίνητο και το τιµόνι αποκρύπτει τους µηχανισµούς που κάνουν το αυτοκίνητο να στρίβει. Αυτή η απόκρυψη καθιστά τους ανθρώπους µε λίγη ή καθόλου γνώση ικανούς να χρησιµοποιούν τους µηχανισµούς του αυτοκινήτου και να το οδηγούν µε ευκολία. 5
Classes, Objects, Methods and Instance Variables υστυχώς, δεν µπορείς να οδηγήσεις τα σχέδια µηχανικού ενός αυτοκινήτου. Πριν µπορέσεις να οδηγήσεις ένα αυτοκίνητο, αυτό θα πρέπει να κατασκευαστεί από τα σχέδια µηχανικού που το περιγράφουν. Ένα ολοκληρωµένο αυτοκίνητο έχει ένα πραγµατικό γκάζι που το κάνει να πηγαίνει γρηγορότερα αλλά ακόµη και αυτό δεν είναι αρκετό το αυτοκίνητο δε θα επιταχύνει από µόνο του, έτσι ο οδηγός θα πρέπει να πατήσει το πηδάλιο επιτάχυνσης. 6
Classes, Objects, Methods and Instance Variables Ας χρησιµοποιήσουµε το παράδειγµα του αυτοκινήτου για να εισάγουµε µερικές έννοιες κλειδιά του προγραµµατισµού. Για την εκτέλεση µιας εργασίας σε ένα πρόγραµµα απαιτείται µια µέθοδος. Η µέθοδος περιγράφει τους µηχανισµούς που στην πραγµατικότητα εκτελούν τις εργασίες της. Η µέθοδος αποκρύπτει τους µηχανισµούς αυτούς από τον χρήστη της, ακριβώς όπως ένα γκάζι ενός αυτοκινήτου αποκρύπτει από τον οδηγό τους µηχανισµούς που κάνουν το αυτοκίνητο να πηγαίνει γρηγορότερα. 7
Classes, Objects, Methods and Instance Variables Ξεκινάµε δηµιουργώντας ένα πρόγραµµα που καλείται κλάση για να στεγάσουµε σε αυτό µια µέθοδο, ακριβώς όπως τα σχέδια µηχανικού ενός αυτοκινήτου στεγάζουν τη σχεδίαση του γκαζιού. Σε µια κλάση παρέχεις µια ή περισσότερες µεθόδους που σχεδιάζονται για να εκτελούν εργασίες της. Για παράδειγµα η κλάση στην επόµενη παράγραφο αναπαριστά έναν τραπεζικό λογαριασµό και περιέχει µεθόδους για κατάθεση χρηµάτων σε έναν λογαριασµό ανάληψη χρηµάτων από τον λογαριασµό και ερώτηση υπολοίπου. 8
Classes, Objects, Methods and Instance Variables Ακριβώς όπως δεν µπορείς να οδηγήσεις ένα σχέδιο µηχανικού ενός αυτοκινήτου, δε µπορείς και να οδηγήσεις µια κλάση. Ακριβώς όπως κάποιος χρειάζεται να κατασκευάσει ένα αυτοκίνητο από τα σχέδιά του πριν το οδηγήσεις στην πράξη, θα πρέπει να κατασκευαστεί ένα αντικείµενο µιας κλάσης πριν αποκτήσεις το πρόγραµµα που θα εκτελεί τις εργασίες που περιγράφει η κλάση. Όταν οδηγείς ένα αυτοκίνητο, πατώντας το γκάζι στέλνεται ένα µήνυµα στο αυτοκίνητο για να εκτελέσει µια εργασία αυτή είναι, να πάει γρηγορότερα. Όµοια, στέλνεις µηνύµατα σε ένα αντικείµενο κάθε µήνυµα είναι κλήση προς µέθοδο που ζητά µια από τις µεθόδους του αντικειµένου να εκτελέσει τις εργασίες της. Κάθε κώδικας προγράµµατος που αλληλεπιδρά µε οποιοδήποτε αντικείµενο µιας συγκεκριµένης κλάσης είναι γνωστή ως πελάτης της κλάσης τα αντικείµενα παρέχουν υπηρεσίες προς τους πελάτες της κλάσης. 9
Classes, Objects, Methods and Instance Variables Χρησιµοποιήσαµε το ανάλογο τους αυτοκινήτου για να εισάγουµε τις κλάσεις τα αντικείµενα και τις µεθόδους. Επιπρόσθετα των δυνατοτήτων που προσφέρει ένα αυτοκίνητο, έχει επίσης πολλά χαρακτηριστικά, όπως το χρώµα του, ο αριθµός των πορτών του, η ποσότητα βενζίνης στο ρεζερβουάρ του, η τρέχουσα ταχύτητα και το κοντέρ του. Όπως οι δυνατότητες του αυτοκινήτου, τα χαρακτηριστικά του αναπαρίστανται ως τµήµα της σχεδίασης του αυτοκινήτου στα σχέδια µηχανικού. Καθώς οδηγείς ένα αυτοκίνητο, τα χαρακτηριστικά αυτά συνδέονται πάντοτε µε το αυτοκίνητο. Για παράδειγµα, κάθε αυτοκίνητο γνωρίζει πόση βενζίνη υπάρχει στο δικό του ρεζερβουάρ, όµως όχι πόση υπάρχει στα ρεζερβουάρ άλλων αυτοκινήτων. 10
Classes, Objects, Methods and Instance Variables Όµοια, ένα αντικείµενο έχει χαρακτηριστικά που µεταφέρονται µε αυτό καθώς χρησιµοποιείται σε ένα πρόγραµµα. Τα χαρακτηριστικά αυτά καθορίζονται στην κλάση του αντικειµένου. Για παράδειγµα, ένας τραπεζικός λογαριασµός έχει ένα χαρακτηριστικό, το υπόλοιπο, που αναπαριστά το ποσό των χρηµάτων στο λογαριασµό. Κάθε αντικείµενο τραπεζικού λογαριασµού γνωρίζει το υπόλοιπο στο ποσό που αναπαριστά, όχι όµως τα υπόλοιπα άλλων λογαριασµών. Τα χαρακτηριστικά καθορίζονται από τις µεταβλητές µιας κλάσης. 11
Account Class Ξεκινάµε µε ένα παράδειγµα που περιλαµβάνει τις κλάσεις Account και AccountTest. Η κλάση Account (δηλώνεται στο αρχείο Account.vb της εικόνας) αναπαριστά έναν τραπεζικό λογαριασµό που έχει ένα υπόλοιπο ένας πραγµατικός λογαριασµός τραπέζης θα περιελάµβανε άλλες πληροφορίες, όπως όνοµα, διεύθυνση, τηλέφωνο και αριθµό λογαριασµού. Η κλάση AccountTest (Εικ. ) δηµιουργεί και χρησιµοποιεί ένα αντικείµενο της κλάσης Account. Οι κλάσεις τοποθετούνται σε ξεχωριστά αρχεία για λόγους σαφήνειας, αλλά είναι δυνατό να τοποθετηθούν στο ίδιο αρχείο. 12
Account Class Η Γραφική ιεπαφή Χρήστη (GUI) για την εφαρµογή AccountTest επιδεικνύεται στην εικόνα. 9.1. Κατά την αρχική εκτέλεση του προγράµµατος, δηµιουργείται ένα αντικείµενο της κλάσης Account και εµφανίζεται το υπόλοιπό του στην ετικέτα accountbalancevaluelabel. Ο χρήστης µπορεί να εισάγει ένα ποσό κατάθεσης ή ανάληψης στο πλαίσιο κειµένου inputtextbox, στη συνέχεια να πιέσει το κουµπί Deposit Button για να κάνει µια κατάθεση ή το κουµπί Withdraw Button για να κάνει µια ανάληψη. Μετά από κάθε λειτουργία, η ετικέτα accountbalancevaluelabel ενηµερώνεται µε το νέο υπόλοιπο. 13
Software 12/5/2014 Development 14
Account Class Προσθήκη Κλάσης σε ένα Project Σε κάθε παράδειγµα του κεφαλαίου αυτού θα γίνεται προσθήκη µιας κλάσης στο project. Για το σκοπό αυτό, απαιτείται δεξί κλικ στο όνοµα του project στον Solution Explorer και επιλογή Add > Class από το µενού που εµφανίζεται. Στο πλαίσιο διαλόγου Add New Item που εµφανίζεται, πρέπει να εισαχθεί το όνοµα του νέου αρχείου σε αυτή την περίπτωση Account.vb και στη συνέχεια να γίνει κλικ στο Add Button. Ένα νέο αρχείο θα προστεθεί στο project µε µια άδεια κλάση Account. Προσθήκη του κώδικα της Εικ. Στο αρχείο αυτό. 15
Account Class ήλωση Κλάσης Account Η δήλωση της κλάσης Account ξεκινά στη γραµµή 3. Η λέξη κλειδί Public αποτελεί έναν τροποποιητή πρόσβασης access modifier. Μόνο Public κλάσεις µπορούν να επαναχρησιµοποιηθούν σε άλλα projects. Κάθε δήλωση κλάσης περιέχει τη λέξη κλειδί Class και αµέσως ακολουθεί το όνοµα της κλάσης. Το σώµα κάθε κλάσης τερµατίζει µε τις λέξεις κλειδιά End Class, όπως αποτυπώνεται στη γραµµή 49. 16
Software 12/5/2014 Development 17
Software 12/5/2014 Development 18
Software 12/5/2014 Development 19
Account Class Μεταβλητές κλάσης Account (Instance Variables) Η κλάση Account περιέχει µια µεταβλητή τύπου δεκαδικός (Decimal) balancevalue (γραµµή 4) που αναπαριστά το υπόλοιπο του λογαραισµού Account. Σε παλαιότερα παραδείγµατα οι µεταβλητές δηλώνονταςν µε τη λέξη κλειδί Dim. Εδώ γίνεται χρήση του τροποποιητή πρόσβασης µέλους Private. Τα µέλη µιας κλάσης που δηλώνονται µε τροποποιητή πρόσβασης µέλους Private είναι προσβάσιµα µόνο µέσα από την κλάση, κάτι που δίνει στην κλάση πλήρη έλεγχο σε σχέση µε το πως τα µέλη αυτά χρησιµοποιούνται. Αυτό είναι γνωστό ως ενθυλάκωση (encapsulating) των δεδοµένων της κλάσης. 20
Account Class Μεταβλητές κλάσης Account (Instance Variables) Μέλη κλάσης που δηλώνονται µε τροποποιητές πρόσβασης µελών τύπου Public είναι προσβάσιµα οποτεδήποτε ένα πρόγραµµα διαθέτει µια αναφορά σε αντικείενο τύπου Account. Μεταβλητές που δηλώνονται µε Dim έχουν εξορισµού πρόσβαση τροποποιητή τύπου Private. Για λόγους σαφήνειας, σε κάθε ορισµό µεταβλητής και µεθόδου θα πρέπει να προηγείται ένας τροποποιητής πρόσβασης µέλους. Θα χρησιµοποιούµε ρητά τον όρο Private αντί του Dim για να υποδεικνύουµε ότι οι µεταβλητές µας είναι ιδιωτικές Private. 21
Account Class Κατασκευαστές και Εξαιρέσεις της κλάσης Account Όταν δηµιουργείται ένα αντικείµενο µιας κλάσης καλείται ο κατασκευαστής (constructor) της κλάσης για να αρχικοποιήσει το αντικείµενο. Η κλήση κατασκευαστή απαιτείται για κάθε αντικείµενο που δηµιουργείται. Εξορισµού, ο µεταγλωστιστής (compiler) παρέχει ένα κατασκευαστή (default constructor) χωρίς παραµέτρους για κάθε κλάση που δεν περιλαµβάνει ρητά έναν κατασκευαστή. Εναλλακτικά, µπορεί να χρησιµοποιηθεί ένα κατασκευαστής χωρίς παραµέτρους (parameterless constructor) που περιέχει κώδικα και δεν χρειάζεται παραµέτρους, ή που λαµβάνει µόνο προαιρετικές (Optional) παραµέτρους ώστε να είναι δυνατό να κληθεί χωρίς ορίσµατα. 22
Account Class Κατασκευαστές και Εξαιρέσεις της κλάσης Account Στην περίπτωση που παρασχεθούν κατασκευαστές για µια κλάση, ο µεταγλωτιστής δε θα παρέχει τον εξορισµού κατασκυαστή για την κλάση αυτή. Οι κατασκευαστές θα πρέπει να ονοµαστούν µε τη λέξη κλειδί New και γενικά δηλώνονται ώς Public οι Private κατασκευαστές ξεφεύγουν από τους σκοπούς του παρόντος. Οι κατασκευαστές υλοποιούνται ως διαδικασίες Sub, επειδή δε µπορούν να επιστρέψουν τιµές. Όπως οι µέθοδοι µπορούν να είναι υπερφορτωµένοι (overloaded). 23
Account Class Κατασκευαστές και Εξαιρέσεις της κλάσης Account Η κλάση Account ορίζει έναν κατασκευαστή (γραµµές 7 15). ηλώνει µια προαιρετική (Optional) παράµετρο µε προεπιλεγµένη τιµή 0D (γραµµή 7) που αναπαριστά το αρχικό υπόλοιπο του αντικειµένου της κλάσης Account. Καθώς η µοναδική παράµετρος είναι προαιρετική (Optional) ο κατασκευαστής αυτός λειτουργεί επίσης ως ο κατασκευαστής χωρίς παραµέτρους της κλάσης µπορεί να κληθεί χωρίς ορίσµατα. Οι γραµµές 9 12 καθιστούν έγκυρη την τιµή της παραµέτρου initialbalance. Εάν είναι µεγαλύτερη ή ίση από το 0, η γραµµή 14 αναθέτει την τιµή της µεταβλητής initialbalance στην µεταβλητή balancevalue. 24
Account Class Κατασκευαστές και Εξαιρέσεις της κλάσης Account Θεωρούµε ότι ένα Account δε µπορεί να έχει αρνητικό αρχικό υπόλοιπο, εποµένως αν η τιµή του initialbalance είναι αρνητική, ο κατασκευαστής παράγει µια εξαίρεση (throws an exception) τύπου ArgumentOutOfRangeException (γραµµές 10 11), που ενηµερώνει τον κώδικα του πελάτη ότι διαβιβάστηκε µη έγκυρο όρισµα στον κατασκευαστή. Όπως έχετε διδαχθεί στο Κεφάλαιο 7, µπορείτε να χρησιµοποιήσετε Try...Catch για να εντοπίσετε εξαιρέσεις και να επιχειρήσετε αποκατάσταση από αυτές, όπως θα γίνει στην Εικ. 25
Account Class Κατασκευαστές και Εξαιρέσεις της κλάσης Account Η δήλωση Throw statement (γραµµές 10 11) δηµιουργεί ένα νέο αντικείµενο τύπου ArgumentOutOfRangeException. Οι παρενθέσεις που ακολουθούν το όνοµα της κλάσης υποδεικνύουν µια κλήση προς τον κατασκευαστή που λαµβάνει ένα µήνυµα λάθους τύπου String ως όρισµά του. Έπειτα από τη δηµιουργία του αντικειµένου εξαίρεσης, η δήλωση Throw τερµατίζει αµέσως τον κατασκευαστή (η γραµµή 14 δεν εκτελείται) και η εξαίρεση επιστρέφεται στον κώδικα που επιχείρησε να δηµιουργήσει το αντικείµενο τύπου Account. 26
Account Class Η µέθοδος Deposit Η µέθοδος Deposit (γραµµές 18 26) λαµβάνει ένα ποσό κατάθεσης ως όρισµα και επιχειρεί να το προσθέσει στο υπόλοιπο. Ένα ποσό κατάθεσης πρέπει να είναι θετικό, έτσι οι γραµµές 20 23 ελέγχουν αν το depositamount είναι µικρότερο ή ίσο από το 0, και σε µια τέτοια περίπτωση, παράγουν ως όρισµα µια εκτός ορίων εξαίρεση Argument-OutOfRangeException µε το κατάλληλο µήνυµα λάθους. Αυτό τερµατίζει τη µέθοδο Deposit (η γραµµή 25 δεν εκτελείται) και επιστρέφεται η εξαίρεση προς την κλήση. Αν το ποσό depositamount είναι µεγαλύτερο από 0, η γραµµή 25 το προσθέτει στη µεταβλητή balancevalue. 27
Account Class Η Μέθοδος Withdraw Η µέθοδος Withdraw (γραµµές 29 41) λαµβάνει ένα ποσό ανάληψης ως όρισµα και επιχειρεί να αφαιρέσει το ποσό αυτό από το υπόλοιπο. Ένα ποσό ανάληψης θα πρέπει να είναι ένας θετικός αριθµός που είναι µικρότερος ή ίσος από το υπόλοιπο της κλάσης Account. Αν το το ποσό ανάληψης withdrawalamount δεν είναι έγκυρο, οι γραµµές 32 33 ή 35 36 παράγουν µια εξαίρεση ArgumentOutOfRangeException µε το κατάλληλο µήνυµα λάθους. Αν το withdrawalamount είναι έγκυρο, η γραµµή 40 το αφαιρεί από το balancevalue. 28
Account Class Ιδιότητα Balance Οι µέθοδοι µιας κλάσης µπορούν να διαχειριστούν τις ιδιωτικές Private µεταβλητές, όµως τα λογισµικά πελάτες της κλάσης δεν µπορούν. Οι κλάσεις συχνά παρέχουν δηµόσιες Public ιδιότητες που επιτρέπουν στα λογισµικά πελάτες να αναθέσουν τιµές σε (set) ή να παράγουν τιµές από (get) Private µεταβλητές. Κάθε ιδιότητα περιέχει µια µέθοδο πρόσβασης Set accessor (για να τροποποιήσει την τιµή της µεταβλητής) και/ή µια µέθοδο πρόσβασης Get accessor (για να ανακτήσει την τιµή της µεταβλητής). Για την κλάση Account είναι επιθυµητό ο κώδικας του λογισµικού πελάτη να είναι ικανός να λάβει το υπόλοιπο της αλλά όχι να το τροποποιήσει όλες οι τροποποιήσεις θα πρέπει να εκτελεστούν από τις µεθόδους Deposit και Withdraw. 29
Account Class Ιδιότητα Balance Μια ιδιότητα οριίζεται από τις λέξεις κλειδά Property End Property. Μια ιδιότητα που µπορεί να χρησιµοποιηθεί µόνο για την ανάγνωση µιας τιµής δηλώνεται ως ιδιότητα ReadOnly και περιέχει µόνο µια µέθοδο πρόσβασης Get. Οι γραµµές 44 48 ορίζουν τη δηµόσια και µόνο για ανάγνωση ιδιότητα Public ReadOnly της κλάσης Account µε το όνοµα Balance. Ο κώδικας του λογισµικού πελάτη µπορεί να χρησιµοποιήσει την ιδιότητα αυτή για να λάβει το τρέχον υπόλοιπο του λογαριασµού. 30
Account Class Ιδιότητα Balance Χρησιµοποιούµε επίσης την ιδιότητα µέσα στην κλάση στη γραµµή 31 στη µέθοδο Withdraw όταν ελέγχουµε αν το ποσό ανάληψης withdrawal-amount είναι µεγαλύτερο από το τρέχον υπόολοιπο. Όταν ο µεταγλωτιστής «βλέπει» την ιδιότητα Balance να χρησιµοποιείται κατά τρόπο που να χρειάζεται µια τιµή, κάνει επίκληση της µεθόδου πρόσβασης Get της ιδιότητας (γραµµές 45 47). Όταν πληκτρολογείται η πρώτη γραµµή αυτής της ιδιότητας και πατηθεί το Enter, το ολοκληρωµένο περιβάλλον ανάπτυξης (IDE) θα εισάγει αυτόµατα µια άδεια µέθοδο πρόσβασης Get (Get End Get) και τις λέξεις κλειδιά End Property. Στη συνέχεια µπορεί να πληκτρολογηθεί η δήλωση Return στη γραµµή 46 για να ολοκληρωθεί η δήλωση της µεθόδου πρόσβασης Get. 31
Account Class Ιδιότητα (Property) Balance Αργότερα στο κεφάλαιο αυτό, θα δηλωθούν ιδιότητες και µε τις δύο µεθόδους πρόσβασης Get και Set. Αν τυπώσετε την πρώτη γραµµή µιας ιδιότητας χωρίς τη λέξη κλειδί Read-Only, το ολοκληρωµένο περιβάλλον ανάπτυξης (IDE) θα παράγει άδειες µεθόδους πρόσβασης Get και Set για λογαριασµό σας. 32
Account Class Η κλάση AccountTest Η δήλωση στην κλάση AccountTest (Εικ. ) δηµιουργεί το αντικείµενο account της κλάσης Account ως ένα στιγµιότυπο µεταβλητής (γραµµή 4). Ο τύπος της µεταβλητής είναι Account η κλάση που δηλώθηκε στα προηγούµενα. Κάθε νέα κλάση που δηµιουργείται καθίσταται νέος τύπος που µπορεί να χρησιµοποιηθεί για δήλωση µεταβλητών και δηµιουργία αντικειµένων. Μπορούν να δηλωθούν νέοι τύποι κλάσεων ανάλογα µε τις ανάγκες που υπάρχουν. Αυτός είναι ένας λόγος για τον οποίο η Visual Basic είναι γνωστή ως µια εκτατή γλώσσα προγραµµατισµού (extensible language). 33
Software 12/5/2014 Development 34
Software 12/5/2014 Development 35
Software 12/5/2014 Development 36
Software 12/5/2014 Development 37
Software 12/5/2014 Development 38
Account Class Εκφράσεις ηµιουργίας-αντικειµένου Η µεταβλητή account αρχικοποιείται (γραµµή 4) µε το αποτέλεσµα της έκφρασης δηµιουργίας αντικειµένου (objectcreation expression) New Account(). Η New δηµιουργεί ένα νέο αντικείµενο της κλάσης που προσδιορίζεται στα δεξιά της λέξης κλειδί New (που είναι η Account). Μετά το όνοµα της κλάσης ακολουθούν παρενθέσεις που µαζί µε το όνοµα της κλάσης αναπαριστούν µια κλήση στον κατασκευαστή της κλάσης. Επειδή δεν διαβιβάζεται όρισµα, χρησιµοποιείται η προεπιλεγµένη τιµή 0D για το αρχικό υπόλοιπο του αντικειµένου της κλάσης Account (εξαιτίας της παραµέτρου Optional στη γραµµή 7 of Fig. ). Όταν δεν υπάρχουν ορίσµατα οι παρενθέσεις µπορούν να παραβλεφθούν αν και τις περιλαµβάνουµε για λόγους σαφήνειας. Αν και στη Visual Basic δεν υπάρχει διαφορροποίηση πεζώνκεφαλαίων, επιτρέπεται η δηµιουργία αντικειµένων (π.χ., account) µε το ίδιο όνοµα που έχει και η κλάση τους (π.χ. Account) συµβαίνει σε όλο το βιβλίο. 39
Account Class Η µέθοδος AccountTest_Load Η µέθοδος AccountTest_Load (γραµµές 7 12) εµφανίζει το αρχικό υπόλοιπο του αντικειµένου της κλάσης account στην ετικέτα accountbalancevaluelabel µε χρήση της έκφρασης account.balance µε την οποία επιτελείται πρόσβαση στην ιδιότητα Balance του αντικειµένου της κλάσης account. Η ιδιότητα επιστρέφει την τρέχουσα τιµή της µεταβλητής balancevalue του αντικειµένου της κλάσης account 40
Account Class Μέθοδος depositbutton_click Η µέθοδος depositbutton_click (γραµµές15 32) επιχειρεί να κάνει µια κατάθεση και εµφανίζει το νέο υπόλοιπο του λογαριασµού. Οι λειτουργίες αυτές εκτελούνται µέσα σε ένα πλαίσιο Try Catch στην περίπτωση που η κλίση προς τη µέθοδο Deposit του αντικειµένου account παράγει µια εξαίρεση ArgumentOutOfRangeException. Στις γραµµές 20 21 λαµβάνεται η είσοδος χρήστη. Στη γραµµή 22 διαβιβάζεται η τιµή αυτή στη µέθοδο Deposit του αντικειµένου account. Οι γραµµές 23 24 εµφανίζουν το νέο υπόλοιπο µέσα από πρόσβαση στην ιδιότητα Balance του αντικειµένου account. Αν η µέθοδος Deposit παράγει εξαίρεση ArgumentOutOfRangeException, οι γραµµές 25 27 το λαµβάνουν και εµφανίζουν ένα MessageBox. Οι γραµµές 30 31 καθαρίζουν το πλαίσιο εισαγωγής τιµής inputtextbox και επικεντρώνουν σε αυτό τον κέρσορα. 41
Account Class Method withdrawbutton_click Η µέθοδος withdrawbutton_click (γραµµές 35 53) επιχειρεί να κάνει µια ανάληψη και να εµφανίσει το νέο υπόλοιπο του λογαριασµού. Πάλι, οι λειτουργίες αυτές εκτελούνται µέσα σε ένα πλαίσιο Try Catch στην περίπτωση που η κλίση προς τη µέθοδο Withdraw του αντικειµένου account παράγει µια εξαίρεση ArgumentOutOfRangeException. Στις γραµµές 40 41 λαµβάνεται η είσοδος χρήστη. Στη γραµµή 22 διαβιβάζεται η τιµή αυτή στη µέθοδο Withdraw του αντικειµένου account. Οι γραµµές 43 44 εµφανίζουν το νέο υπόλοιπο µέσα από πρόσβαση στην ιδιότητα Balance του αντικειµένου account. Αν η µέθοδος Withdraw παράγει εξαίρεση ArgumentOutOfRangeException, οι γραµµές 45 48 το λαµβάνουν και εµφανίζουν ένα MessageBox..Οι γραµµές 51 52 καθαρίζουν το πλαίσιο εισαγωγής τιµών inputtextbox και επικεντρώνουν τον κέρσορα σε αυτό ώστε ο χρήστης να εισάγει το νέο ποσό κατάθεσης ή ανάληψης. 42
Account Class IntelliSense για την Κλάση Account Όταν δηµιουργείς αυτή την εφαρµογή και πληκτρολογείς account. στο ολοκληρωµένο περιβάλλον ανάπτυξης (IDE), IntelliSense εµφανίζεται η λίστα των πραγµάτων που µπορούν να εµφανιστούν στα δεξιά της τελείας όπως οι µέθοδοι Deposit και Withdraw και η ιδιότητα Balance ακριβώς όπως συµβαίνει και µε τις κλάσεις του πλαισίου.net. 43
Value Types and Reference Types Οι τύποι δεδοµένων χωρίζονται σε δύο κατηγορίες τύποι τιµών (value types) and τύποι αναφοράς (reference types). Μια µεταβλητή value type (όπως ένας Integer) περιέχει µια απλή τιµή αυτού του τύπου. Για παράδειγµα η εικόνα δείχνει µια µεταβλητή Integer µε όνοµα count που περιέχει την τιµή 7. 44
Software 12/5/2014 Development 45
Value Types and Reference Types Αντιθέτως, µια µεταβλητή τύπου αναφοράς (µερικές φορές καλείται µια reference) περιέχει τη διεύθυνση όπου αποθηκεύεται στη µνήµη ένα αντικείµενο. Τέτοα µεταβλητή λέγεται ότι αναφέρεται σε ένα αντικείµενο (refer to an object). Το πραγµατικό αντικείµενο στο οποίο αναφέρεται η µεταβλητή µπορεί να περιέχει πολλά µεµονωµένα κοµµάτια από δεδοµένα (που είναι, οι µεταβλητές του). Στη γραµµή 4 της εικόνας δηµιουργήθηκε στη µνήµη ένα αντικείµενο Account και αποθηκεύτηκε η θέση του αντικειµένου στη µεταβλητή αναφοράς account τύπου Account. Η εικόνα δείχνει τη συσχέτιση µεταξύ της µεταβλητής account και του αντικειµένου Account. Το αντικείεµνο Account δείχνεται µε τη µεταβλητή του balancevalue. 46
Software 12/5/2014 Development 47
Value Types and Reference Types Οι Μεταβλήτές Τύπου Αναφοράς Αρχικοποιούνται στην Τιµή Nothing Μια µεταβλητή τύπου αναφοράς αρχικοποιείται εξορισµού στην τιµή Nothing αν δεν αρχικοποιηθεί κατά τη δήλωσή αναφοράς της σε ένα αντικείµενο. Όταν επιχειρείς να χρησιµοποιήσεις µια µεταβλητή που περιέχει την τιµή Nothing για να αλληλεπιδράσει µε ένα αντικείµενο θα λάβεις µια εξαίρεση κενής αναφοράς NullReferenceException. 48
Value Types and Reference Types Πιο Αρχέτυποι Τύποι είναι οι Τύποι Τιµών Οι αρχέτυποι τύποι της Visual Basic είναι τύποι τιµών, εκτός από τον τύπο αναφοράς String (που στην πράξη αναπαριστά την κλάση String στο πλαίσιο.net). Οι αρχέτυποι τύποι τιµών περιλαµβάνουν τους ακέραιους τύπους integral types (Byte, SByte, Short, UShort, Integer, UInteger, Long και ULong), τους τύπους κινητής υποδιαστολής floating-point types (Single και Double) και τους τύπους Boolean, Date, Decimal και Char. Το παράρτηµα B παραθέτει τους αρχέτυπους τύπους µε τα µεγέθη τους και το εύρος τιµών τους. 49