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

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

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

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

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

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

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός I (Θ)

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

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

4. Εισαγωγή στη Java

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

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

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

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

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

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

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

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

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

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

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

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

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

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΚΑΙ ΕΞΕΤΑΣΤΕΑ ΥΛΗ. ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Με τις Γλώσσες Προγραμματισμού Pascal, C, C++, Java

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

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

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

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

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

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

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

API: Applications Programming Interface

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

3. Εκφράσεις και έλεγχος ροής

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 2: Βασικές εντολές

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

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

Υπολογισμός - Εντολές Ελέγχου

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

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

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

Δεδομένα, τελεστές, είσοδος/έξοδος

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού

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

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

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

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

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

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

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

Υπολογισμός - Εντολές Επανάληψης

Transcript:

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 03/04/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr

Static πεδία και μέθοδοι Τα περισσότερα δεδομένα και μέθοδοι λειτουργούν σε συγκεκριμένα αντικείμενα μιας κλάσης Υπάρχουν όμως περιπτώσεις όπου τα δεδομένα ή οι μέθοδοι αφορούν την ίδια την κλάση Το static εφαρμόζεται σε πεδία και μεθόδους Σημαίνει ότι το πεδίο / μέθοδος Είναι ορισμένο / ορισμένη για τη δήλωση της κλάσης Δεν είναι μοναδικό / μοναδική για κάθε στιγμιότυπο

Static πεδία και μέθοδοι Μόνο ένα στιγμιότυπο static μεταβλητής υπάρχει για ολόκληρη την κλάση Η τιμή της μεταβλητής είναι μοναδική για όλα τα στιγμιότυπα Η μεταβλητή υπάρχει ακόμη κι αν δεν υπάρχει κανένα αντικείμενο By default, οι static μεταβλητές αρχικοποιούνται σε 0 ή null Οι static μέθοδοι λειτουργούν μόνο σε static μεταβλητές ή καλούν άλλες static μεθόδους Δεν συνδέονται με ένα συγκεκριμένο στιγμιότυπο και επομένως δεν μπορούν να χρησιμοποιήσουν την αναφορά this Οι διάφορες μέθοδοι μπορούν να προσπελαύνουν static μεταβλητές

Static Πεδία

Static modifier Όλες οι static μέθοδοι/πεδία αναφέρονται με τον static modifier Η πρόσβαση στη static μέθοδο δεν γίνεται μέσω ενός αντικειμένου αλλά μέσω του ονόματος της ίδιας της κλάσης:

Παράδειγμα πεδίων static Μετρητής πλήθους αντικειμένων σε μία κλάση Παράδειγμα: αλλαγές στο πεδίο m_count καθώς φτιάχνουμε αντικείμενα Visitor:

Παράδειγμα static Θέλουμε να μετράμε πόσα babies έχουν κατασκευαστεί public class Baby { int numbabiesmade = 0; } Baby() { numbabiesmade += 1; } Οκ?

Παράδειγμα static πεδίου Μετράμε πόσα babies έχουν κατασκευαστεί public class Baby { static int numbabiesmade = 0; Baby() { numbabiesmade += 1; } }

Παράδειγμα πεδίων static public class Baby { static int numbabiesmade = 0; } Baby b1 = new Baby(); Baby b2 = new Baby(); Τι τιμές έχουν τα: b1.numbabiesmade? b2.numbabiesmade? Baby.numBabiesMade?

Συλλογή static μεθόδων Αν δεν υπάρχουν static πεδία, οι static μέθοδοι μπορούν να χρησιμοποιούνται για να υλοποιήσουν μία γενική λειτουργικότητα Ενσωματώνουν ένα συγκεκριμένο αλγόριθμο Μπορούμε να γράψουμε μία κλάση που είναι συλλογή από static μεθόδους Μία τέτοια κλάση δεν χρησιμοποιείται για να ορίσει νέου τύπου αντικείμενα Είναι απλά μία βιβλιοθήκη για υπηρεσίες που σχετίζονται κατά κάποιο τρόπο

Παράδειγμα public class Counter { int mycount = 0; static int ourcount = 0; void increment() } mycount++; ourcount++;} public static void main(string[] args) { Counter counter1 = new Counter(); Counter counter2 = new Counter(); counter1.increment(); counter1.increment(); counter2.increment(); System.out.println( Counter 1: + counter1.mycount + + counter1.ourcount); System.out.println( Counter 2: + counter2.mycount + + counter2.ourcount); } } Πεδία Μέθοδος

Παράδειγμα Class Counter ourcount = 0 Object counter1 mycount = 0 Counter counter1 = new Counter();

Παράδειγμα Class Counter ourcount = 0 Object counter1 mycount = 0 Object counter2 mycount = 0 Counter counter1 = new Counter(); Counter counter2 = new Counter();

Παράδειγμα Class Counter ourcount = 0 1 Object counter1 mycount = 0 1 Object counter2 mycount = 0 Counter counter1 = new Counter(); Counter counter2 = new Counter(); Counter1.increment();

Παράδειγμα Class Counter ourcount = 0 1 2 Object counter1 mycount = 0 1 2 Object counter2 mycount = 0 Counter counter1 = new Counter(); Counter counter2 = new Counter(); Counter1.increment(); Counter1.increment();

Παράδειγμα Class Counter ourcount = 0 1 2 3 Object counter1 mycount = 0 1 2 Object counter2 mycount = 0 1 Counter counter1 = new Counter(); Counter counter2 = new Counter(); Counter1.increment(); Counter1.increment(); Counter2.increment();

java.lang.math Η κλάση java.lang.math παρέχει μαθηματικές συναρτήσεις όπως sqrt()

Παρατήρηση Η κλάση Math ανήκει στο πακέτο java.lang Γνωρίζουμε ότι το εν λόγω πακέτο εισάγεται από το μεταγλωττιστή σε κάθε πρόγραμμα Άρα δεν χρειάζεται να εισάγουμε (import) την κλάση Math για να χρησιμοποιήσουμε τις μεθόδους της

Math μεταβλητές κλάσης Σταθερές (Constants) Λέξη-κλειδί: final Δεν μπορούν να αλλάξουν μετά την αρχικοποίηση static πεδία (ή μεταβλητές κλάσης * ) Κατ αντιστοιχία με τις static μεθόδους Είναι πεδία όπου ένα αντίγραφο της μεταβλητής μοιράζεται μεταξύ όλων των αντικειμένων της κλάσης Για παράδειγμα, οι Math.PI και Math.E είναι final static πεδία της κλάσης Math * ΠΡΟΣΟΧΗ στη διαφορά μεταξύ μεταβλητής κλάσης και μεταβλητής στιγμιοτύπου

Math μεταβλητές κλάσης

Οι μέθοδοι της κλάσης Math Method Description Example abs( x ) ceil( x ) absolute value of x rounds x to the smallest integer not less than x abs( 23.7 ) is 23.7 abs( 0.0 ) is 0.0 abs( -23.7 ) is 23.7 ceil( 9.2 ) is 10.0 ceil( -9.8 ) is -9.0 cos( x ) trigonometric cosine of x (x in radians) cos( 0.0 ) is 1.0 exp( x ) floor( x ) exponential method ex rounds x to the largest integer not greater than x log( x ) natural logarithm of x (base e) max( x, y ) larger value of x and y min( x, y ) smaller value of x and y pow( x, y ) x raised to the power y (i.e., xy) exp( 1.0 ) is 2.71828 exp( 2.0 ) is 7.38906 Floor( 9.2 ) is 9.0 floor( -9.8 ) is -10.0 log( Math.E ) is 1.0 log( Math.E * Math.E ) is 2.0 max( 2.3, 12.7 ) is 12.7 max( -2.3, -12.7 ) is -2.3 min( 2.3, 12.7 ) is 2.3 min( -2.3, -12.7 ) is -12.7 pow( 2.0, 7.0 ) is 128.0 pow( 9.0, 0.5 ) is 3.0 sin( x ) trigonometric sine of x (x in radians) sin( 0.0 ) is 0.0 sqrt( x ) square root of x sqrt( 900.0 ) is 30.0 tan( x ) trigonometric tangent of x (x in radians) tan( 0.0 ) is 0.0

...Στατικές μέθοδοι, στατικά πεδία και η Math Η μέθοδος main Η main δηλώνεται ως static ούτως ώστε να μπορεί να κληθεί χωρίς να απαιτείται η δημιουργία αντικειμένου της κλάσης που θα περιείχε (αν υπήρχε) η main Κάθε κλάση μπορεί να περιέχει μία μέθοδο main, ωστόσο Η εικονική μηχανή της Java (JVM) καλεί τη main μέθοδο που ανήκει στην κλάση που καθορίζεται από το πρώτο όρισμα που δίνεται στην εντολή java στη γραμμή εντολών

Final modifier Μπορεί να χρησιμοποηθεί για κλάσεις, μεθόδους και πεδία/μεταβλητές με διαφορετική σημασία κάθε φορά final πεδίο/μεταβλητή αρχικοποιείται μόνο μία φορά (μεταβλητές) δεν είναι δυνατή η αλλαγή της τιμής της σύμβαση με κεφαλαία final κλάση δεν μπορεί να έχει κλάσεις που να προκύπτουν από αυτή final μέθοδος δεν μπορεί να γίνει overridden

Δήλωση και χρήση μεθόδων Μέθοδοι πολλών παραμέτρων Πολλαπλές παράμετροι μπορούν να δηλωθούν, κατά τα γνωστά, ως λίστα διαχωριζόμενη με κόμματα Τα ορίσματα σε μία μέθοδο πρέπει να συμβαδίζουν με τον αριθμό, τον τύπο και τη σειρά των παραμέτρων

1 // Fig. 6.3: MaximumFinder.java 2 // Programmer-declared method maximum. 3 import java.util.scanner; 4 5 public class MaximumFinder 6 { Δήλωση και χρήση μεθόδων 7 // obtain three floating-point values and locate the maximum value 8 public void determinemaximum() 9 { 10 // create Scanner for input from command window 11 Scanner input = new Scanner( System.in ); 12 13 // obtain user input 14 System.out.print( 15 "Enter three floating-point values separated by spaces: " ); 16 double number1 = input.nextdouble(); // read first double 17 double number2 = input.nextdouble(); // read second double 18 double number3 = input.nextdouble(); // read third double 19 20 // determine the maximum value 21 double result = maximum( number1, number2, number3 ); 22 23 // display maximum value 24 System.out.println( "Maximum is: " + result ); 25 } // end method determinemaximum 26 Προτρέπει το χρήστη να εισάγει και να διαβάσει 3 τιμές double Εμφάνιση μέγιστης (maximum) τιμής Κλήση μεθόδου maximum

27 // returns the maximum of its three double parameters 28 public double maximum( double x, double y, double z ) 29 { 30 double maximumvalue = x; // assume x is the largest to start Δήλωση και χρήση μεθόδων 31 32 // determine whether y is greater than maximumvalue 33 if ( y > maximumvalue ) 34 maximumvalue = y; 35 36 // determine whether z is greater than maximumvalue 37 if ( z > maximumvalue ) 38 maximumvalue = z; 39 40 return maximumvalue; 41 } // end method maximum 42 } // end class MaximumFinder Δήλωση μεθόδου maximum Σύγκριση y και maximumvalue Σύγκριση z και maximumvalue Επιστροφή μέγιστης (maximum) τιμής Η δήλωση παραμέτρων ίδιου τύπου με τη double x, y αντί της double x, double y αποτελεί συντακτικό σφάλμα! Απαιτείται ένας τύπος για κάθε παράμετρο στη λίστα των παραμέτρων

1 // Fig. 6.4: MaximumFinderTest.java 2 // Application to test class MaximumFinder. 3 4 public class MaximumFinderTest Δήλωση και χρήση Δημιουργία μεθόδων αντικειμένου MaximumFinder 5 { 6 // application starting point 7 public static void main( String args[] ) 8 { 9 MaximumFinder maximumfinder = new MaximumFinder(); 10 maximumfinder.determinemaximum(); 11 } // end main 12 } // end class MaximumFinderTest Enter three floating-point values separated by spaces: 9.35 2.74 5.1 Maximum is: 9.35 Enter three floating-point values separated by spaces: 5.8 12.45 8.32 Maximum is: 12.45 Enter three floating-point values separated by spaces: 6.46 4.12 10.54 Maximum is: 10.54 Κλήση της μεθόδου determinemaximum

...Δήλωση και χρήση μεθόδων Επαναχρησιμοποίηση της μεθόδου Math.max Η έκφραση Math.max(x, Math.max( y, z )) προσδιορίζει πρώτα το μέγιστο μεταξύ των y και z, και έπειτα προσδιορίζει το μέγιστο μεταξύ του x και αυτής της τιμής

...Δήλωση και χρήση μεθόδων Τρεις τρόποι κλήσης μιας μεθόδου Χρήση του ονόματος της μεθόδου και μόνο, για κλήση μιας άλλης μεθόδου της ίδιας κλάσης, π.χ. maximum(number1, number2, number3); Χρήση μιας μεταβλητής που περιέχει αναφορά σε αντικείμενο, ακολουθούμενη από τελεία (.) και το όνομα της μεθόδου, για κλήση μιας μεθόδου του αντικειμένου αναφοράς, π.χ. maximumfinder.determinemaximum(); που καλεί μία μέθοδο της κλάσης MaximumFinder από τη μέθοδο main της MaximumFinderTest Χρήση του ονόματος της κλάσης και της τελείας (.), για κλήση μιας static μεθόδου μιας κλάσης, π.χ. Math.sqrt(900.0)

Προσοχή Οι static μέθοδοι δεν μπορούν να καλέσουν μηstatic μεθόδους της ίδιας κλάσης απευθείας ΟΜΩΣ το αντίθετο μπορεί να συμβεί Οι μη- static μέθοδοι μπορούν να καλέσουν static μεθόδους της ίδιας κλάσης απευθείας

Συνηθισμένα σφάλματα 1. Η δήλωση μιας μεθόδου εκτός του σώματος δήλωσης μιας κλάσης ή εντός του σώματος μιας άλλης μεθόδου είναι συντακτικό σφάλμα 2. Η παράλειψη του τύπου επιστροφής στη δήλωση μιας μεθόδου είναι συντακτικό σφάλμα (syntax error) 3. Η τοποθέτηση ερωτηματικού μετά από τη δεξιά παρένθεση που περικλείει τη λίστα παραμέτρων στη δήλωση μιας μεθόδου είναι συντακτικό σφάλμα (syntax error) 4. Η εκ νέου δήλωση της παραμέτρου μιας μεθόδου ως τοπικής μεταβλητής στο σώμα της μεθόδου είναι σφάλμα μεταγλώττισης (compilation error) 5. Η παράλειψη επιστροφής μιας τιμής από μέθοδο που επιστρέφει κάτι είναι σφάλμα μεταγλώττισης (compilation error) 6. Επιστροφή τύπου άλλου από αυτόν που έχει δηλωθεί είναι επίσης σφάλμα μεταγλώττισης (compilation error). 7. Η επιστροφή μιας τιμής από μέθοδο, της οποίας ο τύπος επιστροφής έχει δηλωθεί ως void είναι σφάλμα μεταγλώττισης (compilation error)

Προβιβασμός ορισμάτων και αλλαγή τύπου Προβιβασμός ορισμάτων Η μετατροπή των τιμών ορισμάτων στον τύπο που περιμένει η μέθοδος να πάρει στην αντίστοιχη παράμετρό της Π.χ. Math.sqrt(4). Η Java θα μετατρέψει τον ακέραιο 4 σε double 4.0 πριν τον διοχετεύσει στη sqrt Κανόνες προβιβασμού Ποιες μετατροπές επιτρέπονται δηλ. ποιες μετατροπές μπορούν να εκτελεστούν χωρίς απώλειες δεδομένων Οι τιμές σε μια έκφραση προβιβάζονται στον υψηλότατο τύπο στη έκφραση (ένα προσωρινό αντίγραφο της τιμής δημιουργείται)

...Προβιβασμός ορισμάτων και αλλαγή τύπου Τύπος double float long int char short byte boolean Έγκυροι Προβιβασμοί None double float or double long, float or double int, long, float or double int, long, float or double (but not char) short, int, long, float or double (but not char) None (boolean values are not considered to be numbers in Java)

Συνηθισμένο σφάλμα Η μετατροπή μιας τιμής πρωταρχικού τύπου σε ενός άλλου πρωταρχικού τύπου, μπορεί να αλλάξει την τιμή αν ο νέος τύπος δεν αποτελεί έγκυρο προβιβασμό. Π.χ., η μετατροπή μιας τιμής κινητής υποδιαστολής σε κάποιον ακέραιο τύπο μπορεί να προκαλέσει σφάλματα περικοπής (απώλεια του κλασματικού μέρους) στο αποτέλεσμα

Ανάλυση υπόθεσης: Παραγωγή τυχαίων αριθμών Παραγωγή τυχαίων αριθμών Η static μέθοδος random της κλάσης Math Επιστρέφει τιμές double στην περιοχή 0.0 <= x < 1.0 Η κλάση Random του πακέτου java.util Μπορεί να παράγει τυχαίες τιμές boolean, byte, float, double, int, long και Gaussian Διασπείρεται (seeded) με την τρέχουσα ώρα της ημέρας για να παράγει διαφορετικές ακολουθίες αριθμών κάθε φορά που εκτελείται το πρόγραμμα Ενα νέο αντικείμενο γεννήτριας τυχαίων αριθμών μπορεί να δημιουργηθεί ως εξής: Random randomnumbers = new Random(); Το αντικείμενο γεννήτριας τυχαίων αριθμών χρησιμοποιείται στη συνέχεια για να παράγει τυχαίες τιμές, π.χ. int: int randomvalue = randomnumbers.nextint();

1 // Fig. 6.7: RandomIntegers.java Τυχαίοι ακέραιοι από 1-6 2 // Shifted and scaled random integers. 3 import java.util.random; // program uses class Random 4 5 public class RandomIntegers Εισαγωγή κλάσης Random από το Ανάλυση υπόθεσης: Παραγωγή τυχαίων αριθμών 6 { πακέτο java.util 7 public static void main(string args[]) 8 { 9 Random randomnumbers = new Random(); // random number generator 10 int face; // stores each random integer generated 11 12 // loop 20 times 13 for (int counter = 1; counter <= 20; counter++) 14 { 15 // pick random integer from 1 to 6 16 face = 1 + randomnumbers.nextint(6); 17 18 System.out.printf("%d ", face); // display generated value 19 20 // if counter is divisible by 5, start a new line of output 21 if (counter % 5 == 0) 22 System.out.println(); 23 } // end for 24 } // end main 25 } // end class RandomIntegers Παραγωγή μιας τυχαίας ρίψης ζαριού οι τιμές που επιστρέφονται είναι ψευδοτυχαίοι αριθμοί στην περιοχή 0-5 (1+0-1+5) Η randomnumbers.nextint(n); Επιστρέφει μία τυχαία τιμή από το 0 ως, αλλά OXI συμπεριλαμβανομένης, της τιμής του ορίσματος Δημιουργία αντικειμένου Random

1 5 3 6 2 5 2 6 5 2 4 4 4 2 6 3 1 6 2 2 6 5 4 2 6 1 2 5 1 3 6 3 2 2 1 6 4 2 6 4 Δύο διαφορετικά σετ αποτελεσμάτων που περιέχουν ακεραίους από 1-6

1 // Fig. 6.8: RollDie.java 2 // Roll a six-sided die 6000 times. 3 import java.util.random; 4 Εισαγωγή κλάσης Random από το πακέτο java.util Ανάλυση υπόθεσης: Παραγωγή τυχαίων αριθμών 5 public class RollDie 6 { 7 public static void main( String args[] ) 8 { 9 Random randomnumbers = new Random(); // random number generator 10 11 int frequency1 = 0; // maintains count of 1s rolled 12 int frequency2 = 0; // count of 2s rolled 13 int frequency3 = 0; // count of 3s rolled 14 int frequency4 = 0; // count of 4s rolled 15 int frequency5 = 0; // count of 5s rolled 16 int frequency6 = 0; // count of 6s rolled 17 Δημιουργία αντικειμένου Random Δήλωση μετρητών συχνότητας Για να δείξουμε ότι οι τυχαίοι αριθμοί που δημιουργούνται εμφανίζονται περίπου με ίδιες πιθανότητες, προσομοιώνουμε το ρίξιμο του ζαριού 6000 φορές. Κάθε ακέραιος από το 1 ως ο 6 πρέπει να εμφανίζεται κατά προσέγγιση 1000 φορές

18 int face; // stores most recently rolled value 19 20 // summarize results of 6000 rolls of a die 21 for ( int roll = 1; roll <= 6000; roll++ ) 22 { Ανάλυση υπόθεσης: Παραγωγή τυχαίων αριθμών 23 face = 1 + randomnumbers.nextint(6); // number from 1 to 6 24 25 // determine roll value 1-6 and increment appropriate counter 26 switch (face) 27 { 28 case 1: 29 ++frequency1; // increment the 1s counter 30 break; 31 case 2: 32 ++frequency2; // increment the 2s counter 33 break; 34 case 3: 35 ++frequency3; // increment the 3s counter 36 break; 37 case 4: 38 ++frequency4; // increment the 4s counter 39 break; 40 case 5: 41 ++frequency5; // increment the 5s counter 42 break; 43 case 6: 44 ++frequency6; // increment the 6s counter 45 break; // optional at end of switch 46 } // end switch 47 } // end for 48 Επανάληψη 6000 φορές Παραγωγή τυχαίας ρίψης ζαριού switch με βάση τη ρίψη ζαριού

49 System.out.println( "Face\tFrequency" ); // output headers 50 System.out.printf( "1\t%d\n2\t%d\n3\t%d\n4\t%d\n5\t%d\n6\t%d\n", 51 frequency1, frequency2, frequency3, frequency4, 52 frequency5, frequency6 ); 53 } // end main 54 } // end class RollDie Εμφάνιση των συχνοτήτων ρίψης ζαριού Face Frequency 1 982 2 1001 3 1015 4 1005 5 1009 6 988 Face Frequency 1 1029 2 994 3 1017 4 1007 5 972 6 981

Γενικευμένη κλιμάκωση και μετατόπιση τυχαίων αριθμών Για να παράγουμε έναν τυχαίο αριθμό σε μία συγκεκριμένη περιοχή Χρησιμοποιούμε την έκφραση shiftingvalue + differencebetweenvalues * randomnumbers.nextint( scalingfactor ) όπου : shiftingvalue είναι ο πρώτος αριθμός στην επιθυμητή περιοχή τιμών differencebetweenvalues αναπαριστά τη διαφορά μεταξύ διαδοχικών τιμών στην ακολουθία scalingfactor καθορίζει το πόσοι αριθμοί βρίσκονται στην εν λόγω περιοχή τιμών Παράδειγμα: Χρήση της έκφρασης number = 2 + 3*randomNumbers.nextInt(5); για την παραγωγή τυχαίου αριθμού από την ακολουθία 2,5,8,11,14

Πηγές/Acknowledgements http://java.sun.com/j2se H. M. Deitel, P. J. Deitel, Java Προγραμματισμός, 6η έκδοση, Μ. Γκιούρδας, 2006 D. Barnes, M. Kolling, Αντικειμενοστρεφής Προγραμματισμός σε Java, Κλειδάριθμος, 2008 Βασίλης Χριστοφίδης, Αντικειμενοστρεφής Προγραμματισμός, Πανεπιστήμιο Κρήτης Κ. Τσαγκάρης, Εισαγωγή στις εφαρμογές της Java, Πανεπιστήμιο Πειραιώς Jones, Evan, Adam Marcus, and Eugene Wu. 6.092 Introduction to Programming in Java,January IAP 2010. (Massachusetts Institute of Technology: MIT OpenCourseWare), http://ocw.mit.edu (Accessed 10 Mar, 2013). License: Creative Commons BY-NC-SA