1 / 37

Methods, Constructors and Field

Methods, Constructors and Field. Να μάθουμε το syntax και το style για ορισμό και κλίση ( calling ) methods και constructors Να μάθουμε πως τα arguments are passed to methods και constructors και πώς να κάνουμε return values από methods

crunnels
Download Presentation

Methods, Constructors and Field

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Methods, Constructors and Field

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

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

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

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

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

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

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

  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. Constructors (συνέχ.) • Διαφορετικοί Constructors σε μια class μπορούν να καλούν ο ένας το άλλο χρησιμοποιώντας το keyword this — Αυτός είναι ένας καλός τρόπος να αποφεύγουμε duplicating code: public class Fraction { ... public Fraction (int n) { this (n, 1); } ... ... public Fraction (int p, int q) { num = p; denom = q; reduce (); } ... Δρ. Μαρία Ι. Ανδρέου

  12. Τελεστής (Operator)new • Οι 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 2 / 3 Δρ. Μαρία Ι. Ανδρέου

  13. Operator new(συνέχ.) • Πρέπει να δημιουργήσεις ένα 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. Static Fields • Έναstatic field (ονομάζεταιclass fieldήclass variable) μοιράζεται ανάμεσα σε ΌΛΑ τα objects του class. • ένα static field μπορεί να είναι μια σταθερά που μοιράζεται σε όλα τα objects του class: • ένα non-static field (ονομάζεται instance field or instance variable) ανήκει σε ένα ξεχωριστό(individual) object. Reserved words: static final public class RollingDie { private static final double slowDown = 0.97; private static final double speedFactor = 0.04; ... Δρ. Μαρία Ι. Ανδρέου

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

  17. Static Methods • Οι Static methods μπορούν να έχουν πρόσβαση και να διαχειριστούν/επεξεργαστούν a class’s static fields. • Οι 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. Instance Methods • Όι Non-static methods καλούνται επίσης instancemethods. • Μια instance method καλείται για ένα συγκεκριμένο object using “dot notation”: objName.instMethod(...); • Οι Instance methods μπορούν να έχουν πρόσβαση σε ΟΛΑτα fields και να καλέσουν ΟΛΕΣ τις methods of their class — both class and instance fields and methods. Δρ. Μαρία Ι. Ανδρέου

  19. Static (Class) vs. Non-Static (Instance) public class MyClass { public staticfinal 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(...) { ... } ... } All OK OK Error! Δρ. Μαρία Ι. Ανδρέου

  20. Static vs. Non-Static (cont’d) • Σημείωση: η 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. Passing Arguments to Constructors and Methods • Οποιαδήποτε έκφραση (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. Passing Arguments (συνέχ.) • Ένας intπροάγεται (is promoted) σεέναdoubleόταν χρειάζεται: • A “smaller” type can be promoted to a “larger” type (e.g., int to long, float to double). ... Polynomial p = new Polynomial (1, -5, 6); double y = p.getValue ( 3 ); The same as: (1.0, -5.0, 6.0) The same as: ( 3.0 ) Δρ. Μαρία Ι. Ανδρέου

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

  24. Passing Arguments (συνέχ.) • Το αρχικό(original) argument παραμένει αμετάβλητο (remains unchanged): public class MyMath { ... public double square (double x) { x *= x; return x; } } x here is a copy of the argument. The copy is changed, but... 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 Δρ. Μαρία Ι. Ανδρέου

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

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

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

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

  29. return(συνέχ.) • Μια method μπορεί να έχει πολλά return statements, τότε all but one of them πρέπει να είναι εντός ενός ifήelse (ή σεswitch): public someType myMethod (...) { ... if (...) return <expression1>; else return <expression2>; ... return <expression3>; } Δρ. Μαρία Ι. Ανδρέου

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

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

  32. return(συνέχ.) • Αν ο return type είναι μια class, η method returns a reference to an object (or null). • Συχνά το returned object δημιουργείται μέσα στη method χρησιμοποιώντας τοnew. Για παράδειγμα: • 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. Encapsulation • Η Απόκρυψη (Hiding)των λεπτομερειών της υλοποίησης (the implementation details)για μια classονομάζεταιencapsulation. Αυτό επιτυγχάνεταικάνοντας ΌΛΑ τα fields και τις βοηθητικές methods private • Encapsulation βοηθά στο program maintenance και το team development. • μια class encapsulates ένα μικρό σύνολο από well-defined tasks που objects αυτής της class μπορούν να κάνουν. Δρ. Μαρία Ι. Ανδρέου

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

  35. public vs. private(συνέχ.) public class MyClass { // Constructors: public MyClass (...) { ... } ... // Public methods: public <sometype> myMethod (...) { ... } ... // Private methods: private <sometype> myMethod (...) { ... } ... // Private fields: private <sometype> myField; ... } Δρ. Μαρία Ι. Ανδρέου

  36. public vs. private(συνέχ.) • Σε ένα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. Accessors and Modifiers • ένας programmer συχνά παρέχει methods, που καλούνται accessors, οι οποίες επιστρέφουν τιμές των private fields. methods που θέτουν τιμές σε private fields καλούνταιmodifiers. • Accessors’ names συχνά αρχίζουν μεget, και modifiers’ names μεset. • Αυτές ΔΕΝ είναι ακριβής κατηγορίες: η ίδια method μπορεί να τροποποιεί διάφορα fields και επίσης να επιστρέφει την old or new value ενός από αυτά. Δρ. Μαρία Ι. Ανδρέου

More Related