Ποιά από τις πιο κάτω προτάσεις ισχύει συνήθως κατά την ανάπτυξη λογισμικού JAVA; Αντικείμενα και Κλάσεις Xρησιμοποιούμε μεταγλωττιστή και το πρόγραμμά μας εκτελείται με μορφή τελικού κώδικα. Χρησιμοποιούμε διερμηνέα και το πρόγραμμά μας εκτελείται με μορφή κώδικας μηχανής. Xρησιμοποιούμε μεταγλωττιστή για μεταγλώττιση και διερμηνέα για εκτέλεση του προγράμματος. Η μεταγλώττιση γίνεται από την Εικονική Μηχανή JAVA (Java Virtual Machine). 1 EΠΛ233 2 Η Java έχει το χαρακτηριστικό «Write once, run everywhere». Γιατί; Ο μεταγλωττιστής της JAVA βγάζει τελικό κώδικα για όλες τις αρχιτεκτονικές επεξεργαστών. Οι δυφιοσυλλαβές είναι μια ενδιάμεση γλώσσα που την καταλαβαίνουν όλοι οι επεξεργαστές. Οι δυφιοσυλλαβές εκτελούνται από την εικονική μηχανή JAVA (JVM), η οποία έχει μεταφερθεί στις πλείστες αρχιτεκτονικές. Η JAVA μεταγλωττίζεται απευθείας σε γλώσσα μηχανής Τuring. Περίγραμμα Αντικείμενα, Κατηγορίες (κλάσεις), Ιδιότητες και Μέθοδοι στον πραγματικό κόσμο Αντικείμενα και Κλάσεις JAVA Στοιχεία Αφαιρετικότητας στον Α/Σ.Π. Παραδείγματα Αντικειμενοστρεφούς Προγραμματισμού Aπαράβατοι Περιορισμοί (Invariants) EΠΛ233 3 4
Αντικείμενα στον πραγματικό κόσμο Ιδιότητες Καταστάσεις Συμπεριφορές Αντικείμενα στον πραγματικό κόσμο Ιδιότητες Καταστάσεις Συμπεριφορές 5 6 Σε πόσες «καταστάσεις» (states) μπορεί να βρεθεί ο συγκεκριμένος λαμπτήρας; Αντικείμενα και κλάσεις στον πραγματικό κόσμο Μία Δύο Τρεις Εξαρτάται EΠΛ233 7 8
Αυτοκίνητα: αντικείμενα και κλάσεις Αντικείμενα-Αυτοκίνητα: Διακριτές οντότητες Έχουν ιδιότητες (fields): χρώμα, αριθμός επιβατών, έτος κατασκευής, ισχύς μηχανής κλπ. Έχουν συμπεριφορές, όπως «κίνηση εμπρός», «κίνηση πίσω», «στροφή» κλπ (μέθοδοι) Παρουσιάζουν κοινά χαρακτηριστικά Κλάση/Κατηγορία «Αυτοκίνητο»: Έννοια που αντιπροσωπεύει όλα εκείνα τα αντικείμενα που διαθέτουν μηχανή, 4 (;) ρόδες, τιμόνι (;) και μπορούν να μετακινηθούν από μέρος σε μέρος. Αντικείμενα και Κλάσεις Κλάση/κατηγορία: «οικογένεια» αντικειμένων με κοινό σύνολο ιδιοτήτων και συμπεριφορών. Αντικείμενα: «στιγμιότυπα» μιας κλάσης. Κλάσεις: «σχεδιότυπα» κάποιων παρόμοιων αντικειμένων. 9 10 Ιδιότητες και Συμπεριφορές Ιδιότητες-Πεδία Δεδομένων (Properties or fields) Τιμές που ανήκουν/χαρακτηρίζουν/συναποτελούν ένα αντικείμενο Π.χ.: ιδιοκτήτης ενός αυτοκινήτου, χρώμα, τύπος και μοντέλο ενός κινητού τηλεφώνου, μηχανή Συμπεριφορές - Μέθοδοι (methods) Λειτουργίες που μπορεί να πραγματοποιηθούν σε ένα αντικείμενο ή διαμέσου αυτού Π.χ.: μετακίνησε εμπρός ένα αυτοκίνητο, μετακίνησε πίσω, στρίψε κάνε ένα τηλεφώνημα, απάντησε σε εισερχόμενο τηλεφώνημα, παίξε μουσική, στείλε μήνυμα 11 12
Ποιά η σχέση ιδιοτήτων και καταστάσεων ενός αντικειμένου; Ποιά από τις παρακάτω προτάσεις είναι σωστή; Οι ιδιότητες αντικειμένο είναι υποσύνολο των καταστάσεων στις οποίες μπορεί να βρεθεί το αντικείμενο Οι καταστάσεις είναι υποσύνολο των ιδιοτήτων του αντικειμένου Δεν υπάρχει σχέση μεταξύ ιδιοτήτων και καταστάσεων Οι καταστάσεις αντιστοιχούν στο σύνολο των συνδυασμών των τιμών που μπορεί να λάβουν οι ιδιότητες του αντικειμένου Η κλάση είναι ένα σύνολο αντικειμένων με κοινές ιδιότητες και συμπεριφορές Η κλάση είναι ένα σχεδιότυπο πανομοιότυπων αντικειμένων Το αντικείμενο είναι σχεδιότυπο η κλάση είναι στιγμιότυπο Κανένα από τα πιο πάνω EΠΛ233 13 EΠΛ233 14 Ποιά από τις παρακάτω προτάσεις είναι σωστή; Ένα αντικείμενο μπορεί να περιλαμβάνει ως ιδιότητες άλλα αντικείμενα Ένα αντικείμενο περιλαμβάνει ως ιδιότητα την κλάση του Ένα αντικείμενο αποτελείται μόνο από ιδιότητες ή μόνο από συμπεριφορές Κανένα από τα πιο πάνω Περίγραμμα Αντικείμενα, Κατηγορίες (κλάσεις), Ιδιότητες και Μέθοδοι στον πραγματικό κόσμο Αντικείμενα και Κλάσεις JAVA Στοιχεία Αφαιρετικότητας στον Α/Σ.Π. Παραδείγματα Αντικειμενοστρεφούς Προγραμματισμού Aπαράβατοι Περιορισμοί (Invariants) EΠΛ233 15 16
Αντικείμενα και Κλάσεις στις Γ.Π. Τα συστατικά στοιχεία των προγραμμάτων Α/Σ Γ.Π. είναι οι κλάσεις: μια μορφή τύπων, όπως τα struct της C, ενισχυμένων όμως με λειτουργικότητες (ʻσυμπεριφορέςʼ), κώδικα, έλεγχο πρόσβασης σε πεδία δεδομένων κλπ. Οι κλάσεις, χρησιμοποιούνται κυρίως για να κατασκευάζουμε αντικείμενα, τα οποία αποτελούν και τη βασική δομή δεδομένων του Α/Σ Προγραμματισμού. Κατά την εκτέλεσή του, ένα αντικειμενοστρεφές προγράμμα μπορεί να ιδωθεί σαν ένα σύνολο αντικειμένων που αλληλεπιδρούν μεταξύ τους εξυπηρετώντας το ένα το άλλο. Κατάσταση, Συμπεριφορά, Ταυτότητα Τα αντικείμενα στον Α/Σ προγραμματισμό έχουν τρία βασικά χαρακτηριστικά: Κατάσταση (state) Το σύνολο των δεδομένων που αποθηκεύονται στο εσωτερικό του αντικειμένου Συμπεριφορά (behavior) Το σύνολο των ενεργειών που μπορεί να διεκπεραιώσει το αντικείμενο: συναρτήσεις που διαθέτει το αντικείμενο Ταυτότητα (identity) Το κλειδί μέσω του οποίου μπορούμε να αποκτήσουμε πρόσβαση στο αντικείμενο 17 18 Πεδία Δεδομένων και Μέθοδοι Ένα αντικείμενο λογισμικού: Aποθηκεύει στο εσωτερικό του πληροφορίες που είναι αποτέλεσμα των υπολογισμών-λειτουργιών του. Η αποθήκευση γίνεται στα πεδία δεδομένων του αντικειμένου(fields/variables). Οι αποθηκευμένες πληροφορίες αποτελούν την κατάσταση (state) του αντικειμένου. Εκθέτει τη συμπεριφορά του μέσω μεθόδων (functions in some programming languages). Οι μέθοδοι: λειτουργούν πάνω στην εσωτερική κατάσταση ενός αντικειμένου αποτελούν τον βασικό μηχανισμό για επικοινωνία ανάμεσα σε αντικείμενα. Ταυτότητα Η ταυτότητα ενός αντικειμένου λογισμικού: identifier (προσδιοριστής) μέσω του οποίου αποκτούμε πρόσβαση στο αντικείμενο. Αντιστοιχεί στη διεύθυνση στην οποία βρίσκεται αποθηκευμένο το αντικείμενο Στη JAVA, ο προσδιοριστής ενός αντικείμενου λέγεται χειριστήριο (handle) και μέσω αυτού: αποκτούμε πρόσβαση στα πεδία του αντικειμένου (κατάσταση) μπορούμε να ενεργοποιήσουμε τις ενέργειες του 19 20
Μέθοδοι Οι μέθοδοι της JAVA είναι οι γνωστές συναρτήσειςδιαδικασίες του διαδικασιακού προγραμματισμού. Οι μέθοδοι καθορίζουν τις υπευθυνότητες/συμπεριφορές/ πιθανές ενέργειες των αντικειμένων μιας κλάσης. Μια μέθοδος JAVA δηλώνεται μόνο σαν στοιχείο κάποιας κλάσης - δεν υπάρχουν γενικές συναρτήσεις. Μια μέθοδος μπορεί να κληθεί μόνο μέσω κάποιου αντικειμένου/κλάσης, το οποίο να την εμπεριέχει. Αν προσπαθήσετε να καλέσετε κάποια μέθοδο που δεν ενυπάρχει σε ένα αντικείμενο, θα πάρετε μήνυμα λάθους από τον μεταφραστή. Τυπικές Παράμετροι Οι τυπικές παράμετροι (formal parameters) μιας μεθόδου καθορίζουν τις πληροφορίες που πρέπει να περάσουμε στην μέθοδο όταν την καλέσουμε. Κατά την κλήση μιας μεθόδου, στη θέση της κάθε τυπικής παραμέτρου εισάγουμε ένα όρισμα (argument), το οποίο μπορεί να είναι: Χειριστήριο αντικειμένου του ίδιου τύπου με την τυπική παράμετρο Μεταβλητή ή Τιμή αρχέγονου/πρωταρχικού τύπου (primitive value) 21 22 Πολυπλοκότητα αντικειμένων Η πολυπλοκότητα της κατάστασης και της συμπεριφοράς αντικειμένων διαφορετικού τύπου μπορεί να διαφέρει. Π.χ.: Ένας σκύλος έχει κατάσταση (name, color, breed, hungry) και συμπεριφορά (barking, fetching, wagging tail). Ένα ποδήλατο επίσης έχει κατάσταση (current gear, current pedal cadence, current speed) και συμπεριφορά (changing gear, changing pedal cadence, applying brakes). Ο καθορισμός της κατάστασης και της συμπεριφοράς αντικειμένων του πραγματικού κόσμου είναι ένας πολύ καλός τρόπος για να ξεκινήσετε να σκέφτεστε με αντικειμενοστρεφή τρόπο. 23 24
Συστατικά στοιχεία Αντικειμένων Κλάσεις Κατάσταση Συµπεριφορά Ταυτότητα Πεδία Δεδοµένων Λειτουργίες/Μέθοδοι Διεύθυνση µνήµης Καθορίζουν την αλληλεπίδραση του αντικειµένου µε άλλα αντικείµενα Στον πραγματικό κόσμο υπάρχουν αντικείμενα που ανήκουν στην ίδια κατηγορία - είναι του ίδιου τύπου. Π.χ. έχουμε χιλιάδες ποδήλατα της ίδιας μάρκας και του ίδιου μοντέλου, τα οποία έχουν κατασκευαστεί με βάση το ίδιο σχέδιο κι έχουν τα ίδια συστατικά στοιχεία. Στον Α/Σ προγραμματισμό, λέμε ότι ένα αντικείμενοποδήλατο, αποτελεί στιγμιότυπο (instance) μια κλάσης αντικειμένων που είναι γνωστά ως ποδήλατα. Η κλάση είναι το σχεδιότυπο/σχεδιάγραμμα (ο τύπος) από το οποίο κατασκευάζονται τα αντικείμενα-ποδήλατα. Η κλάση καθορίζει την κατάσταση και τη συμπεριφορά των αντικειμένων της. 25 26 Δήλωση κλάσης Δημιουργία νέων τύπων: κλάσεις Η δήλωση μιας κλάσης πρέπει να περιλαμβάνει: Τις λειτουργίες που υποστηρίζονται από τα αντικείμενα της κλάσης: Δήλωση μεθόδων Τα συστατικά στοιχεία της κατάστασης των αντικειμένων της Δήλωση πεδίων δεδομένων Ο τύπος των αντικειμένων στην JAVA καθορίζεται με τον ορισμό κλάσεων. Π.χ: class ATypeName { /* class body Αντικείμενα μιας κλάσης δημιουργούνται με χρήση της new: ATypeName a = new ATypeName(); Στον ορισμό των κλάσεων συμπεριλαμβάνονται: Πεδία δεδομένων (fields) - μεταβλητές στιγμιοτύπου (instance vars) Αντικείμενα οποιουδήποτε τύπου, που αντιπροσωπεύονται από κάποια χειριστήρια. Χρήζουν αρχικοποίησης με την new. Mεταβλητές αρχέγονων τύπων. Μέθοδοι Κάθε αντικείμενο διατηρεί την δική του μνήμη για τα δικά του πεδία δεδομένων. 27 28
Δημιουργία αντικειμένων Η δημιουργία ενός νέου αντικειμένου γίνεται με τη χρήση της εντολής new. String s = new String( asdf ); String s = asdf ; BankAcct b1 = new BankAcct(21338, 0.0); Μετά την δήλωση ενός χειριστηρίου, μπορεί να γίνει η διασύνδεσή του με κάποιο δημιουργηθέν αντικείμενο. Πρόσβαση σε πεδία δεδομένων Πεδία δεδομένων αντικειμένων DatOnly: class DatOnly { int i; float f; boolean b; Δήλωση χειριστηρίου, δημιουργία αντικειμένου, αρχικοποίηση χειριστηρίου DataOnly d = new DataOnly(); Αρχικοποίηση πεδίων αντικειμένου: d.i = 47; d.f = 1.1f; d.b = false; myplane.lefttank.capacity = 100; 29 30 Περίγραμμα Αντικείμενα, Κατηγορίες (κλάσεις), Ιδιότητες και Μέθοδοι στον πραγματικό κόσμο Αντικείμενα και Κλάσεις JAVA Στοιχεία Αφαιρετικότητας στον Α/Σ.Π. Παραδείγματα Αντικειμενοστρεφούς Προγραμματισμού Aπαράβατοι Περιορισμοί (Invariants) Στοιχεία αφαιρετικότητας στον Α/Σ.Π. 1. Αντικείμενα: οι λύσεις σε υπολογιστικά προβλήματα μοντελοποιούνται σαν αλληλεπιδράσεις μεταξύ αντικειμένων. 2. Κλάσεις: είναι το «εργαλείο» δημιουργίας σχεδιοτύπων και παραγωγής αντικείμενων με ομοειδή χαρακτηριστικά. 3. Εμφώλευση. 4. Απόκρυψη πληροφοριών. 5. Χαμηλή διασυνδετικότητα. 31 32
Αντικείμενα Τα πάντα είναι αντικείμενα Ένα πρόγραμμα JAVA κωδικοποιεί την επίλυση ενός υπολογιστικού προβλήματος σαν σύνολο από αντικείμενα που αλληλεπιδρούν. Κλάσεις Μηχανισμός για σχεδιασμό και παραγωγή αντικειμένων Αντικείμενα που ανήκουν στην ίδια κλάση: Υποστηρίζουν την ίδια συλλογή λειτουργιών (συμπεριφορών) Έχουν ένα κοινό σύνολο από πιθανές καταστάσεις 33 34 Εμφώλευση δεδομένων (data encapsulation) Aπόκρυψη της κατάστασης (state) του αντικειμένου σε ιδιωτικά πεδία δεδομένων Περιορισμός της αλληλεπίδρασης/επικοινωνίας με τα αντικείμενα και δυνατότητα αλλαγής της κατάστασης των μόνο μέσω των μεθόδων τους Τα αντικείμενα διατηρούν τον έλεγχο του πώς ο εξωτερικός κόσμος μπορεί να τα αξιοποιήσει Απόκρυψη Πληροφορίας (Information Hiding) Δεν μας ενδιαφέρει πώς ακριβώς ένα αντικείμενο εκπληρώνει μια υποχρέωσή του. Έτσι, δεν έχουμε ιδέα τι ενέργειες θα κάνει και από ποιούς θα ζητήσει βοήθεια για να μας εξυπηρετήσει. Από την στιγμή που το αντικείμενο δεχθεί το μήνυμα-αίτημά μας, αποδέχεται και την ευθύνη για την διεκπεραίωση του. Βασική προσέγγιση Α/Σ. Π.: ψάχνουμε πάντοτε κάποιο άλλο αντικείμενο για να μεταβιβάσουμε ολόκληρη μέρος τής υποχρέωσης που έχουμε αναλάβει. 35 36
Διασυνδετικότητα Με την απόκρυψη πληροφοριών, μπορούμε να πετύχουμε χαμηλή διασυνδετικότητα στα προγράμματά μας Ορισμός διασυνδετικότητας: Ο βαθμός εξάρτησης ενός τμήματος τού κώδικα κάποιου λογισμικού συστήματος από τα υπόλοιπα τμήματα. Σημασία διασυνδετικότητας Θεωρείστε κάποιον κώδικα που υλοποιεί ουσιώδη λειτουργία ενός πολύπλοκου συστήματος λογισμικού. Έφ όσον ο κώδικας αυτός χρησιμεύει σε άλλα κομμάτια του συστήματος, στοιχεία του (μεταβλητές, αποτελέσματα, εντολές) θα χρησιμοποιούνται και πρέπει να είναι γνωστά και προσβάσιμα για την υλοποίηση των υπολοίπων κομματιών του λογισμικού. Άρα, η ανάπτυξη ενός νέου υποσυστήματος προϋποθέτει την κατανόηση και γνώση του κώδικά μας (καλό ή κακό;) Ποιά από τις πιο κάτω προτάσεις είναι η σωστή; Η χαμηλή διασυνδετικότητα είναι ιδιότητα του Α/Σ. Π. Η υποστήριξη της εμφώλευσης επιτρέπει την απόκρυψη πληροφορίας, η οποία διευκολύνει τη χαμηλή διασυνδετικότητα. Η χρήση αντικειμένων διασφαλίζει την απόκρυψη πληροφορίας. Η απουσία απόκρυψης πληροφορίας συνεπάγεται την υψηλή διασυνδετικότητα. 37 EΠΛ233 38 Περίγραμμα Αντικείμενα, Κατηγορίες (κλάσεις), Ιδιότητες και Μέθοδοι στον πραγματικό κόσμο Αντικείμενα και Κλάσεις JAVA Στοιχεία Αφαιρετικότητας στον Α/Σ.Π. Ηλεκτροστατικά πεδία Παραδείγματα Αντικειμενοστρεφούς Προγραμματισμού Aπαράβατοι Περιορισμοί (Invariants) 39 40
Παράδειγμα: ηλεκτροστατικά φορτία Υπολογισμός Ηλεκτροστατικού Δυναμικού Οι αλληλεπιδράσεις ηλεκτρικών φορτίων ακολουθούν το Νόμο του Coulomb Κάθε φορτίο δημιουργεί ένα ηλεκτροστατικό δυναμικό στο χώρο, το οποίο καθορίζει τις δυνάμεις που ασκούνται σε άλλα φορτία του χώρου. Το δυναμικό ενός σημείου στο χώρο ισούται με το άθροισμα των δυναμικών που δημιουργούνται από όλα τα φορτία του χώρου Εξετάζουμε την περίπτωση των δύο διαστάσεων (τα φορτία είναι τοποθετημένα σε ένα επίπεδο) (x,y) r q (x0,y0) φορτισµένο σωµατίδιο c µε φορτίο q V = k q / r q: φορτίο r : απόσταση k: ηλεκτροστατική σταθερά (k = 8.99x10 9 Nm 2 /C 2 ) 41 42 Ζητούμενο Υπολογίστε το ηλεκτροστατικό δυναμικό σημείων ενός επιπέδου, δεδομένων φορτίων που υπάρχουν στο επίπεδο. q1 Τέλος Διάλεξης 4 q2 x qn 43 44
Αφαιρετικότητα Πώς θα κωδικοποιήσουμε στο πρόγραμμά μας τα φορτία; Σαν αντικείμενα (objects) Τι συμπεριλαμβάνει η κατάσταση (state) του κάθε φορτίου; Το μέγεθος του φορτίου: πραγματικός αριθμός (q) Την θέση του φορτίου στο επίπεδο: Ζευγάρι πραγματικών αριθμών (x, y) Ποιά είναι η συμπεριφορά (behavior) του κάθε φορτίου; Δημιουργεί ένα πεδίο δυναμικού Αφαιρετικότητα Χρειαζόμαστε ένα τύπο δεδομένων, ο οποίος να ορίζει τα χαρακτηριστικά του κάθε φορτίου (κατάσταση, συμπεριφορά) Εισάγουμε μια κλάση Charge για την περιγραφή ηλεκτρικών φορτίων. Τι πεδία δεδομένων πρέπει να έχει αυτή η κλάση; Θέση του κάθε φορτίου (συντεταγμένες x, y) Τιμή του φορτίου Τι συμπεριφορά πρέπει να έχουν τα στιγμιότυπα αυτής της κλάσης; Κάθε φορτίο προκαλεί κάποιο δυναμικό σε κάθε άλλο σημείο του επιπέδου 45 46 Χαρακτηριστικά κλάσης Charge Χρήση της Charge public class Charge double x0, y0, q0; double potentialat(double x, double y) επιστρέφει το δυναμικό στη θέση x,y που προκαλείται από το φορτίο String tostring() επιστρέφει συμβολοσειρά που αναπαριστά το φορτίο public class ChargeClient { 47 public static void main(string[] args) { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); Charge c1 = new Μετασχηµατισµός Charge(.51,.63, του stdin 21.3); από πίνακα Charge c2 = new Charge(.13, συµβολοσειρών.94, σε πραγµατικούς 81.9); System.out.println(c1); αριθµούς. System.out.println(c2); Χρήση της tostring double v1 = c1.potentialat(x, y); double v2 = c2.potentialat(x, y); System.out.println(v1+v2); Παρατηρείστε ότι ο κώδικας που χρησιμοποιεί την Charge δεν χρειάζεται να γνωρίζει την υλοποίηση της. 48
Αντιμετώπιση πολυπλοκότητας Βασική μέθοδος αντιμετώπισης της πολυπλοκότητας στον προγραμματισμό: ΔΙΑΙΡΕΙ και ΒΑΣΙΛΕΥΕ (Divide & Conquer) Διαμερισμός των προβλημάτων σε μικρότερα υποπροβλήματα Ξεχωριστή επίλυση των μικρότερων υποπροβλημάτων χωριστά Εύκολη συναρμολόγηση των υπο-λύσεων Απουσία Παρεμβολών (non-interference) Εφόσον ένα αντικείμενο παρέχει τις υπηρεσίες που θέλουμε, δεν μας ενδιαφέρει πως διεκπεραιώνει τα αιτήματά μας. Τα εξαρτήµατα λογισµικού (software components) σε Α/Σ συστήματα χαρακτηρίζονται από τις υπηρεσίες που παρέχουν και όχι από τις λεπτομέρειες της υλοποίησής τους. Η προσέγγιση αυτή διευκολύνει την συνεργασία πολλών προγραμματιστών πάνω στο ίδιο σύστημα με την ελάχιστη παρεμβολή του ενός στη δουλειά του άλλου. " Ask not what you can do to your data structures; ask what your data structures can do for you. 49 50 Υλοποίηση Κλάσης Charge public class Charge { private double rx, ry; private double q; // position // charge Πεδία δεδοµένων (instance variables) public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; public double potentialat(double x, double y) { double k = 8.99e09; double dx = x - rx; double dy = y - ry; return k * q / Math.sqrt(dx*dx + dy*dy); Κατασκευαστής (constructor) Μέθοδοι (instance methods) Βρες έναν τυχαίο αριθμό public String tostring() { return q + " at " + "(" + rx + ", " + ry + ")"; 51 52
Βρείτε τυχαίο ακέραιο μεταξύ 0 - Ν public class RandomInteger { public void printrandint(int N) { // a pseudo-random real in [0.0,1.0) double r = Math.random(); // a pseudo-random integer between 0 and N-1 int n = (int) (r * N); System.out.println("Your random integer is:" + n); Κατασκευάζοντας αυτοκίνητα στο Eclipse 53 54 55 56
57 import comp102x.io; Περίγραμμα Αντικείμενα, Κατηγορίες (κλάσεις), Ιδιότητες και Μέθοδοι στον πραγματικό κόσμο Αντικείμενα και Κλάσεις JAVA Αντικειμενοστρέφεια και Αφαιρετικότητα Παραδείγματα Αντικειμενοστρεφούς Προγραμματισμού * A class of car objects that can move forward, backward and turn * @author mdd * public class Car { private int odometer = 0; private String owner = "NoName"; // odometer value initialized to 0 // Name of owner * Default constructor for a Car object public Car() { Μέθοδοι Αccessor/Getter, Mutator/Setter Σχολιασμός και τεκμηρίωση Aποσφαλμάτωση Πεδία δεδομένων * Constructor for a Car object with a new owner's name * @param name name of owner public Car(String name){ owner = name; Κατασκευαστές Aπαράβατοι Περιορισμοί (Invariants) 58 59 60
Ορισμός Μεθόδων * movecar moves a car forward or backward by dist units * @param dist moving distance public void movecar(int dist) { odometer = odometer + dist; IO.outputln(owner +"'s car has moved " + dist + " units."); * turncar turns a car by a given degree * @param angle turn angle in degrees public void turncar(double angle) { IO.outputln(owner + "'s car has turned " + angle + " units."); * getodometer gets the odometer reading of a car * public int getodometer() { return odometer; Μutator/Setter Methods (τροποποιητές) Αccessor/Getter Method (αναγνώστης) Περίγραμμα Αντικείμενα, Κατηγορίες (κλάσεις), Ιδιότητες και Μέθοδοι στον πραγματικό κόσμο Αντικείμενα και Κλάσεις JAVA Αντικειμενοστρέφεια και Αφαιρετικότητα Παραδείγματα Αντικειμενοστρεφούς Προγραμματισμού Μέθοδοι Αccessor/Getter, Mutator/Setter Σχολιασμός και τεκμηρίωση Aποσφαλμάτωση Aπαράβατοι Περιορισμοί (Invariants) 61 62 Λίγα λόγια για την τεκμηρίωση Τα σχόλια στον κώδικα χρησιμοποιούνται για να περιγράψουν: τι κάνει ένα πρόγραμμα και τι χρειάζεται; τι αναπαριστά μια μεταβλητή/πεδίο δεδομένων; ποιές προϋποθέσεις πρέπει να τηρούνται όταν χρησιμοποιείται μια μεταβλητή / πεδίο δεδομένων ή μέθοδος; μια σύντομη περιγραφή της λογικής ροής του προγράμματος πληροφορίες για τον προγραμματιστή και τον κώδικα Στη JAVA υπάρχουν τρεις γενικοί τρόποι για εισαγωγή σχολίων στον κώδικα. import comp102x.io; * A class of car objects that can move forward, backward and turn * @author mdd * public class Car { /* The odometer has always positive value private int odometer = 0; // odometer value initialized to 0 private String owner = "NoName"; // Name of owner * Default constructor for a Car object public Car() { * Constructor for a Car object with a new owner's name * @param name name of owner public Car(String name){ owner = name; 63 64
Σχόλια Javadoc Σχόλια που ξεκινούν με και καταλήγουν σε και περιέχουν: @param για να περιγράφουν παραμέτρους @return για να περιγράφουν την τιμή επιστροφής μιας μεθόδου δίνουν «τροφή» στα εργαλεία τεκμηρίωσης Με χρήση του εργαλείου Javadoc, μπορούμε να δημιουργήσουμε αρχείο τεκμηρίωσης σε HTML, το οποίο μας δίνει πληροφορίες για κλάσεις και τις δυνατότητές τους 65 66 Tεκμηρίωση βιβλιοθηκών JAVA 67 68
Περίγραμμα Αντικείμενα, Κατηγορίες (κλάσεις), Ιδιότητες και Μέθοδοι στον πραγματικό κόσμο Αντικείμενα και Κλάσεις JAVA Αντικειμενοστρέφεια και Αφαιρετικότητα Παραδείγματα Αντικειμενοστρεφούς Προγραμματισμού Μέθοδοι Αccessor/Getter, Mutator/Setter Σχολιασμός και τεκμηρίωση Aποσφαλμάτωση Aπαράβατοι Περιορισμοί (Invariants) Περίγραμμα Αντικείμενα, Κατηγορίες (κλάσεις), Ιδιότητες και Μέθοδοι στον πραγματικό κόσμο Αντικείμενα και Κλάσεις JAVA Αντικειμενοστρέφεια και Αφαιρετικότητα Παραδείγματα Αντικειμενοστρεφούς Προγραμματισμού Σχολιασμός και τεκμηρίωση Aποσφαλμάτωση Aπαράβατοι Περιορισμοί (Invariants) 69 70 import comp102x.io; * A class of car objects that can move forward, backward * and turn * @author mdd * public class Car { public static void main(string[] args) { private int odometer = 0; private String owner = "NoName"; Car vehicle = new Car("Μάριος"); public Car() { vehicle.movecar(-200); ΤΟ ΟΔΟΜΕΤΡΟ ΔΕΝ ΜΠΟΡΕΙ IO.outputln(vehicle.getOdometer()); ΝΑ ΛΑΒΕΙ public Car(String name){ owner = name; ΑΡΝΗΤΙΚΗ ΤΙΜΗ public void movecar(int dist) { odometer = odometer + dist; IO.outputln(owner +"'s car has moved " + dist + " units."); public void turncar(double angle) { IO.outputln(owner + "'s car has turned " + angle + " units."); public int getodometer() { return odometer; ΒΡΕΙΤΕ ΤΟ ΛΑΘΟΣ Αναλλοίωτοι Περιορισμοί (Class Invariants) In computer programming, specifically object-oriented programming, a class invariant (or type invariant) is an invariant used to constrain objects of a class. Methods of the class should preserve the invariant. The class invariant constrains the state stored in the object. Class invariants are established during construction and constantly maintained between calls to public methods. Temporary breaking of class invariance between private method calls is possible, although not encouraged. An object invariant, or representation invariant, is a computer programming construct consisting of a set of invariant properties that remain uncompromised regardless of the state of the object. This ensures that the object will always meet predefined conditions, and that methods may, therefore, always reference the object without the risk of making inaccurate presumptions. Defining class invariants can help programmers and testers to catch more bugs during software testing. 71 72
Απαράβατοι Περιορισμοί Πώς διασφαλίζουμε την τήρηση των απαράβατων περιορισμών στο παράδειγμα; public void movecar(int dist) { odometer = odometer + Math.abs(dist); System.out.println(owner +"'s car has moved " + dist + " units."); Άσκηση για το σπίτι 73 74 Βρείτε τα αντικείμενα και τις κλάσεις Τέλος Διάλεξης 5 75 76