Έλεγχος Ονομάτων (Name Control) Για ένα πρόγραμμα που αποτελείται από πολλά τμήματα κάποια από τα οποία έχουν πιθανώς γραφτεί από άλλους προγραμματιστές.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Από τη C στη C++ Hy240b project 2014 Phase 1.
Advertisements

Το αλφαριθμητικό (string)
Κληρονομικότητα. Εισαγωγή  Κληρονομικότητα (Inheritance) καλείται ο μηχανισμός με τον οποίο μία νέα κλάση που ονομάζεται παράγωγη (derived class) δημιουργείται.
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++
Πολυδιάστατοι Πίνακες, Δομές, Ενώσεις
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
Γλωσσική Τεχνολογία Object-Orientation in Python.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων, Σημασιολογικές Ενέργειες.
ΕΠΛ223 - Θεωρία και Πρακτική Μεταγλωττιστών9-1 Στατικός Έλεγχος Με τον όρο στατικός έλεγχος (static checking) χαρακτηρίζεται ο έλεγχος της συντακτικής.
Μήτρες (templates)  Μία μήτρα είναι ένα κομμάτι κώδικα που περιέχει παραμέτρους οι οποίες δέχονται ως τιμές τύπους δεδομένων.  Είναι ένας μηχανισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Συλλογές.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
Σύγκριση Java και C++ Μεταπτυχιακό Εφαρμοσμένης Πληροφορικής - Αλέξανδρος Χατζηγεωργίου, Νοέμβριος 2004.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
ΣΥΝΑΡΤΗΣΕΙΣ.
Πάνω προς Κάτω Σχεδιασμός και Συναρτήσεις
Αντικειμενοστρεφής Προγραμματισμός ΚΛΑΣΕΙΣ ΙΙ. Υπερφόρτωση (Overloading) Όταν το ίδιο όνομα συνάρτησης (μεθόδου) χρησιμοποιείται για περισσότερες από.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κλάσεις και αντικείμενα Κατασκευαστές κλάσεων (constructors) Κατασκευαστές κλάσεων.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Πίνακας Συμβόλων Symbol Table.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Τμ.
Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής.
ΑΝΑΚΕΦΑΛΑΙΩΣΗ 26 Οκτωβρίου Αντικειμενοστρεφής Προγραμματισμός Ένα νέο προγραμματιστικό μοντέλο (paradigm) το οποίο στηρίζεται στις κλάσεις και τα.
Applets Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη δυνατότητα προβολής γραφικών και τη δυνατότητα υλοποίησης ενός γραφικού.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 8: Πίνακας Συμβόλων Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Υπερφόρτωση Τελεστών (Συνέχεια) Αντικειμενοστραφής Προγραμματισμός.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 9: Κληρονομικότητα. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Μέθοδοι Μέθοδοι Δημιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων.
Βασικά στοιχεία της Java
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΜΑΘ106/3122 – Γλώσσα Προγραμματισμού Ξ. Ζαμπούλης ΜΑΘ106/3122 Γλώσσα Προγραμματισμού Δομές Δεδομένων.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 6: Πίνακες και Παράμετροι στην main. Διδάσκων: Νικόλαος Θ Λιόλιος,
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων Αντικειμενοστραφής Προγραμματισμός.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Εργαστηριακό σεμινάριο Χειμερινό εξάμηνο
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κλάσεις και αντικείμενα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγ/μό Υπολογιστών
Εισαγωγή στη Java Χαρακτηριστικά της Java Εργαλεία της Java
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεταγράφημα παρουσίασης:

Έλεγχος Ονομάτων (Name Control) Για ένα πρόγραμμα που αποτελείται από πολλά τμήματα κάποια από τα οποία έχουν πιθανώς γραφτεί από άλλους προγραμματιστές είναι σημαντικό να προλαμβάνονται περιπτώσεις χρήσης ενός ήδη χρησιμοποιημένου ονόματος (κλάσης, συνάρτησης, τύπου, template). Η αλλαγή ονομάτων δεν είναι μία αποδοτική πρακτική, ειδικά όταν χρησιμοποιούμε κώδικα που έχουν γράψει άλλοι προγραμματιστές.

Αναζήτηση Ονομάτων Ι Η δήλωση του ονόματος μιας μεταβλητής αναζητάται πρώτα στην τοπική εμβέλεια (local scope), ακολούθως στην εμβέλεια κλάσης (class scope) και τέλος στην εμβέλεια αρχείου (file scope). Αν π.χ. μια μεταβλητή x χρησιμοποιείται σε έκφραση, ερευνάται πρώτα η τοπική εμβέλεια. Οι τοπικές εμβέλειες μπορεί να είναι ενσωματωμένες μέσα σε μεγαλύτερα block κώδικα (μεγαλύτερη εμβέλεια) και έτσι η αναζήτηση γίνεται από μέσα προς τα έξω: void X::fun() {... { int x; // αντίστοιχη δήλωση... { x... }

Αναζήτηση Ονομάτων ΙΙ Οι παράμετροι συναρτήσεων είναι τοπικές μεταβλητές εξώτερης τοπικής εμβέλειας. void X::fun(int x)// αντίστοιχη δήλωση { x... }

Αναζήτηση Ονομάτων ΙΙΙ Αν η μεταβλητή δεν έχει εντοπιστεί σε μία περικλείουσα τοπική εμβέλεια και εμφανίζεται σε συνάρτηση – μέλος μιας κλάσης τότε η δήλωσή της αναζητείται στην εμβέλεια κλάσης. class X {... int x; // αντίστοιχη δήλωση }

Αναζήτηση Ονομάτων ΙV Αν μία κλάση Χ κληρονομεί από άλλη ή άλλες κλάσεις τότε γίνεται αναζήτηση σε όλες τις γονεϊκές κλάσεις. class Β {... int x; // αντίστοιχη δήλωση }; class X:public B {... };

Αναζήτηση Ονομάτων V Τέλος, αναζητείται ως δήλωση καθολικής μεταβλητής στην εμβέλεια ολόκληρου του αρχείου πηγαίου κώδικα. int x = 0; ή static int x = 0; ή extern int x = 0;

Αναζήτηση Ονομάτων VI Ονόματα συναρτήσεων αναζητούνται πρώτα σε εμβέλεια κλάσης. void X::fun() {... f();... } class X {... void f(); //αντίστοιχη συνάρτηση } Αν βρεθεί ένα τέτοιο όνομα τότε η f συμβολίζει συνάρτηση με υπονοούμενο όρισμα self (δηλαδή το αντικείμενο για το οποίο καλείται).

Αναζήτηση Ονομάτων VIΙ Στη συνέχεια αναζητάται ο ορισμός ή η πρωτότυπη δήλωση στην εμβέλεια αρχείου. void f() {...}; ή static void f() {...}; ή void f(); // ή extern void f(); // Εξαιτίας της υπερφόρτωσης ονομάτων ο μεταγλωττιστής ψάχνει για όλες τις συναρτήσεις με το ίδιο όνομα και συγκρίνει τις παραμέτρους κλήσης με τους τύπους των ορισμάτων για να επιλέξει τον κατάλληλο ορισμό συνάρτησης.

Προσπέλαση μη προκαθορισμένης εμβέλειας I Μπορούμε να υπερβούμε την τοπική εμβέλεια ή την εμβέλεια κλάσης και να αναφερθούμε σε ένα καθολικό όνομα: void Window::message_box(String msg, String title ) { ::message_box(_handle, msg, title, MB_OK) }

Προσπέλαση μη προκαθορισμένης εμβέλειας II Μπορούμε να χρησιμοποιήσουμε τον τελεστή εμβέλειας για να επιλέξουμε συγκεκριμένη εμβέλεια. class Manager:public Employee {...}; void Manager::print(ostream &os ) const { Employee::print(os);... }

Εμβέλεια και έλεγχος πρόσβασης Στη C++ πρώτα γίνεται αναζήτηση ονόματος και μετά γίνεται ο έλεγχος πρόσβασης (βάση των public, private και protected). void f() {... } class X:public B {... }; class B {... private: void f(); //αντίστοιχο όνομα }; void X::fun() {... f();... }

Κλάσεις μέσα σε κλάσεις class List { public: void insert(int); int remove(); //... private: class Link { public: Link(int,Link*=0); int _info; Link* _next; }; Link* _head; };

Χρήση κλάσεων για έλεγχο χώρου ονομάτων class Vendor_A { public: class List {... };...}; class Vendor_B { public: class List {... };...}; Επιλύει το πρόβλημα της χρήσης του ίδιου ονόματος List αλλά για να αναφερθούμε θα πρέπει να χρησιμοποιούμε Vendor_A::List

Name Spaces I To 1993 ενσωματώθηκε στη C++ ένας μηχανισμός ελέγχου χώρου ονομάτων namespace Vendor_A_Containers { template class List {...}; template class Queue {...};... } αλλά θα πρέπει και οι υλοποιήσεις να περικλείονται στον ίδιο χώρο ονομάτων namespace Vendor_A_Containers { template Τ Queue ::remove() {...}; template int Queue ::length() const {...};... }

Name Spaces II Θα πρέπει ο χρήστης των ονομάτων να χρησιμοποιεί τον τελεστή εμβέλειας Vendor_A_Containers::Queue q; ή μπορούμε να κάνουμε alias namespace Cont=Vendor_A_Containers; Vendor_A_Containers::Queue q; ή μπορούμε να προσδιορίσουμε ποια χαρακτηριστικά θα χρησιμοποιήσουμε class Bank { using Vendor_A_Containers::Queue;... private: Queue _waitingQueue;... };

Name Spaces III Ο τελεστής using μπορεί να χρησιμοποιηθεί μέσα σε εμβέλεια κλάσης, τοπική εμβέλεια ή εμβέλεια αρχείου. Ή μπορούμε να κάνουμε διαθέσιμα όλα τα ονόματα μέσα στη συγκεκριμένη εμβέλεια: using Vendor_A_MathLib; void f(double mean) { double x = expdist(mean); };