Προγραµµατισµός ΙΙ Java 2



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

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

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

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

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

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

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

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

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

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

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

που συγχρηµατοδοτείται από την Ευρωπαϊκή Ένωση/Ευρωπαϊκό Κοινωνικό Ταµείο

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

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

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

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

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

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

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

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

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

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

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

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

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

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

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

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

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

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

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 5: Κατασκευαστές (Constructors)

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

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

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

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

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

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

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

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

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

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

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

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

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

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

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Διδάσκων: Παναγιώτης Ανδρέου

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

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

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

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

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

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

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

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

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

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

Κλάσεις. Τροποποιητές, Πακέτα, ιασυνδέσεις. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Εισαγωγή στον Προγ/μό Η/Υ

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Copy Constructor Deep and Shallow Copies

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

Διδάσκων: Παναγιώτης Ανδρέου

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

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

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

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

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

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

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

Υπερφόρτωση Μεθόδων και Πέρασμα Ορισμάτων

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

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

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

5.1 ηµιουργία αντικειµένων

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

Εξαιρέσεις. try, catch, finally, throw, throws

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

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

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

Transcript:

Προγραµµατισµός ΙΙ Java 2 ηµιουργική Εργασία µε Κλάσεις κι Αντικείµενα Τι Θα Μελετήσουµε οµή µιας κλάσης και των µεθόδων της Επιθεώρηση των κλάσεων και των µεθόδων τους Μέθοδοι και this Υπερφόρτωση µεθόδων Μέθοδοι δηµιουργοί Υπερφόρτωση δηµιουργών Υπέρβαση µεθόδων Μέθοδοι και super Μέθοδοι τερµατισµού (όχι ολοκλήρωσης) Τελικές κλάσεις και µέθοδοι 1

οµή µιας Κλάσης Ορισµός class Classname { static classvariable µεταβλητές objectvariable µέθοδοι µε ορίσµατα Αναφορά στις µεταβλητές κλάσης µε Classname.classVariable Αναφορά στις µεταβλητές αντικειµένου µε Objectname.objectVariable Μέθοδοι Ορισµός returntype methodname(type1 arg1, type2 arg2, ) { σώµα της µεθόδου return returntypevariable; Αν returntype = void δε χρειάζεται return Αναφορά σε αυτές µε Classname.methodname 2

Μέθοδοι int[] makerange(int lower, int upper) { σώµα της µεθόδου return πίνακα ακεραίων Μέθοδοι class RangeClass { int[] makerange(int lower, int upper) { int arr[] = new int[ (upper - lower) + 1 ]; for (int i = 0; i < arr.length; i++) { arr[i] = lower++; return arr; συνεχίζεται... 3

Μέθοδοι public static void main(string arguments[]) { int thearray[]; RangeClass therange = new RangeClass(); thearray = therange.makerange(1, 10); System.out.print("The array: [ "); for (int i = 0; i < thearray.length; i++) { System.out.print(theArray[i] + " "); System.out.println("]"); Τι επιστρέφει? Μέθοδοι Το πέρασµα των παραµέτρων στις µεθόδους γίνεται µε τιµή (by value) για τις µεταβλητές πρωταρχικού τύπου δηλ. περνάει η τιµή της µεταβλητής µε αναφορά (by reference) για τα αντικείµενα δηλ. περνάει η διεύθυνση ουσιαστικά της µεταβλητής (σαν να λέµε δείκτης στο αντικείµενο) Προσοχή! Οι πίνακες είναι και αυτοί αντικείµενα 4

Μέθοδοι class PassByReference { int onetozero(int arg[]) { int count = 0; for (int i = 0; i < arg.length; i++) { if (arg[i] == 1) { count++; arg[i] = 0; return count; συνεχίζεται... Μέθοδοι public static void main(string arguments[]) { int arr[] = { 1, 3, 4, 5, 1, 1, 7 ; PassByReference test = new PassByReference(); int numones; System.out.print("Values of the array: [ "); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); System.out.println("]"); συνεχίζεται... 5

Μέθοδοι numones = test.onetozero(arr); System.out.println("Number of Ones = " + numones); System.out.print("New values of the array: [ "); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); System.out.println("]"); Τι επιστρέφει? Επιθεώρηση Κλάσεων Μπορούµε να «διαβάσουµε» προγραµµατιστικές πληροφορίες µέσα από το ίδιο µας το πρόγραµµα! Μπορούµε να διαβάσουµε σε ποια κλάση ανήκει ένα αντικείµενο και τις public µεταβλητές και µεθόδους του Αυτό γίνεται µε το πακέτο java.lang.reflect (βλ. Java 2 SDK) 6

Επιθεώρηση Κλάσεων import java.lang.reflect.*; import java.util.random; class SeeMethods { public static void main(string[] arguments) { Random rd = new Random(); Class classname = rd.getclass(); Method[] methods = classname.getmethods(); for (int i = 0; i < methods.length; i++) { System.out.println("Method: " + methods[i]); Μέθοδοι και this Σε µια µέθοδο αν θέλουµε να αναφερθούµε στο αντικείµενο που την κάλεσε (τρέχον αντικείµενο) αντί του ονόµατος του αντικειµένου µπορούµε να γράψουµε τη λέξη κλειδί this Το this το χρησιµοποιούµε µέσα στις µεθόδους για να αναφερθούµε σε ένα οποιοδήποτε αντικείµενο µπορεί να παραχθεί από την κλάση στην οποία βρισκόµαστε Σηµαίνει απλά: this object here! 7

Μέθοδοι και this class Car { String licenseplate = ""; // e.g. "New York 543 A23" double speed = 0.0; // in kilometers per hour double maxspeed; = 120.0; // in kilometers per hour // accelerate to maximum speed // put the pedal to the metal void floorit() { this.speed = this.maxspeed; συνεχίζεται... Μέθοδοι και this void accelerate(double deltav) { this.speed = this.speed + deltav; if (this.speed > this.maxspeed) { this.speed = this.maxspeed; if (this.speed < 0.0) { this.speed = 0.0; συνεχίζεται... 8

Μέθοδοι και this class CarTest4 { public static void main(string[] args) { Car c = new Car(); c.licenseplate = "New York A45 636"; c.maxspeed = 123.45; System.out.println(c.licensePlate + " is moving at " + c.speed + " kilometers per hour."); συνεχίζεται... Μέθοδοι και this for (int i = 0; i < 15; i++) { c.accelerate(10.0); System.out.println(c.licensePlate + " is moving at " + c.speed + " kilometers per hour."); Επιστρέφει... 9

Μέθοδοι και this New York A45 636 is moving at 0.0 kilometers per hour. New York A45 636 is moving at 10.0 kilometers per hour. New York A45 636 is moving at 20.0 kilometers per hour. New York A45 636 is moving at 30.0 kilometers per hour. New York A45 636 is moving at 40.0 kilometers per hour. New York A45 636 is moving at 50.0 kilometers per hour. New York A45 636 is moving at 60.0 kilometers per hour. New York A45 636 is moving at 70.0 kilometers per hour. New York A45 636 is moving at 80.0 kilometers per hour. New York A45 636 is moving at 90.0 kilometers per hour. New York A45 636 is moving at 100.0 kilometers per hour. New York A45 636 is moving at 110.0 kilometers per hour. New York A45 636 is moving at 120.0 kilometers per hour. New York A45 636 is moving at 123.45 kilometers per hour. New York A45 636 is moving at 123.45 kilometers per hour. New York A45 636 is moving at 123.45 kilometers per hour. Υπερφόρτωση Μεθόδων ύο µέθοδοι µε το ίδιο όνοµα αλλά διαφορετικά ορίσµατα είναι διαφορετικές µέθοδοι εν πρέπει αναγκαστικά να επιστρέφουν τον ίδιο τύπο, πρέπει να έχουν διαφορετικά ορίσµατα Η τεχνική αυτή, λέγεται υπερφόρτωση µεθόδων Συνήθως επιλέγουµε οι µέθοδοι αυτές να κάνουν την ίδια δουλειά αλλά µε διαφορετικό τρόπο 10

Υπερφόρτωση Μεθόδων Η µέθοδος valueof της κλάσης String public static String valueof(boolean b) public static String valueof(char c) public static String valueof(char[] data) public static String valueof(char[] data, int offset, int count) public static String valueof(double d) public static String valueof(float f) public static String valueof(int i) public static String valueof(object obj) public static String valueof(long l) Υπερφόρτωση Μεθόδων import java.awt.point; class MyRect { int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; MyRect buildrect(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; return this; 11

Υπερφόρτωση Μεθόδων MyRect buildrect(point topleft, Point bottomright) { x1 = topleft.x; y1 = topleft.y; x2 = bottomright.x; y2 = bottomright.y; return this; MyRect buildrect(point topleft, int w, int h) { x1 = topleft.x; y1 = topleft.y; x2 = (x1 + w); y2 = (y1 + h); return this; Υπερφόρτωση Μεθόδων void printrect(){ System.out.print("MyRect: <" + x1 + ", " + y1); System.out.println(", " + x2 + ", " + y2 + ">"); public static void main(string arguments[]) { MyRect rect = new MyRect(); System.out.println("Calling buildrect with coordinates 25,25, 50,50:"); rect.buildrect(25, 25, 50, 50); rect.printrect(); System.out.println("***"); 12

Υπερφόρτωση Μεθόδων System.out.println("Calling buildrect with points (10,10), (20,20):"); rect.buildrect(new Point(10,10), new Point(20,20)); rect.printrect(); System.out.println("***"); System.out.print("Calling buildrect with 1 point (10,10),"); System.out.println(" width (50) and height (50):"); rect.buildrect(new Point(10,10), 50, 50); rect.printrect(); System.out.println("***"); Υπερφόρτωση Μεθόδων Τι θα συµβεί αν προσθέσω µια ακόµη buildrect που επιστρέφει άλλο τύπο? π.χ. αντί MyRect επιστρέφει float float buildrect(point topleft, int w, int h) return 12.6F; Επιστρέφει σφάλµα γιατί τα ορίσµατα είναι ίδια! Όµως αν βάλουµε ένα όρισµα παραπάνω, float buildrect(point topleft, int w, int h, float jjj) return 12.6F; Μεταγλωττίζεται σωστά! 13

Μέθοδοι ηµιουργοί Μια µέθοδος που έχει το όνοµα της κλάσης στην οποία ανήκει λέγεται δηµιουργός (constructor) Καλείται κατά τη δηµιουργία ενός αντικειµένου µε new Χρησιµοποιούνται για την αρχικοποίηση των µεταβλητών του αντικειµένου Μπορεί µια µέθοδος δηµιουργός να καλέσει άλλη µέθοδο δηµιουργό, µε this Μπορεί να γίνει και υπερφόρτωση µεθόδων δηµιουργών Μέθοδοι ηµιουργοί class Person { String name; int age; Person(String n, int a) { name = n; age = a; void printperson() { System.out.print("Hi, my name is " + name); System.out.println(". I am " + age + " years old."); συνεχίζεται... 14

Μέθοδοι ηµιουργοί public static void main (String arguments[]) { Person p; p = new Person("Luke", 50); p.printperson(); System.out.println("----"); p = new Person("Laura", 35); p.printperson(); System.out.println("----"); Μέθοδοι ηµιουργοί κλήσης µεθόδου δηµιουργού από άλλη µέθοδο δηµιουργό class MyCircle { int x, y, radius; MyCircle(int xpoint, int ypoint, radiuslength) { this.x = xpoint; this.y = ypoint; this.radius = radiuslength; MyCircle(int xpoint, int ypoint) { this(xpoint, ypoint, 1); 15

Υπερφόρτωση ηµιουργών import java.awt.point; class MyRect2 { int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; MyRect2(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; συνεχίζεται... Υπερφόρτωση ηµιουργών MyRect2(Point topleft, Point bottomright) { x1 = topleft.x; y1 = topleft.y; x2 = bottomright.x; y2 = bottomright.y; MyRect2(Point topleft, int w, int h) { x1 = topleft.x; y1 = topleft.y; x2 = (x1 + w); y2 = (y1 + h); συνεχίζεται... 16

Υπερφόρτωση ηµιουργών void printrect() { System.out.print("MyRect: <" + x1 + ", " + y1); System.out.println(", " + x2 + ", " + y2 + ">"); public static void main(string arguments[]) { MyRect2 rect; System.out.println("Calling MyRect2 with coordinates 25,25 50,50:"); rect = new MyRect2(25, 25, 50,50); rect.printrect(); System.out.println("***"); συνεχίζεται... Υπερφόρτωση ηµιουργών System.out.print("Calling MyRect2 with 1 point (10,10)"); System.out.println(" width (50) and height (50):"); rect = new MyRect2(new Point(10,10), 50, 50); rect.printrect(); System.out.println("***"); Τι επιστρέφει? 17

Υποκλάσεις Τις δηµιουργούµε όταν θέλουµε να επεκτείνουµε τα χαρακτηριστικά και τις λειτουργίες µιας κλάσης Γίνεται χρησιµοποιώντας τη λέξη κλειδί extends στον ορισµό της νέας υποκλάσης Το ίδιο µπορεί να γίνει και µε µεθόδους δηµιουργούς Υποκλάσεις class PrintClass { int x = 0; int y = 1; void printme() { System.out.println("x is " + x + ", y is " + y); System.out.println("I am an instance of the class " + this.getclass().getname()); εν έχει µέθοδο main() άρα δεν τρέχει! 18

Υποκλάσεις class PrintSubClass extends PrintClass { int z = 3; public static void main(string arguments[]) { PrintSubClass obj = new PrintSubClass(); obj.printme(); Επεκτείνει την προηγούµενη κλάση µε µια µέθοδο main() άρα τρέχει! Η PrintSubClass είναι υποκλάση της PrintClass Προσοχή, άλλο αρχείο η πρώτη κλάση άλλο η δεύτερη. Υπέρβαση Μεθόδων προτεραιότητας class PrintSubClass2 extends PrintClass { int z = 3; void printme() { System.out.println("x is " + x + ", y is " + y + ", z is " + z); System.out.println("I am an instance of the class " + this.getclass().getname()); public static void main(string arguments[]) { PrintSubClass2 obj = new PrintSubClass2(); obj.printme(); Η printme() εδώ είναι πιο κοντά εντός της νέας υποκλάσης κι έτσι έχει µεγαλύτερη προτεραιότητα από εκείνη την printme που βρίσκεται στην κλάση PrintSubClass. Λέµε λοιπόν πως η µέθοδος printme στην υποκλάση αυτή, υπερβαίνει την µέθοδο printme της υπερκλάσης της 19

Μέθοδοι και super Ηλέξη κλειδί this χρησιµοποιείται για να αναφερόµαστε στην τρέχουσα κλάση αντί να χρησιµοποιούµε το όνοµά της Οµοίως, η λέξη κλειδί super χρησιµοποιείται για να αναφερόµαστε στην υπερκλάση (superclass!) της τρέχουσας κλάσης Μέθοδοι και super import java.awt.point; class NamedPoint extends Point { String name; NamedPoint(int x, int y, String name) { super(x,y); this.name = name; public static void main (String[] arguments) { NamedPoint np = new NamedPoint(5, 5, "SmallPoint"); System.out.println("x is " + np.x); System.out.println("y is " + np.y); System.out.println("Name is " + np.name); 20

Μέθοδοι Τερµατισµού Όπως έχουµε µεθόδους δηµιουργούς ενός αντικειµένου για να το δηµιουργήσουµε Έτσι έχουµε και µεθόδους τερµατισµού του αντικειµένου για να το τερµατίσουµε Συνήθως δε χρειάζεται γιατί η µνήµη που δεσµεύουν τα αντικείµενα απελευθερώνεται αυτόµατα µε την παύση της χρήσης του Χρησιµεύει σπάνια όταν κάνουµε διαχείριση σφαλµάτων (error handling) Μέθοδοι Τερµατισµού Αυτό γίνεται µε υπέρβαση της µέθοδου finalize() H finalize() ορίζεται στην κλάση java.lang.object ως εξής protected void finalize() throws Throwable Καλείται αυτόµατα όταν πάψει να χρησιµοποιείται ένα αντικείµενο αλλά η Java δε µας το εγγυάται αυτό 21

Επίπεδα Ελέγχου Προσπέλασης Υπάρχουν λέξεις κλειδιά που ελέγχουν ποιος βλέπει ποια κλάση, µέθοδο, µεταβλητή Αυτές είναι µε σειρά προσπελασιµότητας οι private (ιδιωτική προσπέλαση) protected (προστατευµένη προσπέλαση) χωρίς λέξη κλειδί είναι η προεπιλεγµένη προσπέλαση public (δηµόσια προσπέλαση) public int MyMethod(int x, int y) Επίπεδα Ελέγχου Προσπέλασης 22

Επίπεδα Ελέγχου Προσπέλασης Όταν δηµιουργούµε µια δευτερεύουσα κλάση στην οποία υπερβαίνουµε µια µέθοδο της υπερκλάσης πρέπει να λαβουµε υπόψη τα εξής: εν επιτρέπεται να αντικατασταθεί µια µέθοδος µε νέα περισσότερο ελεγχόµενη από την αρχική Μέθοδοι που δηλώνονται private δεν κληρονοµούνται καθόλου Επίπεδα Ελέγχου Προσπέλασης public class CountInstances { private static int numinstances = 0; protected static int getnuminstances() { return numinstances; private static void addinstance() { numinstances++; CountInstances() { CountInstances.addInstance(); συνεχίζεται... 23

Επίπεδα Ελέγχου Προσπέλασης public static void main(string arguments[]) { System.out.println("Starting with " + CountInstances.getNumInstances() + " instances"); for (int i = 0; i < 10; ++i) new CountInstances(); System.out.println("Created " + CountInstances.getNumInstances() + " instances"); Τελικές Κλάσεις και Μέθοδοι Όπως έχουµε τελικές µεταβλητές (σταθερές) έτσι έχουµε και µεθόδους αλλά και κλάσεις Ορίζονται κι αυτές µε τη λέξη κλειδί final Οι τελικές µέθοδοι δεν αντικαθίστανται από άλλες σε δευτερεύουσες κλάσεις π.χ. final int mymethod(int x, int y) Οι τελικές κλάσεις δεν επιτρέπεται να έχουν υποκλάσεις π.χ. final public class MyClass { 24

Συµπεράσµατα Βασικά συστατικά των προγραµµάτων Java είναι οι κλάσεις Μια κλάση χρησιµοποιείται σαν καλούπι για τη δηµιουργία αντικειµένων αυτής Μια κλάση (MyClass) / ένα αντικείµενο ( myobject) έχει µεταβλητές και µεθόδους Οι µεταβλητές κλάσης ορίζονται στην αρχή της κλάσης µε static και ισχύουν για όλα τα αντικείµενα της Τις καλούµε και µε το όνοµα της κλάσης π.χ. myobject.myvar, MyClass.myvar Συµπεράσµατα Οι µέθοδοι κλάσης ορίζονται και αυτές µε static και καλούνται και µε το όνοµα της κλασης π.χ. myobject.mymethod(), MyClass.myMethod() π.χ. String.valueOf() Οι µέθοδοι µιας κλάσης υπερφορτώνονται κι επιτρέπεται να έχουµε πολλές µεθόδους µε διαφορετικά ορίσµατα ανεξαρτήτως τον τύπο που επιστρέφουν Για να αρχικοποιούµε τις µεταβλητές των νέων αντικειµένων µας φτιάχνουµε µεθόδους δηµιουργούς που έχουν ίδιο όνοµα µε την κλάση τους 25

Συµπεράσµατα Οι µέθοδοι δηµιουργοί υπερφορτώνονται επίσης Το αντίθετο των µεθόδων δηµιουργών είναι οι µέθοδοι τερµατισµού που κατασκευάζονται µε επέκταση (υπέρβαση) της µεθόδου finalize() Η Java µας προσφέρει τη δυνατότητα προγραµµατιστικά να ελέγχουµε τα περιεχόµενα µιας κλάσης µέσω του java.lang.reflect Αν τα ονόµατα των κλάσεων είναι µεγάλα ή δε θέλουµε να τα θυµόµαστε µπορούµε να χρησιµοποιούµε λέξεις κλειδιά αντί αυτών Με this αναφερόµαστε στην τρέχουσα κλάση Με super αναφερόµαστε στην τρέχουσα ρ. υπερκλάση. Ιακωβίδης Συµπεράσµατα Ηχρήση µιας κλάσης, µεθόδου ή µεταβλητής µπορεί να επιτρέπεται ή να απαγορεύεται σε άλλες κλάσεις χρησιµοποιώντας τις λέξεις private, protected και public Όπως υπάρχουν τελικές µεταβλητές (σταθερές), υπάρχουν και τελικές µέθοδοι ή κλάσεις που σηµειώνονται µε final Οι τελικές µέθοδοι δεν αντικαθίστανται Οι τελικές κλάσεις δεν έχουν υποκλάσεις 26

Συµπεράσµατα Μας δίδεται λοιπόν η δυνατότητα να χρησιµοποιούµε πολλές κλάσεις σε µια εφαρµογή µας Σε µια εφαρµογή µε πολλές κλάσεις είναι καλύτερα να έχουµε κάθε κλάση σε διαφορετικό αρχείο Θα πρέπει να πούµε στον compiler που να ψάξει για τις κλάσεις αυτές Αυτό γίνεται είτε ορίζοντας τη µεταβλητή περιβάλλοντος του λειτουργικού CLASSPATH είτε µέσω των ορισµάτων του compiler 27