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

Σχετικά έγγραφα
Κλάσεις και Αντικείµενα

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

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

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

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

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

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

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

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

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

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

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

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

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

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

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

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κλάσεις και αντικείμενα #include <iostream.h<

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

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

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

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

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

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

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

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

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

Transcript:

Προγραµµατισµός ΙΙ Ηγλώσσααντικειµενοστραφούς προγραµµατισµού Java ιδάσκων ηµήτριος Κατσαρός, Ph.D. @ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας ιάλεξη 3η: 08/03/2006 & 09/03/2006 1

Ορίζοντας κλάσεις I 2

Εισαγωγικά Οι κλάσεις είναι το πιο σηµαντικό χαρακτηριστικό µιας γλώσσας που υποστηρίζει τον Αντικειµενοστραφή Προγραµµατισµό Ο προγραµµατισµός στη Java συνίσταται στον ορισµό ενός αριθµού κλάσεων Κάθε πρόγραµµα είναι µια κλάση Όλο το βοηθητικό λογισµικό αποτελείται από κλάσεις Όλοι οι τύποι που ορίζονται από τον προγραµµατιστή είναι κλάσεις Οι κλάσεις είναι κεντρική έννοια στη Java 3

Ορισµοί κλάσεων Γνωρίζουµε ήδη πώς να χρησιµοποιούµε κλάσεις καθώς και τα αντικείµενα που δηµιουργούνται από αυτές, και πώς να ενεργοποιούµε τις µεθόδους τους Για παράδειγµα, έχουµε ήδη χρησιµοποιήσει τις προκαθορισµένες κλάσεις 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

Τα περιεχόµενα του ορισµού µιας κλάσης Ο ορισµός µιας κλάσης καθορίζει τα δεδοµένα και τις µεθόδους που θα έχουν όλα τα αντικείµενά της Αυτά τα δεδοµένα και οι µέθοδοι αποκαλούνται συχνά µέλη (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

Instance variables και methods Οι ορισµοί των µεθόδων διαιρούνται σε δυο τµήµατα: την κεφαλίδα (heading) και το σώµα της µεθόδου (method body): public void mymethod() { code to perform some action Body and/or compute a value Heading } Οι µέθοδοι ενεργοποιούνται χρησιµοποιώντας το όνοµα του καλούντος αντικειµένου και το όνοµα της µεθόδου ως εξής: classvar.mymethod(); Η ενεργοποίηση µιας µεθόδου είναι ισοδύναµη µε την εκτέλεση του σώµατος της µεθόδου 10

Ονόµατα αρχείων και θέσεις Υπενθύµιση: ένα αρχείο Java πρέπει να έχει το ίδιο όνοµα όπως το όνοµα της κλάσης που περιέχει και να έχει επέκταση αρχείου.java Για παράδειγµα, µια κλάση µε όνοµα MyClass πρέπει να βρίσκεται στο αρχείο µε όνοµα MyClass.java Προς το παρόν, το πρόγραµµά µας και όλες οι κλάσεις που θα χρησιµοποιεί θα βρίσκονται στον ίδιο φάκελο 11

Περισσότερα για τις µεθόδους Υπάρχουν δυο είδη µεθόδων: Μέθοδοι που υπολογίζουν και επιστρέφουν µια τιµή Μέθοδοι που εκτελούν µια ενέργεια Αυτό το είδος µεθόδου δεν επιστρέφει τιµή και αποκαλείται void µέθοδος Κάθε τύπος µεθόδου διαφέρει ελαφρά στο πώς δηλώνεται καθώς και πώς (συνήθως) ενεργοποιείται 12

Περισσότερα για τις µεθόδους Μια µέθοδος που επιστρέφει µια τιµή πρέπει να καθορίζει τον τύπο της επιστρεφόµενης τιµής στην κεφαλίδα της (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

ηλώσεις return Το σώµα µιας µεθόδου που επιστρέφει µια τιµή πρέπει επίσης να περιέχει µια ή περισσότερες δηλώσεις return Μια δήλωση return καθορίζει την τιµή που επιστρέφεται και τερµατίζει την εκτέλεση της µεθόδου: return Expression; Η Expression µπορεί να είναι µια οποιαδήποτε έκφραση που αποτιµάται σε κάτι µε ίδιο τύπο µε αυτόν που καθορίζεται στην κεφαλίδα της µεθόδου 16

ηλώσεις return Μια µέθοδος void δεν χρειάζεται να περιέχει µια δήλωση return, εκτός και εάν υπάρχει µια κατάσταση που απαιτεί τον τερµατισµό της µεθόδου πριν εκτελεστεί ολόκληρο το σώµα της Στο πλαίσιο αυτό, αφού δεν επιστρέφεται κάποια τιµή, µια δήλωση return χρησιµοποιείται χωρίς κάποια έκφραση: return; 17

Ορισµοί µεθόδων Μια ενεργοποίηση µιας µεθόδου που επιστρέφει κάποια τιµή µπορεί να χρησιµοποιηθεί ως έκφραση οπουδήποτε µπορεί να χρησιµοποιηθεί µια τιµή του typereturned: typereturned trvariable; trvariable = objectname.methodname(); Μια ενεργοποίηση µιας µεθόδου void είναι απλά µια δήλωση: objectname.methodname(); 18

Οποιαδήποτε µέθοδος µπορεί να χρησιµοποιηθεί ως µέθοδος void Μια µέθοδος που επιστρέφει µια τιµή µπορεί επίσης να εκτελεί µια ενέργεια Εάν επιθυµούµε απλώς την ενέργεια, αλλά δεν χρειαζόµαστε την επιστρεφόµενη τιµή, µπορούµε να ενεργοποιήσουµε τη µέθοδο ως να ήταν µια µέθοδος void, και η επιστρεφόµενη τιµή θα απορριφθεί: objectname.returnedvaluemethod(); 19

Τοπικές µεταβλητές Μια µεταβλητή που δηλώνεται µέσα σε µια µέθοδο αποκαλείται τοπική µεταβλητή (local variable) Όλες οι µεταβλητές που δηλώνονται στη main είναι τοπικές µεταβλητές Όλες οι παράµετροι των µεθόδων είναι τοπικές µεταβλητές Εάν δυο µέθοδοι έχουν µια τοπική µεταβλητή µε το ίδιο όνοµα, οι δυο µεταβλητές είναι εντελώς ξεχωριστές µεταβλητές 20

Καθολικές µεταβλητές Μερικές γλώσσες προγραµµατισµού περιλαµβάνουν ένα άλλο τύπο µεταβλητής, που αποκαλείται καθολική µεταβλητή (global variable) Η γλώσσα Java ΕΝ ΕΧΕΙ καθολικές µεταβλητές 21

Blocks Ένα block είναι ένα εναλλακτικό όνοµα για µια σύνθετη δήλωση, δηλ., ένα σύνολο δηλώσεων σε Java µέσα σε άγκιστρα,{} Μια µεταβλητή που δηλώνεται µέσα σε ένα block, δεν µπορεί να χρησιµοποιηθεί έξω από αυτό το block Αφού δηλωθεί µια µεταβλητή µέσα σε ένα block, το όνοµά της δεν µπορεί να χρησιµοποιηθεί για τίποτε άλλο µέσα στον ορισµό της ίδιας µεθόδου 22

ήλωση µεταβλητών µέσα σε µια δήλωση for Μπορούµε να δηλώσουµε µια ή περισσότερες µεταβλητές στο τµήµα αρχικοποίησης της δήλωσης for Μια µεταβλητή που δηλώνεται έτσι θα είναι τοπική στο βρόχο for, και δεν µπορεί να χρησιµοποιηθεί εκτός του βρόχου Εάν πρέπει να χρησιµοποιήσουµε τη µεταβλητή εκτός του βρόχου, τότε τη δηλώνουµε εκτός βρόχου 23

Παράµετροι primitive τύπου Οι µέθοδοι που είδαµε µέχρι στιγµής δεν είχαν παραµέτρους, και αυτό σηµατοδοτούνταν µε κενό ζεύγος παρενθέσεων στην κεφαλίδα της µεθόδου Μερικές µέθοδοι χρειάζονται να λαµβάνουν επιπλέον δεδοµένα διαµέσου µιας λίστας παραµέτρων (parameters) ώστε να εκτελέσουν την εργασία τους Αυτές οι παράµετροι αποκαλούνται επίσης και τυπικοί παράµετροι (formal parameters) 24

Παράµετροι 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-by-value mechanism) 27

Παράµετροι primitive τύπου Εάν ο τύπος του ορίσµατος και της παραµέτρου δεν ταιριάζουν ακριβώς, η Java θα επιχειρήσει έναν αυτόµατο µετασχηµατισµό τύπου Στο προηγούµενο παράδειγµα, η τιµή int του ορίσµατος c θα µετατραπεί σε έναν double Ένα όρισµα primitive τύπου µπορεί αυτόµατα να µετασχηµατιστεί σε έναν από τους επόµενους τύπους από αυτούς που εµφανίζονται στα δεξιά του: byte short int long float double char 28

Παράµετροι primitive τύπου Μια παράµετρος συχνά εκλαµβάνεται ως κενό ή placeholder το οποίο γεµίζει µε την τιµή του αντίστοιχου ορίσµατος Όµως, µια παράµετρος είναι κάτι πολύ περισσότερο από αυτό: στην ουσία είναι µια τοπική µεταβλητή Όταν ενεργοποιείται µια µέθοδος, υπολογίζεται η τιµή του ορίσµατος, και η αντίστοιχη παράµετρος (δηλ., τοπική µεταβλητή) αρχικοποιείται σε αυτή τη τιµή Ακόµα και εάν η τιµή µιας τυπικής παραµέτρου µεταβληθεί µέσα σε µια µέθοδο (δηλ., χρησιµοποιηθεί ως τοπική µεταβλητή) η τιµή του ορίσµατος δεν µπορεί να µεταβληθεί 29

Τυπική παράµετρος ως τοπική µεταβλητή (1/5) 30

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

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

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

Τυπική παράµετρος ως τοπική µεταβλητή (5/5) 34

Παγίδα: Χρήση των όρων Παράµετρος και Όρισµα εν πρέπει να µας προκαλεί έκπληξη όταν κάποιοι (ίσως και στις διαλέξεις του µαθήµατος αυτού) συχνά χρησιµοποιούνε τους δυο όρους ως αµοιβαία εναλλάξιµους Όταν βλέπουµε αυτούς τους όρους, θα προσδιορίζουµε το νόηµά τους από τα συµφραζόµενα 35

Η παράµετρος this Όλες οι instance variables έχουν το καλούν αντικείµενο να προηγείται της κλήσης τους, δηλ., <the calling object>. Εάν απαιτείται ένα explicit όνοµα για το καλούν αντικείµενο, µπορεί να χρησιµοποιηθεί η keyword this Η myinstancevariable πάντα σηµαίνει και είναι αµοιβαία εναλλάξιµη µε το this.myinstancevariable 36

Η παράµετρος this Η παράµετρος this πρέπει να χρησιµοποιείται εάν µια παράµετρος ή άλλη τοπική µεταβλητή µε το ίδιο όνοµα χρησιµοποιείται στη µέθοδο ιαφορετικά, όλα τα στιγµιότυπα του ονόµατος της µεταβλητής θα ερµηνεύεται ως η τοπική µεταβλητή int somevariable = this.somevariable local instance 37

Η παράµετρος this Η παράµετρος this είναι ένα είδος κρυφής παραµέτρου Παρόλο που δεν εµφανίζεται στη λίστα παραµέτρων µιας µεθόδου, εξακολουθεί να είναι µια παράµετρος Όταν ενεργοποιείται µια µέθοδος, στο καλούν αντικείµενο αυτόµατα ενσωµατώνεται η this 38

Μέθοδοι που επιστρέφουν τιµή Boolean Μια ενεργοποίηση µιας µεθόδου που επιστρέφει µια τιµή τύπου boolean επιστρέφει είτε true είτε false Εποµένως, είναι κοινή πρακτική να χρησιµοποιούµε µια ενεργοποίηση µιας τέτοιας µεθόδου για να ελέγξουµε δηλώσεις και βρόχους εκεί όπου απαιτείται µια Boolean έκφραση if-else δηλώσεις, while βρόχοι, κ.τ.λ. 39

Οι µέθοδοι 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

Απόκρυψη πληροφορίας και Ενθυλάκωση Απόκρυψη Πληροφορίας (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

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

Ενθυλάκωση (Encapsulation) 47

Κάθε κλάση έχει πρόσβαση στα ιδιωτικά µέλη όλων των αντικειµένων της κλάση αυτής Μέσα στον ορισµό µιας κλάσης, τα ιδιωτικά (private) µέλη οποιουδήποτε αντικειµένου της κλάσης µπορούν να προσπελαστούν, όχι µόνο τα ιδιωτικά µέλη του καλούντος αντικειµένου 48

Οι mutator µέθοδοι θα µπορούσαν να επιστρέφουν µια Boolean τιµή Μερικές mutator µέθοδοι σηµατοδοτούν µήνυµα σφάλµατος και τερµατίζουν το πρόγραµµα όταν τους δίνονται τιµές που δεν έχουν νόηµα για τη λογική του προγράµµατος Μια εναλλακτική προσέγγιση είναι να κάνουµε τη mutator µέθοδο να ελέγχει τις τιµές, αλλά να µην τερµατίζει το πρόγραµµα Εναλλακτικά, να επιστρέφει µια boolean τιµή, και να αφήνει το καλούν πρόγραµµα να χειριστεί τις περιπτώσεις όπου οι αλλαγές δεν ακολουθούν τη λογική του προγράµµατος 49

Preconditions και Postconditions Η precondition µιας µεθόδου δηλώνει αυτό που υποτίθεται ότι είναι αληθές όταν καλείται η µέθοδος Η postcondition µιας µεθόδου δηλώνει αυτό που θα είναι αληθές µετά την εκτέλεση της µεθόδου, υπό την προϋπόθεση ότι η precondition ισχύει Είναι καλή πρακτική να σκεφτόµαστε πάντα µε όρους preconditions και postconditions όταν σχεδιάζουµε µια µέθοδο, και όταν γράφουµε τα σχόλια για τη µέθοδο 50

Υπερφόρτωση (Overloading) Overloading είναι όταν δυο ή περισσότερες µέθοδοι στην ίδια κλάση έχουν το ίδιο όνοµα Για να είναι έγκυρες, δυο οποιοιδήποτε ορισµοί για τη µέθοδο πρέπει να έχουν διαφορετικές ι (signatures) Μια υπογραφή αποτελείται από το όνοµα της µεθόδου µαζί µε τη λίστα των παραµέτρων της ιαφορετικές υπογραφές πρέπει να έχουν διαφορετικό αριθµό και/ή τύπων δεδοµένων για τις παραµέτρους 51

Overloading και αυτόµατη µετατροπή τύπων Εάν η Java δεν µπορεί να βρει µια µέθοδο της οποίας η υπογραφή ταιριάζει ακριβώς µε την ενεργοποίηση της µεθόδου, θα προσπαθήσει να χρησιµοποιήσει την τεχνική της αυτόµατης µετατροπής τύπων Η αλληλεπίδραση overloading και αυτόµατης µετατροπής τύπων µπορεί να έχει απρόβλεπτα αποτελέσµατα Σε µερικές περιπτώσεις overloading, εξαιτίας της αυτόµατης µετατροπής τύπων, η ενεργοποίηση µιας απλής µεθόδου µπορεί να αναλυθεί σε πολλαπλούς τρόπους ιφορούµενη ενεργοποίηση µεθόδου (ambiguous method invocation) θα προκαλέσει λάθος στη Java 52

Παγίδα: εν µπορούµε να επιτύχουµε overload µε βάση τον επιστρεφόµενο τύπο Η υπογραφή µιας µεθόδου αποτελείται µόνο από το όνοµά της και τους τύπους των ορισµάτων της Η υπογραφή δεν περιλαµβάνει τον επιστρεφόµενο τύπο Η Java δεν επιτρέπει µεθόδους µε το ίδιο όνοµα και διαφορετικούς επιστρεφόµενους τύπους στην ίδια κλάση 53

εν µπορούµε να κάνουµε overload τους τελεστές στη Java Παρόλο που πολλές γλώσσες προγραµµατισµού, όπως η C++, επιτρέπουν την υπερφόρτωση τελεστών (+, -, etc.), η Java δεν το επιτρέπει Μπορούµε µόνο να χρησιµοποιήσουµε το όνοµα µιας µεθόδου και κανονική σύνταξη µιας µεθόδου για να επιτύχουµε τις λειτουργίες ποτ επιθυµούµε 54

Κατασκευαστές (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

Ένας 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

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

Μερικές µέθοδοι της κλάσης StringTokenizer (1/2) 62

Μερικές µέθοδοι της κλάσης StringTokenizer (2/2) 63

Ορίζοντας κλάσεις 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

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

Μια άλλη κλάση µε main (1/4) 68

Μια άλλη κλάση µε main (2/4) 69

Μια άλλη κλάση µε 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

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

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

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

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

Μερικές µέθοδοι της κλάσης 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

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

Σταθερές και 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

Μερικές µέθοδοι της κλάσης Character (2/3) 88

Μερικές µέθοδοι της κλάσης Character (3/3) 89

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

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

Μεταβλητές και µνήµη Οι τιµές των περισσοτέρων τύπων δεδοµένων απαιτούν περισσότερα από ένα byte για την αποθήκευσή τους Στην περίπτωση αυτή, αρκετά γειτονικά bytes χρησιµοποιούνται για την αποθήκευση του δεδοµένου Ολόκληρο το τµήµα της µνήµης που κρατά το δεδοµένο αποκαλείται η θέση µνήµης (memory location) του Η διεύθυνση του πρώτου byte αυτής της µνήµης χρησιµοποιείται ως διεύθυνση του δεδοµένου αυτού Η κύρια µνήµη ενός υπολογιστή µπορεί να θεωρηθεί ως µια µακρά λίστα θέσεων µνήµης µεταβλητού µεγέθους (varying sizes) 92

Μεταβλητές στη µνήµη 93

Αναφορές (References) Κάθε µεταβλητή υλοποιείται ως µια θέση στη µνήµη του υπολογιστή Όταν η µεταβλητή είναι primitive τύπου, η τιµή της µεταβλητής αποθηκεύεται στη θέση µνήµης που ανατέθηκε στη µεταβλητή Κάθε primitive τύπος πάντα απαιτεί το ίδιο χώρο µνήµης για να αποθηκεύσει τις εκάστοτε τιµές του 94

Αναφορές (References) Όταν η µεταβλητή είναι τύπου κλάσης, µόνο η διεύθυνση της µνήµης (ή αναφορά - reference), όπου αποθηκεύεται το αντικείµενο ανατίθεται, στη µεταβλητή Το αντικείµενο που καθορίζεται από τη µεταβλητή αποθηκεύεται σε κάποια άλλη θέση µνήµης Όπως και στην περίπτωση των primitives, η τιµή της µεταβλητής τύπου κλάσης έχει σταθερό µέγεθος Αντίθετα από την περίπτωση των primitives, η τιµή της µεταβλητής τύπου κλάσης είναι µια διεύθυνση µνήµης ή αναφορά (reference) Το αντικείµενο, του οποίου η διεύθυνση αποθηκεύεται στην µεταβλητή, µπορεί να έχει οποιοδήποτε µέγεθος 95

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

Μεταβλητές τύπου κλάσης αποθηκεύουν αναφορές (1/2) 97

Μεταβλητές τύπου κλάσης αποθηκεύουν αναφορές (2/2) 98

Τελεστής ανάθεσης µε µεταβλητές τύπου κλάσης (1/3) 99

Τελεστής ανάθεσης µε µεταβλητές τύπου κλάσης (2/3) 100

Τελεστής ανάθεσης µε µεταβλητές τύπου κλάσης (3/3) 101

Στην επόµενη διάλεξη Κλάσεις & αντικείµενα (συνέχεια) Κλάσεις ως παράµετροι Copy constructors Packages javadoc Κληρονοµικότητα 102