ΠΟΛΥΤΕΧΝΕΙΟ
ΚΡΗΤΗΣ Τμήμα Ηλεκτρονικών Μηχ. και Μηχ. Υπολογιστών ΛΟΓ 201: Τεχνολογία Λογισμικού
ΙΙ |
Οι παραπάνω λέξεις στα αγγλικά έχουν καθιερωθεί στην προγραμματιστική ορολογία, ενώ οι αντίστοιχες ελληνικές δεν είναι γνωστές με την ίδια έννοια.
Δομές δεδομένων όπως:
ονομάζονται containers. Οι κλάσεις της C++ που υλοποιούν τέτοιες δομές ονομάζονται container classes. Γενικά, τα containers είναι αντικείμενα που περιέχουν άλλα αντικείμενα. Για να είναι χρήσιμα, παρέχουν μεθόδους για τη διαχείριση των περιεχομένων όπως:
Γενίκευση των container classes ώστε να μπορούν να περιέχουν αντικείμενα διαφορετικών
τύπων αποτελούν τα container templates. Κάθε στιγμιότυπο ενός
τέτοιου template είναι μια container class για ένα συγκεκριμένο τύπο T
και μπορεί να περιέχει αντικείμενα αυτού του τύπου.
Ένα σύντομο παράδειγμα χρήσης ενός container template με μορφή ουράς (απόσπασμα από το παράδειγμα της 28/3/2000) είναι το ακόλουθο:
Queue<int> qi; qi.insert(7); qi.insert(5); qi.remove(); cout << qi.head() << "\n"; qi.insert(30); cout << qi.head() << "\n";
Πολλές φορές παρουσιάζεται η ανάγκη να διατρέξουμε όλα τα περιεχόμενα ενός container. Για το σκοπό αυτό έχουν κατασκευάζονται αντικείμενα που ονομάζονται iterators. Κάθε iterator είναι ένα αντικείμενο που, κατά την κατασκευή του, συνδέεται με ένα αντικείμενο container. Στη συνέχεια, διευκολύνει ίσως την κατανόηση να θεωρεί κανείς αυτόν τον iterator σα να ήταν ένας δείκτης σε κάποιο αντικείμενο που περιέχεται μέσα στο container.
Σε μια από τις απλούτερες δυνατές μορφές του, κάθε iterator υποστηρίζει τις ακόλουθες δυο μεθόδους, με τη χρήση των οποίων μπορεί κανείς να διατρέξει τα περιεχόμενα του container.
int get ();
get
τοποθετεί τον iterator στο πρώτο αντικείμενο
που περιέχεται στον container. Κάθε επόμενη κλήση τον μεταφέρει στο επόμενο,
κάθε φορά, αντικείμενο. H μέθοδος get
επιστρέφει 0 όταν εξαντληθούν
τα αντικείμενα που περιέχονται στον container, διαφορετικά επιστρέφει μη μηδενική
τιμή.T current ();
Ένα σύντομο παράδειγμα χρήσης ενός iterator για το container template με μορφή ουράς (απόσπασμα και πάλι από το παράδειγμα της 28/3/2000) είναι το ακόλουθο, στο οποίο εκτυπώνονται κατά σειρά όλα τα περιεχόμενα της ουράς.
QueueIterator<int> i(qi); while (i.get()) cout << i.current() << "\n";
Είναι φυσικά δυνατό να ενσωματώσει κανείς τη λειτουργικότητα των iterators
(δηλαδή τις μεθόδους get
και current
) μέσα στους containers.
Ο διαχωρισμός τους όμως σε διαφορετικά αντικείμενα προσφέρει τα εξής σημαντικά
πλεονεκτήματα:
Η ευτυχία δεν είναι μια κατάσταση στην οποία θα φθάσεις, αλλά ένας τρόπος για να ταξιδεύεις.
Νίκος Παπασπύρου (nickie@softlab.ntua.gr
).
Τελευταία αλλαγή: 29/03/2000 12:11 .