Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων Αντικειμενοστραφής Προγραμματισμός.

Slides:



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

UNIX.
Το αλφαριθμητικό (string)
Κληρονομικότητα. Εισαγωγή  Κληρονομικότητα (Inheritance) καλείται ο μηχανισμός με τον οποίο μία νέα κλάση που ονομάζεται παράγωγη (derived class) δημιουργείται.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ PHP. Τι θα μάθουμε;  Να καταλάβουμε τι είναι η PHP και πώς δουλεύουν τα PHP scripts  Τι χρειάζεται για να ξεκινήσουμε με την PHP  Να.
Στατική Συμβολική Παραγώγιση Λάμδα Εκφράσεων στην C++
Ένα απλό πρόγραμμα σε C /* ********************************************* * This program prints out the sentence “This is a test.” * *********************************************
Τι είναι ο υπολογιστής; Τι είναι ο προγραμματισμός
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Μήτρες (templates)  Μία μήτρα είναι ένα κομμάτι κώδικα που περιέχει παραμέτρους οι οποίες δέχονται ως τιμές τύπους δεδομένων.  Είναι ένας μηχανισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
1 ΕΝΤΟΛΕΣ ΠΛΗΡΟΦΟΡΙΩΝ ΓΕΝΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣΓΕΝΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣ ΘΕΣΗ ΣΗΜΕΙΟΥΘΕΣΗ ΣΗΜΕΙΟΥ ΑΠΟΣΤΑΣΗΑΠΟΣΤΑΣΗ ΕΜΒΑΔΟΝΕΜΒΑΔΟΝ.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
1 Ολυμπιάδα Πληροφορικής Μάθημα 7. 2 Στόχοι μαθήματος Δημιουργία συναρτήσεων από το χρήστη Δομή προγράμματος με συναρτήσεις Συναρτήσεις και παράμετροι.
Ολυμπιάδα Πληροφορικής
ΣΥΝΑΡΤΗΣΕΙΣ.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II.
ΗΥ302 Διδακτική της Πληροφορικής Η γλώσσα προγραμματισμού LOGO Writer Ομάδα Εργασία: Αλεβίζου Βασιλική (Α.Μ.:1029) Κοφφινά Ιωάννα (Α.Μ.:1035) Τριανταφυλλίδου.
Αντικειμενοστρεφής Προγραμματισμός ΚΛΑΣΕΙΣ ΙΙ. Υπερφόρτωση (Overloading) Όταν το ίδιο όνομα συνάρτησης (μεθόδου) χρησιμοποιείται για περισσότερες από.
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 30/03/2009.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Πίνακας Συμβόλων Symbol Table.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής.
ΑΝΑΚΕΦΑΛΑΙΩΣΗ 26 Οκτωβρίου Αντικειμενοστρεφής Προγραμματισμός Ένα νέο προγραμματιστικό μοντέλο (paradigm) το οποίο στηρίζεται στις κλάσεις και τα.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 23/03/2010.
Applets Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη δυνατότητα προβολής γραφικών και τη δυνατότητα υλοποίησης ενός γραφικού.
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
Κεφάλαιο 10 – Υποπρογράμματα
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Πολυμορφισμός.
Έλεγχος Ονομάτων (Name Control) Για ένα πρόγραμμα που αποτελείται από πολλά τμήματα κάποια από τα οποία έχουν πιθανώς γραφτεί από άλλους προγραμματιστές.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Υπερφόρτωση Τελεστών (Συνέχεια) Αντικειμενοστραφής Προγραμματισμός.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
Βασικά στοιχεία της Java
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 2: Μεταβλητές και Τύποι Δεδομένων. Διδάσκων: Νικόλαος Θ Λιόλιος,
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Πληροφορική 2 Γλώσσες Προγραμματισμού 1. Γλώσσες προγραμματσιμού  Επιτρέπουν την κωδικοποίηση των αλγορίθμων  Η εκτέλεση ενός προγράμματος θα πρέπει.
ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ Αντικειμενοστραφής προγραμματισμός Web Site: ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ.
Διαγράμματα Πακέτων (Package Diagrams)
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΑΛΓΟΡΙΘΜΟΣ ΠΡΟΒΛΗΜΑ ΑΛΓΟΡΙΘΜΟΣ ΛΥΣΗ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κλάσεις και αντικείμενα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Ενότητα Εισαγωγή Είναι εύκολη στη χρήση και στην εκμάθηση.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Χώροι ονομάτων (namespaces) 1/4
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στη Java Χαρακτηριστικά της Java Εργαλεία της Java
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
UNIT 1 Τα Πρώτα Προγράμματα.
Μεταγράφημα παρουσίασης:

Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων Αντικειμενοστραφής Προγραμματισμός

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 2 Εισαγωγή * Στόχος είναι η διαίρεση ενός προγράμματος σε αρχεία τα οποία μεταγλωττίζονται ξεχωριστά. * Σε πρώτη φάση δημιουργούμε ξεχωριστά αρχεία για κάθε κλάση και ξεχωριστά για τα προγράμματα που χρησιμοποιούν τις κλάσεις. * Με αυτόν τον τρόπο μπορώ να κρατώ μεταγλωττισμένα όλα τα ξεχωριστά αρχεία και αν προκύψουν αλλαγές σε μία κλάση ή κάποιο driver πρόγραμμα να μη χρειάζεται να μεταγλωτίσσω όλον τον κώδικα από την αρχή, παρά μόνο το αρχείο που άλλαξε.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 3 Εισαγωγή * Τα ξεχωριστά μεταγλωττισμένα κομμάτια κώδικα συνδέονται μεταξύ τους (linking phase) πριν την εκτέλεση. * Σε δεύτερη φάση σπάμε το αρχείο μιας κλάσης συνήθως σε 2 αρχεία, ένα που περιέχει τη διασύνδεση της κλάσης και ένα που περιέχει την υλοποίηση. * Έτσι μπορούμε να δημιουργήσουμε βιβλιοθήκες κλάσεων όπως ακριβώς οι βιβλιοθήκες που έχουμε χρησιμοποιήσει ως τώρα.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 4 Διασύνδεση και Δήλωση Κλάσης * Σύμφωνα με την αρχή της ενθυλάκωσης στη διασύνδεση μιας κλάσης περιλαμβάνονται μόνο οι δηλώσεις των δημόσιων μελών. * Κανονικά λοιπόν θα έπρεπε τα δημόσια μέλη να μπουν σε ξεχωριστό αρχείο (αρχείο διασύνδεσης) και τα ιδιωτικά μαζί με τους ορισμούς των συναρτήσεων μελών σε άλλο (αρχείο υλοποίησης). * Η δήλωση μιας κλάσης όμως πρέπει να είναι ενιαία και όχι σε 2 αρχεία. * Για το λόγο αυτό στο αρχείο διασύνδεσης μπαίνει όλη η δήλωση της κλάσης (μαζί με τα ιδιωτικά μέλη στα οποία ο χρήστης δεν έχει πρόσβαση ούτως ή άλλως) και στο αρχείο υλοποίησης οι ορισμοί των συναρτήσεων μελών ή φίλιων.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 5 Αρχεία Κεφαλίδων * Αρχείο διασύνδεσης = Αρχείο Κεφαλίδας (header file) * Τα header files πρέπει να έχουν κατάληξη.h (πχ. dtime.h) * Κάθε πρόγραμμα που χρησιμοποιεί την κλάση που δηλώνεται στο αρχείο dtime.h πρέπει να περιέχει μια οδηγία # include “dtime.h” (δες DigitalTime κλάση) * Τα “ ” οδηγούν τον compiler να ψάξει για τον ορισμό του dtime.h στον τρέχοντα κατάλογο ή σε όποιον κατάλογο έχει οριστεί να σώζει τα header files που δημιουργούμε. * Αντίθετα τα <> οδηγούν τον compiler να ψάξει στον κατάλογο που σώζει τις προκαθορισμένες βιβλιοθήκες.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 6 Αρχείο Υλοποίησης * Περιέχει τους ορισμούς των συναρτήσεων μελών. * Συνήθως δίνεται το ίδιο όνομα με αυτό της κεφαλίδας με διαφορετική κατάληξη όμως. Η κατάληξη εξαρτάται από τον compiler πχ. dtime.cpp.  Κάνει include το αντίστοιχο header file include “dtime.h”

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 7 Αρχείο Εφαρμογής και Εκτέλεση * Περιέχει τη main ή γενικότερα συναρτήσεις που χρησιμοποιούν την κλάση. * Έχει κατάληξη.cpp (πχ. timedemo.cpp)  Κάνει include το αντίστοιχο header file include “dtime.h” ΕΚΤΕΛΕΣΗ - Μεταγλωττίζουμε τα.cpp αρχεία ξεχωριστά. Τα.h δε χρειάζονται μεταγλώττιση αφού γίνονται include. - Κατόπιν χρησιμοποιώντας τον linker πρέπει να συνδεθούν οι ξεχωριστές μεταγλωττίσεις των.cpp. Ο ακριβής τρόπος ποικίλει. Στο UNIX χρησιμοποιείται το πρόγραμμα make για τη σύνδεση. Σε ολοκληρωμένα περιβάλλοντα ανάπτυξης (IDE) χρησιμοποιείται η έννοια του project.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 8 Πλεονεκτήματα Διαχωρισμού * Λιγότερος κώδικας. Αν πολλά προγράμματα εφαρμογής χρησιμοποιούν μια κλάση δε χρειάζεται να γράφετε τον ορισμό της κλάσης σε κάθε ένα από αυτά. Επιπλέον οι όποιες αλλαγές στην υλοποίηση της κλάσης επηρεάζουν ένα αρχείο και όχι όλα τα προγράμματα που τη χρησιμοποιούν. * Εξοικονόμηση χρόνου μεταγλώττισης.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 9 #ifndef - #define * Είδαμε παράδειγμα προγράμματος που έχει δομηθεί σε 3 αρχεία. Ένα πρόγραμμα μπορεί να περιλαμβάνει πολλά περισσότερα αρχεία (αν χρησιμοποιεί πολλές κλάσεις κλπ). * Ένα αρχείο επικεφαλίδας μπορεί να γίνεται include σε περισσότερα του ενός αρχεία που με τη σειρά τους μπορεί να κάνει include το ένα το άλλο. Εύκολα λοιπόν μπορεί να προκύψει το σενάριο όπου επαναλαμβάνονται οι δηλώσεις που περιέχονται σε ένα header file πολλές φορές μέσα στο κώδικα. * Μπορούμε εύκολα να αποφύγουμε πολλαπλούς ορισμούς με χρήση των #ifndef - #define

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 10 Παράδειγμα #ifndef DTIME_H #define DTIME_H #endif Αυτό που γίνεται είναι το εξής: - Την πρώτη φορά που γίνεται include το dtime.h το DTIME_H δεν είναι defined. - Κατά συνέπεια ο έλεγχος #ifndef (if not defined) είναι true και εκτελείται η #define DTIME_H μαζί με την αντιγραφή του dtime.h.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 11 Εξήγηση (συνέχεια) - Η #define το μόνο που κάνει είναι να προσθέτει το DTIME_H σε μια λίστα ονομάτων. - Τη δεύτερη φορά που θα γίνει include to dtime.h η #ifndef αποτυγχάνει (αφού κοιτώντας στη λίστα των ορισμών βλέπει το DTIME_H). - Όταν αποτύχει η #ifndef οτιδήποτε ακολουθεί μέχρι το επόμενο #endif παραλείπεται. - Κατά συνέπεια δε θα οριστεί παραπάνω από μία φορά η DigitalTime.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 12 Εξήγηση (συνέχεια) - Μπορείτε να χρησιμοποιήσετε οποιαδήποτε λέξη (εκτός των δεσμευμένων) στη θέση του DTIME_H. - Συνήθως όμως χρησιμοποιούμε το όνομα του header file με κεφαλαία και το extension μετά από underscore. Ακολουθείστε αυτή τη σύμβαση ώστε ο κώδικάς σας να είναι ευανάγνωστος.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 13 Χώροι ονομάτων - Ένας χώρος ονομάτων (namespace) είναι μια συλλογή ορισμών ονομάτων και δηλώσεων κλάσεων και συναρτήσεων. - Σκοπός είναι να διαχωρίζονται δηλώσεις που φέρουν το ίδιο όνομα, αλλά διαφορετική σημασία. - Όταν συμπεριλαμβάνουμε στον κώδικά μας τις πιο συνηθισμένες προκαθορισμένες βιβλιοθήκες, πχ. iostream, string κλπ. αυτό που συμβαίνει είναι ότι όλοι οι ορισμοί ονομάτων που γίνονται στη βιβλιοθήκη τοποθετούνται στο χώρο ονομάτων std.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 14 Χώροι ονομάτων - Το πρόγραμμά μας δε γνωρίζει για το χώρο ονομάτων std εκτός και αν καθορίσουμε ρητώς ότι θέλουμε να συμπεριλάβουμε όλους τους ορισμούς που περιλαμβάνονται εκεί. - Ο τρόπος για να γίνει αυτό είναι με την οδηγία using: using namespace std; - Όλοι οι ορισμοί ονομάτων στον κώδικά σας βρίσκονται στον καθολικό χώρο ονομάτων (global namespace) εκτός και αν ορίσετε εσείς κάποιον άλλο συγκεκριμένο χώρο.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 15 Χώροι ονομάτων - Μπορείτε να χρησιμοποιείται πολλά namespaces ταυτόχρονα αρκεί να μη συγκρούονται οι ορισμοί ονομάτων που περιέχονται σε αυτά. - Σε περίπτωση σύγκρουσης μπορείτε να χρησιμοποιήσετε τα namespaces που συγκρούονται αρκεί να μην το κάνετε ταυτόχρονα. Σε αντίθετη περίπτωση θα υπάρξει σφάλμα. ΠΑΡΑΔΕΙΓΜΑ Έστω ότι έχω τη void myFunc() να ορίζεται με διαφορετικό τρόπο στα NS1 και NS2 namespaces.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 16 Παράδειγμα (Συνέχεια) Ο ακόλουθος κώδικας είναι έγκυρος: { using namespace NS1; myFunc(); } { using namespace NS2; myFunc(); } - H πρώτη κλήση θα χρησιμοποιήσει τον ορισμό στο NS1 και η δεύτερη στο NS2. - H εμβέλεια της using είναι μέχρι το επόμενο τέλος block εντολών. Αν η using μπει στην αρχή αρχείου ισχύει για όλο το αρχείο.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 17 Δημιουργία namespace Ομαδοποιούμε ένα σετ δηλώσεων/ορισμών σε ένα namespace με το ακόλουθο: namespace Some_Name{ Some_Code } Oτιδήποτε βρίσκεται στο Some_Code θα οριστεί στο χώρο ονομάτων Some _Name Μπορούμε να έχουμε όσες ομαδοποιήσεις θέλουμε για ένα χώρο ονομάτων (στο παράδειγμα demonamespace.cpp έχουμε 2 για το Space1 και 2 για το Space2.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 18 Δηλώσεις using - Μπορούμε να επιλέξουμε να συμπεριλάβουμε ορισμένα ονόματα από ένα namespace και όχι το σύνολο των ορισμών που υπάρχουν σε αυτό. - Ο τρόπος είναι χρησιμοποιώντας τη δήλωση using. Για παράδειγμα: using std::cout; using std::cin; Έχοντας συμπεριλάβει με αυτόν τον τρόπο ότι ονόματα χρησιμοποιούμε από το std, παραλείπουμε τη δήλωση using namespace std;

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 19 Τροποποίηση Ονομάτων - Έστω ότι σκοπεύουμε να χρησιμοποιήσουμε τη myFunc() που ορίζεται στο NS1. - Μπορώ να αναφερθώ σε αυτή (και σε οποιοδήποτε άλλο αντικείμενο) χρησιμοποιώντας το χώρο ονομάτων και τον τελεστή επίλυσης εμβέλειας ως εξής: NS1::myFunc() - Μπορούμε να αναφερθούμε σε ένα όνομα κατά τον παραπάνω τρόπο ακόμα και όταν είμαστε στην εμβέλεια κάποιου άλλου namespace όπου ορίζεται το ίδιο όνομα, πχ. using namespace NS2 //in NS2 myFunc() is also defined NS1::myFunc() - Χρησιμοποιείται κυρίως όταν καθορίζουμε τον τύπο παραμέτρου μιας συνάρτησης (γιατί?), πχ., int getInput(std::istream inputStream);

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 20 Ορισμός κλάσης σε χώρο ονομάτων - Μπορούμε να βάλουμε τον ορισμό της κλάσης DigitalTime σε ένα ξεχωριστό χώρο ονομάτων έστω DTimeLuke (βλέπε παράδειγμα). - Ο χώρος ονομάτων DTimeLuke συνδέει τα αρχεία dtime.h και dtime.cpp. Γενικότερα ένας χώρος ονομάτων μπορεί να συνδέει πολλά αρχεία. - Για να χρησιμοποιήσουμε τώρα την DigitalTime στο αρχείο εφαρμογής πρέπει να τη συμπεριλάβουμε με κάποιον τρόπο: using namespace DTimeLuke; using DTimeLuke::DigitalTime; - Προσοχή: Όταν δίνεται όνομα σε δικό σας namespace φροντίστε να βάζετε λέξεις που είναι απίθανο να χρησιμοποιηθούν από άλλους προγραμματιστές που συνεργάζεστε.

Αντικειμενοστραφής Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων/ Slide 21 Ανώνυμοι Χώροι Ονομάτων - Κάθε μονάδα μεταγλώττισης (αρχείο) έχει και ένα ξεχωριστό χώρο ονομάτων (ανώνυμος χώρος). - Η ομαδοποίηση για τον ανώνυμο χώρο γράφετε σαν: namespace{ void sampleFunc(); } - Όλα τα ονόματα που ορίζονται στον ανώνυμο χώρο είναι τοπικά στη μονάδα μεταγλώττισης. - Οι ανώνυμοι χώροι ονομάτων αντικαθιστούν το προσδιοριστικό static - Χρήσιμοι για απόκρυψη βοηθητικών συναρτήσεων