2 Τα αντικείμενα της Java 33

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "2 Τα αντικείμενα της Java 33"

Transcript

1 Περιεχόμενα Πρόλογος 15 Ευχαριστίες 19 1 Εισαγωγή Αποσύνθεση και αφαίρεση Αφαίρεση Αφαίρεση μέσω παραμετροποίησης Αφαίρεση μέσω προδιαγραφής Είδη αφαιρέσεων Το υπόλοιπο του βιβλίου 31 Ασκήσεις 32 2 Τα αντικείμενα της Java Δομή τού προγράμματος Πακέτα Αντικείμενα και μεταβλητές Μεταλλαξιμότητα Η σημασιολογία της κλήσης μεθόδων Έλεγχος τύπων Ιεραρχία τύπων Μετατροπές και υπερφόρτωση Διεκπεραίωση Τύποι 47

2 8 Περιεχόμενα Θεμελιώδεις τύποι αντικειμένων Διανύσματα Είσοδος/έξοδος ρευμάτων Εφαρμογές τής Java 50 Ασκήσεις 51 3 Διαδικασιακή αφαίρεση Τα οφέλη της αφαίρεσης Προδιαγραφές Προδιαγραφές διαδικασιακών αφαιρέσεων Υλοποίηση διαδικασιών Σχεδίαση διαδικασιακών αφαιρέσεων Περίληψη 70 Ασκήσεις 71 4 Εξαιρέσεις Προδιαγραφές Ο μηχανισμός χειρισμού εξαιρέσεων της Java Τύποι εξαιρέσεων Ορισμός τύπων εξαιρέσεων Παραγωγή εξαιρέσεων Χειρισμός εξαιρέσεων Χειρισμός ανέλεγκτων εξαιρέσεων Προγραμματισμός με εξαιρέσεις Ανάκλαση και συγκάλυψη Θέματα σχεδιασμού Πότε χρησιμοποιούνται εξαιρέσεις Ελεγμένες και ανέλεγκτες εξαιρέσεις Αμυντικός προγραμματισμός Περίληψη 88 Ασκήσεις 89

3 Περιεχόμενα 9 5 Αφαίρεση δεδομένων Προδιαγραφές αφαίρεσης δεδομένων Προδιαγραφή τού τύπου IntSet Η αφαίρεση πολυωνύμου Poly Χρήση αφαιρέσεων δεδομένων Υλοποίηση αφαιρέσεων δεδομένων Υλοποίηση αφαιρέσεων δεδομένων στην Java Υλοποίηση του τύπου IntSet Υλοποίηση του τύπου Poly Εγγραφές Πρόσθετες μέθοδοι Βοηθήματα για την κατανόηση των υλοποιήσεων Η αφαιρετική συνάρτηση Το αμετάβλητο αναπαράστασης Υλοποίηση αφαιρετικής συνάρτησης και αμετάβλητου αναπαράστασης Συζήτηση Ιδιότητες υλοποιήσεων αφαίρεσης δεδομένων Ωφέλιμες παρενέργειες Έκθεση της αναπαράστασης Αιτιολόγηση των αφαιρέσεων δεδομένων Διατήρηση του αμετάβλητου της αναπαράστασης Αιτιολόγηση λειτουργιών Αιτιολόγηση σε αφηρημένο επίπεδο Θέματα σχεδιασμού Μεταλλαξιμότητα Κατηγορίες λειτουργιών Επάρκεια Τοπικότητα και τροποποιησιμότητα Περίληψη 131 Ασκήσεις Αφαίρεση επανάληψης Η επανάληψη στην Java Καθορισμός επαναληπτών 139

4 10 Περιεχόμενα 6.3 Χρήση επαναληπτών Υλοποίηση επαναληπτών Αμετάβλητα αναπαράστασης και αφαιρετικές συναρτήσεις γεννητριών Διατεταγμένες λίστες Θέματα σχεδιασμού Περίληψη 152 Ασκήσεις Ιεραρχία τύπων Ανάθεση και διεκπεραίωση Ανάθεση Διεκπεραίωση Ορισμός ιεραρχίας τύπων Ορισμός ιεραρχιών στην Java Ένα απλό παράδειγμα Τύποι εξαιρέσεων Αφηρημένες κλάσεις Διασυνδέσεις Πολλαπλές υλοποιήσεις Λίστες Πολυώνυμα Η σημασία των δευτερευόντων τύπων Ο κανόνας των μεθόδων Ο κανόνας των ιδιοτήτων Ισότητα Συζήτηση για την ιεραρχία τύπων Περίληψη 188 Ασκήσεις Πολυμορφικές αφαιρέσεις Πολυμορφικές αφαιρέσεις δεδομένων Χρήση πολυμορφικών αφαιρέσεων δεδομένων 196

5 Περιεχόμενα Η ισότητα και πάλι Πρόσθετες μέθοδοι Μεγαλύτερη ευελιξία Πολυμορφικές διαδικασίες Περίληψη 205 Ασκήσεις Προδιαγραφές Προδιαγραφές και προδιαγράφοντα σύνολα Μερικά κριτήρια προδιαγραφών Περιοριστικότητα Γενικότητα Σαφήνεια Γιατί προδιαγραφές; Περίληψη 219 Ασκήσεις Έλεγχος και αποσφαλμάτωση Έλεγχος Έλεγχος μαύρου κουτιού Έλεγχος γυάλινου κουτιού Έλεγχος διαδικασιών Έλεγχος επαναληπτών Έλεγχος αφαιρέσεων δεδομένων Έλεγχος πολυμορφικών αφαιρέσεων Έλεγχος μιας ιεραρχίας τύπων Έλεγχος μονάδων και ολοκλήρωσης Εργαλεία ελέγχου Αποσφαλμάτωση Αμυντικός προγραμματισμός Περίληψη 249 Ασκήσεις 250

6 12 Περιεχόμενα 11 Ανάλυση απαιτήσεων Ο κύκλος ζωής του λογισμικού Γενικά για την ανάλυση απαιτήσεων Πρόγραμμα παρακολούθησης μετοχών Περίληψη 265 Ασκήσεις Προδιαγραφές απαιτήσεων Μοντέλα δεδομένων Υποσύνολα Σχέσεις Πληροφορίες σε μορφή κειμένου Προδιαγραφές απαιτήσεων Προδιαγραφή απαιτήσεων του προγράμματος παρακολούθησης μετοχών Το μοντέλο δεδομένων Προδιαγραφή του προγράμματος παρακολούθησης μετοχών Προδιαγραφή απαιτήσεων για μια μηχανή αναζήτησης Περίληψη 294 Ασκήσεις Σχεδιασμός Γενικά για τη διαδικασία σχεδιασμού Το σημειωματάριο του σχεδιασμού Η εισαγωγική ενότητα Οι ενότητες αφαιρέσεων Δομή αλληλεπιδραστικών προγραμμάτων Έναρξη του σχεδιασμού Εξέταση της μεθόδου Συνέχεια του σχεδιασμού Η αφαίρεση Query Η αφαίρεση WordTable 325

7 Περιεχόμενα Ολοκλήρωση Αλληλεπίδραση μεταξύ ΛΤ και ΔΧ Διαγράμματα εξαρτήσεων υπομονάδων και μοντέλα δεδομένων Ανασκόπηση και συζήτηση Επινόηση βοηθητικών αφαιρέσεων Καθορισμός των βοηθητικών αφαιρέσεων Συνέχεια του σχεδιασμού Το σημειωματάριο σχεδιασμού Αναλυτικός σχεδιασμός Περίληψη 336 Ασκήσεις Μεταξύ σχεδιασμού και υλοποίησης Αξιολόγηση του σχεδιασμού Ορθότητα και απόδοση Δομή Οργάνωση της διαδικασίας ανάπτυξης ενός προγράμματος Περίληψη 357 Ασκήσεις Μοτίβα σχεδιασμού Απόκρυψη της δημιουργίας αντικειμένων Έξυπνα κόλπα Κατηγορία "μύγας" Μοναδιακό μοτίβο Το καταστασιακό μοτίβο Το μοτίβο γέφυρας Οι διαδικασίες πρέπει να είναι και αντικείμενα Σύνθετα μοτίβα Διάσχιση του δένδρου 381

8 14 Περιεχόμενα 15.6 Η δύναμη της εμμεσότητας Δημοσίευση/συνδρομή Αφαίρεση ελέγχου Περίληψη 393 Ασκήσεις 393 Γλωσσάρι 395 Λεξικό όρων 415 Ευρετήριο 423

9 Αφαίρεση δεδομένων 5 Σε αυτό το κεφάλαιο εξετάζουμε τον πιο σημαντικό μηχανισμό αφαίρεσης: την αφαίρεση δεδομένων (data abstraction). Η αφαίρεση δεδομένων μάς επιτρέπει να "αποστασιοποιηθούμε" από τις λεπτομέρειες του τρόπου υλοποίησης των αντικειμένων δεδομένων και να εστιάσουμε στον τρόπο που συμπεριφέρονται. Αυτή η εστίαση στη συμπεριφορά των α- ντικειμένων αποτελεί τη βάση του αντικειμενοστρεφούς προγραμματισμού. Η αφαίρεση δεδομένων μάς επιτρέπει να επεκτείνουμε τη γλώσσα προγραμματισμού που χρησιμοποιούμε (π.χ. Java), με νέους τύπους δεδομένων. Οι νέοι τύποι δεδομένων που θα χρειαστούν εξαρτώνται από το πεδίο εφαρμογής του προγράμματος. Για παράδειγμα, κατά την υλοποίηση ενός μεταγλωττιστή (compiler) ή ενός διερμηνευτή (interpreter) είναι χρήσιμες οι στοίβες και οι πίνακες συμβόλων, ενώ οι τραπεζικοί λογαριασμοί είναι μια φυσική αφαίρεση σε ένα τραπεζικό σύστημα. Τα πολυώνυμα προκύπτουν σε ένα σύστημα χειρισμού συμβόλων, και οι μήτρες είναι χρήσιμες στον ορισμό ενός πακέτου αριθμητικών συναρτήσεων. Σε κάθε περίπτωση, η αφαίρεση δεδομένων αποτελείται από ένα σύνολο αντικειμένων για παράδειγμα, στοίβες ή πολυώνυμα και ένα σύνολο πράξεων ή λειτουργιών. Για παράδειγμα, οι πράξεις με μήτρες περιλαμβάνουν πρόσθεση, πολλαπλασιασμό, κ.ο.κ., ενώ η κατάθεση και η ανάληψη είναι λειτουργίες τραπεζικών λογαριασμών. Οι νέοι τύποι δεδομένων θα πρέπει να ενσωματώνουν αφαίρεση και μέσω παραμετροποίησης (abstraction by parameterization) και μέσω προδιαγραφής (abstraction by specification). Η αφαίρεση μέσω παραμετροποίησης μπορεί να επιτευχθεί με τον ίδιο τρόπο όπως και στις διαδικασίες με τη χρήση παραμέτρων όποτε είναι λογικό να το κάνουμε. Για να εφαρμόσουμε αφαίρεση μέσω προδιαγραφής, κάνουμε τις λειτουργίες τμήμα του τύπου. Για να καταλάβετε γιατί είναι απαραίτητες οι λειτουργίες, αναλογιστείτε τι θα συμβεί αν θεωρήσουμε ότι ένας τύπος είναι απλώς ένα σύνολο αντικειμένων. Έ- τσι, το μόνο που χρειάζεται για την υλοποίηση του τύπου είναι να επιλέξετε μια αναπαράσταση για την αποθήκευση των αντικειμένων όλα τα προγράμματα που χρησιμοποιούν τον τύπο μπορούν να υλοποιηθούν με βάση αυτή την αναπαράσταση. Αν όμως αλλάξει η

10 92 Κεφάλαιο 5 Αφαίρεση δεδομένων αναπαράσταση, ή ακόμη και η υλοποίησή της, όλα τα προγράμματα που χρησιμοποιούν τον τύπο θα πρέπει να αλλάξουν δεν υπάρχει τρόπος να περιοριστούν οι επιπτώσεις της αλλαγής. Από την άλλη, υποθέστε ότι έχουμε συμπεριλάβει και λειτουργίες στον τύπο, έτσι ώστε αφαίρεση δεδομένων = {αντικείμενα, λειτουργίες} και απαιτούμε από τους χρήστες να καλούν τις λειτουργίες αντί να προσπελάζουν απευθείας την αναπαράσταση. Κατόπιν, για να υλοποιήσουμε τον τύπο υλοποιούμε τις λειτουργίες με βάση την επιλεγμένη αναπαράσταση, και αν αλλάξουμε την αναπαράσταση θα πρέπει να αλλάξουμε την υλοποίηση των λειτουργιών. Ωστόσο, δε χρειάζεται να αλλάξουμε την υλοποίηση οποιουδήποτε προγράμματος χρησιμοποιεί τον τύπο, επειδή δε χρησιμοποιεί την αναπαράσταση. Τώρα έχουμε πραγματοποιήσει αφαίρεση από την αναπαράσταση των λεπτομερειών ο κώδικας που χρησιμοποιεί τον τύπο βασίζεται μόνο στην καθορισμένη συμπεριφορά του τύπου με τις λειτουργίες του. Επομένως, έχουμε επιτύχει αφαίρεση μέσω προδιαγραφής. Αν παρέχονται αρκετές λειτουργίες, η έλλειψη πρόσβασης στην αναπαράσταση δε θα προκαλέσει καμία δυσκολία τους χρήστες οτιδήποτε θέλουν να κάνουν με τα αντικείμενα μπορεί να γίνει, και γίνεται αποδοτικά, με κλήσεις των λειτουργιών. Γενικά, θα υ- πάρχουν λειτουργίες για τη δημιουργία και την τροποποίηση των αντικειμένων και τη λήψη πληροφοριών σχετικά με τις τιμές τους. Φυσικά, οι χρήστες μπορούν να βελτιώσουν το σύνολο των λειτουργιών ορίζοντας αυτόνομες διαδικασίες, αλλά αυτές οι διαδικασίες δε θα έχουν πρόσβαση στην αναπαράσταση. Η αφαίρεση δεδομένων μάς επιτρέπει να αναβάλουμε αποφάσεις σχετικά με τις δομές δεδομένων μέχρι να γίνουν πλήρως κατανοητές οι χρήσεις των δεδομένων. Η επιλογή των κατάλληλων δομών δεδομένων είναι κρίσιμη για τη δημιουργία ενός αποδοτικού προγράμματος. Χωρίς την αφαίρεση δεδομένων, οι δομές δεδομένων θα πρέπει να οριστούν πολύ νωρίς πρέπει να καθοριστούν για να μπορούν να σχεδιαστούν οι υπομονάδες που θα τις χρησιμοποιήσουν. Σε αυτό το σημείο όμως, οι χρήσεις των δεδομένων συνήθως δεν έχουν κατανοηθεί πλήρως. Επομένως, η επιλεγμένη δομή μπορεί να στερείται τις απαραίτητες πληροφορίες ή να είναι οργανωμένη με μη αποδοτικό τρόπο. Χρησιμοποιούμε την αφαίρεση δεδομένων για να αποφύγουμε τον άμεσο ορισμό της δομής: εισάγουμε τον αφηρημένο τύπο με τα αντικείμενα και τις λειτουργίες του. Οι υλοποιήσεις των υπομονάδων που θα τον χρησιμοποιήσουν μπορούν να σχεδιαστούν βάσει αυτού του αφηρημένου τύπου. Αποφάσεις που αφορούν τον τρόπο υλοποίησης του τύπου παίρνονται αργότερα, όταν θα έχουν κατανοηθεί όλες οι χρήσεις του. Η αφαίρεση δεδομένων είναι επίσης πολύτιμη στην τροποποίηση και τη συντήρηση του προγράμματος. Σε αυτή τη φάση, οι δομές δεδομένων είναι εξαιρετικά πιθανό να αλλάξουν, είτε για τη βελτίωση της απόδοσης είτε για να συμπεριληφθούν νέες αλλαγές. Η αφαίρεση δεδομένων περιορίζει τις αλλαγές μόνο στην υλοποίηση του τύπου καμία υπομονάδα που τον χρησιμοποιεί δε θα χρειαστεί να αλλάξει. Σε αυτό το κεφάλαιο, περιγράφουμε πώς καθορίζεται και υλοποιείται η αφαίρεση δεδομένων στην Java. Εξετάζουμε επίσης τρόπους για την εκτίμηση της ορθότητας των προγραμμάτων που χρησιμοποιούν και υλοποιούν τύπους, και περιγράφουμε ορισμένα ζητήματα που προκύπτουν κατά το σχεδιασμό νέων τύπων.

11 5.1 Προδιαγραφές αφαίρεσης δεδομένων Προδιαγραφές αφαίρεσης δεδομένων Όπως και στην περίπτωση των διαδικασιών, η έννοια ενός τύπου δεν πρέπει να δίνεται από τις υλοποιήσεις του. Αντί γι' αυτό, η συμπεριφορά του πρέπει να ορίζεται από μια προδιαγραφή. Επειδή τα αντικείμενα του τύπου χρησιμοποιούνται μόνο με κλήσεις των λειτουργιών του, το μεγαλύτερο τμήμα των προδιαγραφών αποτελείται από εξηγήσεις για το τι κάνουν οι λειτουργίες. Στην Java, οι νέοι τύποι ορίζονται με κλάσεις ή διασυνδέσεις. Για την ώρα, θα εξετάσουμε μόνο κλάσεις τις διασυνδέσεις θα τις δούμε στο Κεφάλαιο 7. Κάθε κλάση ορίζει έναν τύπο δηλώνοντας το όνομα του τύπου, ένα σύνολο συναρτήσεων δόμησης (constructors), και ένα σύνολο μεθόδων παρουσίας (instance methods) ή απλώς μεθόδων. Οι συναρτήσεις δόμησης χρησιμοποιούνται για την ανάθεση αρχικής τιμής σε νέα αντικείμενα, ή αλλιώς παρουσίες (instances), του τύπου. Από τη στιγμή που έχει δημιουργηθεί ένα αντικείμενο (και έχει πάρει αρχική τιμή από μια συνάρτηση δόμησης), οι χρήστες μπορούν να το προσπελάσουν καλώντας τις μεθόδους του. Η μορφή μιας προδιαγραφής αφαίρεσης δεδομένων φαίνεται στην Εικόνα 5.1. Η κεφαλίδα class dname δηλώνει ότι ορίζεται ένας νέος τύπος με το όνομα dname. Η κεφαλίδα περιέχει μια δήλωση για την ορατότητα (visibility) της κλάσης σχεδόν όλες οι κλάσεις έχουν δημόσια ορατότητα ώστε να μπορούν να χρησιμοποιηθούν από κώδικα που βρίσκεται έξω από το πακέτο που τις περιέχει. Η προδιαγραφή αποτελείται από τρία μέρη. Το γενικό μέρος (overview) δίνει μια σύντομη περιγραφή της αφαίρεσης δεδομένων, όπως και μια άποψη των αφηρημένων δεδομένων με βάση "γνωστές" έννοιες. Συνήθως παρουσιάζει ένα μοντέλο των αντικειμένων δηλαδή, περιγράφει τα αντικείμενα συναρτήσει άλλων αντικειμένων ώστε να είναι δυνατή η κατανόηση της περιγραφής από τον αναγνώστη. Για παράδειγμα, οι στοίβες μπορούν να οριστούν με βάση μαθηματικές ακολουθίες. Το γενικό μέρος δηλώνει επίσης αν τα αντικείμενα του τύπου είναι μεταλλάξιμα (mutable), οπότε μπορεί να αλλάξει η κατάστασή τους με την πάροδο του χρόνου, ή μη μεταλλάξιμα (immutable). Το τμήμα των συναρτήσεων δόμησης της προδιαγραφής ορίζει τις συναρτήσεις δόμησης που δίνουν αρχική τιμή στα νέα αντικείμενα, ενώ το τμήμα των μεθόδων ορίζει τις μεθόδους που επιτρέπουν την προσπέλαση των αντικειμένων μετά τη δημιουργία τους. Εικόνα 5.1 Η μορφή μιας προδιαγραφής αφαίρεσης δεδομένων visibility class dname { //ΓΕΝΙΚΑ: Εδώ τοποθετείται μια σύντομη περιγραφή της συμπεριφοράς // των αντικειμένων του τύπου } // συναρτήσεις δόμησης // εδώ τοποθετούνται οι προδιαγραφές των συναρτήσεων δόμησης // μέθοδοι // εδώ τοποθετούνται οι προδιαγραφές των μεθόδων

12 94 Κεφάλαιο 5 Αφαίρεση δεδομένων Όλες οι συναρτήσεις δόμησης και οι μέθοδοι που εμφανίζονται στην προδιαγραφή θα είναι δημόσιες. Οι συναρτήσεις δόμησης και οι μέθοδοι είναι διαδικασίες, και καθορίζονται με τη σημειογραφία προδιαγραφών που παρουσιάσαμε στα Κεφάλαια 3 και 4, με τις εξής διαφορές: Και οι μέθοδοι και οι συναρτήσεις δόμησης ανήκουν σε αντικείμενα, και όχι σε κλάσεις. Επομένως, η δεσμευμένη λέξη static δε θα εμφανιστεί στις κεφαλίδες των μεθόδων (επειδή αυτή η δεσμευμένη λέξη σημαίνει ότι η μέθοδος ανήκει στην κλάση και όχι στο αντικείμενο της κλάσης). Το αντικείμενο στο οποίο ανήκει μια μέθοδος ή συνάρτηση δόμησης είναι διαθέσιμο ως υπονοούμενο όρισμα, και μπορεί να γίνει αναφορά σε αυτό στην προδιαγραφή της μεθόδου ή της συνάρτησης δόμησης με τη δεσμευμένη λέξη this. Όπως και στην περίπτωση των προδιαγραφών διαδικασιών, οι προδιαγραφές αφαιρέσεων δεδομένων έχουν τη μορφή σχολίων στον κώδικα. Όταν δημιουργείται για πρώτη φορά μια αφαίρεση δεδομένων, το μόνο που υπάρχει είναι η προδιαγραφή απουσιάζει σχεδόν ολόκληρος ο κώδικας της κλάσης, όπως τα σώματα των μεθόδων. Αυτός ο κώδικας προστίθεται αργότερα, όταν υλοποιηθεί η αφαίρεση δεδομένων Προδιαγραφή τού τύπου IntSet Η Εικόνα 5.2 δίνει μια προδιαγραφή της αφαίρεσης δεδομένων IntSet (σύνολο ακεραίων). Τα αντικείμενα IntSet είναι μη φραγμένα σύνολα ακεραίων, με λειτουργίες για τη δημιουργία ενός νέου, κενού αντικειμένου τύπου IntSet, τον έλεγχο αν ένας δεδομένος ακέραιος είναι στοιχείο του τύπου IntSet, και την προσθήκη και τη διαγραφή στοιχείων. Το γενικό τμήμα δείχνει ότι τα αντικείμενα IntSet είναι μεταλλάξιμα. Δείχνει επίσης ότι θα μοντελοποιήσουμε τον τύπο IntSet με βάση τα μαθηματικά σύνολα. Στο υπόλοιπο τμήμα της προδιαγραφής, καθορίζουμε όλες τις λειτουργίες που χρησιμοποιεί αυτό το μοντέλο. Στην Εικόνα 5.2 χρησιμοποιείται σημειογραφία συνόλων στις προδιαγραφές των μεθόδων. Συγκεκριμένα, χρησιμοποιείται το + για την ένωση και το για τη διαφορά συνόλων. Η Εικόνα 5.3 συνοψίζει τη σημειογραφία συνόλων που χρησιμοποιείται στο βιβλίο. Ο τύπος IntSet έχει μόνο μία συνάρτηση δόμησης, η οποία δημιουργεί ένα νέο κενό σύνολο παρατηρήστε ότι η προδιαγραφή αναφέρεται σε αυτό το νέο αντικείμενο συνόλου με τον τελεστή this. Επειδή η συνάρτηση δόμησης τροποποιεί πάντοτε το αντικείμενο this (για να του δώσει αρχική τιμή), δεν μπαίνουμε στον κόπο να δείξουμε αυτή την τροποποίηση στον όρο "τροποποιεί". Για την ακρίβεια, αυτή η τροποποίηση είναι αόρατη στους χρήστες: δεν έχουν πρόσβαση στο αντικείμενο της συνάρτησης δόμησης μέχρι να επιστρέψει αυτή η συνάρτηση και, επομένως, δεν μπορούν να παρατηρήσουν την αλλαγή κατάστασης. Από τη στιγμή που το αντικείμενο IntSet υπάρχει, μπορούν να προστεθούν σε αυτό στοιχεία με την κλήση τής μεθόδου insert του αντικειμένου, και να διαγραφούν στοιχεία με την κλήση τής μεθόδου remove και πάλι, οι προδιαγραφές αναφέρονται στο α- ντικείμενο με τον τελεστή this. Αυτές οι δύο μέθοδοι είναι μεταλλάκτες (mutators) αφού

13 5.1 Προδιαγραφές αφαίρεσης δεδομένων 95 Εικόνα 5.2 Προδιαγραφή της αφαίρεσης δεδομένων IntSet public class IntSet { //ΓΕΝΙΚΑ: Τα αντικείμενα τύπου IntSet είναι μεταλλάξιμα, μη δεσμευμένα σύνολα ακεραίων. // Ένα τυπικό αντικείμενο IntSet είναι {x1,..., x n }. // συναρτήσεις δόμησης public IntSet ( ) //ΑΠΟΤΕΛΕΣΜΑ: Δίνει αρχική τιμή στο αντικείμενο this ώστε να είναι κενό. // μέθοδοι public void insert (int x) //ΤΡΟΠΟΠΟΙΕΙ: το αντικείμενο this //ΑΠΟΤΕΛΕΣΜΑ: Προσθέτει το x στα στοιχεία του this, // δηλαδή, this_post = this + { x }. public void remove (int x) //ΤΡΟΠΟΠΟΙΕΙ: το αντικείμενο this //ΑΠΟΤΕΛΕΣΜΑ: Διαγράφει το x από το αντικείμενο this, // δηλαδή, this_post = this - { x } public boolean isin (int x) //ΑΠΟΤΕΛΕΣΜΑ: Αν το x περιέχεται στο αντικείμενο this // επιστρέφει true αλλιώς επιστρέφει false. public int size ( ) //ΑΠΟΤΕΛΕΣΜΑ: Επιστρέφει την πληθικότητα του αντικειμένου this. } public int choose ( ) throws EmptyException //ΑΠΟΤΕΛΕΣΜΑ: Αν το αντικείμενο this είναι κενό, // παράγει την εξαίρεση EmptyException, αλλιώς // επιστρέφει ένα τυχαίο στοιχείο του αντικειμένου this. τροποποιούν την κατάσταση του αντικειμένου τους οι προδιαγραφές κάνουν σαφές ότι πρόκειται για μεταλλάκτες επειδή περιέχουν έναν όρο "τροποποιεί" που δηλώνει ότι τροποποιείται το αντικείμενο this. Παρατηρήστε ότι οι προδιαγραφές των insert και remove χρησιμοποιούν το συμβολισμό this_post για να δείξουν την τιμή του αντικειμένου this μετά την επιστροφή της λειτουργίας. Ένα όνομα ορίσματος εισόδου χωρίς το προσδιοριστικό post (μετά) σημαίνει πάντοτε την τιμή κατά την κλήση της λειτουργίας. Οι υπόλοιπες μέθοδοι είναι παρατηρητές (observers): επιστρέφουν πληροφορίες για την κατάσταση του αντικειμένου τους χωρίς να αλλάζουν την κατάσταση. Οι παρατηρητές δε διαθέτουν όρο "τροποποιεί". (Για την ακρίβεια, ένας παρατηρητής δε διαθέτει όρο "τροποποιεί" που να δηλώνει ότι τροποποιείται το αντικείμενο this, ή κάποιο όρισμα αντικειμένου του τύπου του συνήθως όμως οι παρατηρητές δεν τροποποιούν τίποτε.)

14 96 Κεφάλαιο 5 Αφαίρεση δεδομένων Εικόνα 5.3 Σημειογραφία συνόλων Ένα σύνολο δηλώνεται ως {x1,., xn}. Τα xi είναι τα στοιχεία του συνόλου. Σε ένα σύνολο δεν υπάρχουν διπλότυπα στοιχεία. ένωση συνόλων: t = s1 + s2 είναι το σύνολο που περιέχει όλα τα στοιχεία του συνόλου s1 και όλα τα στοιχεία του συνόλου s2. Αν το s1 και το s2 περιέχουν ένα κοινό στοιχείο, στο σύνολο t θα υπάρχει μόνο μία εμφάνιση αυτού του στοιχείου. διαφορά συνόλων: t = s1 s2 είναι το σύνολο που περιέχει όλα τα στοιχεία του s1 τα ο- ποία δεν είναι στοιχεία του s2. τομή συνόλων: t = s1 & s2 είναι το σύνολο που περιέχει όλα τα στοιχεία τα οποία είναι μέλη και του s1 και του s2. πληθικότητα: το σύμβολο s αντιπροσωπεύει το μέγεθος του συνόλου s. μέλος συνόλου: η δήλωση ότι το x ανήκει στο s είναι αληθής όταν το x είναι στοιχείο του s. σχηματισμός συνόλου: t = {x p(x)} είναι το σύνολο όλων των στοιχείων x για τα οποία η p(x) είναι αληθής. Η μέθοδος choose επιστρέφει ένα τυχαίο στοιχείο του συνόλου IntSet έτσι, είναι υποπροσδιορισμένη (underdetermined). Αν το σύνολο είναι κενό, παράγει μια εξαίρεση. Αυτή η εξαίρεση είναι ανέλεγκτη (unchecked) αφού οι χρήστες μπορούν να καλέσουν τη μέθοδο size πριν καλέσουν την choose, για να εξασφαλίσουν εύκολα και γρήγορα ότι το σύνολο δεν είναι κενό. Παρατηρήστε ότι η μέθοδος insert δεν παράγει κάποια εξαίρεση στην περίπτωση που ο ακέραιος υπάρχει ήδη στο σύνολο και, αντίστοιχα, η μέθοδος remove δεν παράγει εξαίρεση αν ο ακέραιος δεν περιέχεται στο σύνολο. Αυτές οι αποφάσεις βασίζονται στις παραδοχές που έχουν γίνει για τον τρόπο που θα χρησιμοποιηθούν τα σύνολα. Αναμένουμε ότι οι χρήστες θα προσθέτουν και θα διαγράφουν στοιχεία τού συνόλου χωρίς να ενδιαφέρονται αν αυτά περιέχονται ήδη στο σύνολο. Έτσι, οι μέθοδοι δεν παράγουν εξαιρέσεις. Αν αναμέναμε ένα διαφορετικό τρόπο χρήσης, θα μπορούσαμε να αλλάξουμε τις προδιαγραφές και τις κεφαλίδες αυτών των μεθόδων (ώστε να παράγουν κάποια εξαίρεση), ή θα μπορούσαμε να έχουμε επιπλέον μεθόδους που να παράγουν εξαιρέσεις (π.χ, insertnondup και removeifin), ώστε οι χρήστες να μπορούν να επιλέξουν τη μέθοδο που ταιριάζει καλύτερα στις ανάγκες τους. Στην προδιαγραφή τού συνόλου IntSet, βασιζόμαστε στο ότι ο αναγνώστης γνωρίζει τι είναι τα μαθηματικά σύνολα διαφορετικά, η προδιαγραφή δεν είναι κατανοητή. Γενικά, αυτή η εξάρτηση από ανεπίσημες περιγραφές είναι και η αδυναμία των ανεπίσημων προδιαγραφών. Ίσως είναι λογικό να αναμένουμε ότι ο αναγνώστης γνωρίζει και κατανοεί μια σειρά μαθηματικών εννοιών όπως σύνολα, ακολουθίες, και ακέραιοι αριθμοί. Ωστόσο, δεν μπορούν να περιγραφούν κατάλληλα όλοι οι τύποι με τη βοήθεια παρόμοιων εννοιών. Αν οι έννοιες είναι ακατάλληλες, πρέπει να περιγράψουμε τον τύπο όσο το δυνατόν καλύ-

15 5.1 Προδιαγραφές αφαίρεσης δεδομένων 97 τερα, χρησιμοποιώντας ακόμη και εικόνες φυσικά, πάντοτε υπάρχει ο κίνδυνος ο αναγνώστης να μην καταλάβει την περιγραφή ή να την ερμηνεύσει με διαφορετικό τρόπο. Στο Κεφάλαιο 9 θα δούμε τεχνικές για τη γραφή κατανοητών προδιαγραφών. Σημειώστε ότι η προδιαγραφή παίρνει τη μορφή μιας προκαταρκτικής εκδοχής της κλάσης. Αυτός ο κώδικας θα μπορούσε να μεταγλωττιστεί αν οι μέθοδοι και οι συναρτήσεις δόμησης είχαν κενά σώματα (εκτός από τις μεθόδους που επιστρέφουν αποτελέσματα, οι οποίες θα χρειάζονταν την εντολή return με τον κατάλληλο τύπο). Αυτό θα σας επιτρέψει να μεταγλωττίσετε κώδικα που χρησιμοποιεί την αφαίρεση, οπότε θα μπορέσετε να απαλλαγείτε από τα σφάλματα που θα εντοπίσει ο μεταγλωττιστής, όπως τα σφάλματα τύπων. Ωστόσο, ίσως να μην είστε σε θέση να εκτελέσετε τον κώδικα που χρησιμοποιεί την αφαίρεση μέχρι να υλοποιηθεί ο νέος τύπος Η αφαίρεση πολυωνύμου Poly Η Εικόνα 5.4 δίνει ένα δεύτερο παράδειγμα μιας προδιαγραφής αφαίρεσης δεδομένων. Τα αντικείμενα Poly είναι πολυώνυμα με ακέραιους συντελεστές. Σε αντίθεση με τα αντικείμενα IntSet, τα αντικείμενα Poly είναι μη μεταλλάξιμα (immutable): από τη στιγμή που θα δημιουργηθεί ένα αντικείμενο Poly (και θα πάρει αρχική τιμή με μια συνάρτηση δόμησης), δεν μπορεί να τροποποιηθεί. Υπάρχουν λειτουργίες για τη δημιουργία ενός α- ντικειμένου Poly με έναν όρο, και για την πρόσθεση, την αφαίρεση, και τον πολλαπλασιασμό αντικειμένων Poly. Ο τύπος Poly έχει δύο συναρτήσεις δόμησης μία για τη δημιουργία του μηδενικού πολυωνύμου και μία για τη δημιουργία ενός τυχαίου μονωνύμου. Γενικά, ένας τύπος μπορεί να έχει πολλές συναρτήσεις δόμησης. Όλες οι συναρτήσεις δόμησης έχουν το ίδιο ό- νομα το όνομα του τύπου και, επομένως, αν υπάρχουν περισσότερες από μία συναρτήσεις δόμησης, το όνομα αυτό υπερφορτώνεται (overload). Η Java επιτρέπει επίσης και την υπερφόρτωση των ονομάτων μεθόδων, και απαιτεί οι υπερφορτωμένοι ορισμοί να διαφέρουν μεταξύ τους στο πλήθος ή τον τύπο των ορισμάτων τους διαφορετικά, θα συμβεί σφάλμα χρόνου μεταγλώττισης. Οι δύο ορισμοί τής συνάρτησης δόμησης του τύπου Poly είναι έγκυροι, αφού η μια δεν έχει ορίσματα και η άλλη έχει δύο ορίσματα. Ο τύπος Poly δεν έχει μεθόδους μετάλλαξης (mutator methods): καμία μέθοδος δε διαθέτει όρο "τροποποιεί". Αυτό φυσικά είναι που περιμένουμε να δούμε για μια μη μεταλλάξιμη αφαίρεση δεδομένων. Επιπλέον, οι προδιαγραφές των μεθόδων δε χρησιμοποιούν το συμβολισμό post που χρησιμοποιήθηκε στην προδιαγραφή του τύπου IntSet. Ο συμβολισμός αυτός δεν είναι απαραίτητος για μη μεταλλάξιμες αφαιρέσεις: αφού η κατάσταση ενός αντικειμένου δεν αλλάζει, οι καταστάσεις του αντικειμένου πριν και μετά είναι ίδιες. Στον ορισμό του τύπου Poly, πρέπει να αποφασίσουμε αν η εξαίρεση NegativeExponentException θα είναι ελεγμένη ή ανέλεγκτη. Επειδή φαίνεται πιθανό οι χρήστες να αποφύγουν κλήσεις με αρνητικούς εκθέτες, είναι σωστό να κάνουμε την εξαίρεση ανέλεγκτη.

16 98 Κεφάλαιο 5 Αφαίρεση δεδομένων Εικόνα 5.4 Προδιαγραφή της αφαίρεσης δεδομένων Poly public class Poly { //ΓΕΝΙΚΑ: Τα αντικείμενα Poly είναι μη μεταλλάξιμα πολυώνυμα με ακέραιους //συντελεστές. // Ένα τυπικό πολυώνυμο είναι το c0 + c1x +... } // συναρτήσεις δόμησης public Poly ( ) //ΑΠΟΤΕΛΕΣΜΑ: Δίνει ως αρχική τιμή στο this το μηδενικό πολυώνυμο. public Poly (int c, int n) throws NegativeExponentException //ΑΠΟΤΕΛΕΣΜΑ: Αν n < 0 παράγει την εξαίρεση NegativeExponentException // αλλιώς δίνει ως αρχική τιμή στο αντικείμενο this το αντικείμενο Poly cx n. // μέθοδοι public int degree ( ) //ΑΠΟΤΕΛΕΣΜΑ: Επιστρέφει το βαθμό του αντικειμένου this, δηλαδή, //το μεγαλύτερο εκθέτη με συντελεστή διάφορο του μηδενός Επιστρέφει 0 αν το this // είναιτο μηδενικό Poly. public int coeff (int d) //ΑΠΟΤΕΛΕΣΜΑ: Επιστρέφει το συντελεστή του όρου του αντικειμένου this // του οποίου ο εκθέτης είναι d. public Poly add (Poly q) throws NullPointerException //ΑΠΟΤΕΛΕΣΜΑ: Αν το q είναι null παράγει την εξαίρεση NullPointerException // αλλιώς επιστρέφει το Poly this + q. public Poly mul (Poly q) throws NullPointerException //ΑΠΟΤΕΛΕΣΜΑ: Αν q είναι null παράγει την εξαίρεση NullPointerException // αλλιώς επιστρέφει το Poly this * q. public Poly sub (Poly q) throws NullPointerException //ΑΠΟΤΕΛΕΣΜΑ: Αν q είναι null παράγει την εξαίρεση NullPointerException // αλλιώς επιστρέφει το Poly this - q. public Poly minus ( ) //ΑΠΟΤΕΛΕΣΜΑ: // Επιστρέφει το Poly - this.

17 5.2 Χρήση αφαιρέσεων δεδομένων Χρήση αφαιρέσεων δεδομένων Η Εικόνα 5.5 δίνει παραδείγματα διαδικασιών που χρησιμοποιούν αφαιρέσεις δεδομένων. (Οι κλάσεις των διαδικασιών δε φαίνονται στην εικόνα.) Η μέθοδος diff επιστρέφει ένα νέο αντικείμενο πολυωνύμου Poly, αποτέλεσμα παραγώγισης του ορίσματός του που είναι τύπου Poly. Η ρουτίνα getelements επιστρέφει ένα αντικείμενο IntSet που περιέχει τους ακεραίους του πίνακα a του ορίσματος στο σύνολο που επιστρέφεται δεν υ- πάρχουν διπλότυπα στοιχεία (αφού τα σύνολα δεν περιέχουν διπλότυπα) ακόμη και αν υπάρχουν διπλότυπα μεταξύ των στοιχείων του πίνακα a. Αυτές οι ρουτίνες έχουν γραφεί με βάση τις προδιαγραφές των χρησιμοποιούμενων αφαιρέσεων, και μπορούν να χρησιμοποιήσουν μόνον ό,τι περιγράφεται στις προδιαγραφές. Δεν είναι σε θέση να προσπελάσουν τις λεπτομέρειες της υλοποίησης των αφηρημένων αντικειμένων καθώς, όπως θα δούμε, αυτή η πρόσβαση περιορίζεται στις υλοποιήσεις των συναρτήσεων δόμησης και των μεθόδων του αντικειμένου. Μπορούν να χρησιμοποιήσουν μεθόδους για να προσπελάσουν την κατάσταση του αντικειμένου και να την τροποποιήσουν (αν το αντικείμενο είναι μεταλλάξιμο) και μπορούν να χρησιμοποιήσουν συναρτήσεις δόμησης για την ανάθεση αρχικών τιμών σε νέα αντικείμενα. Εικόνα 5.5 Χρήση αφηρημένων τύπων δεδομένων public static Poly diff (Poly p) throws NullPointerException { //ΑΠΟΤΕΛΕΣΜΑ: Αν p είναι null παράγει την εξαίρεση NullPointerException // αλλιώς επιστρέφει το αντικείμενο Poly που λαμβάνεται με παραγώγιση του p. Poly q = new Poly ( ); for (int i = 1; i <= p.degree( ); i++) q = q.add(new Poly(p.coeff(i)*i, i - 1)); return q; } public static IntSet getelements (int[ ] a) throws NullPointerException { //ΑΠΟΤΕΛΕΣΜΑ: Αν a είναι null παράγει την εξαίρεση NullPointerException // αλλιώς επιστρέφει ένα σύνολο που περιέχει μία καταχώριση // για κάθε ξεχωριστό στοιχείο του a. IntSet s = new IntSet( ); for (int i = 0; i < a.length; i++) s.insert(a[i]); return s; }

18 100 Κεφάλαιο 5 Αφαίρεση δεδομένων 5.3 Υλοποίηση αφαιρέσεων δεδομένων Μια κλάση ορίζει ένα νέο τύπο και παρέχει μια υλοποίησή του. Η προδιαγραφή αποτελεί τον ορισμό του τύπου. Το υπόλοιπο της κλάσης παρέχει την υλοποίηση. Για να υλοποιήσουμε μια αφαίρεση δεδομένων, επιλέγουμε μια αναπαράσταση (representation) για τα αντικείμενά της και μετά υλοποιούμε τις συναρτήσεις δόμησης για την ανάθεση αρχικής τιμής στην αναπαράσταση με τον κατάλληλο τρόπο, και τις μεθόδους για την κατάλληλη χρήση και τροποποίηση της αναπαράστασης. Η επιλεγμένη αναπαράσταση πρέπει να επιτρέπει όλες τις λειτουργίες που θα υλοποιηθούν, με ένα λογικά απλό και αποδοτικό τρόπο. Επιπλέον, αν κάποιες από τις λειτουργίες πρέπει να εκτελούνται γρήγορα, η αναπαράσταση πρέπει να παρέχει αυτή τη δυνατότητα. Μια αναπαράσταση που είναι γρήγορη για ορισμένες λειτουργίες συχνά θα είναι βραδύτερη για άλλες. Θα μπορούσαμε επομένως να έχουμε πολλές υλοποιήσεις του ίδιου τύπου στο Κεφάλαιο 7 θα δούμε πώς μπορούμε να το καταφέρουμε αυτό. Για παράδειγμα, μια πιθανή αναπαράσταση ενός αντικειμένου IntSet είναι ένα διάνυσμα, όπου κάθε ακέραιος του συνόλου IntSet εμφανίζεται ως στοιχείο του διανύσματος. Θα μπορούσαμε να επιτρέψουμε σε κάθε στοιχείο του συνόλου να υπάρχει μόνο μία φορά στο διάνυσμα ή να υπάρχει πολλές φορές. Η δεύτερη επιλογή κάνει την υλοποίηση της μεθόδου insert να εκτελείται πιο γρήγορα, αλλά καθυστερεί την εκτέλεση των remove και isin. Επειδή το πιθανότερο είναι να καλείται πιο συχνά η isin, θα διαλέξουμε την πρώτη δυνατότητα και, επομένως, δε θα υπάρχουν διπλότυπα στοιχεία στο διάνυσμα Υλοποίηση αφαιρέσεων δεδομένων στην Java Μια αναπαράσταση συνήθως διαθέτει μια σειρά από συστατικά στην Java, καθένα από αυτά είναι μια μεταβλητή παρουσίας (instance variable) της κλάσης που υλοποιεί την α- φαίρεση δεδομένων. Οι υλοποιήσεις των συναρτήσεων δόμησης και των μεθόδων προσπελάζουν και χειρίζονται τις μεταβλητές παρουσιών. Έτσι, από την άποψη της υλοποίησης τα αντικείμενα έχουν και μεθόδους και μεταβλητές παρουσιών. Για την υποστήριξη της αφαίρεσης όμως, είναι σημαντικό να περιοριστεί η πρόσβαση των μεταβλητών παρουσιών στην υλοποίηση των μεθόδων και των συναρτήσεων δόμησης αυτό σας επιτρέπει, για παράδειγμα, να αλλάξετε την υλοποίηση ενός αφηρημένου τύπου χωρίς να επηρεάσετε τον κώδικα που χρησιμοποιεί τον τύπο. Ε- πομένως, οι μεταβλητές παρουσιών δεν πρέπει να είναι ορατές στους χρήστες ο κώδικας που χρησιμοποιεί τα αντικείμενα μπορεί να αναφέρεται μόνο στις μεθόδους τους. Οι μεταβλητές παρουσιών δε γίνονται ορατές στους χρήστες αν τις δηλώσουμε ως ι- διωτικές (private). Η Java επιτρέπει στις μεταβλητές παρουσιών να έχουν και άλλη ορατότητα εκτός από την ιδιωτική. Γενικά δεν είναι καλή ιδέα να έχετε δημόσιες μεταβλητές παρουσιών αυτό το θέμα θα το δούμε πιο αναλυτικά στις Ενότητες και 5.9. Μοναδική εξαίρεση αυτού του κανόνα είναι ο ορισμός τύπων εγγραφών (record types) οι τύποι εγγραφών εξετάζονται στην Ενότητα Οι δηλώσεις των μεταβλητών παρουσιών δεν έχουν το προσδιοριστικό static. Αυτές οι μεταβλητές ανήκουν σε αντικείμενα υπάρχει ξεχωριστό σύνολό τους για κάθε α- ντικείμενο. Επίσης, είναι δυνατή η δήλωση στατικών μεταβλητών στο εσωτερικό μιας

19 5.3 Υλοποίηση αφαιρέσεων δεδομένων 101 κλάσης. Αυτές οι μεταβλητές ανήκουν στην ίδια την κλάση και όχι σε συγκεκριμένα αντικείμενα, όπως ακριβώς ανήκουν στην κλάση οι στατικές μέθοδοι. Οι στατικές μεταβλητές δε χρησιμοποιούνται πολύ συχνά στην υλοποίηση αφαιρέσεων δεδομένων μερικά παραδείγματα που αφορούν τη χρήση τους θα δούμε στο Κεφάλαιο Υλοποίηση του τύπου IntSet Αυτή η ενότητα δίνει ένα πρώτο παράδειγμα υλοποίησης για την αφαίρεση δεδομένων IntSet. Η υλοποίηση παρουσιάζεται στην Εικόνα 5.6. Το πρώτο θέμα που πρέπει να παρατηρήσουμε εδώ είναι ο ορισμός της αναπαράστασης του τύπου IntSet, πριν από τις υλοποιήσεις των συναρτήσεων δόμησης και των μεθόδων. Σε αυτή την περίπτωση, η αναπαράσταση αποτελείται από μία μόνο μεταβλητή παρουσίας. Επειδή αυτή η μεταβλητή έχει ιδιωτική (private) ορατότητα, μπορεί να προσπελαστεί μόνον από κώδικα που βρίσκεται στο εσωτερικό της κλάσης. Οι συναρτήσεις δόμησης και οι μέθοδοι ανήκουν σε ένα συγκεκριμένο αντικείμενο του τύπου τους. Το αντικείμενο μεταβιβάζεται ως ένα επιπλέον, υπονοούμενο όρισμα στις συναρτήσεις δόμησης και στις μεθόδους, και αυτές μπορούν να αναφερθούν σε αυτό με τη χρήση της δεσμευμένης λέξης this. Για παράδειγμα, η μεταβλητή παρουσίας els μπορεί να προσπελαστεί με τη χρήση της μορφή this.els. (Ο κώδικας δεν μπορεί να αναθέσει τιμή στο this.) Το πρόθεμα δεν είναι απαραίτητο: ο κώδικας μπορεί να αναφερθεί σε μεθόδους και μεταβλητές παρουσίας του δικού του τύπου χρησιμοποιώντας απλώς το ό- νομά τους. Έτσι, στις μεθόδους και τις συναρτήσεις δόμησης της εικόνας, το αντικείμενο els αναφέρεται στη μεταβλητή παρουσίας els του this. Η υλοποίηση του τύπου IntSet είναι απλή. Η συνάρτηση δόμησης δίνει αρχική τιμή στο αντικείμενό της δημιουργώντας το διάνυσμα που θα περιέχει τα στοιχεία και αναθέτοντάς το στο els επειδή το διάνυσμα είναι κενό, δε χρειάζεται να γίνει τίποτε άλλο. Οι μέθοδοι insert, remove, και isin χρησιμοποιούν την ιδιωτική μέθοδο getindex για να προσδιορίσουν αν το στοιχείο που μας ενδιαφέρει περιέχεται ήδη στο σύνολο. Η πραγματοποίηση αυτού του ελέγχου επιτρέπει στην insert να διατηρήσει τη συνθήκη μη ύ- παρξης διπλότυπων στοιχείων. Αυτή η συνθήκη βασίζεται στη size (επειδή διαφορετικά το μέγεθος του διανύσματος δε θα ήταν ίδιο με το μέγεθος του συνόλου) και στη remove (αφού αλλιώς θα μπορούσαν να υπάρχουν και άλλες εμφανίσεις του στοιχείου που θα έ- πρεπε να διαγραφούν). Προσέξτε ότι η getindex έχει ιδιωτική (private) ορατότητα επομένως, δεν μπορεί να κληθεί έξω από την κλάση. Ο σχεδιασμός εκμεταλλεύεται αυτό το γεγονός κάνοντας την getindex να επιστρέφει 1 όταν το στοιχείο δεν περιέχεται στο διάνυσμα, αντί να παραγάγει μια εξαίρεση. Όπως αναφέραμε στο Κεφάλαιο 4, αυτή η προσέγγιση είναι ικανοποιητική εδώ επειδή η getindex χρησιμοποιείται μόνο στο εσωτερικό της κλάσης. Επειδή τα διανύσματα δεν μπορούν να περιέχουν αριθμούς int, οι μέθοδοι χρησιμοποιούν αντικείμενα Integer για τα στοιχεία του συνόλου. Αυτή η προσέγγιση δεν είναι και πολύ κομψή. Μια εναλλακτική λύση είναι η χρήση πινάκων int και αυτή όμως έχει τις δικές της δυσκολίες, αφού η υλοποίηση του τύπου IntSet θα έπρεπε να χρησιμοποιεί μεγαλύτερους πίνακες καθώς μεγαλώνει το σύνολο. Η υλοποίηση του τύπου Vector λύνει αυτό το πρόβλημα με έναν αποδοτικό τρόπο.

20 102 Κεφάλαιο 5 Αφαίρεση δεδομένων Εικόνα 5.6 Υλοποίηση του τύπου IntSet public class IntSet { //ΓΕΝΙΚΑ: Τα ανικείμενα IntSet είναι μη φραγμένα, μεταλλάξιμα σύνολα ακεραίων. private Vector els; // η αναπαράσταση //συναρτήσεις δόμησης public IntSet ( ) { //ΑΠΟΤΕΛΕΣΜΑ: Δίνει ως αρχική τιμή στο αντικείμενο this το κενό. els = new Vector( ); } // μέθοδοι public void insert (int x) { //ΤΡΟΠΟΠΟΙΕΙ: το αντικείμενο this //ΑΠΟΤΕΛΕΣΜΑ: Προσθέτει το x στα στοιχεία του αντικειμένου this. Integer y = new Integer(x); if (getindex(y) < 0) els.add(y); } public void remove (int x) { //ΤΡΟΠΟΠΟΙΕΙ: το αντικείμενο this //ΑΠΟΤΕΛΕΣΜΑ: Διαγράφει το x από το αντικείμενο this. int i = getindex(new Integer(x)); if (i < 0) return; els.set(i, els.lastelement( )); els.remove(els.size( ) - 1); } public boolean isin (int x) { //ΑΠΟΤΕΛΕΣΜΑ: Επιστρέφει true αν το x περιέχεται στο this //διαφορετικά επιστρέφει false. return getindex(new Integer(x)) >= 0; } private int getindex (Integer x) { //ΑΠΟΤΕΛΕΣΜΑ: Αν το x περιέχεται στο this επιστρέφει τον αριθμοδείκτη //της θέσης του x, αλλιώς επιστρέφει -1. for (int i = 0; i < els.size( ); i++) if (x.equals(els.get(i))) return i; return -1; } public int size ( ) { //ΑΠΟΤΕΛΕΣΜΑ: Επιστρέφει την πληθικότητα του αντικειμένου this. return els.size( ); } public int choose ( ) throws EmptyException { //ΑΠΟΤΕΛΕΣΜΑ: Αν το this είναι κενό, παράγει την εξαίρεση EmptyException // αλλιώς επιστρέφει ένα τυχαίο σοιχείο του αντικειμένου this. if (els.size( ) == 0) throw new

21 5.3 Υλοποίηση αφαιρέσεων δεδομένων 103 } EmptyException("IntSet.choose"); return els.lastelement( ); } Η getindex χρησιμοποιεί τη μέθοδο equals για να ελέγξει αν ένα στοιχείο είναι μέλος τού συνόλου. Αυτός ο έλεγχος είναι σωστός επειδή η equals για αντικείμενα Integer επιστρέφει αληθή τιμή μόνον όταν τα δύο αντικείμενα που συγκρίνονται είναι και τα δύο τύπου Integer και περιέχουν την ίδια ακέραια τιμή Υλοποίηση του τύπου Poly Τώρα θα εξετάσουμε την υλοποίηση της αφαίρεσης δεδομένων Poly. Σε αντίθεση με τα αντικείμενα IntSet, τα αντικείμενα Poly είναι μη μεταλλάξιμα και, επομένως, το μέγεθός τους δεν αλλάζει με την πάροδο του χρόνου. Άρα, μπορούμε να αναπαραστήσουμε τον τύπο Poly με έναν πίνακα αντί για διάνυσμα. Το i στό στοιχείο του πίνακα θα περιέχει το συντελεστή του i στού εκθέτη αυτή η αναπαράσταση είναι λογική μόνον αν το αντικείμενο Poly είναι πυκνό πολυώνυμο. Το μηδενικό πολυώνυμο Poly μπορεί να αναπαρασταθεί είτε ως ένας κενός πίνακας είτε ως πίνακας ενός στοιχείου που περιέχει μηδέν θα χρησιμοποιήσουμε την τελευταία προσέγγιση. Επιπλέον, θα έχουμε μια μεταβλητή παρουσίας που θα παρακολουθεί το βαθμό του αντικειμένου Poly αφού κάτι τέτοιο είναι βολικό. Οι Εικόνες 5.7 και 5.8 παρουσιάζουν την υλοποίηση του τύπου Poly. Το κύριο ζήτημα που πρέπει να παρατηρήσουμε εδώ είναι ότι αρκετές μέθοδοι (π.χ., οι add και mul) χρησιμοποιούν μεταβλητές παρουσιών και άλλων αντικειμένων Poly εκτός από του δικού τους. Ο κώδικας μιας μεθόδου επιτρέπεται να προσπελάσει ιδιωτικές πληροφορίες άλλων αντικειμένων της κλάσης του, καθώς και ιδιωτικές πληροφορίες του δικού του α- ντικειμένου. Παρατηρήστε πώς υλοποιούνται οι μέθοδοι sub και mul συναρτήσει άλλων μεθόδων Poly. Ένα άλλο θέμα είναι η χρήση της συνάρτησης δόμησης του αντικειμένου Poly στις υλοποιήσεις των add, mul, και minus. Όλες αυτές οι μέθοδοι στην πραγματικότητα δίνουν οι ίδιες αρχική τιμή στο νέο αντικείμενο Poly αυτό επιτρέπεται αφού το νέο αντικείμενο Poly είναι απλώς ένα ακόμη αντικείμενο της κλάσης, το οποίο μπορεί να προσπελαστεί μέσα στη μέθοδο. Αυτές οι μέθοδοι δημιουργούν ένα νέο αντικείμενο Poly χρησιμοποιώντας την ιδιωτική συνάρτηση δόμησης (η οποία δεν μπορεί να κληθεί από χρήστες) για να πάρουν έναν πίνακα με το σωστό μέγεθος. Στην περίπτωση της mul, βασιζόμαστε στο γεγονός ότι η συνάρτηση δόμησης του πίνακα δίνει αρχική τιμή μηδέν σε όλα τα στοιχεία int του πίνακα. Επίσης, παρατηρήστε τη φροντίδα μας να εξασφαλίσουμε ότι το νέο αντικείμενο Poly θα έχει το σωστό μέγεθος. Αυτό απαιτεί έναν πρώτο υπολογισμό στη μέθοδο add για το χειρισμό των μηδενικών στο τέλος Εγγραφές Ας υποθέσουμε ότι τα πολυώνυμα θα είναι αραιά (sparse) αντί για πυκνά (dense). Σε αυτή την περίπτωση, η προηγούμενη υλοποίηση δεν είναι κατάλληλη, αφού ο πίνακας είναι πιθανό να είναι μεγάλος και γεμάτος μηδενικά. Αντί γι' αυτό, θα θέλαμε να αποθηκεύουμε πληροφορίες μόνο για τους μη μηδενικούς συντελεστές.

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

Διαβάστε περισσότερα

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1 Κλάσεις στη Java Παύλος Εφραιμίδης Java Κλάσεις στη Java 1 Κλάσεις στην Java Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 2

Διαβάστε περισσότερα

Κλάσεις και Αντικείµενα

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

Διαβάστε περισσότερα

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack Κλάσεις στην Java Κλάσεις στη Java Παύλος Εφραιμίδης Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 1 Java Κλάσεις στη Java 2

Διαβάστε περισσότερα

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

Διαγράμματα Κλάσεων στη Σχεδίαση

Διαγράμματα Κλάσεων στη Σχεδίαση Διαγράμματα Κλάσεων στη Σχεδίαση περιεχόμενα παρουσίασης Αφηρημένες κλάσεις Ιδιότητες Λειτουργίες Απλοί τύποι Συσχετίσεις Εξάρτηση Διεπαφές αφηρημένες κλάσεις Οι αφηρημένες κλάσεις δεν μπορούν να δημιουργήσουν

Διαβάστε περισσότερα

Τύποι δεδομένων, τελεστές, μεταβλητές

Τύποι δεδομένων, τελεστές, μεταβλητές Τύποι δεδομένων, τελεστές, μεταβλητές Βασικά στοιχεία της γλώσσας Η Java χαρακτηρίζεται από ένα αρκετά καλά οργανωμένο σύνολο εντολών κι ένα μέρος της επιτυχίας της οφείλεται στα διάφορα APIs (βιβλιοθήκες)

Διαβάστε περισσότερα

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2 Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

Διαβάστε περισσότερα

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C# Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct

Διαβάστε περισσότερα

ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 2016-2017 ΕΡΓΑΣΙΑ 1 (JAVA) Παράδοση 26/4/2017 Στα πλαίσια της εργασίας θα υλοποιηθεί ένα απλοϊκό πρόγραμμα κρατήσεων Ξενοδοχείων. Για απλοποίηση θα περιοριστούμε

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο

Διαβάστε περισσότερα

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15 Οι βασικές έννοιες που θα καλύψουμε Ομαδοποίηση αντικειμένων Εισαγωγή στις συλλογές Γενικές κλάσεις Iterators Συλλογές (ειδικά την ArrayList) Συνεχίζουμε την αναφορά στο θέμα της αφαίρεσης (abstraction)

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

Διαβάστε περισσότερα

Αντικειμενοστραφής Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός Κλάσεις Αντικειμενοστραφής Προγραμματισμός Κλάσεις-Αντικείμενα Ένα παράδειγμα Συναρτήσεις κατασκευής (Constructors) Συνάρτηση καταστροφής (Destructor) Συναρτήσεις πρόσβασης (Access Functions) Συνάρτηση

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

2.1 Αντικειµενοστρεφής προγραµµατισµός

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

Διαβάστε περισσότερα

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 5: Δείκτες και Δυναμική Δέσμευση- Αποδέσμευση Μνήμης στη C/ Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με δείκτες /Ένα πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

Διαβάστε περισσότερα

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε

Διαβάστε περισσότερα

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6 Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 11: Χειρισμός Σφαλμάτων Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων

Διαβάστε περισσότερα

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 10 ΟΥ ΚΕΦΑΛΑΙΟΥ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ 1. Πως ορίζεται ο τμηματικός προγραμματισμός; Τμηματικός προγραμματισμός

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

Διαβάστε περισσότερα

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι 1 ΕΙΣΑΓΩΓΗ Η γλώσσα προγραµµατισµού Java είναι ισχυρά τυποποιηµένη (strongly typed), που σηµαίνει ότι κάθε µεταβλητή και κάθε έκφραση έχει κάποιο τύπο, ο οποίος πρέπει να είναι γνωστός κατά το χρόνο της

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΚΕΦΑΛΑΙΟ 10 Όπως είδαμε και σε προηγούμενο κεφάλαιο μια από τις βασικότερες τεχνικές στον Δομημένο Προγραμματισμό είναι ο Τμηματικός Προγραμματισμός. Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES Κων. Κόκκινος Αντικειμενοστραφής Προγραμματισμός Η ιδέα του αντικειμενοστραφούς προγραμματισμού Αυτόνομες οντότητες Στιγμιότυπα οντοτήτων Παράδειγμα

Διαβάστε περισσότερα

Αντικειµενοστρεφής Προγραµµατισµός

Αντικειµενοστρεφής Προγραµµατισµός 16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή Στο εργαστήριο αυτό θα μάθουμε για τη χρήση συναρτήσεων με σκοπό την κατασκευή αυτόνομων τμημάτων προγραμμάτων που υλοποιούν μία συγκεκριμένη διαδικασία, τα οποία

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

public void printstatement() { System.out.println(Employee:  + name +  with salary:  + salary); Κληρονομικότητα Η κληρονομικότητα (inheritance) αποτελεί έναν από τους χαρακτηριστικότερους μηχανισμούς των αντικειμενοστρεφών γλωσσών προγραμματισμού. Επιτρέπει την δημιουργία μιας νέας κλάσης απορροφώντας

Διαβάστε περισσότερα

Εισαγωγή στην Αριθμητική Ανάλυση

Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στη MATLAB ΔΙΔΑΣΚΩΝ: ΓΕΩΡΓΙΟΣ ΑΚΡΙΒΗΣ ΒΟΗΘΟΙ: ΔΗΜΗΤΡΙΑΔΗΣ ΣΩΚΡΑΤΗΣ, ΣΚΟΡΔΑ ΕΛΕΝΗ E-MAIL: SDIMITRIADIS@CS.UOI.GR, ESKORDA@CS.UOI.GR Τι είναι Matlab Είναι ένα περιβάλλον

Διαβάστε περισσότερα

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

Διαβάστε περισσότερα

Από τη UML στον Κώδικα. Μέρος Α

Από τη UML στον Κώδικα. Μέρος Α Από τη UML στον Κώδικα Μέρος Α περιεχόμενα παρουσίασης Κλάσεις Ισότητα αντικειμένων Μονόδρομες συσχετίσεις με πολλαπλότητα «ένα» Μονόδρομες συσχετίσεις με πολλαπλότητα «πολλά» Συλλογές από το σχέδιο στον

Διαβάστε περισσότερα

Υπερφόρτωση τελεστών

Υπερφόρτωση τελεστών Υπερφόρτωση τελεστών 19 Νοεμβρίου 2012 1 Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Δομές Δεδομένων Ενότητα 1 - Εισαγωγή Χρήστος Γκουμόπουλος Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Αντικείμενο μαθήματος Δομές Δεδομένων (ΔΔ): Στην επιστήμη υπολογιστών

Διαβάστε περισσότερα

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012 HY-252 Αντικειμενοστραφής Προγραμματισμός Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης 2 η Σειρά Ασκήσεων Ημερομηνία Παράδοσης: 16/11/2012 Παρακάτω σας δίνονται οι ορισμοί τεσσάρων διαφορετικών

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative

Διαβάστε περισσότερα

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

Διαβάστε περισσότερα

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08 Constructors (Κατασκευαστές) Ειδικός τύπος μεθόδων που δημιουργούν αντικείμενα μιας κλάσης και: Εκτελούνται κατά την αρχικοποίηση των αντικειμένων

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Β Μέρος Δομή Ελέγχου if-elif-else Επαναληπτική Δομή Ελέγχου while Επαναληπτική Δομή Ελέγχου for Αλληλεπίδραση χρήστη-προγράμματος Συναρτήσεις Η δομή

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

Διαβάστε περισσότερα

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα. http://aetos.it.teithe.gr/~demos/teaching_gr.

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα. http://aetos.it.teithe.gr/~demos/teaching_gr. Δομές Δεδομένων & Ανάλυση Αλγορίθμων 3ο Εξάμηνο Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα http://aetos.it.teithe.gr/~demos/teaching_gr.html Δημοσθένης Σταμάτης Τμήμα Μηχανικών Πληροφορικής ATEI ΘΕΣΣΑΛΟΝΙΚΗΣ

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Βασικά Δομικά Στοιχεία ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΟΜΙΚΑ ΣΤΟΙΧΕΙΑ ΔΟΜΙΚΑ

Διαβάστε περισσότερα

Συναρτήσεις. Υποπρόγραμμα

Συναρτήσεις. Υποπρόγραμμα Συναρτήσεις Υποπρόγραμμα Ένα σύνολο από εντολές που κάνουν κάτι συγκεκριμένο, έχουν στενή σχέση/εξάρτηση μεταξύ τους, έχουν «χαλαρή» σύνδεση με τον υπόλοιπο κώδικα, μπορεί να εξαχθεί από το πρόγραμμά μας

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors Μαθήματα από το lab Ένα πρόγραμμα αποτελείται από διάφορες κλάσεις και αντικείμενα αυτών των κλάσεων. Μία από τις κλάσεις

Διαβάστε περισσότερα

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,

Διαβάστε περισσότερα

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα Τύπος Δεδομένων: ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα - Ένας ΑΤΔ είναι ένα μαθηματικό μοντέλο (οντότητα)

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι

Διαβάστε περισσότερα

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ 10 η Διάλεξη C++ - Πίνακες Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Ανακεφαλαίωση Κατά την κλήση μιας συνάρτησης κατ αξία οι τιμές των ορισμάτων αντιγράφονται στις αντίστοιχες τυπικές παραμέτρους

Διαβάστε περισσότερα

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),

Διαβάστε περισσότερα

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

Διαβάστε περισσότερα

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

Κεφάλαιο 11 Ένωση Ξένων Συνόλων Κεφάλαιο 11 Ένωση Ξένων Συνόλων Περιεχόμενα 11.1 Εισαγωγή... 227 11.2 Εφαρμογή στο Πρόβλημα της Συνεκτικότητας... 228 11.3 Δομή Ξένων Συνόλων με Συνδεδεμένες Λίστες... 229 11.4 Δομή Ξένων Συνόλων με Ανοδικά

Διαβάστε περισσότερα

Κλάσεις και αντικείμενα #include <iostream.h<

Κλάσεις και αντικείμενα #include <iostream.h< Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void

Διαβάστε περισσότερα

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης Δοµές Δεδοµένων 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων Ε. Μαρκάκης Περίληψη Χρήση αναδροµικών εξισώσεων στην ανάλυση αλγορίθµων Αφηρηµένοι τύποι δεδοµένων Συλλογές στοιχείων Στοίβα

Διαβάστε περισσότερα

Τι είναι κλάση Κλάση

Τι είναι κλάση Κλάση 35 Τι είναι κλάση Κλάση είναι μια συλλογή από μεταβλητές. Αλλιώς είναι ένα σύνολο από: δεδομένα που δηλώνουν τα χαρακτηριστικά της κλάσης (τι είναι) και συναρτήσεις που προδιαγράφουν την συμπεριφορά της

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Κων. Κόκκινος Μεταβλητές-1 Οι μεταβλητές αποτελούν θέσεις μνήμης στις οποίες αποθηκεύονται τιμές αντίστοιχες

Διαβάστε περισσότερα

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors). Κατασκευαστές Μέθοδοι Κατασκευής (Constructors). Οι κατασκευαστές (constructors) είναι μέθοδοι που εκτελούνται όταν κατασκευάζεται ένα αντικείμενο. Μια τάξη μπορεί να έχει αρκετούς κατασκευαστές, οι οποίοι

Διαβάστε περισσότερα

Πρότυπα και διανύσματα

Πρότυπα και διανύσματα Πρότυπα και διανύσματα Πρότυπα συναρτήσεων Πρότυπα κλάσεων Παραδείγματα ιανύσματα της καθιερωμένης C++ Επαναλήπτες σε διανύσματα 1 Πρότυπα συναρτήσεων Το πρότυπο (template) είναι μια αφηρημένη συνταγή

Διαβάστε περισσότερα

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0 ΤΙ ΕΙΝΑΙ ΤΟ ADVANCED Οι Advanced θεματικές ενότητες είναι κατάλληλες για άτομα που επιθυμούν να συνεχίσουν σπουδές στο χώρο

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Python scripts Ένα πρόγραμμα στην Python (συχνά αποκαλείται script) αποτελείται από μία ακολουθία ορισμών και εντολών. H ακολουθία των ορισμών και

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) Τύπος Δεδομένων: ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα - Ένας ΑΤΔ είναι ένα μαθηματικό μοντέλο (οντότητα)

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΤΙΚΕΙΜΕΝΑ Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων

Διαβάστε περισσότερα

Περιεχόμενα. Μέρος 1: Βασικές έννοιες Πληροφορικής και επικοινωνιών Μέρος 2: Χρήση υπολογιστή και διαχείριση αρχείων Πρόλογος...

Περιεχόμενα. Μέρος 1: Βασικές έννοιες Πληροφορικής και επικοινωνιών Μέρος 2: Χρήση υπολογιστή και διαχείριση αρχείων Πρόλογος... Περιεχόμενα Πρόλογος...11 Μέρος 1: Βασικές έννοιες Πληροφορικής και επικοινωνιών... 13 1.1 Εισαγωγή στους υπολογιστές... 15 1.2 Μονάδες μέτρησης... 27 1.3 Οι βασικές λειτουργίες ενός ηλεκτρονικού υπολογιστή...

Διαβάστε περισσότερα

Κεφάλαιο 10 Ψηφιακά Λεξικά

Κεφάλαιο 10 Ψηφιακά Λεξικά Κεφάλαιο 10 Ψηφιακά Λεξικά Περιεχόμενα 10.1 Εισαγωγή... 213 10.2 Ψηφιακά Δένδρα... 214 10.3 Υλοποίηση σε Java... 222 10.4 Συμπιεσμένα και τριαδικά ψηφιακά δένδρα... 223 Ασκήσεις... 225 Βιβλιογραφία...

Διαβάστε περισσότερα

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου J-GANNO ΓΕΝΙΚΕΥΜΕΝΟ ΠΑΚΕΤΟ ΥΛΟΠΟΙΗΣΗΣ ΤΕΧΝΗΤΩΝ ΝΕΥΡΩΝΙΚΩΝ ΙΚΤΥΩΝ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ JAVA Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β,

Διαβάστε περισσότερα

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Μέρος 2ο: Επίπεδο Ευρετηρίου Β+ Δένδρων

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Μέρος 2ο: Επίπεδο Ευρετηρίου Β+ Δένδρων Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης Μέρος 2ο: Επίπεδο Ευρετηρίου Β+ Δένδρων (Ημερομηνία Παράδοσης: Δευτέρα 5/5/2008, 11:59μμ Εισαγωγή Στο

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Ένα ιστόγραμμα τιμών μετράει για ένα σύνολο από τιμές πόσες φορές εμφανίστηκε η κάθε τιμή. Για παράδειγμα

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής Στο εργαστήριο αυτό θα δούμε πώς ορίζονται και πώς χρησιμοποιούνται οι συμβολοσειρές στην C. Επίσης, θα μελετήσουμε κάποιες από τις συναρτήσεις

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative

Διαβάστε περισσότερα

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αφηρημένοι Τύποι Δεδομένων (ΑΤΔ) Οι ΑΤΔ Στοίβα και Ουρά Υλοποίηση των ΑΤΔ Στοίβα και Ουρά ΕΠΛ231 Δομές Δεδομένων

Διαβάστε περισσότερα

Στοιχειώδεις Δομές Δεδομένων

Στοιχειώδεις Δομές Δεδομένων Στοιχειώδεις Δομές Δεδομένων Τύποι δεδομένων στη Java Ακέραιοι (int, long) Αριθμοί κινητής υποδιαστολής (float, double) Χαρακτήρες (char) Δυαδικοί (boolean) Από τους παραπάνω μπορούμε να φτιάξουμε σύνθετους

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Constructors Κλάσεις και αντικείμενα Ορισμός κλάσης: class

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

Διαβάστε περισσότερα

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java

Διαβάστε περισσότερα

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2 Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 4 η Τελεστές Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Πρώτοι αριθμοί ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Ένας ακέραιος μεγαλύτερος του 1 είναι πρώτος αν έχει ακριβώς δύο διαιρέτες (τη μονάδα και τον εαυτό του). Πρόβλημα: έλεγχος

Διαβάστε περισσότερα

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων Ι Σύνολο- Περιεχόμενο Μαθήματος

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων Ι Σύνολο- Περιεχόμενο Μαθήματος Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων Ι Σύνολο- Περιεχόμενο Μαθήματος Χιωτίδης Γεώργιος Τμήμα Λογιστικής και Χρηματοοικονομικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι Μαθήματα από το lab Boolean μεταβλητές: Συνήθως τα ονόματα που δίνουμε στις boolean μεταβλητές περιγράφουν

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 15: Σχεδίαση Εφαρμογών Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Προγράμματα με δομή Κληρονομικότητας

Προγράμματα με δομή Κληρονομικότητας Προγράμματα με δομή Κληρονομικότητας Επέκταση ιεραρχίας με νέες κλάσεις Επέκταση ιεραρχίας με νέες κλάσεις Οι κλάσεις που δεν προορίζονται για δημιουργία στιγμιοτύπων, αλλά προορίζονται να χρησιμοποιηθούν

Διαβάστε περισσότερα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Υπερφόρτωση Αντικείμενα σαν ορίσματα ΥΠΕΡΦΟΡΤΩΣΗ H κλάση Car Μια κλάση που κρατάει την θέση ενός αυτοκινήτου. Μέθοδος move(): μετακινεί το αυτοκίνητο κατά μία

Διαβάστε περισσότερα

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #2 2 Γενικά Στο Εργαστήριο αυτό θα αναλύσουμε τη χρήση της βασικής εντολής ελέγχου ροής

Διαβάστε περισσότερα