Οντοκεντρικόσ Προγραμματιςμόσ Ενότθτα 2: Η ΓΛΩΑ JAVA Βαςικά Δομικά Στοιχεία Ιωάννθσ Χατηθλυγεροφδθσ Πολυτεχνικι χολι Σμιμα Μθχανικών Η/Τ & Πλθροφορικισ
ΔΟΜΙΚΑ ΣΟΙΧΕΙΑ
ΓΟΜΙΚΑ ΣΟΙΥΔΙΑ JAVA Βαςικά Πακζτα (packages) Κλάςεισ (classes) Αντικείμενα/τιγμιότυπα (objects/instances) Μζκοδοι (methods) Μεταβλθτζσ (variables) Μθ Βαςικά Διεπαφζσ/Διαςυνδζςεισ (interfaces) Εξαιρζςεισ (exceptions) Νιματα (threads) 3/31
ΠΡΟΓΡΑΜΜΑ JAVA Πρόγραμμα Java = ζνα ςφνολο οριςμών κλάςεων Δομι [<Γηλώζεις ειζαγωγής κλάζεων βιβλιοθήκης>] [<Γηλώζεις κλάζεων>] <Γήλωζη βαζικής κλάζης> 4/31
ΠΑΡΑΓΔΙΓΜΑ ΠΡΟΓ/ΣΟ import java.lang.*; class Window { protected int size = 1; public Window() {.. class MWindow extends Window {.. Διλωςθ ειςαγωγισ κλάςθσ βιβλιοκικθσ Οριςμοί κλάςεων Οριςμόσ βαςικισ κλάςθσ public class CheckWindow {.. public static void main(string args[]){.. 5/31
ΚΛΑΕΙ
ΒΑΙΚΗ ΚΛΑΗ Κάκε πρόγραμμα java περιζχει μια βαςικι (ι πρωτεφουςα) κλάςθ (primary class) Είναι θ πρώτθ κλάςθ που αναγνωρίηει το περιβάλλον εκτζλεςθσ τθσ java Σο αρχείο που περιζχει το πρόγραμμα ζχει το ίδιο όνομα Περιζχει μια ενςωματωμζνθ μζκοδο τθσ java, τθν main (που δθλώνεται πάντα pubic static) Δθλώνεται πάντα public 7/31
ΓΔΝΙΚΟ ΟΡΙΜΟ ΚΛΑΗ <προζδ. κλάζης> class <όνομα κλαζης> { <δηλώζεις μεηαβληηών> <δηλώζεις δημιοσργών> <δηλώζεις μεθόδων> Διλωςθ ι Κεφαλίδα κλάςθσ ώμα κλάςθσ 8/31
ΠΡΟΓΙΟΡΙΣΔ ΚΛΑΗ public: (μπορεί να χρθςιμοποιθκεί από οποιοδιποτε πακζτο) abstract: (κλάςθ χωρίσ ςτιγμιότυπα: αφαιρετικι ι αφθρθμζνθ κλάςθ) final: (κλάςθ χωρίσ υποκλάςεισ, μόνο με ςτιγμιότυπα: τερματικι) 9/31
ΜΕΣΑΒΛΗΣΕ
ΜΔΣΑΒΛΗΣΔ-ΔΙΓΗ Μζλουσ (member) κλάςθσ (π.χ. μετρθτισ ςτιγμιοτφπων) ςτιγμιότυπου Παράμετροι (parameters) Τοπικζσ (local) (Η ζννοια τθσ κακολικισ μεταβλθτισ δεν υπάρχει με τον ίδιο τρόπο όπωσ ςτθ C) 11/31
ΜΔΣΑΒΛΗΣΔ (ΜΔΛΟΤ) Για μεταβλθτζσ ςτιγμιοτφπου Διλωςθ <προζδ> <ηύπος> <όνομα> [= <ηιμή>]; Προςδιοριςτζσ private (ορατι μόνο από τθν κλάςθ τθσ) protected (ορατι από τθν κλάςθ τθσ, τισ υποκλάςεισ τθσ κλάςθσ τθσ και τισ κλάςεισ του ίδιου πακζτου) public (ορατι από παντοφ) Για μεταβλθτζσ κλάςθσ static (μεταβλθτι κλάςθσ) final (μεταβλθτι με ςτακερι τιμι) 12/31
ΠΑΡΑΓΔΙΓΜΑΣΑ ΓΗΛΩΔΩΝ public class Circle { private double x, y ; private double r ; static double biggest_radius; προςδιοριςτισ μεταβλθτισ μεταβλθτζσ ςτιγμιοτφπου public double circumference ( ){ return 2*3.1416*r ; public void increase_radius (double dr) { double z; z = r + dr; this.r = z ; παράμετροσ τοπικι μεταβλθτι 13/31
ΜΕΘΟΔΟΙ & ΔΗΜΙΟΤΡΓΟΙ
ΓΔΝΙΚΟ ΟΡΙΜΟ ΜΔΘΟΓΟΤ [<προζδ. μεθόδοσ>] <επιζηρ. ηύπος> <όνομα μεθ.> ([<λίζηα παραμ.>]) { [<δηλώζεις ηοπικών μεηαβληηών>] <προηάζεις java> Διλωςθ ι κεφαλίδα μεκόδου Τφποι μεκόδων κλάςθσ ςτιγμιοτφπων ώμα μεκόδου 15/31
ΠΡΟΓΙΟΡΙΣΔ ΜΔΘΟΓΟΤ public, private, protected, static (όπωσ για τισ μεταβλθτζσ) abstract (ςε αφαιρετικι κλάςθ) final (μζκοδοσ που δεν μπορεί να επικαλυφκεί ςτισ υποκλάςεισ τθσ κλάςθσ-ςχετίηεται με τθν ζννοια τθσ κλθρονομικότθτασ) 16/31
ΚΛΗΗ ΜΔΘΟΓΟΤ- ΠΔΡΑΜΑ/ΑΠΟΣΟΛΗ ΜΗΝΤΜΑΣΩΝ Ο μόνοσ τρόποσ επικοινωνίασ αντικειμζνων (δθλ. κλιςθσ μιασ μεκόδου για εκτζλεςθ) φνταξθ <όνομα ανηικειμ.>.<όνομα μεθόδοσ> (<λίζηα παραμέηρων>) Π.χ. c.area( ) ; c.increase_radius(0.5); Circle.bigger(c1, c2); όπου c ςτιγμιότυπο και Circle κλάςθ. 17/31
ΠΑΡΑΓΔΙΓΜΑ (1) Mέθοδος ζηιγμιοηύποσ public class Circle { public double x, y, r ; public Circle bigger(circle c){ if (c.r > r) return c; else return this; Αν c1, c2 δφο ςτιγμιότυπα τθσ Circle με r 2.0 και 5.0 αντίςτοιχα και c μια μεταβλθτι τφπου Circle, τότε οι c = c1.bigger(c2) ι c = c2.bigger(c1) δίνουν ςτθ c τθν τιμι c2 (: θ c γίνεται αναφορά ςτο c2). 18/31
ΠΑΡΑΓΔΙΓΜΑ (2) Mέθοδος κλάζης public class Circle { public double x, y, r ; public static Circle bigger(circle a, Circle b) { if (a.r > b.r) return a; else return b; Αν c1, c2 δφο ςτιγμιότυπα τθσ Circle με r 2.0 και 5.0 αντίςτοιχα και c μια μεταβλθτι τφπου Circle, τότε θ c = Circle.bigger(c1, c2) δίνει ςτθ c τθν τιμι c2 (: θ c γίνεται αναφορά ςτο c2). 19/31
ΓΗΜΙΟΤΡΓΙΑ ΑΝΔΝΔΡΓΟΤ ΣΙΓΜΙΟΣΤΠΟΤ Circle c ; c = new Circle ( ) ; Circle c = new Circle ( ) ; Μζκοδοσ δθμιουργίασ ςτιγμιότυπου Ιδιαίτεροσ τφποσ αποςτολισ μθνφματοσ Μεταβλθτι τφπου Circle (δθλ. αποτελεί αναφορά ςε ςτιγμιότυπα τθσ κλάςθσ Circle) Εξ οριςμοφ ι αφανισ δθμιουργόσ (constructor) 20/31
ΓΗΜΙΟΤΡΓΙΑ ΔΝΔΡΓΟΤ ΣΙΓΜΙΟΣΤΠΟΤ (ΓΗΜΙΟΤΡΓΟ) (ίδιο όνομα). public class Circle { private double x, y, r ; public Circle (double x, double y, double r) { this.x = x ; this.y = y ; this.r = r ;.. Αναφορά ςτο δθμιουργοφμενο αντικείμενο Δθμιουργόσ (constructor) Circle c = new Circle (10.0, 20.0, 2.0) ; 21/31
ΥΑΡΑΚΣΗΡΙΣΙΚΑ ΓΗΜΙΟΤΡΓΟΤ Κδιο όνομα με τθν κλάςθ, προςδιοριςτι public Ειδικι κατθγορία ςυνάρτθςθσ (όχι μζκοδοσ). Καλείται ανεξάρτθτα από τθν φπαρξθ ςτιγμιοτφπου τθσ κλάςθσ Δεν ορίηεται επιςτρεφόμενθ τιμι (όχι void, όχι return) Όχι άμεςθ κλιςθ ς ζνα πρόγραμμα (μόνο ζμμεςθ, κατά τθ δθμιουργία αντικειμζνου) Χριςθ τθσ λζξθσ κλειδί this (όταν τα ονόματα των οριςμάτων είναι ίδια με αυτά των μεταβλθτών τθσ κλάςθσ) Επιςτρζφει ζμμεςα τθν τιμι αναφοράσ του this 22/31
ΓΗΜΙΟΤΡΓΙΑ ΣΙΓΜΙΟΣΤΠΟΤ ΥΩΡΙ ΓΗΜΙΟΤΡΓΟ Διλωςθ μεταβλθτών ωσ public Αρχικοποίθςθ μζςω εντολών τθσ μορφισ <ζηιγμιόησπο>.<μεηαβληηή> public class Circle { public double x, y, r ; Circle c = new Circle () ; c.x = 10.0; c.y = 20.0; c.r = 2.0; 23/31
ΠΟΛΛΑΠΛΟΙ ΓΗΜΙΟΤΡΓΟΙ public class Circle { private double x, y, r ; public Circle (double x, double y, double r) { this.x = x ; this.y = y ; this.r = r ; public Circle (double r) { x = 0.0 ; y = 0.0 ; this.r = r ; public Circle () { x = 0.0 ; y = 0.0 ; r = 1.0 ; public Circle (Circle c) { x = c.x ; y = c.y ; r = c.r ; Υπερφόρτωςθ Μεκόδων (method overloading) (αναγνώριςθ μεκόδου όχι μόνο από το όνομα, αλλά και τον τφπο των οριςμάτων) 24/31
ΣΔΛΔΣΗ THIS - ΔΠΑΝΑΥΡΗΙΜΟΠΟΙΗΗ public class Circle { private double x, y, r ; public Circle (double x, double y, double r) { this.x = x ; this.y = y ; this.r = r ; public Circle (double r) { this (0.0, 0.0, r ); public Circle () { this (0.0, 0.0, 1.0) ; public Circle (Circle c) { this (c.x, c.y, c.r) ; Ο τελεςτισ this ςτο ςώμα μιασ μεκόδου μεταφζρει τον ζλεγχο ςτθ μζκοδο με το ίδιο όνομα και αντίςτοιχα ορίςματα. 25/31
Χρθματοδότθςθ Σο παρόν εκπαιδευτικό υλικό ζχει αναπτυχκεί ςτo πλαίςιo του εκπαιδευτικοφ ζργου του διδάςκοντα. Σο ζργο «Ανοικτά Ακαδθμαϊκά Μακιματα ςτο Πανεπιςτιμιο Ακθνών» ζχει χρθματοδοτιςει μόνο τθν αναδιαμόρφωςθ του εκπαιδευτικοφ υλικοφ. Σο ζργο υλοποιείται ςτο πλαίςιο του Επιχειρθςιακοφ Προγράμματοσ «Εκπαίδευςθ και Δια Βίου Μάκθςθ» και ςυγχρθματοδοτείται από τθν Ευρωπαϊκι Ζνωςθ (Ευρωπαϊκό Κοινωνικό Σαμείο) και από εκνικοφσ πόρουσ. 26/31
θμείωμα Ιςτορικοφ Εκδόςεων Ζργου Σο παρόν ζργο αποτελεί τθν ζκδοςθ 1.0. 27/31
θμείωμα Αναφοράσ Copyright: Πανεπιςτιμιον Πατρών, Ιωάννθσ Χατηθλυγεροφδθσ, 2015. «Οντοκεντρικόσ Προγραμματιςμόσ». Ζκδοςθ: 1.0. Πάτρα 2015. Διακζςιμο από τθ δικτυακι διεφκυνςθ: https://eclass.upatras.gr/courses/ceid1105/ 28/31
θμείωμα Αδειοδότθςθσ Σο παρόν υλικό διατίκεται με τουσ όρουσ τθσ άδειασ χριςθσ Creative Commons Αναφορά, Μθ Εμπορικι Χριςθ Παρόμοια Διανομι 4.0 *1+ ι μεταγενζςτερθ, Διεκνισ Ζκδοςθ. Εξαιροφνται τα αυτοτελι ζργα τρίτων π.χ. φωτογραφίεσ, διαγράμματα κ.λ.π., τα οποία εμπεριζχονται ςε αυτό και τα οποία αναφζρονται μαηί με τουσ όρουσ χριςθσ τουσ ςτο «θμείωμα Χριςθσ Ζργων Σρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ωσ Μθ Εμπορικι ορίηεται θ χριςθ: που δεν περιλαμβάνει άμεςο ι ζμμεςο οικονομικό όφελοσ από τθν χριςθ του ζργου, για το διανομζα του ζργου και αδειοδόχο που δεν περιλαμβάνει οικονομικι ςυναλλαγι ωσ προχπόκεςθ για τθ χριςθ ι πρόςβαςθ ςτο ζργο που δεν προςπορίηει ςτο διανομζα του ζργου και αδειοδόχο ζμμεςο οικονομικό όφελοσ (π.χ. διαφθμίςεισ) από τθν προβολι του ζργου ςε διαδικτυακό τόπο Ο δικαιοφχοσ μπορεί να παρζχει ςτον αδειοδόχο ξεχωριςτι άδεια να χρθςιμοποιεί το ζργο για εμπορικι χριςθ, εφόςον αυτό του ηθτθκεί.
Διατιρθςθ θμειωμάτων Οποιαδιποτε αναπαραγωγι ι διαςκευι του υλικοφ κα πρζπει να ςυμπεριλαμβάνει: το θμείωμα Αναφοράσ το θμείωμα Αδειοδότθςθσ τθ διλωςθ Διατιρθςθσ θμειωμάτων το θμείωμα Χριςθσ Ζργων Σρίτων (εφόςον υπάρχει) μαηί με τουσ ςυνοδευόμενουσ υπερςυνδζςμουσ. 30/31
θμείωμα Χριςθσ Ζργων Σρίτων 31/31