Προγραµµατισµό. Ηγλώσσααντικειµενοστραφούς. Ορίζοντας κλάσεις I. Εισαγωγικά

Σχετικά έγγραφα
Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Κλάσεις και Αντικείµενα

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Αντικειμενοστρεφής Προγραμματισμός

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Βασικά Στοιχεία της Java

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιεπαφές και Εσωτερικές κλάσεις Interfaces and Inner Classes. ιεπαφές - Interfaces

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Βασικά Στοιχεία της Java

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Βασικά της γλώσσας JAVA

Αντικειµενοστρεφής Προγραµµατισµός

Λογισµικό (Software SW) Γλώσσες

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Αντικειμενοστρεφής Προγραμματισμός

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Συλλογές και Επαναλήπτες. Συλλογές - Collections

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιαχείριση Εξαιρέσεων. Εισαγωγή στη ιαχείριση Εξαιρέσεων

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

8. Μέθοδοι (Methods)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Αντικειμενοστρεφής Προγραμματισμός

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

ΗΓλώσσαΠρογραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Ελένη Τουσίδου, Ph.D.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Αντικείμενα στη Java. Παύλος Εφραιμίδης. Java Αντικείμενα στη Java 1

2.1 Αντικειµενοστρεφής προγραµµατισµός

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 4/3/2008

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Βασικά στοιχεία της Java

Mεταβλητές (variables) και Σταθερές (constants)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Προγραμματισμός Ι (ΗΥ120)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

3 Αλληλεπίδραση Αντικειμένων

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Wrapper Classes Τοποθέτηση Δεδομένων Κλήση Μεθόδων. Παναγιώτης Σφέτσος, PhD

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

Δομημένος Προγραμματισμός

Δομές ελέγχου ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Δομημένος Προγραμματισμός (ΤΛ1006)

Οντοκεντρικός Προγραμματισμός

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Στοιχειώδης προγραμματισμός σε C++

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Tοπικές μεταβλητές To αντικείμενο this Accessor, Mutator μέθοδοι

a = 10; a = k; int a,b,c; a = b = c = 10;

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

Προγραµµατιστικές Τεχνικές

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

Transcript:

Προγραµµατισµός ΙΙ Ηγλώσσααντικειµενοστραφούς προγραµµατισµού Java ιδάσκων ηµήτριος Κατσαρός, Ph.D. @ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας ιάλεξη 3η: 21/03/2007 & 22/03/2007 1 Ορίζοντας κλάσεις I 2 Εισαγωγικά Οι κλάσεις είναι το πιο σηµαντικό χαρακτηριστικό µιας γλώσσας που υποστηρίζει τον Αντικειµενοστραφή Προγραµµατισµό Οπρογραµµατισµός στη Java συνίσταται στον ορισµό ενός αριθµού κλάσεων Κάθε πρόγραµµαείναιµια κλάση Όλοτοβοηθητικόλογισµικό αποτελείται από κλάσεις Όλοι οι τύποι που ορίζονται από τον προγραµµατιστή είναι κλάσεις Οι κλάσεις είναι κεντρική έννοια στη Java 3 1

Ορισµοί κλάσεων Γνωρίζουµεήδηπώςναχρησιµοποιούµε κλάσεις καθώς και τα αντικείµενα που δηµιουργούνται από αυτές, και πώς να ενεργοποιούµετιςµεθόδους τους Για παράδειγµα, έχουµε ήδηχρησιµοποιήσει τις προκαθορισµένες κλάσεις String και Scanner Τώρα θα µάθουµε πώς να ορίζουµε τις δικές µας κλάσεις και τις µεθόδους τους, και πώς να δηµιουργούµε αντικείµενα από αυτές 4 Μια κλάση είναι ένας τύπος Μια κλάση είναι ένας ειδικός τύπος δεδοµένων ορισµένος από τον προγραµµατιστή, και παρέχεται η δυνατότητα να ορίζουµε µεταβλητές αυτού του τύπου Ητιµή µιαςκλάσηςείναιένααντικείµενο ή στιγµιότυπο (instance) της κλάσης Εάν A είναι µια κλάση, τότε οι φράσεις "bla is of type A," "bla is an object of the class A," και "bla is an instance of the class A" σηµαίνουν το ίδιο πράγµα Μια κλάση προσδιορίζει τους τύπους των δεδοµένων που µπορείναπεριέχειένα αντικείµενο, καθώς και τις ενέργειες που µπορεί να εκτελέσει 5 Τιµές primitive τύπων vs. Τιµές τύπου κλάσης Ένας primitive τύπος είναι ένα απλό κοµµάτι δεδοµένων Μια τιµήτύπουκλάσηςήαντικείµενο µπορεί να περιέχει περισσότερα από ένα κοµµάτια απλών δεδοµένων, καθώς επίσης και ενέργειες που αποκαλούνται µέθοδοι (methods) Όλα τα αντικείµενα µιαςκλάσηςέχουντιςίδιεςµεθόδους Όλα τα αντικείµενα µιαςκλάσηςέχουνταίδιακοµµάτια δεδοµένων (δηλ., όνοµα, τύπο, και αριθµό) Για ένα δεδοµένο αντικείµενο, κάθε κοµµάτι δεδοµένων µπορεί να κρατά µια διαφορετική τιµή 6 2

Τα περιεχόµενα του ορισµού µιας κλάσης Οορισµός µιαςκλάσηςκαθορίζειταδεδοµένα και τις µεθόδους που θα έχουν όλα τα αντικείµενά της Αυτά τα δεδοµένα και οι µέθοδοι αποκαλούνται συχνά µέλη (members) του αντικειµένου Τα δεδοµένα αποκαλούνται πεδία (fields) ή µεταβλητές στιγµιότυπου (instance variables) ΟΙ δηλώσεις των instance variable καιοιορισµοί των µεθόδων τοποθετούνται χωρίς ιδιαίτερη διάταξη (σειρά) µέσα στον ορισµό της κλάσης 7 Ο τελεστής new Ένα αντικείµενο µιαςκλάσηςονοµατίζεται ή δηλώνεται µε µια µεταβλητή του τύπου της κλάσης: ClassName classvar; Οτελεστήςnew πρέπει κατόπιν να χρησιµοποιηθεί για να δηµιουργήσουµετοαντικείµενο και να συσχετίσουµε µε αυτό το όνοµα τηςµεταβλητής: classvar = new ClassName(); Αυτά µπορούν να συνδυαστούν ως εξής: ClassName classvar = new ClassName(); 8 Instance variables και methods Οι instance variables µπορούν να οριστούν όπωςσταακόλουθαδυοπαραδείγµατα Παρατηρήστε τον modifier public (προς το παρόν): public String instancevar1; public int instancevar2; Γιανααναφερθούµε σεµια instance variable, τοποθετούµε µπροστά της το όνοµατου αντικειµένου ως εξής: objectname.instancevar1 objectname.instancevar2 9 3

Instance variables και methods Οι ορισµοί των µεθόδων διαιρούνται σε δυο τµήµατα: την κεφαλίδα (heading) και το σώµα της µεθόδου (method body): public void mymethod() Heading { code to perform some action Body and/or compute a value } Οι µέθοδοι ενεργοποιούνται χρησιµοποιώντας το όνοµα του καλούντος αντικειµένου και το όνοµατης µεθόδου ως εξής: classvar.mymethod(); Ηενεργοποίησηµιας µεθόδου είναι ισοδύναµη µε την εκτέλεση του σώµατος της µεθόδου 10 Ονόµατα αρχείων και θέσεις Υπενθύµιση: ένα αρχείο Java πρέπει να έχει το ίδιο όνοµα όπωςτοόνοµα της κλάσης που περιέχει και να έχει επέκταση αρχείου.java Για παράδειγµα, µια κλάση µε όνοµα MyClass πρέπει να βρίσκεται στο αρχείο µε όνοµα MyClass.java Προς το παρόν, το πρόγραµµά µας και όλες οι κλάσεις που θα χρησιµοποιεί θα βρίσκονται στον ίδιο φάκελο 11 Περισσότερα για τις µεθόδους Υπάρχουν δυο είδη µεθόδων: Μέθοδοι που υπολογίζουν και επιστρέφουν µια τιµή Μέθοδοι που εκτελούν µια ενέργεια Αυτό το είδος µεθόδου δεν επιστρέφει τιµή και αποκαλείται void µέθοδος Κάθε τύπος µεθόδου διαφέρει ελαφρά στο πώς δηλώνεται καθώς και πώς (συνήθως) ενεργοποιείται 12 4

Περισσότερα για τις µεθόδους Μια µέθοδος που επιστρέφει µια τιµή πρέπει να καθορίζει τον τύπο της επιστρεφόµενης τιµής στην κεφαλίδα της (heading): public typereturned methodname(paramlist) Μια µέθοδος void χρησιµοποιεί την keyword void στην κεφαλίδα της για να δείξει ότι δεν επιστρέφει κάποια τιµή: public void methodname(paramlist) 13 Η main είναι µια µέθοδος void Ένα πρόγραµµα στηjava είναι απλά µια κλάση που έχει τη µέθοδο main Όταν δίνουµε µια εντολή εκτέλεσης ενός Java προγράµµατος, το run-time σύστηµα ενεργοποιεί τη µέθοδο main Σηµειώστε ότι η main είναι µια µέθοδος void, as που σηµειώνεται στην κεφαλίδα της: public static void main(string[] args) 14 ηλώσεις return Το σώµα και των δυο τύπων των µεθόδων περιέχει µια λίστα δηλώσεων σε ζεύγος άγκιστρων public <void or typereturned> mymethod() { declarations Body statements } 15 5

ηλώσεις return Το σώµα µιας µεθόδου που επιστρέφει µια τιµή πρέπει επίσης να περιέχει µια ή περισσότερες δηλώσεις return Μια δήλωση return καθορίζει την τιµήπου επιστρέφεται και τερµατίζει την εκτέλεση της µεθόδου: return Expression; Η Expression µπορεί να είναι µια οποιαδήποτε έκφραση που αποτιµάται σε κάτι µε ίδιο τύπο µε αυτόν που καθορίζεται στην κεφαλίδα της µεθόδου 16 ηλώσεις return Μια µέθοδος void δεν χρειάζεται να περιέχει µια δήλωση return, εκτός και εάν υπάρχει µια κατάσταση που απαιτεί τον τερµατισµό τηςµεθόδου πριν εκτελεστεί ολόκληρο το σώµα της Στο πλαίσιο αυτό, αφού δεν επιστρέφεται κάποια τιµή, µια δήλωση return χρησιµοποιείται χωρίς κάποια έκφραση: return; 17 Ορισµοί µεθόδων Μια ενεργοποίηση µιας µεθόδου που επιστρέφει κάποια τιµή µπορεί να χρησιµοποιηθεί ως έκφραση οπουδήποτε µπορεί να χρησιµοποιηθεί µια τιµήτουtypereturned: typereturned trvariable; trvariable = objectname.methodname(); Μια ενεργοποίηση µιας µεθόδου void είναι απλά µια δήλωση: objectname.methodname(); 18 6

Οποιαδήποτε µέθοδος µπορεί να χρησιµοποιηθεί ως µέθοδος void Μια µέθοδος που επιστρέφει µια τιµή µπορεί επίσης να εκτελεί µια ενέργεια Εάν επιθυµούµε απλώς την ενέργεια, αλλά δεν χρειαζόµαστε την επιστρεφόµενη τιµή, µπορούµε να ενεργοποιήσουµε τηµέθοδο ως να ήταν µια µέθοδος void, και η επιστρεφόµενη τιµή θα απορριφθεί: objectname.returnedvaluemethod(); 19 Τοπικές µεταβλητές Μια µεταβλητή που δηλώνεται µέσα σε µια µέθοδο αποκαλείται τοπική µεταβλητή (local variable) Όλες οι µεταβλητές που δηλώνονται στη main είναι τοπικές µεταβλητές Όλες οι παράµετροι των µεθόδων είναι τοπικές µεταβλητές Εάν δυο µέθοδοι έχουν µια τοπική µεταβλητή µετοίδιο όνοµα, οι δυο µεταβλητές είναι εντελώς ξεχωριστές µεταβλητές 20 Καθολικές µεταβλητές Μερικέςγλώσσεςπρογραµµατισµού περιλαµβάνουν ένα άλλο τύπο µεταβλητής, που αποκαλείται καθολική µεταβλητή (global variable) ΗγλώσσαJava ΕΝ ΕΧΕΙ καθολικές µεταβλητές 21 7

Blocks Ένα block είναι ένα εναλλακτικό όνοµα γιαµια σύνθετη δήλωση, δηλ., ένα σύνολο δηλώσεων σε Java µέσα σε άγκιστρα,{} Μια µεταβλητή που δηλώνεται µέσα σε ένα block, δεν µπορεί να χρησιµοποιηθεί έξω από αυτό το block Αφού δηλωθεί µια µεταβλητή µέσα σε ένα block, το όνοµά τηςδενµπορεί να χρησιµοποιηθεί για τίποτε άλλο µέσα στον ορισµό της ίδιας µεθόδου 22 ήλωση µεταβλητών µέσα σε µια δήλωση for Μπορούµεναδηλώσουµε µια ή περισσότερες µεταβλητές στο τµήµα αρχικοποίησης της δήλωσης for Μια µεταβλητή που δηλώνεται έτσι θα είναι τοπική στο βρόχο for, και δεν µπορεί να χρησιµοποιηθεί εκτός του βρόχου Εάν πρέπει να χρησιµοποιήσουµετηµεταβλητή εκτός του βρόχου, τότε τη δηλώνουµε εκτός βρόχου 23 Παράµετροι primitive τύπου Οι µέθοδοι που είδαµε µέχρι στιγµής δεν είχαν παραµέτρους, και αυτό σηµατοδοτούνταν µεκενόζεύγος παρενθέσεωνστηνκεφαλίδατηςµεθόδου Μερικές µέθοδοι χρειάζονται να λαµβάνουν επιπλέον δεδοµένα διαµέσου µιας λίστας παραµέτρων (parameters) ώστε να εκτελέσουν την εργασία τους Αυτές οι παράµετροι αποκαλούνται επίσης και τυπικοί παράµετροι (formal parameters) 24 8

Παράµετροι primitive τύπου Η λίστα των παραµέτρων παρέχει µια περιγραφή των δεδοµένων που απαιτούνται από τη µέθοδο Καθορίζει τον αριθµό καιτοντύποδεδοµένων που απαιτούνται, τη σειρά µετηνοποίαπρέπεινα δοθούν, και το τοπικό όνοµα για τα δεδοµένα αυτά όπως θα χρησιµοποιηθούν στη µέθοδο public double mymethod(int p1, int p2, double p3) 25 Παράµετροι primitive τύπου Όταν ενεργοποιείται µια µέθοδος, οι κατάλληλες τιµές θα πρέπει να περάσουν στη µέθοδο µετηµορφή των ορισµάτων (arguments) Τα ορίσµατα αποκαλούνται επίσης πραγµατικοί παράµετροι (actual parameters) Οαριθµός και η σειρά των ορισµάτων πρέπει να ταιριάζει ακριβώς µε τα αντίστοιχα της λίστας παραµέτρων Οτύποςκάθεορίσµατος πρέπει να είναι συµβατός µετον τύπο της αντίστοιχης παραµέτρου int a=1,b=2,c=3; double result = mymethod(a,b,c); 26 Παράµετροι primitive τύπου Στο προηγούµενο παράδειγµα, η τιµή κάθε ορίσµατος (όχι το όνοµα της µεταβλητής) ενσωµατώνεται στην αντίστοιχη παράµετρο της µεθόδου Αυτός ο τρόπος ενσωµάτωσης ορισµάτων αντί για τις τυπικές παραµέτρους είναι γνωστός ως µηχανισµός κλήσης µε τιµή (call-byvalue mechanism) 27 9

Παράµετροι primitive τύπου Εάν ο τύπος του ορίσµατος και της παραµέτρου δεν ταιριάζουν ακριβώς, η Java θα επιχειρήσει έναν αυτόµατο µετασχηµατισµό τύπου Στο προηγούµενο παράδειγµα, ητιµή int του ορίσµατος c θα µετατραπεί σε έναν double Ένα όρισµα primitive τύπου µπορεί αυτόµατα να µετασχηµατιστεί σε έναν από τους επόµενους τύπους από αυτούς που εµφανίζονται στα δεξιά του: byte short int long float double char 28 Παράµετροι primitive τύπου Μια παράµετρος συχνά εκλαµβάνεται ως κενό ή placeholder το οποίο γεµίζει µετηντιµήτου αντίστοιχου ορίσµατος Όµως, µια παράµετρος είναι κάτι πολύ περισσότερο από αυτό: στην ουσία είναι µια τοπική µεταβλητή Όταν ενεργοποιείται µια µέθοδος, υπολογίζεται η τιµή του ορίσµατος, και η αντίστοιχη παράµετρος (δηλ., τοπική µεταβλητή) αρχικοποιείται σε αυτή τη τιµή Ακόµα καιεάνητιµή µιας τυπικής παραµέτρου µεταβληθεί µέσα σε µια µέθοδο (δηλ., χρησιµοποιηθεί ως τοπική µεταβλητή) ητιµή του ορίσµατος δεν µπορεί να µεταβληθεί 29 Τυπική παράµετροςωςτοπικήµεταβλητή (1/5) 30 10

Τυπική παράµετροςωςτοπικήµεταβλητή (2/5) 31 Τυπική παράµετροςωςτοπικήµεταβλητή (3/5) 32 Τυπική παράµετροςωςτοπικήµεταβλητή (4/5) 33 11

Τυπική παράµετροςωςτοπικήµεταβλητή (5/5) 34 Παγίδα: Χρήση των όρων Παράµετρος και Όρισµα εν πρέπει να µας προκαλεί έκπληξη όταν κάποιοι (ίσως και στις διαλέξεις του µαθήµατος αυτού) συχνά χρησιµοποιούνε τους δυο όρους ως αµοιβαία εναλλάξιµους Όταν βλέπουµε αυτούς τους όρους, θα προσδιορίζουµε τονόηµά τουςαπότα συµφραζόµενα 35 Ηπαράµετρος this Όλες οι instance variables έχουν το καλούν αντικείµενο να προηγείται της κλήσης τους, δηλ., <the calling object>. Εάν απαιτείται ένα explicit όνοµα γιατο καλούν αντικείµενο, µπορεί να χρησιµοποιηθεί η keyword this Η myinstancevariable πάντα σηµαίνει και είναι αµοιβαία εναλλάξιµη µετο this.myinstancevariable 36 12

Ηπαράµετρος this Η παράµετρος this πρέπει να χρησιµοποιείται εάν µια παράµετρος ή άλλη τοπική µεταβλητή µε τοίδιοόνοµα χρησιµοποιείται στη µέθοδο ιαφορετικά, όλαταστιγµιότυπα του ονόµατος της µεταβλητής θα ερµηνεύεται ως η τοπική µεταβλητή int somevariable = this.somevariable local instance 37 Ηπαράµετρος this Ηπαράµετρος this είναι ένα είδος κρυφής παραµέτρου Παρόλο που δεν εµφανίζεται στη λίστα παραµέτρων µιας µεθόδου, εξακολουθεί να είναι µια παράµετρος Όταν ενεργοποιείται µια µέθοδος, στο καλούν αντικείµενο αυτόµατα ενσωµατώνεται η this 38 Μέθοδοι που επιστρέφουν τιµή Boolean Μια ενεργοποίηση µιας µεθόδου που επιστρέφει µια τιµή τύπου boolean επιστρέφει είτε true είτε false Εποµένως, είναι κοινή πρακτική να χρησιµοποιούµε µια ενεργοποίηση µιας τέτοιας µεθόδου για να ελέγξουµε δηλώσεις και βρόχους εκεί όπου απαιτείται µια Boolean έκφραση if-else δηλώσεις, while βρόχοι, κ.τ.λ. 39 13

Οι µέθοδοι equals και tostring Η Java περιµένει κάποιες µεθόδους, όπως οι equals και tostring, να βρίσκονται σε όλες, ή σχεδόν σε όλες τις κλάσεις Οσκοπόςτηςequals, µια µέθοδος µετιµή boolean, είναι να συγκρίνει δυο αντικείµενατηςκλάσηςγιαναδούµεεάν ικανοποιούν την έννοια της ισότητας Σηµείωση: εν µπορούµε ναχρησιµοποιήσουµετο== για να συγκρίνουµε δυοαντικείµενα public boolean equals(classname objectname) Οσκοπόςτηςµεθόδου tostring είναι να επιστρέφει µια τιµή String που αντιπροσωπεύει τα δεδοµένα του αντικειµένου public String tostring() 40 Μέθοδοι ελέγχου Κάθε µέθοδος θα πρέπει να ελέγχεται σε ένα πρόγραµµα, στο οποίο είναι η µόνη µη ελεγµένη µέθοδος Ένα πρόγραµµα του οποίου ο σκοπός είναι να ελέγξει µια µέθοδο, λέγεται driver program Μια µέθοδος συχνά ενεργοποιεί άλλες µεθόδους, έτσι ένας τρόπος για να το κάνουµε αυτό είναι να ελέγξουµε πρώτα όλες τις µεθόδους που ενεργοποιούνται από αυτή, και κατόπιν να ελέγξουµε τη συγκεκριµένη µέθοδο Αυτό λέγεται έλεγχος από-κάτω-προς-τα-πάνω (bottom-up testing) Μερικές φορές είναι απαραίτητο να ελέγξουµε µια µέθοδο πριν από κάποια άλλη µέθοδο από την οποία εξαρτάται αλλά η οποία δεν έχει ελεγχθεί ή ολοκληρωθεί Στην περίπτωση αυτή, χρησιµοποιούµε µια απλοποιηµένη έκδοση της µεθόδου, που αποκαλείται stub, γιαναεπιστρέφειµια τιµή απλά για έλεγχο 41 Θεµελιώδης κανόνας για έλεγχο µεθόδων Κάθε µέθοδος θα πρέπει να ελέγχεται σε ένα πρόγραµµα, στο οποίο κάθε άλλη µέθοδος στο πρόγραµµαελέγχου έχει ήδη ελεγχθεί εξαντλητικά και αποσφαλµατωθεί 42 14

Απόκρυψη πληροφορίας και Ενθυλάκωση Απόκρυψη Πληροφορίας (Information hiding) είναι η πρακτική του διαχωρισµού του πώς να χρησιµοποιήσουµε µια κλάση από τις λεπτοµέρειες υλοποίησής της Αφαίρεση (Abstraction) είναι ένας άλλος όρος που χρησιµοποιείται για να εκφράσει την έννοια της αγνόησηςτωνλεπτοµερειών ώστε να αποφύγουµε τηνυπερφόρτωσηµε πληροφορίες (information overload) Ενθυλάκωση (Encapsulation) σηµαίνει ότι τα δεδοµένα και οι µέθοδοι µιαςκλάσηςσυνδυάζονταισεµια ενόττηα (δηλ., σε ένα αντικείµενο της κλάσης), το οποίο αποκρύπτει τις λεπροµέρειες υλοποίησης Ηγνώσητωνλεπτοµερειών είναι µη αναγκαία, γιατί η αλληλεπίδραση µε το αντικείµενο λαµβάνει χώρα διαµέσου µιας καλά καθορισµένης και απλής διεπαφής Στη Java, η απόκρυψη πληροφοριών γίνεται µε τον προσδιορισµό τους ως private 43 Ένα ζεύγος ακρώνυµων: API και ADT Το API ή application programming interface για µια κλάση είναι η περιγραφή του πώς να χρησιµοποιήσουµε τηνκλάση Ένας προγραµµατιστής χρειάζεται να διαβάσει µόνο το API ώστε να χρησιµοποιήσει µια καλά σχεδιασµένη κλάση Ένας ADT ή abstract data type είναι ένας τύπος δεδοµένων που έχει γραφεί µε χρήση ορθών τεχνικών απόκρυψης πληροφορίας 44 public και private modifiers Ο modifier public (δηµόσιος) σηµαίνει ότι δεν υπάρχουν περιορισµοί στο πού µπορεί να χρησιµοποιηθεί µια instance variable ή µια µέθοδος της κλάσης Ο modifier private (ιδιωτικός) σηµαίνει ότι µια instance variable ή µέθοδος δεν µπορεί να προσπελαστεί µε όνοµα (accessed by name) εκτός της κλάσης Θεωρείται καλή προγραµµατιστική τακτική να δηλώνουµε όλες τις instance variables ως private Οι περισσότερες µέθοδοι είναι public, και έτσι παρέχουν ελεγχόµενη προσπέλαση στο αντικείµενο Συνήθως, οι µέθοδοι δηλώνονται ως private µόνο εάν χρησιµοποιούνται ως βοηθητικές µέθοδοι για άλλες µεθόδους της κλάσης 45 15

Accessor και Mutator µέθοδοι Οι Accessor µέθοδοι επιτρέπουν στον προγραµµατιστή να πάρει (διαβάσει) την τιµήτωνinstance variables ενός αντικειµένου Τα δεδοµένα µπορούν να προσπελαστούν, αλλά όχι να τροποποιηθούν Το όνοµα µιας accessor µεθόδου συνήθως αρχίζει µε τηλέξη get Οι Mutator µέθοδοι επιτρέπουν στον προγραµµατιστή να αλλάξει την τιµήτωνinstance variables του αντικειµένου µε ελεγχόµενο τρόπο Τα εισερχόµενα δεδοµένα συνήθως ελέγχονται και φιλτράρονται Το όνοµα µιας mutator µεθόδου συνήθως αρχίζει µε τηλέξη set 46 Ενθυλάκωση (Encapsulation) 47 Κάθε κλάση έχει πρόσβαση στα ιδιωτικά µέλη όλων των αντικειµένων της κλάση αυτής Μέσα στον ορισµό µιας κλάσης, τα ιδιωτικά (private) µέλη οποιουδήποτε αντικειµένου της κλάσης µπορούν να προσπελαστούν, όχι µόνο τα ιδιωτικά µέλη του καλούντος αντικειµένου 48 16

Οι mutator µέθοδοι θα µπορούσαν να επιστρέφουν µια Boolean τιµή Μερικές mutator µέθοδοι σηµατοδοτούν µήνυµα σφάλµατος και τερµατίζουν το πρόγραµµα όταντους δίνονται τιµές που δεν έχουν νόηµα για τη λογική του προγράµµατος Μια εναλλακτική προσέγγιση είναι να κάνουµετη mutator µέθοδο να ελέγχει τις τιµές, αλλά να µην τερµατίζει το πρόγραµµα Εναλλακτικά, να επιστρέφει µια boolean τιµή, και να αφήνει το καλούν πρόγραµµα να χειριστεί τις περιπτώσεις όπου οι αλλαγές δεν ακολουθούν τη λογική του προγράµµατος 49 Preconditions και Postconditions Η precondition µιας µεθόδου δηλώνει αυτό που υποτίθεται ότι είναι αληθές όταν καλείται η µέθοδος Η postcondition µιας µεθόδου δηλώνει αυτό που θα είναι αληθές µετά την εκτέλεση της µεθόδου, υπό την προϋπόθεση ότι η precondition ισχύει Είναικαλήπρακτικήνασκεφτόµαστε πάντα µε όρους preconditions και postconditions όταν σχεδιάζουµε µια µέθοδο, και όταν γράφουµε τα σχόλια για τη µέθοδο 50 Υπερφόρτωση (Overloading) Overloading είναι όταν δυο ή περισσότερες µέθοδοι στην ίδια κλάση έχουν το ίδιο όνοµα Γιαναείναιέγκυρες, δυο οποιοιδήποτε ορισµοί για τη µέθοδο πρέπει να έχουν διαφορετικές ι (signatures) Μια υπογραφή αποτελείται από το όνοµα τηςµεθόδου µαζί µε τη λίστα των παραµέτρων της ιαφορετικές υπογραφές πρέπει να έχουν διαφορετικό αριθµό και/ήτύπωνδεδοµένων για τις παραµέτρους 51 17

Overloading και αυτόµατη µετατροπή τύπων Εάν η Java δεν µπορεί να βρει µια µέθοδο της οποίας η υπογραφή ταιριάζει ακριβώς µε την ενεργοποίηση της µεθόδου, θα προσπαθήσει να χρησιµοποιήσει την τεχνική της αυτόµατης µετατροπής τύπων Η αλληλεπίδραση overloading και αυτόµατης µετατροπής τύπων µπορείναέχειαπρόβλεπτα αποτελέσµατα Σε µερικές περιπτώσεις overloading, εξαιτίας της αυτόµατης µετατροπής τύπων, η ενεργοποίηση µιας απλής µεθόδου µπορεί να αναλυθεί σε πολλαπλούς τρόπους ιφορούµενη ενεργοποίηση µεθόδου (ambiguous method invocation) θα προκαλέσει λάθος στη Java 52 Παγίδα: εν µπορούµεναεπιτύχουµε overload µε βάση τον επιστρεφόµενο τύπο Ηυπογραφήµιας µεθόδου αποτελείται µόνο από το όνοµά της και τους τύπους των ορισµάτων της Ηυπογραφήδεν περιλαµβάνει τον επιστρεφόµενο τύπο Η Java δεν επιτρέπει µεθόδους µε τοίδιο όνοµα και διαφορετικούς επιστρεφόµενους τύπους στην ίδια κλάση 53 εν µπορούµε νακάνουµε overload τους τελεστές στη Java Παρόλο που πολλές γλώσσες προγραµµατισµού, όπως η C++, επιτρέπουν την υπερφόρτωση τελεστών (+, -, etc.), η Java δεν το επιτρέπει Μπορούµε µόνο να χρησιµοποιήσουµε το όνοµα µιας µεθόδου και κανονική σύνταξη µιας µεθόδου για να επιτύχουµε τις λειτουργίες ποτ επιθυµούµε 54 18

Κατασκευαστές (Constructors) Ένας constructor είναι ένας ειδικός τύπος µεθόδου που υπάρχει για να αρχικοποιούµετις instance variables ενός αντικειµένου: public ClassName(anyParameters){code} Ένας constructor ΠΡΕΠΕΙ να έχει το ίδιο όνοµα µε αυτό της κλάσης Ένας constructor δεν έχει επιστρεφόµενο τύπο, ΟΥΤΕ void Συνήθως κάνουµε υπερφόρτωση των constructors 55 Κατασκευαστές (Constructors) Ένας constructor καλείται όταν κατασκευάζεται ένα αντικείµενο της κλάσης µετοντελεστήnew ClassName objectname = new ClassName(anyArgs); Το όνοµατουconstructor και λίστα των ορισµάτων (εάν υπάρχουν κάποια) πρέπει να έπονται του τελεστή new Αυτός είναι ο µόνος έγκυρος τρόπος να ενεργοποιήσουµε έναν constructor: ένας constructor ΕΝ µπορεί να ενεργοποιηθεί όπως µια συνηθισµένη µέθοδος Εάν ένας constructor ενεργοποιηθεί ξανά (µεχρήσητου new), το πρώτο αντικείµενο απορρίπτεται και δηµιουργείται ένα εντελώς νέο Εάν χρειαστεί να αλλάξουµε τιςτιµές των instance variables του αντικειµένου, θα πρέπει να χρησιµοποιήσουµετιςmutator µεθόδους 56 Μπορούµε να ενεργοποιήσουµε µια άλλη µέθοδο µέσα σε έναν constructor Η πρώτη ενέργεια που λαµβάνει χώρα από έναν constructor είναι να δηµιουργηθεί ένα αντικείµενο µε instance variables Εποµένως, είναι έγκυρο να ενεργοποιήσουµε µια άλλη µέθοδο µέσα στον ορισµόενόςconstructor, αφού το αντικείµενο που µόλις δηµιουργήθηκε είναι το καλούν αντικείµενο Για παράδειγµα, οι mutator µέθοδοι µπορούν να χρησιµοποιηθούν για να θέσουµετιςτιµές των instance variables Είναι επίσης δυνατό ένας constructor να ενεργοποιήσει κάποιον άλλο 57 19

Ένας constructor έχει την παράµετρο this Όπως κάθε συνηθισµένη µέθοδος, κάθε constructor έχει την παράµετρο this Ηπαράµετρος this µπορεί να χρησιµοποιηθεί ρητά, αλλά συνήθως εκλαµβάνεται ως υπάρχουσα ακόµα και εάν δεν γραφεί Είδαµε ότι η πρώτη ενέργεια που γίνεται από έναν constructor είναι να δηµιουργήσει αυτόµατα ένα αντικείµενο µε instance variables Κατόπιν, µέσα στον ορισµότουconstructor, η παράµετρος this αναφέρεται στο αντικείµενο που δηµιουργήθηκε από τον constructor 58 Φτιάξτε έναν constructor χωρίς ορίσµατα Εάν δεν φτιάξετε κανέναν constructor στην κλάση σας, η Java αυτόµαταθαδηµιουργήσει έναν εξ ορισµού (default) ή χωρίς ορίσµατα (no-argument) constructor που δεν έχει κανένα όρισµα, δεν εκτελεί αρχικοποιήσεις, αλλά επιτρέπει τη δηµιουργία ενός αντικειµένου Εάν φτιάξετε έστω και έναν constructor στην κλάση σας, η Java δεν θα φτιάξει τον default constructor Εάν φτιάξετε κάποιους constructors στην κλάση σας, µην ξεχάσετε να φτιάξετε και τον no-argument constructor 59 Εξ ορισµού αρχικοποιήσεις µεταβλητών Οι instance variables αρχικοποιούνται αυτόµατα στη Java Οι boolean τύποι αρχικοποιούνται στην τιµή false Οι άλλοι primitive τύποι αρχικοποιούνται στο µηδέν του τύπου τους Οι τύποι κλάσεων αρχικοποιούνται στο null Όµως, είναι ορθότερη πρακτική να αρχικοποιούµερητάτιςinstance variables στον constructor Σηµείωση: Οι local variables δεν αρχικοποιούνται αυτόµατα 60 20

ΗκλάσηStringTokenizer ΗκλάσηStringTokenizer χρησιµοποιείται για να ανακτούµε λέξεις ή tokens σε ένα String που αποτελείται από πολλές λέξεις Μπορούµεναχρησιµοποιήσουµε χαρακτήρες whitespace για να διαχωρίσουµε κάθε token, ή µπορούµεναορίσουµετουςχαρακτήρεςπου επιθυµούµεωςδιαχωριστές Για να χρησιµοποιήσουµε την κλάση StringTokenizer, πρέπει να βάλουµετοεξήςστην αρχήτουαρχείουπηγαίουκώδικα: import java.util.stringtokenizer; 61 Μερικές µέθοδοι της κλάσης StringTokenizer (1/2) 62 Μερικές µέθοδοι της κλάσης StringTokenizer (2/2) 63 21

Ορίζοντας κλάσεις II 64 Μέθοδοι static Μια static µέθοδος είναι εκείνη που µπορεί να χρησιµοποιηθεί χωρίς να υπάρχει καλούν αντικείµενο Μια static µέθοδος εξακολουθεί να ανήκει σε κάποια κλάση, και ο ορισµός της δίνεται µέσα στον ορισµό της κλάσης Όταν ορίζεται µια static µέθοδος, η keyword static τοποθετείται στην κεφαλίδα της µεθόδου public static returnedtype mymethod(parameters) {... } Οι static µέθοδοι ενεργοποιούνται χρησιµοποιώντας το όνοµα της κλάσης στηθέσητουκαλούντοςαντικειµένου returnedvalue = MyClass.myMethod(arguments); 65 Παγίδα: Ενεργοποίηση µιας non-static µεθόδου µέσα σε µια static µέθοδο Μια static µέθοδος δεν µπορεί να αναφερθεί σε µια instance variable της κλάσης, και δεν µπορεί να ενεργοποιήσει (καλέσει) µια non-static µέθοδο της κλάσης Μια static µέθοδος δεν έχει παράµετρο this, και συνεπώς δεν µπορεί να χρησιµοποιήσει µια instance variable ή µέθοδο που έχουν µια έµµεσήήάµεση this για το καλούν αντικείµενο Μια static µέθοδος µπορεί να ενεργοποιήσει µια άλλη static µέθοδο 66 22

Υπόδειξη: Μπορούµε ναβάλουµε µια main σε οποιαδήποτε κλάση Παρόλο που η µέθοδος main συχνά βρίσκεται από µόνη της σε µια κλάση χωριστά από τις άλλες κλάσειςενόςπρογράµµατος, µπορεί να περιέχεται σε µια κανονική κλάση Με τον τρόπο αυτό, η κλάση στην οποία περιέχεται µπορεί να χρησιµοποιηθεί για να δηµιουργηθούν αντικείµενα άλλων κλάσεων ή να χρησιµοποιηθεί για να εκτελεστεί ως πρόγραµµα Μια µέθοδος main που περιλαµβάνεται σε µια κανονική κλάση είναι εξαιρετικά χρήσιµηότανπεριέχει διαγνωστικό κώδικα για την κλάση 67 Μια άλλη κλάση µε main (1/4) 68 Μια άλλη κλάση µε main (2/4) 69 23

Μια άλλη κλάση µε main (3/4) 70 Μια άλλη κλάση µε main (4/4) 71 Static µεταβλητές Μια static µεταβλητή είναι µια µεταβλητή που ανήκει στην κλάση, και όχι σε ένα συγκεκριµένο αντικείµενο Υπάρχει µόνο ένα αντίγραφο µιας static µεταβλητής ανά κλάση, αντίθετα µε τιςinstance variables που κάθε αντικείµενοέχειτοδικότουαντίγραφοαπόκάθεinstance variable Όλα τα αντικείµενα της κλάσης µπορούν να διαβάζουν και να τροποποιούν µια static µεταβλητή Παρόλο που µια static µέθοδος δεν µπορεί να προσπελάσει µια instance variable, µια static µέθοδος µπορεί να προσπελάσει µια static µεταβλητή Μια static µεταβλητή δηλώνεται όπως µια instance variable, µετηνπροσθήκητουmodifier static private static int mystaticvariable; 72 24

Static µεταβλητές Οι static µεταβλητές µπορούν να δηλωθούν και να αρχικοποιηθούν την ίδια στιγµή private static int mystaticvariable = 0; Εάν δεν αρχικοποιηθούν ρητά, µια static µεταβλητή θα πάρει αυτόµατα µια εξ ορισµού τιµή Οι boolean static µεταβλητές αρχικοποιούνται σε false Οι static µεταβλητές άλλων primitive τύπων αρχικοποιούνται στο µηδέν του τύπου τους Οι static µεταβλητές τύπου κλάσης αρχικοποιούνται σε null Είναι πάντα προτιµητέο να αρχικοποιούµερητάτις static µεταβλητές παρά να βασιζόµαστε στην εξ ορισµού αρχικοποίηση 73 Static µεταβλητές Μια static µεταβλητή θα πρέπει πάντα να δηλώνεται ως private, εκτός και εάν είναι µια ορισµένη σταθερά (defined constant) Ητιµή µιας static defined constant δεν µπορεί να αλλάξει, εποµένως είναι ασφαλές να τη δηλώνουµεωςpublic Επιπρόσθετα ως static, ηδήλωσηγιαµια static defined constant πρέπει να περιλαµβάνει τον modifier final, ο οποίος προσδιορίζει ότι η τιµήτηςδενµπορεί να αλλαχτεί public static final int BIRTH_YEAR = 1954; Όταν αναφερόµαστε σε µια τέτοια defined constant εκτός της κλάσης της, χρησιµοποιούµετοόνοµατης κλάσης της στη θέση του καλούντος αντικειµένου int year = MyClass.BIRTH_YEAR; 74 ΗκλάσηMath ΗκλάσηMath παρέχει έναν αριθµό συνηθισµένων µαθηµατικών µεθόδων Βρίσκεται στο java.lang package, και συνεπώς δεν χρειάζεται να χρησιµοποιήσουµε τηδήλωση import Όλες οι µέθοδοί της και τα δεδοµένα της είναι static, εποµένως ενεργοποιούνται µε τοόνοµα της κλάσης Math αντί για το καλούν αντικείµενο ΗκλάσηMath έχει δυο προκαθορισµένες σταθερές, την E (e, η βάση των φυσικών λογαρίθµων) και PI (π, 3.1415...) area = Math.PI * radius * radius; 75 25

Μερικές µέθοδοι της κλάσης Math (1/5) 76 Μερικές µέθοδοι της κλάσης Math (2/5) 77 Μερικές µέθοδοι της κλάσης Math (3/5) 78 26

Μερικές µέθοδοι της κλάσης Math (4/5) 79 Μερικές µέθοδοι της κλάσης Math (5/5) 80 Wrapper κλάσεις Οι wrapper κλάσεις παρέχουν έναν τύπο κλάσης που αντιστοιχεί σε κάθε έναν από τους primitive τύπους Αυτόκαθιστάεφικτόναέχουµετύπουςκλάσεωνπου συµπεριφέρονται όπως και οι primitive τύποι Οι wrapper κλάσεις για τους primitive τύπους byte, short, long, float, double, και char είναι (αντίστοιχα) Byte, Short, Long, Float, Double, και Character Οι wrapper κλάσει περιέχουν επίσης έναν αριθµό χρήσιµων προκαθορισµένων σταθερών και static µεθόδων 81 27

Wrapper κλάσεις Boxing: ηδιαδικασίαµετασχηµατισµού µιας τιµή primitive τύπου σε αντικείµενο της αντίστοιχης wrapper κλάσης Για να µετατρέψουµε µια primitive τιµήσεµια ισοδύναµη τιµήτύπουκλάσης, δηµιουργούµε ένα αντικείµενο της αντίστοιχης wrapper κλάσης χρησιµοποιώντας την primitive τιµήωςόρισµα Το νέο αντικείµενο θα περιέχει µια instance variable που αποθηκεύει ένα αντίγραφο της primitive τιµής ιαφορετικά από άλλες κλάσεις, µια wrapper ΕΝ έχει no-argument constructor Integer integerobject = new Integer(42); 82 Wrapper κλάσεις Unboxing: ηδιαδικασίαµετασχηµατισµού ενός αντικειµένου µιας wrapper κλάσης στην αντίστοιχη τιµή ενόςprimitive τύπου Οι µέθοδοι µετατροπήςενόςαντικειµένου από τις wrapper κλάσεις Byte, Short, Integer, Long, Float, Double, και Character στον αντίστοιχο primitive τύπο είναι (αντίστοιχα) bytevalue, shortvalue, intvalue, longvalue, floatvalue, doublevalue, και charvalue Καµία από αυτές τις µεθόδους δεν παίρνει όρισµα int i = integerobject.intvalue(); 83 Αυτόµατο Boxing και Unboxing Από την έκδοση 5.0, η Java µπορεί να εκτελέσει αυτόµατα boxing και unboxing Αντί να δηµιουργούµε ένααντικείµενο µιας wrapper κλάσης χρησιµοποιώντας τη λειτουργία new (όπως δείξαµε πριν), µπορεί να γίνει ως αυτόµατα προσαρµογή τύπου: Integer integerobject = 42; Αντί να ενεργοποιούµε την κατάλληλη µέθοδο (όπως intvalue, doublevalue, charvalue, κ.τ.λ.) για να µετατρέψουµεένααντικείµενο µιας wrapper κλάσης στην τιµήτουαντίστοιχουprimitive τύπου, η primitive τιµή ανακτάται αυτόµατα int i = integerobject; 84 28

Σταθερές και static µέθοδοι σε wrapper κλάσεις Οι wrapper κλάσεις περιλαµβάνουν χρήσιµες σταθερές που δίνουν τις µεγαλύτερες και µικρότερες τιµές για οποιονδήποτε από τους primitive αριθµητικούς τύπους Για παράδειγµα, Integer.MAX_VALUE, Integer.MIN_VALUE, Double.MAX_VALUE, Double.MIN_VALUE, κ.τ.λ. Η Boolean κλάση έχει ονόµατα για δυο σταθε ρές τύπου Boolean Boolean.TRUE και Boolean.FALSE είναι δυο Boolean αντικείµενα που αντιστοιχούν στις τιµές true και false του primitive τύπου boolean 85 Σταθερές και static µέθοδοι σε wrapper κλάσεις Οι wrapper κλάσεις έχουν static µεθόδους που µετατρέπουν µια ορθά σχηµατισµένη αναπαράσταση αριθµού ως αλφαριθµητικό σε αριθµό του αντίστοιχου τύπου Οι µέθοδοι Integer.parseInt, Long.parseLong, Float.parseFloat, και Double.parseDouble εκτελούν αυτή τη λειτουργία για τους primitive τύπους (αντίστοιχα) int, long, float, και double Επίσης, οι wrapper κλάσεις έχουν static µεθόδους που µετατρέπουν µια αριθµητική τιµήσεαλφαριθµητικό Για παράδειγµα, ηέκφραση Double.toString(123.99); επιστρέφει το αλφαριθµητικό "123.99" ΗκλάσηCharacter περιέχει έναν αριθµό static µεθόδων χρήσιµων για επεξεργασία αλφαριθµητικών 86 Μερικές µέθοδοι της κλάσης Character (1/3) 87 29

Μερικές µέθοδοι της κλάσης Character (2/3) 88 Μερικές µέθοδοι της κλάσης Character (3/3) 89 Μεταβλητές και µνήµη Κάθε υπολογιστής έχει δυο τύπους µνήµης ευτερεύουσα µνήµη (Secondary memory): χρησιµοποιείται για να κρατά αρχεία για µόνιµη αποθήκευση Κύρια µνήµη (Main memory): χρησιµοποιείται από τον υπολογιστή όταν εκτελείται ένα πρόγραµµα Οι τιµές που αποθηκεύονται στις µεταβλητές ενός προγράµµατος κρατούνται στην κύρια µνήµη 90 30

Μεταβλητές και µνήµη Ηκύριαµνήµη αποτελείται από µια µακρά λίστα αριθµηµένων θέσεων από αποκαλούνται bytes Κάθε byte περιέχει οκτώ bits: οκτώ ψηφία 0 ή 1 Οαριθµός που προσδιορίζει ένα byte αποκαλείται διεύθυνσή (address) του Ένα δεδοµένο µπορεί να αποθηκευτεί σε ένα (ή περισσότερα) από αυτά τα bytes Ηδιεύθυνσητουbyte χρησιµοποιείται για να εντοπίσουµετοδεδοµένο όταν χρειαστεί 91 Μεταβλητές και µνήµη Οι τιµές των περισσοτέρων τύπων δεδοµένων απαιτούν περισσότερα από ένα byte για την αποθήκευσή τους Στην περίπτωση αυτή, αρκετά γειτονικά bytes χρησιµοποιούνται για την αποθήκευση του δεδοµένου Ολόκληρο το τµήµα τηςµνήµης που κρατά το δεδοµένο αποκαλείται η θέση µνήµης (memory location) του Η διεύθυνση του πρώτου byte αυτής της µνήµης χρησιµοποιείται ως διεύθυνση του δεδοµένου αυτού Ηκύριαµνήµηενόςυπολογιστήµπορεί να θεωρηθεί ως µια µακρά λίστα θέσεων µνήµης µεταβλητού µεγέθους (varying sizes) 92 Μεταβλητές στη µνήµη 93 31

Αναφορές (References) Κάθε µεταβλητή υλοποιείται ως µια θέση στη µνήµη του υπολογιστή Όταν η µεταβλητή είναι primitive τύπου, ητιµή τηςµεταβλητής αποθηκεύεται στη θέση µνήµης που ανατέθηκε στη µεταβλητή Κάθε primitive τύπος πάντα απαιτεί το ίδιο χώρο µνήµης για να αποθηκεύσει τις εκάστοτε τιµές του 94 Αναφορές (References) Όταν η µεταβλητή είναι τύπου κλάσης, µόνο η διεύθυνση της µνήµης (ήαναφορά- reference), όπου αποθηκεύεται το αντικείµενο ανατίθεται, στη µεταβλητή Το αντικείµενο που καθορίζεται από τη µεταβλητή αποθηκεύεται σε κάποια άλλη θέση µνήµης Όπως και στην περίπτωση των primitives, ητιµήτης µεταβλητής τύπου κλάσης έχει σταθερό µέγεθος Αντίθετα από την περίπτωση των primitives, ητιµήτης µεταβλητής τύπου κλάσης είναι µια διεύθυνση µνήµης ή αναφορά (reference) Το αντικείµενο, του οποίου η διεύθυνση αποθηκεύεται στην µεταβλητή, µπορεί να έχει οποιοδήποτε µέγεθος 95 Αναφορές (References) υο µεταβλητές αναφοράς µπορεί να περιέχουν την ίδια αναφορά, και εποµένως να ονοµατίζουν το ίδιο αντικείµενο Ο τελεστής ανάθεσης θέτει την αναφορά (διεύθυνση µνήµης) της µιας µεταβλητής τύπου κλάσης ίση µε την άλλη Κάθε αλλαγή στο αντικείµενο που ονοµατίζεται από µια από τις δυο αυτές µεταβλητές θα παράξει µια αλλαγή στο αντικείµενο που ονοµατίζεται από την άλλη, αφού πρόκειται για το ίδιο αντικείµενο variable2 = variable1; 96 32

Μεταβλητές τύπου κλάσης αποθηκεύουν αναφορές (1/2) 97 Μεταβλητές τύπου κλάσης αποθηκεύουν αναφορές (2/2) 98 Τελεστής ανάθεσης µε µεταβλητές τύπου κλάσης (1/3) 99 33

Τελεστής ανάθεσης µε µεταβλητές τύπου κλάσης (2/3) 100 Τελεστής ανάθεσης µε µεταβλητές τύπου κλάσης (3/3) 101 Στην επόµενη διάλεξη Κλάσεις & αντικείµενα (συνέχεια) Κλάσεις ως παράµετροι Copy constructors Packages javadoc Κληρονοµικότητα 102 34