Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Methods, Constructors and Field.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Τύποι δεδομένων και τελεστές,
Advertisements

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα.
ΘΕΩΡΙΑ ΔΙΑΛΕΞΗ 4 Αριθμητικές εκφράσεις και πράξεις Εντολές ανάθεσης
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Constructors, equals, toString Αντικείμενα ως παράμετροι.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
Γλωσσική Τεχνολογία Object-Orientation in Python.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
Αντικείμενα, Κλάσεις και Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Προγραμματισμός ΙΙ Διάλεξη #7: Περισσότερες Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Σύγκριση Java και C++ Μεταπτυχιακό Εφαρμοσμένης Πληροφορικής - Αλέξανδρος Χατζηγεωργίου, Νοέμβριος 2004.
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Δομές Δεδομένων 1 Στοίβα. Δομές Δεδομένων 2 Στοίβα (stack)  Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή – πρώτη εξαγωγή)  Περιορισμένος.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Κληρονομικότητα.
Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) OOP Concepts and Object-Oriented Design.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές.
Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Java Classes, Objects, και Events.
MΑΘ 106/3122Ξενοφών Ζαμπούλης ΜΑΘ 106/3122 Γλώσσα Προγραμματισμού Δείκτες (Pointers)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γενικευμένες κλάσεις Συλλογές.
Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Java Syntax and Style.
Βάσεις Δεδομένων Εργαστήριο ΙΙ Τμήμα Πληροφορικής ΑΠΘ
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
Αντικειμενοστραφής Προγραμματισμός & JAVA
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Data Types, Variables, and Arithmetic.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Κωδικός Θ: ΤΠ4003, Κωδικός Ε: ΤΠ4103 (ΜΕΥ/Υ) Ώρες (Θ - ΑΠ - Ε): Προαπαιτούμενα: ΤΠ2003,2103.
Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού - Κλάσεις ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Διαφάνειες: ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ Προσαρμογή 2014:
Εισαγωγή στον Προγ/μό Η/Υ
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κλάσεις και αντικείμενα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Τύποι δεδομένων και τελεστές,
Υπο-τύποι και πολυμορφισμός
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεταγράφημα παρουσίασης:

Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Methods, Constructors and Field

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-2 Στόχοι: l Να μάθουμε το syntax και το style για ορισμό και κλίση (calling) methods και constructors l Να μάθουμε πως τα arguments are passed to methods και constructors και πώς να κάνουμε return values από methods l Να μάθουμε για static (class)και non-static (instance) fields και methods l Ανασκόπηση public, private και protected fields και methods

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-3 Μέθοδοι (Methods) l Για να ορίσουμε μια method: –Αποφασίστε αν θα είναι public, private ή protected (συνήθως public) –Δώστε της όνομα (name) –Καθορίστε τον τύπο των arguments (formal parameters) και ονόμασε τους –Καθορίστε τον τύπο της τιμής που γίνετε επιστρέφεται (return type) ή επέλεξε να είναι void (δηλ. δεν επιστρέφει τίποτα) –Γράψε το code της method public [or private or protected] returnType methodName (type1 name1,..., typeN nameN) {... } Header Body

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-4 Methods (συνέχ.) l Μια method ΠΑΝΤΑ ορίζεται μέσα (inside) σε μια a class. l μια method returns μια τιμή ενός καθορισμένου τύπου εκτός αν έχει οριστεί void. Ο return type μπορεί να είναι any primitive data type ή a class type. l τα arguments της method μπορεί να είναι any primitive data types ή class types. public [or private] returnType methodName ( ) {... } άδειες parentheses δηλώνουν ότι η method ΔΕΝ πέρνει arguments.

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-5 Methods: Java Style l Τα ονόματα των Methods ξεκινούν με μικρά γράμματα και για κάθε επόμενη λέξη το πρώτο της γράμμα είναι κεγαλαίο l Τα Method names συχνά ακούγονται σαν ρήματα. l Το όνομα μιας method που κάνει returns την τιμή ενός field συχνά αρχίζει με get: getWidth, getX l Το όνομα μια method που θέτει τιμή σε ένα field συχνά αρχίζει με set: setLocation, setText

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-6 Overloaded Methods l Methods της ΙΔΙΑ class που έχουν το ίδιο όνομα αλλά διαφορετικό αριθμό ή τύπους of arguments ονομάζονται overloaded methods. l Χρησιμοποιούμε overloaded methods όταν κάνουμε παρόμοια πράγματα: public void move (int x, int y) {... } public void move (double x, double y) {... } public void move (Point p) {... } public Fraction add (int n) {... } public Fraction add (Fraction other) {... }

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-7 Overloaded Methods (συνέχ.) l Ο compiler αντιμετωπίζει τις overloaded methods σαν εντελώς διαφορετικές methods. l Ο compiler ξέρει ποια να καλέσει (to call) με βάση τον αριθμό και τον τύπο των arguments: Circle circle = new Circle(5); circle.move (50, 100);... Point center = new Point(50, 100); circle.move (center);... public class Circle {... public void move (int x, int y) {... } public void move (Point p) {... }... }

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-8 Constructors l Ένας constructor είναι σαν μια method για δημιουργία (for creating) αντικειμένων (objects) μιας κατηγορίας (class). l ένας constructor συχνά αρχικοποιεί (initializes) τα fields του object. l Οι Constructors ΔΕΝ επιστρέφουν τίποτα (ούτε καν void). l ΟΛΟΙ οι constructors σε μια class έχουν το ίδιο όνομα με το όνομα του class. l Constructors μπορεί να παίρνουν arguments.

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-9 Constructors (συνέχ.) l Αν μια class έχει περισσότερους από ένα constructor, αυτοί “overloaded” και πρέπει να έχουν διαφορετικό αριθμό ή/και types of arguments. l Οι Programmers συχνά παρέχουν ένα “no- args” constructor που ΔΕΝ έχει arguments. l Αν ο programmer ΔΕΝ ορίσει ΚΑΝΕΝΑ constructor, η Java θεωρεί ότι υπάρχει ένας default no-args constructor, ο οποίος δεσμεύει μνήμη (allocates memory) και θέτει τα fields στα default values.

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-10 Constructors (συνέχ.) public class Fraction { private int num, denom; public Fraction ( ) { num = 0; denom = 1; } public Fraction (int n) { num = n; denom = 1; } Continued   public Fraction (int p, int q) { num = p; denom = q; reduce (); } public Fraction (Fraction other) { num = other.num; denom = other.denom; }... } “No-args” constructor Copy constructor

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-11 Constructors (συνέχ.) l Διαφορετικοί Constructors σε μια class μπορούν να καλούν ο ένας το άλλο χρησιμοποιώντας το keyword this — Αυτός είναι ένας καλός τρόπος να αποφεύγουμε duplicating code:... public Fraction (int p, int q) { num = p; denom = q; reduce (); }... public class Fraction {... public Fraction (int n) { this (n, 1); }...

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-12 Τελεστής (Operator) new l Οι Constructors καλούνται χρησιμοποιώντας το new Fraction f1 = new Fraction ( ); Fraction f2 = new Fraction (5); Fraction f3 = new Fraction (4, 6); Fraction f4 = new Fraction (f3); 0 / 1 5 / 1 2 / 3

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-13 Operator new (συνέχ.) l Πρέπει να δημιουργήσεις ένα object πριν το χρησιμοποιήσεις. Ο τελεστής new είναι ένας τρόπος να επιτύχουμε αυτό Fraction f; f = new Fraction (2, 3); f = new Fraction (3, 4); f is set to null Now f refers to a valid object Now f refers to another object (the old object is “garbage-collected”)

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-14 Static Fields l Ένα static field (ονομάζεται class field ή class variable) μοιράζεται ανάμεσα σε ΌΛΑ τα objects του class. l ένα static field μπορεί να είναι μια σταθερά που μοιράζεται σε όλα τα objects του class: l ένα non-static field (ονομάζεται instance field or instance variable) ανήκει σε ένα ξεχωριστό (individual) object. public class RollingDie { private static final double slowDown = 0.97; private static final double speedFactor = 0.04;... Reserved words: static final

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-15 Static Fields (συνέχ.) l Τα Static fields είναι αποθηκευμένα με το class code, ξεχωριστά από τα non-static fields που περιγράφουν ξεχωριστά (individual) object. Public static fields, είναι συχνά global constants, are referred to in other classes using “dot notation”: ClassName. constName double area = Math.PI * r * r; setBackground(Color.blue); c.add(btn, BorderLayout.NORTH); System.out.println(area);

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-16 Static Fields (συνέχ.) l Συχνά static fields ΔΕΝ αρχικοποιούνται από constructors (αρχικοποιούνται είτε κατά τον ορισμό τους (declarations) ή σε public static methods). l Αν μια class έχει ΜΟΝΟ static fields και δεν έχει κανένα ΚΑΝΕΝΑ non-static (instance) fields, τότε δεν υπάρχει κανένας λόγος να δημιουργούμε objects αυτού του class (όλα θα είναι ακριβώς τα ίδια). l Math και System είναι παραδείγματα τέτοιων class. Κατ’ακρίβεια, ΔΕΝ έχουν public constructors και cannot be instantiated.

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-17 Static Methods l Οι Static methods μπορούν να έχουν πρόσβαση και να διαχειριστούν/επεξεργαστούν a class’s static fields. l Οι Static methods ΔΕΝ μπορούν να έχουν πρόσβαση σε non-static fields ή call non-static methods της class. Οι Static methods are called using “dot notation”: ClassName. statMethod(...) double x = Math. random(); double y = Math. sqrt (x); System. exit();

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-18 Instance Methods l Όι Non-static methods καλούνται επίσης instance methods. l Μια instance method καλείται για ένα συγκεκριμένο object using “dot notation”: objName. instMethod(...); l Οι Instance methods μπορούν να έχουν πρόσβαση σε ΟΛΑ τα fields και να καλέσουν ΟΛΕΣ τις methods of their class — both class and instance fields and methods.

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-19 Static (Class) vs. Non-Static (Instance) public class MyClass { public static final int statConst; private static int statVar; private int instVar;... public static int statMethod(...) { statVar = statConst; statMethod2(...); instVar =...; instMethod(...); } Continued   public int instMethod(...) { statVar = statConst; inst Var = statConst; instVar = statMethod(...); statVar = instMethod2(...);... } public int instMethod2(...) {... }... } Error! OK All OK

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-20 Static vs. Non-Static (cont’d) l Σημείωση: η main είναι static και γι’αυτό ΔΕΝ μπορεί να έχει πρόσβαση σε non-static fields ή να καλεί non-static methods of its class: public class Hello { private String message = "Hello, World"; public static void main (String[ ] args) { System.out.println (message); } Error: non-static variable message is used in static context (main)

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-21 Passing Arguments to Constructors and Methods l Οποιαδήποτε έκφραση (expression) που έχει κατάλληλο (appropriate) data type μπορεί να χρησιμοποιηθεί σαν argument: double a = 3, b = - 4;... Polynomial p = new Polynomial(1.0, - (a + b), a * b);... double y = p.getValue ( 2 * b - a);

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-22 Passing Arguments (συνέχ.) l Ένας int προάγεται (is promoted) σε ένα double όταν χρειάζεται: l A “smaller” type can be promoted to a “larger” type (e.g., int to long, float to double). The same as: ( 3.0 )... Polynomial p = new Polynomial (1, - 5, 6); double y = p.getValue ( 3 ); The same as: (1.0, -5.0, 6.0)

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-23 Passing Arguments (συνέχ.) l Primitive data types ΠΑΝΤΑ περνούν (passed) «δια τιμής» (“by value”): η τιμή τους ΑΝΤΙΓΡΑΦΕΤΑΙ into the parameter. double x = 3.0; double y = p.getValue ( x ); public class Polynomial {... public double getValue (double u) { double v;... } x: 3.0 y: u: 3.0 v: copy u acts like a local variable in getValue

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-24 Passing Arguments (συνέχ.) l Το αρχικό (original) argument παραμένει αμετάβλητο (remains unchanged): public class MyMath {... public double square (double x) { x *= x; return x; } MyMath calc = new MyMath(); double x = 3.0; double y = calc.square (x); System.out.println (x + " " + y); the original x is unchanged. Output: 3 9 x here is a copy of the argument. The copy is changed, but...

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-25 Passing Objects as Arguments l Τα Objects ΠΑΝΤΑ περνούν «δια διευθύνσεως» (passed as references): η διεύθυνση αντιγράφετε, όχι το object. Fraction f1 = new Fraction (1, 2); Fraction f2 = new Fraction (5, 17); Fraction f3 = f1.add (f2); public class Fraction {... public Fraction add (Fraction f) { Fraction sum;... } f2: addr2 f: addr2 sum: copy 5/17 f1: addr1

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-26 l μια method ΜΠΟΡΕΙ να αλλάζει την κατάσταση ενός object passed to it σαν argument (επειδή η method gets a reference to the original object). l μια method μπορεί να αλλάξει το object για το οποίο κλίθηκε (this object acts like an implicit argument): Passing Objects as Arguments (συνέχ.) panel.setBackround(Color.green);

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-27 l εντός μιας method, το this αναφέρετε στο object για το οποίο η method κλίθηκε. Το this μπορεί να περάσει (passed) σε άλλους constructors και methods σαν argument: Passing Objects as Arguments (συνέχ.) public class ChessGame {... Player player1 = new Player (this);...

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-28 return l Μια method, έκτος αν είναι void, επιστρέφει μια τιμή (returns a value) σύμφωνα με τον καθορισμένο τύπο που ορίσθηκε στον ορισμό της κληθείσας method. l το return statement χρησιμοποιείται για άμεση έξοδο από τη method και επιστρέφει μια τιμή: return expression; The type of the return value or expression must match the method’s declared return type.

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-29 return (συνέχ.) l Μια method μπορεί να έχει πολλά return statements, τότε all but one of them πρέπει να είναι εντός ενός if ή else (ή σε switch): public someType myMethod (...) {... if (...) return ; else return ;... return ; }

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-30 return (συνέχ.) l μια boolean method μπορεί να επιστρέψει true, false, ή το αποτέλεσμα μιας boolean expression: public boolean myMethod (...) {... if (...) return true;... return n % 2 == 0; }

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-31 return (συνέχ.) l μια void method μπορεί να χρησιμοποιεί ένα return statement για να κάνει quit από την method early: public void myMethod (...) {... if (...) return;... } No need for a redundant return at the end

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-32 return (συνέχ.) l Αν ο return type είναι μια class, η method returns a reference to an object (or null). l Συχνά το returned object δημιουργείται μέσα στη method χρησιμοποιώντας το new. Για παράδειγμα: l The returned object can also come from the arguments or from calls to other methods. public Fraction inverse () { if (num == 0) return null; return new Fraction (denom, num); }

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-33 Encapsulation l Η Απόκρυψη (Hiding) των λεπτομερειών της υλοποίησης (the implementation details) για μια class ονομάζεται encapsulation. Αυτό επιτυγχάνεται κάνοντας ΌΛΑ τα fields και τις βοηθητικές methods private l Encapsulation βοηθά στο program maintenance και το team development. l μια class encapsulates ένα μικρό σύνολο από well-defined tasks που objects αυτής της class μπορούν να κάνουν.

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-34 public vs. private l Public constructors και methods μιας class συνιστούν το interface με classes που την χρησιμοποιούν — its clients. l Όλα τα fields συχνά ορίζονται private — they are hidden from clients. l Static constants occasionally may be public. l “βοηθητικές” methods που χρειάζονται ΜΟΝΟ εντός της class ορίζονται private.

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-35 public vs. private (συνέχ.) public class MyClass { // Constructors: public MyClass (...) {... }... // Public methods: public myMethod (...) {... }... // Private methods: private myMethod (...) {... }... // Private fields: private myField;... }

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-36 public vs. private (συνέχ.) l Σε ένα private field μπορεί να έχει πρόσβαση (is open) όχι μόνο μέσα σε ένα object αλλά σε ολόκληρο (entire) το class. Οποιοδήποτε object της ίδιας class μπορεί να έχει πρόσβαση σε αυτό, ακόμα και να το τροποποιήσει. public class Fraction { private int num, denom;... public multiply (Fraction other) { int newNum = num * other. num;... }

Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-37 Accessors and Modifiers l ένας programmer συχνά παρέχει methods, που καλούνται accessors, οι οποίες επιστρέφουν τιμές των private fields. methods που θέτουν τιμές σε private fields καλούνται modifiers. l Accessors’ names συχνά αρχίζουν με get, και modifiers’ names με set. l Αυτές ΔΕΝ είναι ακριβής κατηγορίες: η ίδια method μπορεί να τροποποιεί διάφορα fields και επίσης να επιστρέφει την old or new value ενός από αυτά.