Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Data Types, Variables, and Arithmetic
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-2 Στόχοι: l Ανασκόπηση των primitive data types l Μαθαίνουμε πως να ορίζουμε fields και local variables l Μαθαίνουμε για arithmetic operators, compound assignment operators, και increment / decrement operators l Μαθαίνουμε πως να αποφεύγουμε κοινά λάθη in arithmetic
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-3 Μεταβλητές (Variables) l μια μεταβλητή (variable) είναι ένα “named container” που κρατά μια τιμή. Για παράδειγμα. q = q; σημαίνει: 1. Διάβασε την τρέχων τιμή του q 2. Αφαίρεσε 100 από αυτήν 3. Γράψε το αποτέλεσμα ξανά στο q count mov ax,q mov bx,100 sub bx,ax mov q,bx
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-4 Variables (συνέχ.) l Variables μπορεί να είναι διαφορετικών data types: int, char, double, boolean, κτλ. l Variables μπορεί να κρατούν objects; Τότε ο τύπος τους είναι the class αυτού του object. l Ο προγραμματιστής δίνει ονόματα στις variables. l Τα ονόματα τους συχνά αρχίζουν με μικρό γράμμα και κάθε επόμενη λέξη μέσα στο όνομα αρχίζει με κεφάλαιο γράμμα.
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-5 Variables (συνέχ.) l Μια variable πρέπει να οριστεί ΠΡΙΝ χρησιμοποιηθεί: int count; double x, y; JButton go; FallingCube cube; String firstName; Declarations Type Name(s)
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-6 Variables (συνέχ.) l Ο τελεστής της ανάθεσης (assignment operator) είναι το = και θέτει τιμή (value) στη μεταβλητή: l Μια variable μπορεί να αρχικοποιηθεί (initialized) κατά τον ορισμό της: count = 5; x = 0; go = new JButton("Go"); firstName = args[0]; Assignments int count = 5; JButton go = new JButton("Go"); String firstName = args[0]; Declarations with initialization
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-7 Variables (συνέχ.) l κάθε variable έχει Εμβέλεια (scope) — είναι η περιοχή στο source code όπου είναι «ορατή» (“visible”) l Αν χρησιμοποιήσεις μια variable εκτός its scope, ο compiler αναφέρει ένα syntax error. l Variables μπορούν να έχουν το ίδιο όνομα. Προσοχή: αυτό μπορεί να γίνει μόνο όταν οι εμβέλεις τους ( their scopes) δεν τέμνονται. { int k;... } { int k;... }
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-8 Fields vs. Local Variables l Τα πεδία (Fields) ορίζονται ΕΚΤΩΣ όλων των constructors και methods. l Οι τοπικές μεταβλητές (Local variables) ορίζονται ΕΝΤΩΣ ενός constructor ή μιας method.
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-9 Fields vs. Local Variables (συνέχ.) l Τα Fields συνήθως are grouped together, είτε στην αρχή είτε στο τέλος του class. l The scope ενός field είναι σε Ολόκληρο το class, (ανεξαρτήτως του αν ορίζεται στην αρχή ή στο τέλος του class)
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-10 Fields public class SomeClass { } Fields Constructors and methods public class SomeClass { } Scope Fields Constructors and methods
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-11 Local Variables l Οι τοπικές μεταβλητές (Local variables) ορίζονται ΕΝΤΩΣ a constructor or a method. l Οι Local variables ΧΑΝΟΥΝ τις τιμές τους και καταστρέφονται όταν constructor ή η method τελειώσει. l The scope μιας local variable είναι από το σημείο του ορισμού της μέχρι (down to) the closing brace of the block στο οποίο έχει οριστεί.
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-12 Local Variables (συνέχ.) public class SomeClass {... public SomeType SomeMethod (...) { }... } Local variable declared Local variable Scope
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-13 Variables (συνέχ.) l Χρησιμοποιούμε local variables όπου χρειάζεται. ΜΗΝ χρησιμοποιείτε fields όπου θα πρέπει να χρησιμοποιήσετε local variables. l Να δίνετε χαρακτηριστικά ονόματα στα fields, έτσι που να είναι ΔΙΑΦΟΡΕΤΙΚΑ από αυτά των local variables. l Καλό είναι να χρησιμοποιείτε το ΙΔΙΟ όνομα σε local variables που χρησιμοποιούνται με παρόμοιο τρόπο σε διαφορετικές methods (π.χ., x, y αντιπροσωπεύουν συντεταγμένες, count για ένα counter, i, k για δείκτες, κτλ.).
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-14 Variables (συνέχ.) l Common mistakes: public void SomeMethod (...) { int x;... int x = 5; // should be: x = 5;... Variable declared twice — syntax error
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-15 Variables (συνέχ.) l Κοινά λάθη: private int cubeX;... public SomeClass(...) // constructor { int cubeX = 5; // should be: cubeX = 5;... A field is overridden by a local variable; the value of the field cubeX remains unset
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-16 Primitive Data Types l int l double l char l boolean l byte l short l long l float Used in Java Methods
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-17 Constants 'A', '+', '\n', '\t' // char - 99, 2010, 0 // int 0.75, , 8.,.5 // double new line tab
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-18 Constants (συνέχ.) private final int delay = 30; private final double aspectRatio = 0.7; l Symbolic constants είναι ουσιαστικά αρχικοποιημένες final variables:
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-19 Constants (συνέχ.) l Γιατί είναι καλό να χρησιμοποιούμε symbolic constants? –Είναι πιο εύκολο να αλλάζουμε τις τιμές τους όταν είναι απαραίτητο –Εύκολα μπορούν να μετατραπούν σε variable –Πιο ευανάγνωστος ο κώδικας μας, self- documenting code –Επιπρόσθετος έλεγχος data type
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-20 Αριθμητική (Arithmetic) Τελεστές (Operators): +, -, /, *, % l Η προτεραιότητα (precedence) των τελεστών και των παρενθέσεων είναι η ίδια όπως και στην άλγεβρα. l m % n σημαίνει το υπόλοιπο (remainder) όταν το m διαιρείται από το n (π.χ., 17 % 5 είναι 2). % έχει την ίδια προτεραιότητα όπως / και * l Της ίδια προτεραιότητας δυαδικοί τελεστές (binary operators) εκτελούνται με την σειρά από αριστερά προς τα δεξιά.
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-21 Arithmetic (συνέχ.) l Ο τύπος των αποτελεσμάτων (result) καθορίζεται από τους τύπους (types) των τελεστέων (operands), ΟΧΙ από τις τιμές τους. Αυτός ο κανόνας χρησιμοποιείται σε Όλα τα ενδιάμεσα αποτελέσματα σε μια έκφραση (expressions). l Αν ένας τελεστέος είναι τύπου int και ο άλλος είναι τύπου double, το αποτέλεσμα είναι τύπου double. Αν και οι δυο τελεστέοι είναι τύπου int, το αποτέλεσμα είναι επίσης τύπου int.
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-22 Arithmetic (συνέχ.) Προσοχή: αν a και b είναι ints, τότε a / b truncated σε int… 17 / 5 δίνει 3 3 / 4 δίνει 0 l …ακόμα και αν αναθέτεις το αποτέλεσμα σε ένα double: double ratio = 2 / 3; The double type of the result doesn’t help: ratio still gets the value 0.0.
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-23 Arithmetic (συνέχ.) l Για να πάρουμε το σωστό αποτέλεσμα τύπου double, πρέπει να χρησιμοποιήσουμε double constants ή the cast operator: double ratio = 2.0 / 3; double ratio = 2 / 3.0; double factor = (double) m / (double) n; double factor = m / (double) n; double r2 = k / 2.0; double r2 = (double) k / 2; Casts
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-24 Arithmetic (συνέχ.) Προσοχή: the range for ints is from to (about - 2·10 9 to 2·10 9 ) l Overflow ΔΕΝ ανιχνεύεται από τον Java compiler ή interpreter n = 8 10^n = n! = n = 9 10^n = n! = n = 10 10^n = n! = n = 11 10^n = n! = n = 12 10^n = n! = n = 13 10^n = n! = n = 14 10^n = n! =
Εισαγωγή στο ΟΟΡ και Java Δρ. Μαρία Ι. Ανδρέου1-25 Arithmetic (συνέχ.) l Use compound assignment operators: a = a + b; a += b; a = a - b; a -= b; a = a * b; a *= b; a = a / b; a /= b; a = a % b; a % = b; l Use increment and decrement operators: a = a + 1; a ++ ; a = a - 1; a -- ; Do not use these in larger expressions