Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

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

Παρόμοιες παρουσιάσεις


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

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

2 Εισαγωγή στο ΟΟΡ και 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

3 Εισαγωγή στο ΟΟΡ και 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

4 Εισαγωγή στο ΟΟΡ και 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.

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

6 Εισαγωγή στο ΟΟΡ και 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) {... }

7 Εισαγωγή στο ΟΟΡ και 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) {... }... }

8 Εισαγωγή στο ΟΟΡ και 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.

9 Εισαγωγή στο ΟΟΡ και 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.

10 Εισαγωγή στο ΟΟΡ και 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

11 Εισαγωγή στο ΟΟΡ και 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); }...

12 Εισαγωγή στο ΟΟΡ και 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

13 Εισαγωγή στο ΟΟΡ και 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”)

14 Εισαγωγή στο ΟΟΡ και 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

15 Εισαγωγή στο ΟΟΡ και 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);

16 Εισαγωγή στο ΟΟΡ και 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.

17 Εισαγωγή στο ΟΟΡ και 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();

18 Εισαγωγή στο ΟΟΡ και 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.

19 Εισαγωγή στο ΟΟΡ και 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

20 Εισαγωγή στο ΟΟΡ και 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)

21 Εισαγωγή στο ΟΟΡ και 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);

22 Εισαγωγή στο ΟΟΡ και 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)

23 Εισαγωγή στο ΟΟΡ και 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

24 Εισαγωγή στο ΟΟΡ και 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...

25 Εισαγωγή στο ΟΟΡ και 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

26 Εισαγωγή στο ΟΟΡ και 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);

27 Εισαγωγή στο ΟΟΡ και 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);...

28 Εισαγωγή στο ΟΟΡ και 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.

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

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

31 Εισαγωγή στο ΟΟΡ και 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

32 Εισαγωγή στο ΟΟΡ και 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); }

33 Εισαγωγή στο ΟΟΡ και 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 μπορούν να κάνουν.

34 Εισαγωγή στο ΟΟΡ και 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.

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

36 Εισαγωγή στο ΟΟΡ και 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;... }

37 Εισαγωγή στο ΟΟΡ και 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 ενός από αυτά.


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

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google