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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Η βασική συνάρτηση προγράμματος main()

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

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

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

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

Δομές Δεδομένων (Data Structures)

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

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

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

Ηβασικήσυνάρτηση προγράμματος main()

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

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

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

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

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

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

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

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

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

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

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

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

Προγραμματισμός Συστημάτων

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

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

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

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

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

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

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

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

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

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

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

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

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

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

Συναρτήσεις-Διαδικασίες

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

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

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

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

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

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

Προγραμματισμό για ΗΜΥ

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

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

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

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

(Διαφάνειες Νίκου Βιδάκη)

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

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

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

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

API: Applications Programming Interface

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

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

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

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

! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση. ! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες

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

Η γλώσσα προγραμματισμού C

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

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

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

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Transcript:

8. Μέθοδοι (Methods) Χειμερινό εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1

Θέματα Μέθοδοι που παρέχονται από τη τάξη Math του Java API Χρήση στατικών μεθόδων και δεδομένων (static methods and fields) Κλήση μεθόδων και μεταφορά δεδομένων μεταξύ μεθόδων Χρήση πακέτων (packages) για ομαδοποίηση κοινών κλάσεων Δημιουργία τυχαίων αριθμών (random-number generation) Ορατότητα δηλώσεων (visibility of declarations) Υπερφόρτωση μεθόδων (method overloading) Αναδρομικές μέθοδοι (recursive methods) 2

Τμήματα προγραμμάτων (program modules) Μέθοδοι (methods/ functions ) Διαχωρισμός συγκεκριμένων έργων/ενεργειών σε αυτόνομες μεθόδους o Διαίρει και βασίλευε (divide-and-conquer) απλοποίηση του προβλήματος o o o Ευκολότερος προγραμματισμός μίας απλής μεθόδου Καλύτερος έλεγχος για λάθη Αποφυγή επανάληψης κώδικα και επαναχρησιμοποίηση μεθόδων Κλάσεις (classes) Πακέτα (packages) 3

Java Application Programming Interface (API) http://java.sun.com/javase/6/docs/api/index.html Είναι επίσης γνωστό σαν Java Class Library Περιέχει προκαθορισμένες κλάσεις (classes) και μεθόδους (methods), οι οποίες ομαδοποιούνται σε πακέτα (packages) όπως π.χ.: java.lang: βασικές κλάσεις και μέθοδοι, απαραίτητες σε κάθε πρόγραμμα java.math: κλάσεις και μέθοδοι για μαθηματικές πράξεις java.io: κλάσεις και μέθοδοι για είσοδο/έξοδο δεδομένων/αποτελεσμάτων java.awt: κλάσεις για τη δημιουργία γραφικών (graphics) και περιβαλλόντων διασύνδεσης (user interfaces) javax.swing: κλάσεις για τη δημιουργία γραφικών και περιβαλλόντων διασύνδεσης χρησιμοποιώντας μόνο Java ("lightweight, all-java language) javax.sql: κλάσεις και μέθοδοι για πρόσβαση σε δομές δεδομένων (database) java.applet: κλάσεις και μέθοδοι για Java applets 4

Java API Packages: http://java.sun.com/j2se/1.5.0/docs/api/ 5

6

Στατικές Μέθοδοι (static/class methods) Αφορούν τη τάξη (class) και όχι συγκεκριμένο αντικείμενο (object) Μπορούν να κληθούν και να χρησιμοποιηθούν χωρίς την ανάγκη ύπαρξης και χρήσης κάποιου αντικειμένου της τάξης Καλούνται, όπως πιο κάτω: ClassName.methodName( arguments ) Παράδειγμα: Όλες οι μέθοδοι της τάξης Math, η οποία ορίζεται στο πακέτο java.lang, είναι στατικές: Math.sqrt(40.75 ) 7

Στατικές μέθοδοι της τάξης (κλάσης) Math - Math class methods 8

Μεταβλητές σταθερών τιμών και στατικές μεταβλητές (constant and static data fields) Μεταβλητές σταθερών τιμών (constant data fields) Ορίζονται χρησιμοποιώντας το keyword final Δεν επιτρέπονται αλλαγές μετά την αρχικοποίηση (initialization) τους Στατικές μεταβλητές (static data fields) Ορίζονται χρησιμοποιώντας το keyword static Υπάρχει μόνο μία μεταβλητή για όλη τη κλάση Μεταβλητές σταθερών τιμών (constant and static data fields) Ορίζονται χρησιμοποιώντας και τα δύο keywords (final και static ) π.χ. Math.PI και Math.E 9

Μέθοδος main public static void main( String args[] ) Δηλώνεται σαν στατική (static) μέθοδος, ώστε να μπορεί να κληθεί χωρίς την ανάγκη προηγούμενης δημιουργίας αντίστοιχου αντικειμένου Δηλώνεται σαν public μέθοδος, ώστε να μπορεί να κληθεί από οποιαδήποτε άλλη κλάση, μέθοδο, κ.λπ. Η JVM καλεί τη μέθοδο main της κλάσης η οποία δίνεται μετά την εντολή java κατά την εκτέλεση του προγράμματος χρησιμοποιώντας την εντολή java java ClassName argument1 argument2. Σε κάθε κλάση μπορεί να δηλωθεί μέθοδος main 10

Μέθοδοι με πολλαπλές παραμέτρους - Παράδειγμα Prompt the user to enter and read three double values Call method maximum Display maximum value 11

Declare the maximum method Compare y and maximumvalue Compare z and maximumvalue Return the maximum value 12

Create a MaximumFinder object Call the determinemaximum method 13

Κλήση Μεθόδων Χρησιμοποιώντας το όνομα μεθόδου που ανήκει στην ίδια τάξη (κλάση) Δεν μπορεί από στατική μέθοδο να κληθεί μη στατική μέθοδος Χρησιμοποιώντας μια μεταβλητή που αναφέρεται σε κάποιο αντικείμενο (variable containing a reference to an object) ακολουθούμενη από την τελεία (.) και το όνομα κάποιας μεθόδου της κλάσης του συγκεκριμένου αντικειμένου. Χρησιμοποιώντας το όνομα μιας κλάσης ακολουθουμένης από την τελεία (.) και το όνομα κάποιας στατικής μεθόδου της κλάσης 14

Στοίβα Κλήσης Μεθόδων (Method Call Stack) Στοίβα (stack) Last-in, first-out (LIFO) data structures (δομές δεδομένων) o o Items are pushed (inserted) onto the top Items are popped (removed) from the top Στοίβα εκτέλεσης προγράμματος / κλήσης μεθόδων (program execution stack / method call stack) Οι διευθύνσεις επιστροφής των μεθόδων από όπου καλούνται άλλες μέθοδοι μπαίνουν σε αυτήν την στοίβα και αφαιρούνται όταν επιστρέψει ο έλεγχος από την καλούμενη μέθοδο Οι τοπικές μεταβλητές (local variables) αποθηκεύονται σε ένα τμήμα της στοίβας κλήσης μεθόδων γνωστό σαν method s activation record ή stack frame 15

Επιτρεπτές αυτόματες προαγωγές - Valid promotions 16

Εμβέλεια δηλώσεων - Scope of declarations Η εμβέλεια (scope) μιας παραμέτρου είναι το σώμα (body) της μεθόδου Η εμβέλεια (scope) μιας τοπικής μεταβλητής (local-variable) είναι από το σημείο της δήλωσης (point of declaration) μέχρι το τέλος εκείνου του μπλοκ (block) Η εμβέλεια (scope) μιας τοπικής μεταβλητής (local-variable) στην επικεφαλίδα ενός βρόγχου (initialization section of a for-loop header) είναι η υπόλοιπη επικεφαλίδα και το σώμα του βρόγχου Η εμβέλεια (scope) μιας μεθόδου ή μεταβλητής μέλους μιας κλάσης (method or field of a class) είναι ολόκληρο το σώμα της κλάσης (body of the class) Μια μεταβλητή μέλος ενός αντικειμένου (field) σκιάζεται (shadowed) από τοπική μεταβλητή ή παράμετρο με το ίδιο όνομα και αυτό διαρκεί μέχρι η τοπική μεταβλητή ή παράμετρος βγουν εκτός εμβέλειας (go out of scope) 17

Shadows field x Display value of local variable x 18

Shadows field x Display value of local variable x Display value of field x 19

20

Υπερφόρτωση μεθόδων (Method overloading) Πολλαπλές μέθοδοι μπορούν να καθοριστούν με το ίδιο όνομα εφόσον έχουν διαφορετικές παραμέτρους όσο αφορά τον αριθμό και τύπο τους Ο μεταγλωττιστής (compiler) αποφασίζει ποια μέθοδο να καλέσει βάσει της ταύτισης των παραμέτρων που χρησιμοποιούνται στην κλήση της μεθόδου και των παραμέτρων κάποιας από τις υπερφορτωμένες μεθόδους Διαφορές στον τύπο που επιστρέφεται (return type) από τη μέθοδο δεν επηρεάζουν την απόφαση για το ποια μέθοδος να κληθεί αφού δεν είναι μέρος της υπογραφής της μεθόδου (method signature) Είναι λάθος να έχει την ίδια υπογραφή μιας μέθοδος (method signature), ακόμη και αν έχει διαφορετικό τύπο επιστροφής (return type) 21

Calls the square of int method Calls the square of double method 22

23

Same method signature Compilation error 24

Αναδρομικές μέθοδοι (recursive methods) Οι αναδρομικές μέθοδοι μπορούν να χρησιμοποιηθούν για να επιλυθεί κάποιο πρόβλημα με νέα κλήση μέσα από την ίδια μέθοδο του εαυτού της για επίλυσης πιο απλοποιημένου προβλήματος, εφαρμόζοντας κατά κάποιο τρόπο το διαίρει και βασίλευε (divide & conquer) Η Java μας δίνει αυτή τη δυνατότητα αφού επιτρέπεται να κληθεί μία μέθοδος μέσα από εκτέλεση της ίδιας μεθόδου Πολλοί αλγόριθμοι μπορούν εναλλακτικά να υλοποιηθούν πιο κομψά με χρήση recursive methods/functions παρά με χρήση επαναλήψεων (iteratively) Κάποιος αλγόριθμος που υλοποιείται αναδρομικά (recursively) μπορεί να υλοποιηθεί και επαναληπτικά (iteratively) Πρέπει να υπάρχουν κάποιες συνθήκες τερματισμού της αναδρομής πιο κοντά στις οποίες πρέπει να οδηγούμαστε με κάθε νέα αναδρομική κλήση 25

Παράδειγμα: Υπολογισμός παραγοντικού public class TestMyFactorial { public static void main(string [] agrs) { System.out.println("Factorial computation:\n"); int n=5; System.out.printf("Factorial of %d = %di = %d\n", n, n, recursivefactorial(n)); } static int recursivefactorial(int n) { if(n>1) return n*recursivefactorial(n-1); else return 1; } } 26