Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 27/3/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr
Κλάσεις και Αντικείμενα Εισαγωγή
Στατικότητα Κλάσης Δυναμικότητα Στιγμιοτύπων Κλάσης
Java's "Building Blocks" Στην Java η μονάδα προγραμματισμού είναι η κλάση (στη C η μονάδα προγραμματισμού είναι η συνάρτηση) από την οποία προκύπτουν στιγμιότυπα (δημιουργούνται) αντικειμένων Ένα πρόγραμμα αποτελείται από μία ή περισσότερες κλάσεις Μία κλάση περιέχει μία ή περισσότερες μεθόδους Μία μέθοδος περιλαμβάνει program statements (εντολές) Οι εντολές (statements) είναι: Δηλώσεις μεταβλητών: πρωταρχικοί τύποι δεδομένων και κλάσεις Λειτουργίες (Operations): αριθμητικές, λογικές Δομές ελέγχου: επιλογή, βρόχοι επαναλήψεων, κλπ. Μηνύματα αντικειμένων: π.χ. κλήσεις σε μεθόδους Μία εφαρμογή Java πάντοτε εκτελεί τη main method
Programs: Classes, Methods and Statements
Μελέτη του ορισμού μιας κλάσης Ο πηγαίος κώδικας των περισσότερων κλάσεων μπορεί να χωριστεί σε δύο τμήματα: στο εξωτερικό περιτύλιγμα της κλάσης, το οποίο απλά παρέχει ένα όνομα στην κλάση, και στο εσωτερικό τμήμα που υλοποιεί στην ουσία την κλάση, αφού σε αυτό ορίζονται τα πεδία, οι κατασκευαστές και οι μέθοδοι της κλάσης που καθορίζουν τα χαρακτηριστικά και την συμπεριφορά των αντικειμένων της κλάσης. Συγκεκριμένα: τα πεδία χρησιμοποιούνται για την αποθήκευση δεδομένων για κάθε αντικείμενο οι κατασκευαστές καθορίζουν την αρχική κατάσταση ενός αντικειμένου όταν αυτό δημιουργείται οι μέθοδοι υλοποιούν τη συμπεριφορά των αντικειμένων, αφού καθορίζουν τις λειτουργίες που μπορούν να εκτελέσουν. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 6
Βασική δομή κλάσης public class TicketMachine Το εσωτερικό τμήμα της κλάσης παραλείπεται public class ClassName Πεδία (Fields) Κατασκευαστές (Constructors) Μέθοδοι (Methods) Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling Εξωτερικό περιτύλιγμα κλάσης: κύριος σκοπός είναι να παρέχει ένα όνομα για την κλάση Τα περιεχόμενα μιας κλάσης: - Πεδία: αποθηκεύουν δεδομένα που θα χρησιμοποιηθούν από τα αντικείμενα - Κατασκευαστές: επιτρέπουν τη σωστή διαμόρφωση κάθε αντικειμένου όταν δημιουργείται για πρώτη φορά - Μέθοδοι: υλοποιούν τη συμπεριφορά των αντικειμένων
Source code Πηγαίος κώδικας Κάθε κλάση έχει το δικό της πηγαίο κώδικα (Java code) που συσχετίζεται με αυτήν και καθορίζει τις λεπτομέρειές της (fields-πεδία and methods-μεθόδους). Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Μέθοδοι και παράμετροι Τα αντικείμενα έχουν λειτουργίες που μπορούν να κληθούν (η Java τις ονομάζει methods-μέθοδοι). Οι μέθοδοι μπορεί να έχουν παραμέτρους για να περάσουν επιπλέον πληροφορία που χρειάζεται στην εκτέλεση. Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Άλλες παρατηρήσεις Πολλά instances-στιγμιότυπα μπορούν να δημιουργηθούν από μία κλάση. Ένα αντικείμενο έχει attributes-ιδιότητες: τιμές που αποθηκεύονται σε fields-πεδία. Η κλάση ορίζει τι πεδία έχει ένα αντικείμενο, αλλά κάθε αντικείμενο αποθηκεύει το δικό του σύνολο τιμών (state-κατάσταση του αντικειμένου). Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Δημιουργία αντικειμένων Έστω ότι έχουμε την κλάση Circle Θέλουμε να δημιουργήσουμε ένα στιγμιότυπο της κλάσης αντικείμενο με όνομα circle 1 Circle circle1; circle1 = new Circle(); Circle circle1 = new Circle(); Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 11
Κλάσεις, Αντικείμενα, Μέθοδοι και Στιγμιότυπα Μια κλάση παρέχει μία ή περισσότερες μεθόδους (methods) Η μέθοδος παριστάνει την εκτέλεση μιας εργασίας (task) σε ένα πρόγραμμα Περιγράφει τους μηχανισμούς με τους οποίους εκπληρώνει το έργο της Αποκρύπτει από το χρήστη τις πολύπλοκες εργασίες που εκτελεί Η κλήση μια μεθόδου της υποδεικνύει να εκτελέσει το έργο της 2005 Pearson Education, Inc. All rights reserved.
Προσδιορισμός Ιδιοτήτων και Μεθόδων Κλάσεων Όταν καλούμαστε να προσδιορίσουμε ιδιότητες σε κλάσεις, θα πρέπει να θυμόμαστε ότι: ιδιότητες είναι ότι περιγράφει την κατάσταση (state) κάθε αντικειμένου της κλάσης και θα πρέπει να μπορούν να παρασταθούν στο λογισμικό με μεταβλητές (variables) διαφόρων τύπων (ακέραιες, πραγματικές, λογικές (boolean) κλπ). ΔΕΝ συμπεριλαμβάνουμε στις ιδιότητες περιττές πληροφορίες, ούτε ιδιότητες που αποτελούν συνάρτηση άλλων. Για τον προσδιορισμό μεθόδων σε κλάσεις, θα πρέπει να θυμόμαστε ότι: οι μέθοδοι είναι ενέργειες που μπορεί να εκτελέσουν τα αντικείμενα της κλάσης ή μπορούν να εκτελεστούν επί αυτών και στο Λογισμικό παριστάνονται με τμήματα κώδικα που υλοποιούν τις λειτουργίες που απαιτούνται για να γίνουν αυτές οι ενέργειες.
Πεδία public class TicketMachine private int price; private int balance; private int total; // η τιμή των εισιτηρίων που εκδίδει η μηχανή /* το σύνολο των χρημάτων που έχει εισάγει ο χρήστης μέχρι στιγμής */ /* το σύνολο των χρημάτων που έχουν συγκεντρωθεί στη μηχανή */ η δεσμευμένη λέξη private δηλώνει ότι κάθε ένα από τα παραπάνω πεδία θα είναι προσπελάσιμο μόνο από την κλάση (τον κατασκευαστή και τις μεθόδους) στην οποία δηλώνεται και τα τρία πεδία είναι τύπου int που σημαίνει ότι μπορούν να πάρουν ακέραιες τιμές για την κατανόηση του ρόλου του κάθε πεδίου χρησιμοποιούνται σχόλια (comments). Τα σχόλια που καταλαμβάνουν μία μόνο γραμμή ξεκινάνε με τους χαρακτήρες //, ενώ τα σχόλια που καταλαμβάνουν περισσότερες γραμμές ξεκινάνε με τους χαρακτήρες /* και τελειώνουν με τους */. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 14
Πεδία Τα πεδία αποθηκεύουν δεδομένα για ένα αντικείμενο Τα πεδία λέγονται και μεταβλητές στιγμιοτύπου, αφού μπορεί να αλλάζουν συνεχώς τιμή μέσω της εκτέλεσης των μεθόδων. Τα πεδία ορίζουν την κατάσταση ενός αντικειμένου public class TicketMachine private int price; private int balance; private int total; Τα υπόλοιπα παραλείπονται Visibility modifier Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling Type Variable name
Μέθοδοι Από τη στιγμή που θα ορίσουμε μια κλάση μπορούμε να δημιουργήσουμε όσα αντικείμενα στιγμιότυπα χρειαζόμαστε για την επίλυση ενός προβλήματος Τα αντικείμενα που θα δημιουργήσουμε προκειμένου να λύσουμε ένα πρόβλημα μπορούμε να τα χειριστούμε εκτελώντας συγκεκριμένες λειτουργίες που περιγράφονται στην κλάση που ανήκουν τα αντικείμενα Οι λειτουργίες αυτές ονομάζονται μέθοδοι (methods) και λέμε ότι μια μέθοδος καλείται ή ενεργοποιείται Όπως είναι φυσικό ένα αντικείμενο ανταποκρίνεται στην ενεργοποίηση μιας μεθόδου εκτελώντας τη λειτουργία που περιγράφει η μέθοδος. Μια μέθοδος μπορεί να χρησιμοποιηθεί προκειμένου να αλλάξουμε την κατάσταση ενός αντικειμένου ή να προσπελάσουμε κάποιες από τις πληροφορίες που περικλείει το αντικείμενο Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 16
Μέθοδοι Μια κλάση παρέχει μία ή περισσότερες μεθόδους (methods) Η μέθοδος Περιγράφει τους μηχανισμούς με τους οποίους εκπληρώνει το έργο της Αποκρύπτει από το χρήστη τις πολύπλοκες εργασίες που εκτελεί Η κλήση μιας μεθόδου της υποδεικνύει να εκτελέσει το έργο της 2005 Pearson Education, Inc. All rights reserved.
Μεταβίβαση δεδομένων μέσω παραμέτρων Διαχωρίζουμε τα ονόματα των παραμέτρων μέσα σε ένα κατασκευαστή ή μία μέθοδο από τις τιμές των παραμέτρων έξω από αυτές, αναφερόμενοι στα ονόματα ως τυπικές παράμετροι και στις τιμές ως πραγματικές παράμετροι Η ticketcost είναι μία τυπική παράμετρος, ενώ η τιμή που δίνει ο χρήστης, π.χ 50, είναι πραγματική παράμετρος Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Κλήση μεθόδων Για να καλέσουμε μία μέθοδο: Γράφουμε το όνομα του αντικειμένου, στη συνέχεια τελεία, και στη συνέχεια το όνομα της μεθόδου Circle1.makeVisible(); Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 19
Μέθοδοι με παραμέτρους Κάποιες μέθοδοι απαιτούν την παροχή επιπλέον πληροφοριών για την εκτέλεση της λειτουργίας που αντιπροσωπεύουν Για την παροχή των επιπλέον πληροφοριών χρησιμοποιούμε παραμέτρους (parameters). Κάθε παράμετρος μιας μεθόδου έχει ένα συγκεκριμένο τύπο δεδομένων (data type) που καθορίζει τι είδους τιμές μπορεί να πάρει η παράμετρος και ένα όνομα (name) που φανερώνει τι αντιπροσωπεύει η πληροφορία/τιμή που έχει η συγκεκριμένη παράμετρος Οι παράμετροι μιας μεθόδου δηλώνονται στην επικεφαλίδα της, η οποία περιλαμβάνει όλες τις απαραίτητες πληροφορίες για την ενεργοποίησή της και ονομάζεται υπογραφή (signature) της μεθόδου Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 20
Τύποι δεδομένων Ο τύπος μιας παραμέτρου καθορίζει τα είδη των δεδομένων που μπορούν να μεταβιβαστούν σε μία παράμετρο int: ακέραιος αριθμός String: αναμένεται τμήμα κειμένου. Τα αλφαριθμητικά περικλείονται πάντα μέσα σε διπλά εισαγωγικά boolean: Truth value (true or false) double: Real number (3.14, 1.0, -2.1)
Μέθοδοι - Κατασκευαστές Ένα ιδιαίτερο είδος μεθόδου είναι η μέθοδος που χρησιμοποιούμε για τη δημιουργία ή αλλιώς την αρχικοποίηση (initialization) των αντικειμένων μιας κλάσης Η μέθοδος αυτή καθορίζει την αρχική κατάσταση του νέου αντικειμένου δίνοντας τις κατάλληλες αρχικές τιμές στα πεδία του. Μια τέτοια μέθοδος ονομάζεται κατασκευαστής (constructor) και είναι η μοναδική μέθοδος της κλάσης που έχει το ίδιο όνομα με αυτή. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 22
Κατασκευαστές Οι κατασκευαστές (constructors) μιας κλάσης αρχικοποιούν ένα αντικείμενο όταν δημιουργείται, έτσι ώστε να είναι σε κατάσταση να χρησιμοποιηθεί. Η αρχικοποίηση (initialization) στην ουσία αναφέρεται στην εκχώρηση των κατάλληλων τιμών στα πεδία ενός αντικειμένου και μπορεί να γίνει είτε με την ανάθεση σταθερών τιμών είτε με το πέρασμα τιμών που δίνονται από τον χρήστη κατά την εκτέλεση του προγράμματος. O κατασκευαστής (constructor) είναι η μοναδική μέθοδος της κλάσης που έχει το ίδιο όνομα με αυτή. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 23
Κατασκευαστές Όνομα κατασκευαστή == όνομα κλάσης Δεν έχει τύπο επιστροφής ΠΟΤΕ ΔΕΝ επιστρέφει τίποτα Συνήθως αρχικοποιεί πεδία Όλες οι κλάσεις χρειάζονται τουλάχιστον ένα κατασκευαστή Αν δεν ορίσουμε κάποιον, τότε default CLASSNAME ()
Κατασκευαστές public TicketMachine(int ticketcost) price = ticketcost; balance = 0; total = 0; στα πεδία balance και total εκχωρείται η σταθερή τιμή 0, στο πεδίο price δεν μπορεί να εκχωρηθεί μια σταθερή τιμή, αφού η τιμή του εισιτηρίου δίνεται από τον χρήστη όταν δημιουργείται η μηχανή έκδοσης των εισιτηρίων και δεν είναι εκ των προτέρων γνωστή. Γι αυτό το λόγο λοιπόν χρησιμοποιείται η παράμετρος ticketcost που περνάει την τιμή του εισιτηρίου που δίνει ο χρήστης στον κατασκευαστή Παρατηρείστε ότι ο κατασκευαστής έχει το ίδιο όνομα με την κλάση! Οι κατασκευαστές αποτελούν τη μοναδική περίπτωση μεθόδων που έχουν το ίδιο όνομα με την κλάση στην οποία ορίζονται. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 25
Κατασκευαστές Σε μια κλάση είναι δυνατόν να υπάρχουν περισσότεροι του ενός κατασκευαστές. Για παράδειγμα, στην κλάση TicketMachine εκτός από τον κατασκευαστή που περιγράψαμε παραπάνω, στον οποίο η τιμή του εισιτηρίου δίνεται από τον χρήστη, μπορούμε να ορίσουμε και ένα δεύτερο κατασκευαστή που θα δημιουργεί μηχανές έκδοσης εισιτηρίων με προκαθορισμένη τιμή εισιτηρίου (που θα εκχωρείται στο σώμα του κατασκευαστή στο πεδίο price). Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 26
Κατασκευαστές Οι κατασκευαστές μιας κλάσης αρχικοποιούν ένα αντικείμενο Έχουν το ίδιο όνομα με την κλάση στην οποία ορίζονται Αποθηκεύουν αρχικές τιμές στα πεδία Συχνά δέχονται τιμές παραμέτρου εξωτερικά για την αποθήκευση τιμών στα πεδία -> price public class TicketMachine Τα πεδία παραλείπονται public TicketMachine(int ticketcost) price = ticketcost; balance = 0; total = 0; Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Η κατάσταση ενός αντικειμένου Πεδία Το σύνολο των τιμών όλων των χαρακτηριστικών ενός αντικειμένου (όπως για παράδειγμα για τον κύκλο η διάμετρος, οι συντεταγμένες του κ.τ.λ.) καθορίζουν την κατάσταση (state) του αντικειμένου Για την αναπαράσταση της κατάστασης ενός αντικειμένου αποθηκεύονται οι τιμές των χαρακτηριστικών του σε μεταβλητές, οι οποίες ονομάζονται πεδία (fields) Η αλλαγή της κατάστασης ενός αντικειμένου (ή αλλιώς η αλλαγή των τιμών ενός ή περισσότερων πεδίων) ή η προσπέλαση κάποιων από τις πληροφορίες που περικλείει το αντικείμενο πραγματοποιείται ενεργοποιώντας τις κατάλληλες μεθόδους Παρατήρηση Όλα τα αντικείμενα/στιγμιότυπα μιας συγκεκριμένης κλάσης έχουν τον ίδιο αριθμό, τύπο και ονόματα πεδίων και φυσικά και τις ίδιες μεθόδους. Ωστόσο, οι τιμές των πεδίων και συνεπώς η κατάσταση των στιγμιοτύπων μιας κλάσης μπορεί να διαφέρει Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 28
Αντικείμενο Τα αντικείμενα της ίδιας κλάσης έχουν όλα τα ίδια πεδία Ο αριθμός, ο τύπος και τα ονόματα των πεδίων είναι ίδια, ενώ η πραγματική τιμή ενός συγκεκρικένου πεδίου σε κάθε αντικείμενο μπορεί να είναι διαφορετική Τα αντικείμενα διαφορετικής κλάσης μπορεί να έχουν διαφορετικά πεδία Ο αριθμός, ο τύπος και τα ονόματα των πεδίων ορίζονται στην κλάση και όχι σε ένα αντικείμενο! Κλάση Circle: ορίζει ότι κάθε αντικείμενο-κύκλος θα έχει πέντε πεδία με ονόματα diameter (τύπου int), xposition (τύπου int), yposition (τύπου int), color (τύπου string) και isvisible (τύπου boolean)
Αλληλεπίδραση αντικειμένων Σε ένα πρόγραμμα σε Java υπάρχουν πολλά αντικείμενα Είναι δυνατόν τα αντικείμενα αυτά να μην δημιουργούνται πάντα από το χρήστη με ξεχωριστές εντολές, δηλαδή, δημιουργείται το 1ο αντικείμενο (ή ένας αριθμός αντικειμένων) και όλα τα υπόλοιπα αντικείμενα δημιουργούνται άμεσα ή έμμεσα από το αντικείμενο αυτό Ένα αντικείμενο λοιπόν μπορεί να δημιουργεί άλλα αντικείμενα, με τα οποία επικοινωνεί καλώντας τις μεθόδους τους Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 30
Πηγαίος κώδικας Σε κάθε κλάση αντιστοιχεί και ο αντίστοιχος πηγαίος κώδικας. Ο πηγαίος κώδικας μιας κλάσης καθορίζει τη δομή και τη συμπεριφορά, δηλαδή τα πεδία και τις μεθόδους, των αντικειμένων της κλάσης. Η γενική μορφή μιας κλάσης είναι η εξής: public class <όνομα_κλάσης> πεδία (fields) κατασκευαστές (constructors) μέθοδοι (methods) Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 31
Εμφάνιση του πηγαίου κώδικα μιας κλάσης public class Circle private int diameter; private int xposition; private int yposition; private String color; private boolean isvisible; Τα πεδία της κλάσης Circle /** * Δημιουργία ενός νέου κύκλου στην προκαθορισμένη θέση και * με το προκαθορισμένο χρώμα. */ public Circle() diameter = 30; xposition = 20; yposition = 60; color = "blue"; isvisible = false; Κατασκευαστής για την αρχικοποίηση του νέου κύκλου Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 32
Εμφάνιση του πηγαίου κώδικα μιας κλάσης /** * Εμφάνιση του κύκλου, αν δεν είναι ήδη ορατός. */ public void makevisible() isvisible = true; draw(); Από την υπογραφή της μεθόδου makevisible() προκύπτει ότι η μέθοδος: 1) δεν έχει καμία παράμετρο 2) δεν επιστρέφει καμία τιμή... /** * Αλλαγή χρώματος. Τα αποδεκτά χρώματα είναι "red", "yellow", "blue", * "green", "magenta" και "black". */ public void changecolor(string newcolor) color = newcolor; draw(); Μέθοδος για την αλλαγή του χρώματος του κύκλου. Παράμετρος με όνομα newcolor, τύπου String για το «πέρασμα» του νέου χρώματος στη μέθοδο Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 33
Μέθοδοι που επιστρέφουν τιμές Μέθοδοι με παραμέτρους αντικείμενα Στα προηγούμενα παραδείγματα παρουσιάσαμε μεθόδους χωρίς παραμέτρους ή με παραμέτρους τύπου int και String, οι οποίες δεν επέστρεφαν καμία τιμή. Ωστόσο, υπάρχουν και μέθοδοι που έχουν ως παραμέτρους ένα ή περισσότερα αντικείμενα, καθώς επίσης και μέθοδοι που η εκτέλεσή τους έχει ως αποτέλεσμα την επιστροφή κάποιας τιμής ο τύπος της οποίας δηλώνεται στην επικεφαλίδα/υπογραφή της Όλες αυτές οι πληροφορίες παρέχονται από την υπογραφή της μεθόδου, όπως θα δούμε στη συνέχεια Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 34
Μέθοδοι που επιστρέφουν τιμές Μέθοδοι με παραμέτρους αντικείμενα public class Student private String name; private String id; private int credits; // το πλήρες όνομα του σπουδαστή // ο κωδικός του σπουδαστή // η βαθμολογία του σπουδαστή /** * Δημιουργία σπουδαστή με όνομα και κωδικό που δίνει ο χρήστης. */ public Student(String fullname, String studentid) /** name = fullname; id = studentid; credits = 0; * Επιστροφή του ονόματος του σπουδαστή. */ public String getname() Η μέθοδος επιστρέφει μια τιμή τύπου String, δηλαδή ένα αλφαριθμητικό. Αν μια μέθοδος δεν επιστρέφει καμία τιμή return name; χρησιμοποιείται το void. Η τιμή που επιστρέφεται από τη μέθοδο καθορίζεται με την εντολή return. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 35
Μέθοδοι που επιστρέφουν τιμές Μέθοδοι με παραμέτρους αντικείμενα public class LabClass private String instructor; private String room; private String timeandday; private List students; private int capacity; /** * Προσθήκη φοιτητή στο εργαστήριο */ public void enrolstudent(student newstudent) if(students.size() == capacity) else System.out.println("The class is full, you cannot enrol."); students.add(newstudent); Η παράμετρος της μεθόδου είναι ένα αντικείμενο - σπουδαστής. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 36
Άρα... Τα αντικείμενα έχουν μεθόδους που χρησιμοποιούμε για να επικοινωνήσουμε με αυτά Μπορούμε να χρησιμοποιήσουμε μία μέθοδο για να κάνουμε μία αλλαγή σε ένα αντικείμενο ή να πάρουμε πληροφορίες από αυτό Οι μέθοδοι μπορούν να έχουν παραμέτρους, και οι παράμετροι έχουν τύπους Οι μέθοδοι έχουν τύπους επιστροφής που καθορίζουν τον τύπο των δεδομένων που επιστρέφονται Αν ο τύπος είναι void τότε δεν επιστρέφουν τίποτα Τα αντικείμενα αποθηκεύουν τα δεδομένα σε πεδία (που έχουν τύπους) -> Κατάσταση αντικειμένου
... Τα αντικείμενα δημιουργούνται από ορισμούς κλάσεων που έχουν γραφτεί σε συγκεκριμένη γλώσσα προγραμματισμού, π.χ Java Για να μάθουμε να αναπτύσσουμε προγράμματα σε Java, πρέπει να μάθουμε πώς να γράφουμε ορισμούς κλάσεων, συμπεριλαμβανομένων πεδίων και μεθόδων, και πώς να συνδυάζουμε αυτές τις κλάσεις σωστά
Εμβέλεια μεταβλητής Η εμβέλεια μιας μεταβλητής καθορίζει το τμήμα του πηγαίου κώδικα από όπου μπορεί να προσπελαστεί η μεταβλητή Μία τυπική παράμετρος είναι διαθέσιμη σε ένα αντικείμενο μόνο μέσα στο σώμα του κατασκευαστή ή της μεθόδου που τη δηλώνει Λέμε ότι η εμβέλεια μιας παραμέτρου περιορίζεται στο σώμα του κατασκευαστή ή της μεθόδου όπου δηλώνεται Αντίθετα, η εμβέλεια ενός πεδίου επεκτείνεται σε όλο τον ορισμό της κλάσης μπορεί να προσπελαστεί από οποιοδήποτε αντικείμενο μέσα στην ίδια κλάση Γενικότερα, η εμβέλεια (scope) μιας μεταβλητής καθορίζει το τμήμα του πηγαίου κώδικα από το οποίο η μεταβλητή είναι προσπελάσιμη.
Πώς γράφουμε τη refundbalance? public int refundbalance() int amounttorefund; amounttorefund = balance; balance = 0; return amounttorefund; Τι είδους μεταβλητή είναι η amounttorefund? Πεδίο? ΟΧΙ τα πεδία ορίζονται έξω από τις μεθόδους Παράμετρος? ΟΧΙ οι παράμετροι ορίζονται στην επικεφαλίδα της μεθόδου
Πώς γράφουμε τη refundbalance? Η amounttorefund είναι τοπική μεταβλητή Μεταβλητές που δηλώνονται και χρησιμοποιούνται μέσα σε μία μέθοδο Δημιουργούνται όταν καλείται η μέθοδος και καταστρέφονται όταν η μέθοδος ολοκληρώνεται Η εμβέλεια και η διάρκεια ζωής τους περιορίζονται σε εκείνες της μεθόδου Συνηθισμένο η αρχικοποίηση να γίνεται κατά τη δήλωση int amounttorefund = balance; Οι δηλώσεις τοπικών μεταβλητών ποτέ δεν περιέχουν τη λέξη private ή public ΠΡΟΣΟΧΗ: Μία τοπική μεταβλητή που έχει το ίδιο όνομα με ένα πεδίο δεν επιτρέπει την προσπέλαση του πεδίου μέσα στη μέθοδο
Γιατί τοπική μεταβλητή? Tι θα γινόταν με τα παρακάτω? public int refundbalance() balance = 0; return balance; public int refundbalance() return balance; balance = 0; Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Πεδία, παράμετροι και τοπικές μεταβλητές Και τα τρία είδη μεταβλητών αποθηκεύουν τιμές που ταιριάζουν στον τύπο ορισμού τους Τα πεδία ορίζονται έξω από τους κατασκευαστές και τις μεθόδους αποθηκεύουν δεδομένα που υφίστανται σε όλη τη διάρκεια ζωής αντικειμένου, διατηρούν την τρέχουσα κατάσταση του αντικειμένου και έχουν διάρκεια ζωής ίδια με του αντικειμένου τους έχουν εμβέλεια σε όλη την κλάση Οι τυπικές παράμετροι και οι τοπικές μεταβλητές υφίστανται μόνο για την περίοδο που εκτελείται ένας κατασκευαστής ή μία μέθοδος ενεργούν ως προσωρινές θέσεις αποθήκευσης
Πεδία, παράμετροι και τοπικές μεταβλητές Οι τυπικές παράμετροι ορίζονται στην επικεφαλίδα ενός κατασκευαστή ή μιας μεθόδου λαμβάνουν τις τιμές απέξω, παίρνοντας αρχικές τιμές από τις τιμές των πραγματικών παραμέτρων που αποτελούν τμήμα της κλήσης η εμβέλειά τους περιορίζεται στον κατασκευαστή ή τη μέθοδο που τους ορίζει Οι τοπικές μεταβλητές ορίζονται μέσα στο σώμα ενός κατασκευαστή ή μιας μεθόδου αρχικοποιούνται και χρησιμοποιούνται μόνο μέσα στο σώμα του κατασκευαστή ή της μεθόδου που ορίζονται πρέπει να αρχικοποιούνται πριν χρησιμοποιηθούν σε μία παράσταση δεν τους δίνεται προκαθορισμένη τιμή η εμβέλειά τους περιορίζεται στο μπλοκ ορισμού τους
Ανάθεση Η μικρής διάρκειας ζωής τιμή μιας παραμέτρου αποθηκεύεται σε ένα πεδίο με την εντολή ανάθεσης: variable = expression (παράσταση); price = ticketcost; Ο τύπος της παράστασης πρέπει να συμφωνεί με τον τύπο της μεταβλητής στην οποία ανατίθεται Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Μέθοδοι Οι μέθοδοι υλοποιούν τις λειτουργίες που μπορούν να εκτελέσουν τα αντικείμενα μιας κλάσης, ή αλλιώς περιγράφουν τον τρόπο με τον οποίο ένα αντικείμενο εκτελεί μια λειτουργία. Οι μέθοδοι μπορούν να χωριστούν σε δύο κατηγορίες: Μεθόδους πρόσβασης (accessors): πρόκειται για μεθόδους που προσπελάζουν τα πεδία ενός αντικειμένου και επιστρέφουν ή εμφανίζουν πληροφορίες για την κατάστασή του Μεθόδους μετάλλαξης (mutators): πρόκειται για μεθόδους που αλλάζουν την κατάσταση ενός αντικειμένου, αλλάζουν δηλαδή τις τιμές ενός ή περισσότερων πεδίων. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 46
Μέθοδοι public <τύπος-επιστρ/νης-τιμής ή void> <όνομα-μεθόδου> ( λίστα-παραμέτρων ) δηλώσεις Σε όποια κατηγορία και να ανήκει μία μέθοδος αποτελείται από δύο τμήματα: την επικεφαλίδα (header) ή αλλιώς την υπογραφή (signature) της μεθόδου στην οποία παρέχονται οι εξής πληροφορίες: εντολές το όνομα της μεθόδου, αν επιστρέφει ή όχι κάποια τιμή και ποιες είναι οι παράμετροί της (εφόσον υπάρχουν). public int getprice() είναι μέθοδος και όχι πεδίο γιατί ακολουθείται από ζεύγος παρενθέσεων. Στο τέλος της υπογραφής δεν υπάρχει ; H getprice Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 47
Μέθοδοι Αν η μέθοδος δεν επιστρέφει καμία τιμή αυτό δηλώνεται με τη λέξη void ενώ αν επιστρέφει δηλώνεται ο τύπος της (π.χ. int, boolean) πριν το όνομα της μεθόδου. Το όνομα και ο τύπος των παραμέτρων δηλώνεται μετά το όνομα της μεθόδου μέσα σε παρενθέσεις. Οι παρενθέσεις ( ) είναι απαραίτητες ακόμα και αν η μέθοδος δεν έχει καμία παράμετρο. το σώμα (body) της μεθόδου που περιλαμβάνει δηλώσεις και εντολές και καθορίζει τι συμβαίνει σε ένα αντικείμενο όταν καλείται η μέθοδος. Το σώμα της μεθόδου περικλείεται σε αγκύλες, και όπως και κάθε σύνολο δηλώσεων και εντολών που περικλείεται σε αγκύλες ονομάζεται αλλιώς και μπλοκ (block). Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 48
Μέθοδοι πρόσβασης (Accessors) Οι μέθοδοι αυτής της κατηγορίας επιστρέφουν κάποια τιμή αφού ολοκληρωθεί η εκτέλεσή τους - στο σημείο από όπου έγινε η κλήση τους. Αυτό επιτυγχάνεται συνήθως με την εντολή return. Βέβαια, αυτό δεν είναι κανόνας, αφού και μια μέθοδος που απλά τυπώνει πληροφορίες για την κατάσταση ενός αντικειμένου χαρακτηρίζεται ως μέθοδος πρόσβασης. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 49
Μέθοδοι πρόσβασης Visibility modifier Method name Return type public int getprice() return price; Parameter list (empty) Return statement: επιστρέφει τιμή που συμφωνεί με τον επιστρεφόμενο τύπο στην υπογραφή της μεθόδου Start and end of method body (block) Όταν μία μέθοδος περιλαμβάνει εντολή επιστροφής τιμής, αυτή είναι πάντα η τελευταία εντολή αυτής της μεθόδου Ακόμα δηλαδή και στην περίπτωση που μετά από μια εντολή return υπάρχουν και άλλες εντολές, αυτές δεν πρόκειται ποτέ να εκτελεστούν. Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Μέθοδοι πρόσβασης Υπάρχουν τουλάχιστον δύο σημαντικές διαφορές ανάμεσα στις υπογραφές του κατασκευαστή TicketMachine και της μεθόδου getprice: public TicketMachine(int ticketcost) public int getprice() Η μέθοδος έχει έναν επιστρεφόμενο τύπο (return type), ενώ ο κατασκευαστής δεν έχει επιστρεφόμενο τύπο. Ο επιστρεφόμενος τύπος γράφεται ακριβώς πριν το όνομα της μεθόδου Ο κατασκευαστής έχει μία τυπική παράμετρο, ticketcost, ενώ η μέθοδος καμία μόνο ένα ζεύγος κενών παρενθέσεων Ένας κατασκευαστής δεν μπορεί να έχει επιστρεφόμενο τύπο. Αντίθετα, τόσο οι κατασκευαστές όσο και οι μέθοδοι μπορούν να έχουν οποιοδήποτε αριθμό τυπικών παραμέτρων ή και καμία
Μέθοδοι μετάλλαξης Οι μέθοδοι μετάλλαξης αλλάζουν την κατάσταση ενός αντικειμένου! Έχουν παρόμοια δομή με επικεφαλίδα και σώμα Η αλλαγή της κατάστασης πετυχαίνεται με την αλλαγή της τιμής ενός ή περισσοτέρων πεδίων Τυπικά περιέχει εντολές ανάθεσης Τυπικά λαμβάνει παραμέτρους Μια άμεση συνέπεια αυτού του γεγονότος έγκειται στο γεγονός ότι ένα αντικείμενο μπορεί να παρουσιάσει διαφορετική συμπεριφορά πριν και μετά την εκτέλεση μιας μεθόδου. Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Μέθοδοι μετάλλαξης Visibility modifier Method name Return type Parameter public void insertmoney(int amount) balance = balance + amount; Field being mutated Assignment statement: επιστρέφει τιμή που συμφωνεί με τον επιστρεφόμενο τύπο στην υπογραφή της μεθόδου Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Ανακεφαλαιώνοντας... Κλάση Όνομα πεδία, κατασκευαστής, μέθοδοι Πεδία αποθηκεύουν δεδομένα για την κατάσταση του αντικειμένου Κατασκευαστές διαμορφώνουν μία αρχική κατάσταση όταν δημιουργείται το αντικείμενο, οπότε το αντικείμενο μπορεί να ανταποκρίνεται σωστά σε κλήσεις μεθόδων αμέσως μετά τη δημιουργία του Μέθοδοι υλοποιούν την καθορισμένη συμπεριφορά των αντικειμένων της κλάσης Μέθοδοι πρόσβασης παρέχουν πληροφορίες για την κατάσταση του αντικειμένου Μέθοδοι μετάλαξης αλλάζουν την κατάστασή του
Ανακεφαλαιώνοντας... Οι κατασκευαστές έχουν το ίδιο όνομα με την κλάση όπου ορίζονται ΔΕΝ έχουν επιστρεφόμενο τύπο Και οι κατασκευαστές και οι μέθοδοι μπορούν να παίρνουν παραμέτρους Οι μη κενοί επιστρεφόμενοι τύποι επιτρέπουν να μεταβιβάζουμε αποτέλεσμα έξω από μία μέθοδο
Βρείτε τα λάθη... public class CokeMachine private price; public CokeMachine() price = 300 public int getprice return Price; Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Βρείτε τα λάθη... public class CokeMachine private int price; public CokeMachine() price = 300; public int getprice() return Price; Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling
Βρείτε τα λάθη... public void getage() return age;
Βρείτε τα λάθη... public void int getage() return age;
Πηγές/Acknowledgements http://java.sun.com/j2se H. M. Deitel, P. J. Deitel, Java Προγραμματισμός, 6η έκδοση, Μ. Γκιούρδας, 2006 D. Barnes, M. Kolling, Αντικειμενοστρεφής Προγραμματισμός σε Java, Κλειδάριθμος, 2008 Βασίλης Χριστοφίδης, Αντικειμενοστρεφής Προγραμματισμός, Πανεπιστήμιο Κρήτης Κ. Τσαγκάρης, Εισαγωγή στις εφαρμογές της Java, Πανεπιστήμιο Πειραιώς Jones, Evan, Adam Marcus, and Eugene Wu. 6.092 Introduction to Programming in Java,January IAP 2010. (Massachusetts Institute of Technology: MIT OpenCourseWare), http://ocw.mit.edu (Accessed 10 Mar, 2013). License: Creative Commons BY-NC-SA