Διάλεξθ 02: Αντικειμενοςτρεφισ Προγραμματιςμόσ με τθν JAVA

Σχετικά έγγραφα
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

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

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

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

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

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

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

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

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

Διάλεξη 1: Αντικειμενοστρεφής Προγραμματισμός -Εισαγωγή. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

16. Πίνακεσ και Συναρτήςεισ

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

8 ΥΜΒΟΛΟΕΙΡΕ - STRINGS

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

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

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

Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python

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

Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

ΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ. Κεφάλαιο 8 Η γλϊςςα Pascal

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

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

9 ΕΞΑΙΡΕΕΙ - EXCEPTIONS

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

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

3 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ ( while, do while )

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

ΑΛΕΞΑΝΔΡΕΙΟ ΣΕΙ ΘΕΑΛΟΝΙΚΗ ΣΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗ Σ.Ε. ΜΑΘΗΜΑ : ΑΛΓΟΡΙΘΜΙΚΗ ΚΑΙ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΔΙΔΑΚΩΝ : ΓΟΤΛΙΑΝΑ ΚΩΣΑ

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν

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

Ειδικά Θζματα Βάςεων Δεδομζνων

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες

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

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

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

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

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

17. Πολυδιάςτατοι πίνακεσ

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι

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

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

Java sessions. Part 1 - Βασικά έννοιες - μέθοδοι

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

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

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

Γενικά (για τις γραπτές εξετάσεις)

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

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

Ευφυείς Τεχνολογίες ----Πράκτορες

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

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

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

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 19. Αλφαριθμητικά II. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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


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

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

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

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

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

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

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

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. Διαφάνειεσ: Βαςικζσ Αρχζσ Προγραμματιςμοφ Α.Π.Θ. Δθμιτρθσ Βράκασ

Υποστηρικτικό υλικό Σημειώσεις

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

Επιστημονικός Υπεύθυνος: Γιάννης Τζίτζικας Επίκουρος Καθηγητής, Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης

Προγραμματισμός Διαδικτύου

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

Ειδικά Θέματα Προγραμματισμού

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

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

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

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

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

Transcript:

Διάλεξθ 02: Αντικειμενοςτρεφισ Προγραμματιςμόσ με τθν JAVA Στην ενότητα αυτή θα μελετηθοφν τα εξήσ επιμζρουσ θζματα: Ειςαγωγι ςτισ ζννοιεσ: - Επιςκόπθςθ τθσ JAVA - Περιςςότερεσ Πλθροφορίεσ ςτο μάκθμα ΕΠΛ233 http://www.cs.ucy.ac.cy/courses/epl233/ ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 1

Προγράμματα Τα προγράμματα (software), είναι βαςικά ζνα ςφνολο από οδθγίεσ ςτον υπολογιςτι. Χωρίσ τα προγράμματα ο υπολογιςτισ είναι μία άδεια μθχανι. Δεδομζνου ότι ο υπολογιςτισ δεν καταλαβαίνει τθν φυςικι γλϊςςα αλλά μόνο τθν γλϊςςα μθχανισ (machine language), χρειαηόμαςτε κάποιεσ ειδικζσ γλϊςςεσ (γλϊςςεσ προγραμματιςμοφ) για να επικοινωνιςουμε μαηί του. Παραδείγματα γλωςςϊν προγραμματιςμοφ: C, C++, JAVA, C#, Visual Basic, Fortran, κ.τ.λ. ΠΑΡΑΔΕΙΓΜΑ ΠΡΟΓΡΑΜΜΑΣΟ σε JAVA public class HelloWorld{ public static void main(string[] args){ System.out.println("Hello World!!!"); ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 2

Η πλατφόρμα τησ JAVA Περιβάλλον Μεταγλώττισης Πλατυόρμα JAVA Πλατφόρμα: Περιβάλλον λογιςμικοφ και υλικοφ ςτο οποίο εκτελείται ζνα πρόγραμμα. Συνικωσ είναι ςυνδυαςμόσ του Λειτουργικοφ Συςτιματοσ και του Υλικοφ Υποςτρϊματοσ του ΛΣ. Δθμοφιλείσ πλατφόρμεσ: Microsoft Windows, Linux, Solaris OS, Mac OS. Πλατφόρμα Java: Σφςτθμα λογιςμικοφ που τρζχει πάνω ςε διάφορεσ πλατφόρμεσ υλικοφ. Αποτελείται από: Τθν Εικονικι Μθχανι JAVA: Java Virtual Machine Τθν Προγραμματιςτικι Διαπροςωπεία Εφαρμογϊν τθσ JAVA (Java Application Programming Interface - API) Πηγαίοσ Κϊδικασ (.java) Compiler (javac.exe) Java Bytecode (.class) Class loader and Bytecode verifier Java Class Library The Java Virtual Machine Java Interpreter (java.exe) Run Time System Just-in-time compiler Operating System Hardware ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 3

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 4 Τυπικόσ Κφκλοσ Ζωήσ ενόσ Προγράμματοσ JAVA Αρχείο HelloWorld.java ΠΑΡΑΔΕΙΓΜΑ ΠΗΓΑΙΟΤ ΚΩΔΙΚΑ public class HelloWorld{ public static void main(string[] args){ System.out.println("Hello World!!!"); Μεταγλώττιση (javac) javac HelloWorld.java Αρχείο HelloWorld.class ΠΑΡΑΔΕΙΓΜΑ BYTE CODE Method HelloWorld() 0 aload_0 Method void main(java.lang.string[]){ 0 getstatic #2 3 ldc #3 < String "Hello World!!!" > 5 invokevirtual #4 Διερμηνεία και Εκτέλεση (java) java HelloWorld Δημιουργία/Ενημζρωςη Πηγαίου Κϊδικα Πηγαίοσ Κϊδικασ (Αποθήκευςη ςτον δίςκο) Μεταγλϊττιςη Πηγαίου Κϊδικα ByteCode (Αποθήκευςη ςτον δίςκο) Εκτζλεςη Bytecode Αποτζλεςμα Σε περίπτωςη προβλημάτων μεταγλϊττιςησ Σε περίπτωςη λάθοσ αποτελζςματοσ

Ενςωματωμζνο Περιβάλλον Ανάπτυξησ (IDE) Ζνα Ενςωματωμζνο Περιβάλλον Ανάπτυξθσ (Integrated Development Environment (IDE)) ςυνικωσ περιλαμβάνει: Ζνα ςυντάκτθ πθγαίου κϊδικα (π.χ., Notepad) Εργαλεία αυτοματοποίθςθσ (π.χ., αυτόματθ μεταγλϊττιςθ κϊδικά, παρουςίαςθ ςυντακτικϊν λακϊν) Ζνα ελεγκτι/παρατθρθτι (debugger) Παράδειγμα Eclipse IDE ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 5

Παραδείγματα: Κλάςη ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 6 class Circle { //Η ακτίνα αυτού του κύκλου double radius = 1.0; //Δημιούργηςε ένα αντικείμενο τύπου κύκλοσ Circle () { ; //Δημιούργηςε ένα αντικείμενο τύπου κύκλοσ //με ςυγκεκριμένη ακτίνα Circle (double newradius) { radius = newradius; ; Δεδομζνα/ Μεταβλητζσ Καταςκευαςτζσ //Επέςτρεψε το εμβαδό αυτόυ του κύκλου double getarea () { return radius * radius * π; Μζθοδοι

Παραδείγματα: Αντικείμενα Κλάςη Circle Κλάςη Test: περιλαμβάνει την μζθοδο main public class Test{ public static void main(string[] args){ Circle a = new Circle(); Circle b = new Circle(5); Circle c = new Circle(20); 3 αντικείμενα a b c τησ κλάςησ Circle object Circle radius = 1.0 object Circle radius = 5.0 object Circle radius = 20.0 ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 7

Απλό if else Θυμθκείτε το πρόγραμμα για τθ δθμιουργία κφκλων με ακτίνα Πρόβλημα: Τι γίνεται αν δϊςουμε αρνθτικι τιμι για τθν ακτίνα του κφκλου; λάκοσ αποτζλεςμα Λφςη: Μόνο αν ο χριςτθσ δϊςει κετικι τιμι τότε αλλάηουμε τθν τιμι τθσ radius Σφνταξθ απλοφ if: if ( <boolean expression> ) { else { class Circle { double radius = 1.0; Circle (double newradius) { radius = newradius; ; class Circle { double radius = 1.0; Circle (double newradius) { if ( newradius >= 0 ){ radius = newradius; else { radius = 0; ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 8

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 9 if else if else Τι ςυμβαίνει αν υπάρχουν πολλζσ ςυνκικεσ για τθν ίδια μεταβλθτι; Παράδειγμα: Υπάρχουν οι ακόλουκοι φόροι ςφμφωνα με τον μιςκό κάποιου ατόμου: μιςκόσ <=20,000 0% φόροσ μιςκόσ >20,000 και <=30,000 20% φόροσ μιςκόσ >30,000 και <=40,000 30% φόροσ μιςκόσ >40,000 40% φόροσ Πρόβλημα: Χρειάηεται να γράψουμε 3x if statements; ΌΧΙ Λφςη: Χριςθ του if else if else computetax (double salary) { double tax = 0.0; if ( salary <= 20000 ) { tax = 0.0; else if ( salary > 20000 && salary <= 30000) { tax = 0.2; else if ( salary > 30000 && salary <= 40000) { tax = 0.3; else { tax = 0.4; return tax * salary; Λογικόσ Τελεςτήσ ΚΑΙ (&&) (ςτισ επόμενεσ διαφάνειεσ)

switch case To switch ομαδοποιεί πολλά if Σφνταξθ: Μεταβλητζσ τφπου char, byte, short, int Μεταβλητζσ ίδιου τφπου με <switch-expression> To break ςταματάει την εκτζλεςη. Αν δεν υπάρχει break τότε η εκτζλεςη θα ςυνεχιςτεί ςτο επόμενο case Όταν κανζνα case δεν ικανοποιηθεί τότε εκτελοφνται οι δηλϊςεισ του default switch ( <switch-expression> ) { case value1: statement(s)1; break; case value2: statement(s)2; break; case valuen: statement(s)n; break; default: statement(s)-for-default; ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 10

O τριαδικόσ τελεςτήσ ςυνθήκησ (ternary operator) Η ακόλουκθ διλωςθ if (x > 0) y = 1; else y = -1; είναι ιςοδφναμθ με y = (x > 0)? 1 : -1; Σφνταξη Τριαδικοφ Τελεςτή: ( <boolean-exp> )? exp1 : exp2; Παραδείγματα System.out.println( ( num % 2 == 0 )? // (boolean-exp) num + is even : // exp1 num + is odd ); // exp2 ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 11

Προγραμματιςμόσ με βρόγχουσ (loops) 3 είδθ δθλϊςεων προγραμματιςμοφ με βρόγχουσ while while ( <boolean expression> ) { //δηλώςεισ do while do { //δηλώςεισ while ( <boolean expression> ); for for( <initial actions>; <boolean expr.>; actions after step ) //δηλώςεισ Όλα τα είδη βρόγχων είναι ιςοδφναμα. ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 12

Παραδείγματα προγραμματιςμοφ με βρόγχουσ ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 13 Παράδειγμα <while> int i = 0; while (i < 10) { System.out.println( "while"); i ++; while for Παράδειγμα <for> for ( int i=0; i<10; i++) { System.out.println( "for"); dowhile Παράδειγμα <do-while> int i = 0; do { System.out.println( "do-while"); i++; while (i < 10);

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 14 Μζθοδοι (methods) Μζθοδοσ: μία ςυλλογι από ομαδοποιθμζνεσ δθλϊςεισ οι οποίεσ εκτελοφν κάποια (εσ) λειτουργία (εσ). Η υπογραφή μίασ μεθόδου αποτελείται από το όνομά τησ και τθ λίςτα με τησ παραμζτρουσ που δζχεται. Σφνταξθ: modifiers return value type method name parameter list public static int max( int num1, int num2 ) { int result = num1; if ( num2 > num1 ) { result = num2; return result; method signature method body return value

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 15 Πζραςμα Παραμζτρων Πζραςμα διά τιμήσ: οι τιμζσ των μεταβλθτϊν αντιγράφονται ςτισ παραμζτρουσ τθσ μεκόδου ==> οι αρχικζσ μεταβλθτζσ δεν αλλάηουν Πζραςμα διά αναφοράσ: δεν υπάρχει! Παράδειγμα public class Increment { public static void main( String[] args ) { int x = 1; System.out.println( "before the call, x is " + x); increment(x); System.out.println( "after the call, x is " + x); public static void increment( int n ) { n++; System.out.println( "n inside the method is " + n); 1. x=1 2. x=1 3. x=1 copy to n 7. x=1 4. n=1 5. n=2 6. n=2

Πίνακεσ Πίνακασ: μία δομι δεδομζνων που αντιπροςωπεφει μία ςυλλογι με ςτοιχεία του ίδιου τφπου. Οι πίνακεσ ςτθν JAVA ζχουν ςχεδιαςτεί κατά τρόπον ϊςτε να ξεπερνιοφνται οι δυςκολίεσ του προγραμματιςμοφ πινάκων τθσ C/C++. Στθ JAVA είναι εξαςφαλιςμζνο ότι ζνασ πίνακασ κα αρχικοποιθκεί και ότι δεν κα επιςυμβεί πρόςβαςθ εκτόσ των ορίων του. Τα χαρακτθριςτικά αυτά υλοποιοφνται με κάποιο ςχετικό κόςτοσ μνιμθσ και χρόνου εκτζλεςθσ (κατά τθν εκτζλεςθ γίνεται ζλεγχοσ κατά πόςο δεν γίνεται υπζρβαςθ των ορίων του πίνακα). Κατά τθ δθμιουργία ενόσ πίνακα, κατ ουςίαν δθμιουργείται ζνασ πίνακασ χειριςτθρίων (Handles), τα οποία αρχικοποιοφνται ςε null. Είναι ευκφνθ του προγραμματιςτι να αρχικοποιιςει ςωςτά τα χειριςτιρια, ϊςτε να παραπζμπουν ςε αντικείμενα. ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 16

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 17 Πίνακεσ (ςυν.) Παράδειγμα αναπαράςταςθσ πίνακα: int[] x = new int[5]; x Μεηαβληηή αναθοράς αναθορά μνήμης ζηοιτείο ζηη θέζη 2 x[0] x[1] x[2] x[3] x[4] 1 5 2 13 8 ηιμή πεδίοσ Πρόςβαςθ ςε κάκε ςτοιχείο του πίνακα με το ευρετιριο του. π.χ., το ςτοιχείο ςτθ κζςθ 2 = x[2]. Ιδιότθτα (property) <length>: Επιςτρζφει το μζγεκοσ του πίνακα. π.χ., x.length = 5

Παραδείγματα χρήςησ πίνακα Τφπωμα των ςτοιχείων ενόσ πίνακα int[] x = new int[5];... for(int i=0; i<x.length; i++) { System.out.println( x[i] ); Πρόςκεςθ των ςτοιχείων ενόσ πίνακα int[] x = new int[5]; int sum=0;... for(int i=0; i<x.length; i++) { sum = sum + x[i]; ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 18

Πολυδιάςτατοι πίνακεσ Σφνταξη: <τφποσ δεδομζνων>[ ][ ]... <όνομα πίνακα>, π.χ., int[][] x Δήλωςη Πινάκων int[][] x; //Δήλωςη πίνακα 2D με ακέραιουσ char[][][] a; Αρχικοποίηςη Πινάκων //Δήλωςη πίνακα 3D με χαρακτήρεσ Η αρχικοποίθςθ μπορεί να γίνει με τθ διλωςθ new x = new int[2][3]; //Δθμιουργία πίνακα με 2 γραμμζσ και 3 ςτιλεσ ι μπορεί να γίνει με τθν αυτόματθ ανάκεςθ ςτοιχείων x = { {1, 2, 3, {4, 5, 6 ; μόνο κατά την δήλωςη! Δήλωςη και Αρχικοποίηςη ςε ζνα Βήμα int[][] x= new int[2][3]; ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 19

Garbage Collector ΕΠΛ 231 Δομζσ Δεδομζνων και Αλγόριθμοι 1-20 Σε αντίκεςθ με τθ γλϊςςα C, ςτθ Java θ κατάργθςθ αντικειμζνων δεν επιτελείται από το χριςτθ αλλά από το rutime system τθσ Java. H αποδζςμευςθ τθσ μνιμθσ γίνεται αυτόματα από το garbage collector ο οποίοσ φροντίηει για τθ διαγραφι των αντικειμζνων που δεν χρθςιμοποιοφνται πλζον.

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 21 Κληρονομικότητα Δφο βαςικζσ ζννοιεσ: Ζνα είδοσ ςχζςθσ Ζνασ προγραμματιςτικόσ μθχανιςμόσ για επαναχρθςιμοποίθςθ

Προγραμματιςτικόσ Μηχανιςμόσ Κληρονομικότητασ Μία κλάςη μπορεί να κληρονομήςει όλα τα επιτρεπτά ςτοιχεία (πεδία και μεθόδουσ) από τον πατζρα τθσ από τον πατζρα του πατζρα τθσ, κτλ. Μία υποκλάςθ μπορεί να προςθζςει καινοφρια πεδία Μία υποκλάςθ μπορεί να προςθζςει καινοφριεσ μεθόδουσ Μία υποκλάςθ μπορεί να επεκτείνει υφιςτάμενεσ μεθόδουσ (overloading) Μία υποκλάςθ μπορεί να επανακαθορίςει υφιςτάμενεσ μεθόδουσ (overriding) ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 22

Υποκλάςεισ και Υπερκλάςεισ ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 23 Generalize Υπερκλάςη Circle Circle Data Circle Methods Υποκλάςη Cylinder Circle Data Cylinder Data Circle Methods Cylinder Methods Specialize

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 24 Υποκλάςεισ και Υπερκλάςεισ (ςυν.) class Circle { // Η ακτίνα αυτού του κύκλου private double radius; // Δημιούργηςε ένα κύκλο public Circle () {radius = 1.0; // Δημιούργηςε ένα κύκλο // ςυγκεκριμένη ακτίνα public Circle(double newradius) { radius = newradius; // Επέςτρεψε την ακτίνα public double getradius() { return radius; // Επέςτρεψε το εμβαδό public double getarea() { return radius * radius * π; class Cylinder extends Circle { // Το μήκοσ αυτού του κύλινδρου private double length; // Δημιούργηςε ένα κύλινδρο public Cylinder() { super(); this.length= 1.0; // Δημιούργηςε ένα κύλινδρο με // ςυγκεκριμένο μήκοσ public Cylinder(int length) { this.length= length; // Επέςτρεψε το μήκοσ public double getlength() { return length; // Επέςτρεψε τον όγκο // αυτού του κύλινδρου public double getvolume () { return getarea() * length;

Χειριςτήριο Υπερκλάςησ (super) Η λζξθ κλειδί super αναφζρεται ςτθν υπερκλάςθ Μπορεί να χρθςιμοποιθκεί με δφο τρόπουσ: Για το κάλεςμα του constructor τθσ υπερκλάςθσ Για το κάλεςμα μία μεθόδου τθσ υπερκλάςθσ Στθν περίπτωςθ που καλείται ο constructor τθσ κλάςθσ τότε πρζπει να είναι θ πρϊτθ διλωςθ ςτον κϊδικα. Σθμείωςθ: Η λζξθ κλειδί this αναφζρεται ςτθν υποκλάςθ και είναι ζνα χειριςτιριο προσ το ίδιο το αντικείμενο. ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 25

Απόκρυψη Ονομάτων (Name Hiding) Πεδία Μζςα ςε μία κλάςθ, κάκε πεδίο πρζπει να ζχει μοναδικό όνομα Μζςα από τθν κλθρονομικότθτα προκφπτουν περιπτϊςεισ που ζνα πεδίο ςτθν υποκλάςθ μπορεί να ζχει το ίδιο όνομα με ζνα πεδίο ςτθν υπερκλάςθ Σε αυτι τθν περίπτωςθ, το πεδίο ςτθν υποκλάςθ κρφβει/επιςκιάηει (hides) το πεδίο ςτθν υπερκλάςθ Για να ζχουμε πρόςβαςθ ςτο πεδίο τθσ υπερκλάςθσ πρζπει να χρθςιμοποιιςουμε τθν λζξθ κλειδί super Μεθόδοι Παρόμοια υπάρχει περίπτωςθ μία μζκοδοσ ςτθν υποκλάςθ να ζχει τθν ίδια υπογραφι με μία μζκοδο τθσ υπερκλάςθσ Σε αυτι τθν περίπτωςθ, θ μζκοδοσ τθσ υποκλάςθσ υπερςκελίηει (overrides) τθν μζκοδο τθσ υπερκλάςθσ ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 26

Παράδειγμα Υπερςκζλιςησ (Overriding) ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 27 public class Circle extends GeometricObject { // Other methods are omitted /** Override the tostring method defined in GeometricObject */ public String tostring() { return super.tostring() + "\nradius is " + radius;

Διαπροςωπείεσ (Interfaces) Μία διαπροςωπεία (interface) είναι μία δομι (παρόμοια με τθν κλάςθ) ι οποία περιζχει: Δηλϊςεισ μεθόδων και όχι καθοριςμό τουσ Σταθερζσ (constant) μεταβλητζσ Κακορίηει τθν μορφι που πρζπει να υπάρχει ςε μία κλάςθ, ζνα ςυμβόλαιο το οποίο δθλϊνει πωσ δουλεφει μία κλάςθ Δθλϊνεται με τθν λζξθ interface ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 28

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 29 Δήλωςη Διαπροςωπείασ (Interface Declaration) Σφνταξθ διλωςθσ διαπροςωπείασ: public interface InterfaceName { //constant declarations //method signatures Παράδειγμα public interface Edible{ // Describe how to eat public String howtoeat();

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 30 Σταθερζσ Μεταβλητζσ (Constant Variables) Παράδειγμα διλωςθσ Στακερϊν Μεταβλθτϊν public interface InterfaceName { //constant declarations int x=1; double PI=3.1415; Το πιο πάνω είναι ιςοδφναμο με το πιο κάτω public interface InterfaceName { //constant declarations public static final int x=1; public static final double PI=3.1415; Πρόςβαςθ με <διαπροςωπεία>.<μεταβλθτι> π.χ., InterfaceName.x

Παράδειγμα Διαπροςωπείασ 1 ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 31 <<interface>> Animals Attributes Operations public String walk() Mammals Attributes Operations public String walk() { Birds Attributes Operations public String walk() { Fish Attributes Operations public String walk() {

Παράδειγμα Διαπροςωπείασ και Κληρονομικότητασ ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 32 <<interface>> IAnimals Attributes Operations public String eat() Mammals Attributes Operations public String eat() { Birds Attributes Operations public String eat() { Fish Attributes Operations public String eat() { Lion Attributes Operations public String eat() { Eagle Attributes Operations public String eat() { Shark Attributes Operations public String eat() {

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 33 Παράδειγμα Διαπροςωπείασ και Κληρονομικότητασ public interface IAnimals { abstract void eat(); String getname(); class Mammals implements IAnimals { public void eat() { public String getname() { class Lion extends Mammals { public void eat() { public String getname() { class Eagle extends Birds { public void eat() { public String getname() { class Birds implements IAnimals { public void eat() { public String getname() { class Shark extends Fish { public void eat() { public String getname() { class Fish implements IAnimals { public void eat() { public String getname() {

Σημαντικζσ διαπροςωπείεσ: Comparable Η διαπροςωπεία Comparable: χρθςιμοποιείται για κακοριςμό του πωσ γίνεται ςφγκριςθ αντικειμζνων (π.χ., String, Date) java.lang Interface Comparable int compareto(t o) Κακορίηει μία φυςικι ςειρά για τα αντικείμενα όπωσ ιςχφει για αρικμθτικά δεδομζνα, π.χ., 1<2, ab < ac Περιλαμβάνει τθν μζκοδο compareto: Συγκρίνει το αντικείμενο this με το αντικείμενο που δίνεται ςαν παράμετροσ Ακολοφκωσ ςυγκρίνουμε αντικείμενα ςαν να είναι αρικμοί, π.χ., ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 34

ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 35 Παράδειγμα Χρήςησ Comparable class ComparableCircle extends Circle implements Comparable { public ComparableCircle(double radius) { super(radius); /** Implement the compareto method defined in Comparable */ public int compareto(object o) { if (getradius() > ((ComparableCircle) o).getradius()) return 1; else if (getradius() < ((ComparableCircle) o).getradius()) return -1; else return 0;

Χρήςιμεσ Βιβλιοθήκεσ (java.lang.math) Στακερζσ Κλάςθσ: PI: το π = 3.1415... E: το e = 2.718... Μζκοδοι Κλάςθσ: Trigonometric Methods: π.χ., sin(double a), cos(double a) Exponent Methods: π.χ., log10(double a), pow(double a, double b), sqrt(double a) Rounding Methods: π.χ., double ceil(double x), double floor(double x) Other methods: min, max, abs, and random Παραδείγματα: Math.sin(Math.PI / 2) = 1.0 Math.cos(0) = 1.0 Math.exp(1) = 2.71 Math.log(2.71) = 1.0 Math.pow(2, 3) = 8.0 Math.ceil(2.1) = 3.0 Math.floor(2.1) = 2.0 Math.ceil(-2.1) = -2.0 Math.max(2, 3) = 3 Math.min(2.5, 3.6) = 2.5 Math.abs(-2) = 2 0 <= Math.random() < 1.0 (int)(math.random() * 10) = [0..9] ΕΠΛ231 Δομζσ Δεδομζνων και Αλγόριθμοι 36

Διαίςθηςη ΕΠΛ 231 Δομζσ Δεδομζνων και Αλγόριθμοι 37 Client Ο πελάτης τρειάζεται μα γμωρίζει πώς μα τρησιμοποιεί το API API - volume - change channel - adjust picture - decode NTSC signal Implementation - cathode ray tube - electron gun - Sony Wega 36XBR250-241 pounds Η σλοποίηση τρειάζεται μα γμωρίζει το API ποσ είμαι μα σλοποιηθεί Η σλοποίηση και ο πελάτης πρέπει αρτικά μα σσμυωμήσοσμ στο API

Διαίςθηςη Client Ο πελάτης τρειάζεται μα γμωρίζει πώς μα τρησιμοποιεί το API API - volume - change channel - adjust picture - decode NTSC signal Implementation - gas plasma monitor - Pioneer PDP-502MX - wall mountable - 4 inches deep Η σλοποίηση τρειάζεται μα γμωρίζει το API ποσ είμαι μα σλοποιηθεί Μπορεί μα αμτικαταστήσει σε μία καλύτερη ευαρμογή τωρίς μα αλλαγή στομ πελάτη ΕΠΛ 231 Δομζσ Δεδομζνων και Αλγόριθμοι 38