Τιμές βασικών τύπων και αναφορές Δεδομένα βασικών τύπων αποθηκεύονται κατ αξία ενώ τα αντικείμενα αποθηκεύονται κατ αναφορά: Διάλεξη #7: Συμβολοσειρές age = ; father = new (); name = ; Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 2 Η εντολή καταχώρησης (για 3 η φορά) Ψευδωνυμία (Aliasing) Η καταχώρηση γίνεται κατ αξία για τους βασικούς τύπους δεδομένων και κατ αναφορά για τύπους αντικειμένων p1 = new ("Jack"); p2; age = ; myage = age; age myage p2.changename("jill"); p1.printname(); p1 = new (); p1 p2 Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 3 Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 4 Ψευδωνυμία Βασικοί τύποι p1 = new ("Jack"); p2; p2.changename("jill"); p1.printname(); int i1 = ; int i2; i2 = i1; i2++; p1 "Jack" "Jill" 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) gameboard = 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 int indexof(char ch); public int indexof(char ch, int start); public int lastindexof(char ch); public int lastindexof(char ch, int start); Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 11 Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 12
= ;.touppercase(); = ; ΛΑΘΟΣ!.toUpperCase(); ή Fred FRED? ή Fred FRED? Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 13 Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 14 «Τροποποίηση» των s = ; =.touppercase(); Τα αντικείμενα τύπου δεν μπορεί να μεταβληθούν. Όλες οι «τροποποιήσεις» επιστρέφουν ένα νέο αντικείμενο τύπου. "FRED" Αντικείμενα τύπου δεν μπορεί ποτέ να τροποποιηθούν. Για μεγαλύτερη ακρίβεια, θα έπρεπε να αναφερόμαστε στη «δημιουργία συναφών s». Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 15 Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 16 Δημιουργία συναφών s Για αντικείμενα τύπου διαφορετικού από : replace(char oldchar, char newchar); tolowercase(); touppercase(); trim(); Fred Jill ==? Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 17 Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 18
Για αντικείμενα τύπου διαφορετικού από : Για αντικείμενα τύπου διαφορετικού από : ==? ==? Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 19 Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 20 για s command="quit"; if (command == "quit") True command="qui"; if (command + "t" == "quit") False if ("qui" + "t"== "quit") Αποφύγετε την χρήση "==" με True για s command = "quit"; if(command.equals("quit"))... command "quit" equals ελέγχει για ισότητα "quit" equals? 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
Το πρόβλημα της συνεχούς μετατροπής name = title + " " + firstname + " " + lastname; "Mr" "Mr " "Simpson" Η δημιουργία πολλών ενδιάμεσων αντικειμένων είναι αντιπαραγωγική "Mr Fred" "Mr Fred " "Mr Fred Simpson" H κλάση Buffer: Mutable s. Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 25