Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο



Σχετικά έγγραφα
Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

Προγραμματισμός Υπολογιστών με C++

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

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. ΕΡΓΑΣΤΗΡΙΟ C++ ΕΞΑΜΗΝΟ Γ Ακαδηµαϊκό Έτος

Εισαγωγή στον Προγραμματισμό

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

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

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

17TimeThis.h function returns reference pointer to same object { return *this; }

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Υπολογιστών με C++

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Στοιχειώδης προγραμματισμός σε C++

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Ανάπτυξη και Σχεδίαση Λογισμικού

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

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

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

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

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

Βασικά της γλώσσας JAVA

Προγραμματισμός Υπολογιστών με C++

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Προγραμματισμός Υπολογιστών με C++

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

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

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Υπολογιστών με C++

Δυναμική μνήμη με πίνακες και λίστες

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Εισαγωγή. 1 Γενικά. 2 Προγράμματα σε C++ 5 Νοεμβρίου 2012

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο2-Νο3

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Εισαγωγή στον Προγραμματισμό με C++

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

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

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Ι (ΗΥ120)

Aντικειμενοστραφής. Προγραμματισμός. Κληρονομικότητα

Προγραμματισμός Δομές Δεδομένων

Δομές δεδομένων (Structures) Εισαγωγή στη C++

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

Εισαγωγή στον Προγραμματισμό με C++

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ. Σχηματική παράσταση του προγράμματος. logariasmos

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Προγραμματισμός Υπολογιστών με C++

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

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

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

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

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

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } {

Προχωρημένα Θέματα ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ. Γεώργιος Παπαϊωάννου ( )

Αναφορές, είκτες και Αλφαριθμητικά

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Προγραμματισμός Υπολογιστών με C++

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

Πληροφορική 2. Γλώσσες Προγραμματισμού

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

Η βασική συνάρτηση προγράμματος main()

Τελικό τεστ - απαντήσεις

Ηβασικήσυνάρτηση προγράμματος main()

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Φροντιςτήριο. Linked-List

Transcript:

Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and functions access-specifier: data and functions access-specifier: data and functions //... access-specifier: data and functions } object-list; Χαροκόπειο Πανεπιστήμιο 2/22

Κλάσεις η χρήση του object-list είναι προαιρετική access-specifier είναι ένα από τα public, προσβάσιμα από όλα τα μέρη ενός προγράμματος private, προσβάσιμα μόνο από μεθόδους της συγκεκριμένης κλάσης protected, χρησιμοποιείται μόνο όταν υπάρχει κληρονομικότητα τα δεδομένα και οι συναρτήσεις στην κορυφή της κλάσης είναι από προεπιλογή private Χαροκόπειο Πανεπιστήμιο 3/22

Παράδειγμα 1 class Employee { 2 char * name ; 3 4 public : 5 Employee ( ) ; 6 ~Employee ( ) ; 7 8 char *getname ( ) ; 9 void setname ( char *name ) ; 10 } ; 11 12 int main ( ) { 13 Employee a ; 14 15 a. name = "Kwstas" ; / / NO COMPILE ERROR! 16 a. setname ( "Kwstas" ) ; / / OK! 17 } Χαροκόπειο Πανεπιστήμιο 4/22

Struct στην C++ Στην C++ ένα struct είναι ουσιαστικά μια κλάση η οποία έχει πρόσβαση public παντού. 18 #include <iostream > 19 #include <cmath> 20 21 struct complex { 22 double real, img ; 23 24 void set ( double r, double i ) { 25 real = r ; 26 img = i ; 27 } 28 29 void print ( ) { 30 std : : cout << real ; 31 if ( img < 0) 32 std : : cout << "-" ; 33 else if ( img > 0) 34 std : : cout << "+" ; 35 std : : cout << abs ( img ) << "i" ; 36 } 37 } ; Χαροκόπειο Πανεπιστήμιο 5/22

Struct στην C++ Στην C++ ένα struct είναι ουσιαστικά μια κλάση η οποία έχει πρόσβαση public παντού. 38 int main ( ) 39 { 40 complex c1, c2 ; 41 42 c1. set ( 2, 3 ) ; 43 c1. print ( ) ; 44 45 c2. set ( 5, 6 ) ; 46 c2. print ( ) ; 47 48 c1. real = 2 ; 49 c1. print ( ) ; 50 } Χαροκόπειο Πανεπιστήμιο 6/22

Union στην C++ Όπως και οι εγγραφές, τα union στην C++ ορίζουν κλάσεις. Μπορούν δηλαδή να περιέχουν συναρτήσεις, constructor και destructor. Όπως και στην C όλες οι μεταβλητές σε ένα union χρησιμοποιούν τις ίδιες θέσεις μνήμης. Χαροκόπειο Πανεπιστήμιο 7/22

Anonymous Unions Η C++ προσφέρει και ανώνυμα union. Ένα ανώνυμο union δεν περιλαμβάνει όνομα τύπου και δεν μπορούμε να φτιάξουμε μεταβλητές. Λέει όμως στον μεταγλωττιστή πως τα μέλη της πρέπει να μοιράζονται τις ίδιες θέσεις μνήμης. Για να έχουμε πρόσβαση σε ένα μέλος ενός τέτοιου union δεν πρέπει να χρησιμοποιήσουμε τον τελεστή τελείας. Χαροκόπειο Πανεπιστήμιο 8/22

Anonymous Unions Παράδειγμα 1 #include <iostream > 2 3 using namespace std ; 4 5 int main ( ) 6 { 7 union { 8 long l ; 9 double d ; 10 char s [ 4 ] ; 11 } ; 12 13 l = 100000; 14 cout << l << " " ; 15 d = 123.2342; 16 cout << d << " " ; 17 s [ 0 ] = 'a' ; 18 s [ 1 ] = 'b' ; 19 s [ 2 ] = 'c' ; 20 s [ 3 ] = '\0' ; 21 cout << s << endl ; 22 } Χαροκόπειο Πανεπιστήμιο 9/22

Συναρτήσεις Φίλοι Friend Functions Είναι δυνατόν να δώσουμε πρόσβαση στα private μέρη μια κλάσης, σε μια συνάρτηση που δεν είναι μέλος της κλάσης, ορίζοντας την συνάρτηση ως friend. 1 class myclass { 2 int a, b ; 3 4 public : 5 myclass ( ) ; 6 7 friend void print ( myclass x ) ; 8 } ; 9 10 / / Note : p r i n t ( ) i s not a member f u n c t i o n 11 void print ( myclass x ) { 12 cout << x. a << " " < x. b << endl ; 13 } Χαροκόπειο Πανεπιστήμιο 10/22

Κλάσεις Φίλοι Friend Classes Είναι δυνατόν να δώσουμε πρόσβαση στα private μέρη μια κλάσης, σε μια άλλη κλάση (σε όλες τις μεθόδους δηλαδή), ορίζοντας την κλάση ως friend. 1 class TwoValues { 2 int a, b ; 3 4 public : 5 TwoValues ( int i, int j ) { a = i ; b = j ; } 6 7 friend class Min ; 8 } ; 9 10 class Min { 11 public : 12 int min ( TwoValues x ) { 13 return x. a < x. b? x. a : x. b ; 14 } 15 } ; Χαροκόπειο Πανεπιστήμιο 11/22

Ορίζοντας Συναρτήσεις μέσα στις Κλάσεις Είναι δυνατόν να δίνουμε το σώμα μικρών συναρτήσεων απευθείας μέσα στην κλάση που ανήκουν. Σε αυτή την περίπτωση ο μεταγλωττιστής θεωρεί πως θέλουμε να είναι και inline. 1 class Pair { 2 int a, b ; 3 4 public : 5 Pair ( int i, int j ) { a = i ; b = j ; } 6 ~Pair ( ) { } 7 8 int first ( ) { return a ; } 9 int second ( ) { return b ; } 10 11 int min ( ) { return a < b? a : b ; } 12 } ; Χαροκόπειο Πανεπιστήμιο 12/22

Constructors με πολλαπλές παραμέτρους Μπορούμε να έχουμε και constructors με πολλές παραμέτρους. 1 class Complex { 2 double a, b ; 3 4 public : 5 Complex ( ) { a = 0. 0 ; b = 0. 0 ; } 6 Complex ( double real ) { a = real ; b = 0. 0 ; } 7 Complex ( double real, double img ) { a = real ; b = img ; } 8 ~Complex ( ) { } 9 10 double re ( ) { return a ; } 11 double img ( ) { return b ; } 12 } ; Χαροκόπειο Πανεπιστήμιο 13/22

Στατικά Δεδομένα σε Κλάσεις Δίνοντας τον χαρακτηρισμό static σε μια μεταβλητή σε μια κλάση, λέμε στον μεταγλωττιστή πως θέλουμε μόνο ένα αντιγράφο αυτής της μεταβλητής το οποίο πρέπει να είναι κοινό για όλα τα αντικείμενα αυτής της κλάσης. Δηλώνοντας μια static μεταβλητή δεν την ορίζουμε (δεν δεσμεύεται χώρος για την μεταβλητή). Πρέπει στην συνέχεια να παρέχουμε μία καθολική δήλωση εκτός της κλάσης. Χαροκόπειο Πανεπιστήμιο 14/22

Στατικά Δεδομένα σε Κλάσεις 1 class shared 2 { 3 static int a ; 4 int b ; 5 public : 6 void set ( int i, int j ) { a = i ; b = j ; } 7 void show ( ) ; 8 } ; 9 10 int shared : : a ; / / d e f i n e a 11 12 void shared : : show ( ) { 13 cout << "Static a: " << a << endl ; 14 cout << "Non-static b: " << b << endl ; 15 } Χαροκόπειο Πανεπιστήμιο 15/22

Στατικά Δεδομένα σε Κλάσεις int main ( ) { shared x, y ; } ; x. set ( 1, 1 ) ; x. show ( ) ; y. set ( 2, 2 ) ; y. show ( ) ; x. show ( ) ; Το πρόγραμμα θα εκτυπώσει Static a: 1 Non-static b: 1 Static a: 2 Non-static b: 2 Static a: 2 Non-static b: 1 Χαροκόπειο Πανεπιστήμιο 16/22

Στατικά Δεδομένα σε Κλάσεις Μια στατική μεταβλητή υπάρχει πριν δημιουργηθεί κάποιο αντικείμενο της κλάσης. 1 class shared { 2 public : 3 static int a ; 4 } ; 5 6 int shared : : a ; / / d e f i n e a 7 8 int main ( ) { 9 shared : : a = 99; / / before c r e a t i n g any o b j e c t s 10 11 cout << "Initial value of a: " << shared : : a << endl ; 12 13 shared x ; 14 15 cout << "This is x.a: " << x. a << endl ; 16 } Χαροκόπειο Πανεπιστήμιο 17/22

Στατικές Συναρτήσεις σε Κλάσεις Οι συναρτήσεις μέλη μιας κλάσης μπορεί να δηλωθούν static. Τέτοιες συναρτήσεις όμως μπορούν να προσπελάσουν μόνο static δεδομένα της ίδιας κλάσης. 1 class static_type { 2 static int i ; 3 public : 4 static void init ( int x ) { i = x ; } 5 void show ( ) { cout << i ; } 6 } ; 7 8 int static_type : : i ; / / d e f i n e i 9 10 int main ( ) { 11 static_type : : init ( 1 0 0 ) ; 12 13 static_type x ; 14 x. show ( ) ; / / d i s p l a y s 100 15 } Χαροκόπειο Πανεπιστήμιο 18/22

Κλήση Constructors και Destructors Ένας constructor καλείται μόλις ένα αντικείμενο δημιουργείται και ο destructor όταν το αντικείμενο καταστρέφεται. Για τοπικά αντικείμενα, ο constructor καλείται την στιγμή που η αντίστοιχη δήλωση συναντηθεί. Οι destructors καλούνται με την αντίθετη σειρά από την σειρά κλήσης των constructors. Σχετικά με τα καθολικά αντικείμενα οι constructors καλούνται πριν η συνάρτηση main() ξεκινήσει να εκτελείται. Οι constructors καλούνται με την σειρά που έχουν δηλωθεί τα αντικείμενα σε ένα αρχείο. Όταν υπάρχουν πολλά αρχεία δεν μπορούμε να ξέρουμε την ακριβή σειρά εκτέλεσης. Χαροκόπειο Πανεπιστήμιο 19/22

Κλήση Constructors και Destructors 1 class myclass { 2 int who ; 3 public : 4 myclass ( int id ) { 5 cout << "Initializing " << id << endl ; 6 who = id ; 7 } 8 ~myclass ( ) { cout << "Destructing " << id << endl ; } 9 10 } glob_ob1 ( 1 ), glob_ob2 ( 2 ) ; 11 12 int main ( ) { 13 myclass local_ob1 ( 3 ) ; 14 15 cout << "I am not the first line" << endl ; 16 17 myclass local_ob2 ( 4 ) ; 18 } Χαροκόπειο Πανεπιστήμιο 20/22

Κλήση Constructors και Destructors Το προηγούμενο πρόγραμμα τυπώνει Initializing 1 Initializing 2 Initializing 3 I am not the first line Initializing 4 Destructing 4 Destructing 3 Destructing 2 Destructing 1 Χαροκόπειο Πανεπιστήμιο 21/22

Scope Resolution Operator Ο τελεστής :: εκτός από το να προσφέρει πρόσβαση σε μέλη μιας κλάσης, μας επιτρέπει να έχουμε πρόσβαση και σε μεταβλητές όπου έχουν επικαλυφθεί από άλλες μεταβλητές με ίδιο όνομα. 1 2 int i ; / / g l o b a l i 3 4 void f ( ) { 5 int i ; / / l o c a l i ; 6 7 i = 10; / / uses l o c a l i 8 9 : : i = 10; / / uses g l o b a l i 10 } Χαροκόπειο Πανεπιστήμιο 22/22