Τιµές βασικών τύπων και αναφορές εδοµένα βασικών τύπων αποθηκεύονται κατ αξία ενώ τα αντικείµενα αποθηκεύονται κατ αναφορά: Εβδοµάδα 7: Συµβολοσειρές age = ; father = new (); name = ; Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Η εντολή καταχώρησης (για 3 η φορά) Ψευδωνυµία (Aliasing) Η καταχώρηση γίνεται κατ αξία για τους βασικούς τύπους δεδοµένων και κατ αναφορά για τύπους αντικειµένων p1 = new ("Jack"); p2; age = ; myage = age; age myage p2 = p1; p2.changename("jill"); p1.printname(); p1 = new (); p2 = p1; p1 Τι θα τυπωθεί; p2 Εισαγωγή στον Προγραµµατισµό,,, Slide 3 Εισαγωγή στον Προγραµµατισµό,,, Slide 4 Ψευδωνυµία Βασικοί τύποι p1 = new ("Jack"); p2; p2 = p1; p2.changename("jill"); p1.printname(); p1 "Jack" "Jill" int i1 = ; int i2; i2 = i1; i2++; System.out.println(i1); p2 Jill Τι θα τυπωθεί; Εισαγωγή στον Προγραµµατισµό,,, Slide 5 Εισαγωγή στον Προγραµµατισµό,,, Slide 6
Βασικοί τύποι Ψευδωνυµία µέσω παραµέτρων int i1 = ; int i2; i2 = i1; i2++; System.out.println(i1); i1 i2 43 Board board = new Board("Blocks"); GameEngine engine = new GameEngine(board); System.out.println(board.getTitle()); public GameEngine(Board theboard) board = theboard; theboard.settitle("my Game"); Τι θα τυπωθεί; Εισαγωγή στον Προγραµµατισµό,,, Slide 7 Εισαγωγή στον Προγραµµατισµό,,, Slide 8 Ψευδωνυµία µέσω παραµέτρων class Game Board board = new Board("Blocks"); GameEngine engine = new GameEngine(board); System.out.println(board.getTitle()); Τι ισχύει για αντικείµενα τύπου ; public GameEngine(Board theboard) gameboard = theboard; theboard.settitle("my Game"); class GameEngine My Game board [Board] "My "Blocks" Game" [GameEngine] method: GameEngine: theboard engine gameboard Εισαγωγή στον Προγραµµατισµό,,, Slide 9 Εισαγωγή στον Προγραµµατισµό,,, Slide 10 Τα s δεν µπορεί να µεταλλαχθούν Βασικές µέθοδοι Οι πιο συχνά χρησιµοποιούµενες µέθοδοι είναι: Τα s δεν µπορεί να µεταλλαχθούν [immutable] Τα αντικείµενα που δεν µπορεί να µεταλλαχθούν έχουν σταθερή κατάσταση; Η κατάστασή τους δεν µπορεί να µεταβληθεί. public int length(); public char charat(int index); public indexof(char ch); public indexof(char ch, int start); public lastindexof(char ch); public lastindexof(char ch, int start); Εισαγωγή στον Προγραµµατισµό,,, Slide 11 Εισαγωγή στον Προγραµµατισµό,,, Slide 12
Μεταβολή αντικειµένων τύπου Μεταβολή αντικειµένων τύπου s1, s2; s1 = ; s2 = s1; s2.touppercase(); System.out.println(s1); s1 s2 s1, s2; s1 = ; ΛΑΘΟΣ! s2 = s1; s2.touppercase(); System.out.println(s1); s1 s2 ή Fred FRED? ή Fred FRED? Εισαγωγή στον Προγραµµατισµό,,, Slide 13 Εισαγωγή στον Προγραµµατισµό,,, Slide 14 Μεταβολή αντικειµένων τύπου «Τροποποίηση» των s s1, s2; s1 = ; s2 = s1; s2 = s2.touppercase(); System.out.println(s1); Τα αντικείµενα τύπου δεν µπορεί να µεταβληθούν. Όλες οι «τροποποιήσεις» επιστρέφουν ένα νέο αντικείµενο τύπου. "FRED" Αντικείµενα τύπου δεν µπορεί ποτέ να τροποποιηθούν. Για µεγαλύτερη ακρίβεια, θα έπρεπε να αναφερόµαστε στη «δηµιουργία συναφών s». s1 s2 Εισαγωγή στον Προγραµµατισµό,,, Slide 15 Εισαγωγή στον Προγραµµατισµό,,, Slide 16 ηµιουργία συναφών s Ταύτιση σε αντιπαράθεση µε ισότητα Για αντικείµενα τύπου διαφορετικού από : replace(char oldchar, char newchar); tolowercase(); touppercase(); trim(); Fred Jill person1 person2 person1 == person2? Εισαγωγή στον Προγραµµατισµό,,, Slide 17 Εισαγωγή στον Προγραµµατισµό,,, Slide 18
Ταύτιση σε αντιπαράθεση µε ισότητα Για αντικείµενα τύπου διαφορετικού από : Ταύτιση σε αντιπαράθεση µε ισότητα Για αντικείµενα τύπου διαφορετικού από : person1 person2 person1 person2 person1 == person2? person1 == person2? Εισαγωγή στον Προγραµµατισµό,,, Slide 19 Εισαγωγή στον Προγραµµατισµό,,, Slide 20 Ταύτιση σε αντιπαράθεση µε ισότητα για s Ταύτιση σε αντιπαράθεση µε ισότητα για s command = ; if(command == ) == ελέγχει την ταύτιση command = ; if(command.equals()) equals ελέγχει για ισότητα ==? equals? command false command true Εισαγωγή στον Προγραµµατισµό,,, Slide 21 Εισαγωγή στον Προγραµµατισµό,,, Slide 22 Μετατροπή από/σε Μέθοδοι µετατροπής από/σε Συχνά είναι αναγκαία η µετατροπή ενός αντικειµένου τύπου σε αντικείµενα άλλων τύπων (Integer, Boolean, ), και αντίστροφα. Ο τύπος-αποτέλεσµα της µετατροπής περιέχει την µέθοδο που θα κληθεί για να πραγµατοποιήσει την µετατροπή. (Παράδειγµα: µετατροπή από σε Integer µια µέθοδο στην κλάση Integer.) Μετατροπή από boolean int long float double Μετατροπή σε boolean int long float double σε.valueof(boolean).valueof(int).valueof(long).valueof(float).valueof(double) από new Boolean().booleanValue() Integer.parseInt(, int base) Long.ParseLong(, int base) new Float().floatValue() new Double().doubleValue() Εισαγωγή στον Προγραµµατισµό,,, Slide 23 Εισαγωγή στον Προγραµµατισµό,,, Slide 24
Το πρόβληµα της συνεχούς µετατροπής Η κλάση Buffer name = title + " " + firstname + " " + lastname; "Mr" "Mr " "Simpson" Η δηµιουργία πολλών ενδιάµεσων αντικειµένων είναι αντιπαραγωγική "Mr Fred" "Mr Fred " "Mr Fred Simpson" Ο µεταφραστής χρησιµοποιεί ένα αντικείµενο τύπου Buffer για να λύσει το πρόβληµα. name = new Buffer().append(title).append(" ").append(firstname).append(" ").append(lastname); Έναν αντικείµενο τύπου Buffer αποθηκεύει ένα τροποποιήσιµο διάνυσµα από χαρακτήρες. Εισαγωγή στον Προγραµµατισµό,,, Slide 25 Εισαγωγή στον Προγραµµατισµό,,, Slide 26 Η κλάση Buffer Η κλάση Buffer Τροποποίηση του χώρου αποθήκευσης [buffer]: public void setcharat(int index, char newchar) αλλάζει το χαρακτήρα στη θέση index Buffer append( s) Buffer append(char ch) Buffer append(int i) Buffer append(boolean b) (διαθέσιµη για όλους τους βασικούς τυπους) public change( s) Buffer buffer = new Buffer(s); // modify Buffer return buffer.to(); Αντικείµενα τύπου µπορεί εύκολα να µετατραπούν σε αντικείµενα τύπου Buffers, και αντίστροφα. Εισαγωγή στον Προγραµµατισµό,,, Slide 27 Εισαγωγή στον Προγραµµατισµό,,, Slide 28 Η χωριτικότητα του Buffer s και διανύσµατα από char Ενας Buffer είναι ένα µεταβλητού µεγέθους διάνυσµα από char. Παρόµοια αντιµετώπιση θεµάτων χωρητικότητας µε τα διανύσµατα µεταβλητού µεγέθους. public Buffer(int capacity); ηµιουργεί µια αποθήκη µε αρχική χωρητικότητα capacity. Ένα αναπαρίσταται µε ένα διανυσµα από chars Ένα µπορεί να µετατραπεί από/σε διάνυσµα από chars public void ensurecapacity(int minimum); Επιβεβαιώνεται ότι η χωρητικότητα της αποθήκης είναι τουλάχιστον minimum. public int capacity(); Επιστρέφει τη χωρητικότητα της αποθήκης. Εισαγωγή στον Προγραµµατισµό,,, Slide 29 Εισαγωγή στον Προγραµµατισµό,,, Slide 30
Παραδειγµα: διανυσµα από chars public static squeezeout( from, char toss) char[] chars = from.tochararray(); int len = chars.length(); for (int i = 0; i < len; i++) if (chars[i] == toss) len--; System.arraycopy(chars, i+1, chars, i, len-i); i--; // reexamine this spot return new (chars, 0, len); Εισαγωγή στον Προγραµµατισµό,,, Slide 31