Αντικειμενοστρεφής Προγραμματισμός Κλάσεις και άλλα θέματα Απόστολος Ζάρρας * βασισμένα και σε δουλειά του.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Advertisements

POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
Βήματα στην εκτέλεση μιας διαδικασίας (procedure) 1.Τοποθέτηση παραμέτρων 2.Μεταβίβαση ελέγχου στη διαδικασία 3.Λήψη πόρων αποθήκευσης.
Λίστες παράλειψης (skip lists) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A
Εισαγωγή στη Βιοπληροφορική
Αναλογική- Ψηφιακή Φωτογραφία (Φιλμ-Αισθητήρας)
1 Basic network tools Layers recap Basic Addressing ping traceroute ipconfig.
PRESENT CONTINUOUS MARY P. 4TH GRADE.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 11: Χρήση δομών, εξωτερικών αρχείων και γραφικών στο Matlab Εαρινό εξάμηνο 2008.
ΣYMBOΛIKOΣ ΥΠΟΛΟΓΙΣΜΟΣ. ΣYMBOΛIKOΣ ΥΠΟΛΟΓΙΣΜΟΣ - Παράδειγμα %polynomial (Expression, Variable) polynomial (X, X). polynomial (Term, X) :- number (Term).
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
TEMPLATES, STL ΠΡΟΓΡΑΜΜΑΤΑ ΜΕ ΠΟΛΛΑ ΑΡΧΕΙΑ. ΑΝΑΚΕΦΑΛΑΙΩΣΗ.
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
Τεχνολογία ΛογισμικούSlide 1 Έλεγχος Καταψύκτη (Ada) Τεχνολογία ΛογισμικούSlide 39 with Pump, Temperature_dial, Sensor, Globals, Alarm; use Globals ; procedure.
Ρυθμίσεις Android phones για MMS και Internet. 20/6/2013 Although every effort has been taken, this DRAFT technical paper has been prepared in good faith.
Στοίβα & Ουρά Πέμπτη 08/03/2007 Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Τμήμα: Γ3τεχν. Καθηγητής :Ν. Γιαννακόπουλος ΠΕ19 Ερωτήσεις:
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++)
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Δομημένος Προγραμματισμός και Δομές.
Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2)
Πληροφοριακά Συστήματα και Βάσεις Δεδομένων
Εισαγωγικό Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
A model for Context-aware Databases. 19/04/20052 What is Context? Ο καθένας ορίζει το context διαφορετικά... “location, identities of nearby people and.
Εισαγωγή στην Compute Unified Device Architecture (CUDA)
Εργαστήριο 2ο SQL - DDL Ιωάννα Συρίμη
Προγραμματισμός ΙΙ Διάλεξη #7: Περισσότερες Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
ΠΟΛΥΜΟΡΦΙΣΜΟΣ, ΠΡΟΤΥΠΑ, ΚΑΘΙΕΡΩΜΕΝΗ ΒΙΒΛΙΟΘΗΚΗ ΠΡΟΤΥΠΩΝ Polymorphism, Templates, Standard Template Library (STL)
Comenius E.R.G.O Equal Rights Great Opportunities Presentation by the Greek Delegation to Hungary.
Lesson 20a: Nature I JSIS E 111: Elementary Modern Greek Sample of modern Greek alphabet, M. Adiputra,
Lesson 18c: At the University JSIS E 111: Elementary Modern Greek Sample of modern Greek alphabet, M. Adiputra,
Lesson 32a: Trasportation JSIS E 111: Elementary Modern Greek Sample of modern Greek alphabet, M. Adiputra,
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
JSIS E 111: Elementary Modern Greek
Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Stacks - Στοίβες.
Γλώσσα περιγραφής υλικού VHDL. Βασική δομή VHDL κώδικα Entity Entity (Δήλωση εισόδων – εξόδων του συστήματος) Architecture Architecture structural (περιγραφή.
Δομές Δεδομένων 1 Στοίβα. Δομές Δεδομένων 2 Στοίβα (stack)  Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή – πρώτη εξαγωγή)  Περιορισμένος.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Δείκτες και Συμβολοσειρές (Pointers.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Κληρονομικότητα.
Ε. ΠετράκηςΣτοίβες, Ουρές1 Στοίβες  Στοίβα: περιορισμένη ποικιλία λίστας  τα στοιχεία μπορούν να εισαχθούν ή να διαγραφούν μόνο από μια άκρη : λίστες.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γενικευμένες κλάσεις Συλλογές.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Τμ.
Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΠΟΛΥΜΟΡΦΙΣΜΟΣ. ΑΝΑΚΕΦΑΛΑΙΩΣΗ Θεματολόγιο Κληρονομικότητα Παράδειγμα Κληρονομικότητα – Βελτιωμένο Παράδειγμα Ενθυλάκωση : public – private.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Πολυμορφισμός.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
2/28/00epl-1311 Παραδειγματα Aλγοριθμων Αριθμος λεξεων που διαβαστηκαν απο εισοδο Εκτυπωση περιφερειας τετραγωνων με * Υπολογισμος exp(x,n) = 1 + x/1!
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Αντικειμενοστραφής Προγραμματισμός (Θ) Ενότητα 5: Είσοδος/ Έξοδος Κλειώ Σγουροπούλου Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Ανοικτά Ακαδημαϊκά Μαθήματα στο.
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ: ΔΙΟΙΚΗΣΗ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΜΟΝΑΔΩΝ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Web Services στη C# Εργαστήριο 2
Σχεδιασμός με αναζήτηση στο χώρο πλάνων
Ἱστορία ἀρχαία καὶ μεσαιωνικὴ
Ἱστορία τοῦ Νεότερου καὶ Σύγχρονου Κόσμου ἀπὸ τὸ 1453 ἕως σήμερα
Αναδρομικές Εξισώσεις και Αφηρημένοι Τύποι Δεδομένων
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Η Ροή του Κόστους Παραγωγής
2ο ΕΡΓΑΣΤΗΡΙΟ – ΡΟΕΣ ΚΟΣΤΟΥΣ
Stack[ ] Queue[ ] 7 9 本試卷全部試題均須回答。
Μεταγράφημα παρουσίασης:

Αντικειμενοστρεφής Προγραμματισμός Κλάσεις και άλλα θέματα Απόστολος Ζάρρας * βασισμένα και σε δουλειά του Π. Βασιλειάδη

2 Θεματολόγιο  Κλάσεις

3 Παράδειγμα κλάσης  Stack: μια δομή αποθήκευσης δεδομένων με τρόπο σειριακό.  LIFO: Last In, First Out, ήτοι, μπορούμε να ανακτήσουμε πρώτο, το αντικείμενο που αποθηκεύσαμε την τελευταία φορά.  Λειτουργίες push και pop για αποθήκευση και διαγραφή δεδομένων.  Λειτουργία read για διάβασμα της τελευταίας τιμής.

4 Stack: πώς λειτουργεί 4 Push(4)

5 Stack: πώς λειτουργεί 4 Push(8) 8

6 Stack: πώς λειτουργεί 4 8 Push(12) 12 Η read() επιστρέφει 12

7 Stack: πώς λειτουργεί 4 8 Pop() 12

8 Stack: πώς λειτουργεί 4 8 Push(16) 1616

9 File: stack1.h const int STACK_SIZE = 100; class Stack1{ private: int count; int data [STACK_SIZE]; public: void init(void); void push(const int &value); int pop(); int read(); };

10 File: stack1.cpp #include #include "stack1.h" //Initialization: simply set the number of //included items to zero void Stack1::init(void){ count = 0; }

11 File: stack1.cpp //Add an item, abort if there is no room void Stack1::push (const int &value){ if (count == STACK_SIZE) cout << "There is no room for more values\n"; count++; data[count] = value; }

12 File: stack1.cpp //Remove an item. Beware for an empty stack //Moreover, we do not dispose of unused memory int Stack1::pop(){ int result; if (count ==0) cout << "The stack is empty; nothing to pop\n"; else{ result = data[count]; --count; } return (result); }

13 File: stack1.cpp //Read the top number from the stack int Stack1::read(){ if (count ==0){ cout << "The stack is empty; nothing to pop\n"; } return (data[count]); }

14 File: main.cpp #include "stack1.h" #include main(){ Stack1 myStack; myStack.init(); myStack.push(4); myStack.push(8); myStack.push(12); cout << "Expect 12 " << myStack.read() <<"\n"; myStack.pop(); cout << "Expect 8 " << myStack.read() <<"\n"; } Ορισμός αντικειμένουΚλήση Μεθόδου

15 makefiles  Τα makefiles ρυθμίζουν τον τρόπο με τον οποίο συνδέουμε πολλά αρχεία μεταξύ τους  Όταν μεταφράζουμε τον πηγαίο (source) κώδικα, ο μεταγλωττιστής παράγει ένα αρχείο με τελικό (object) κώδικα.  Ο linker συνδέει τα αρχεία τελικού κώδικα με τον τελικό κώδικα από τις βιβλιοθήκες και παράγει το εκτελέσιμο.

16 makefiles Main.cpp Compiler Stack1.cpp Stack1.h Stack1.o Other libraries Linker Executable

17 makefiles  Το αρχείο makefile (ή σχεδόν ισοδύναμα και Makefile) περιέχει εντολές για το πώς θα συνδέσουμε και θα μεταγλωττίσουμε τα αρχεία μας.  Μερικές οδηγίες (options ή directives): # This is a comment # Options for the compilation of C, C++ programs: # -O Optimize object code # -c Compile and assemble, but do not link # -o Place the output into

18 Χρήση  Τα περιεχόμενα του τρέχοντος directory είναι: stack1.h, stack1.cpp, main.cpp, makefile  Η μεταγλώττιση γίνεται ως εξής: make main

19 File: makefile # stack1.o DEPENDS on stack1.h and stack1.cpp # Still, we create only the.o file and do not # link it to an executable # main DEPENDS on the stack1.o[bject] file and # main.cpp # We compile it and we produce the executable # main main: stack1.o main.cpp g++ stack1.o main.cpp -o main stack1.o: stack1.h stack1.cpp g++ -O -c stack1.cpp

20 Εναλλακτικά  Ένας πιο απλός τρόπος για να κάνετε compile κατ’ ευθείαν το πρόγραμμά σας: g++ -o main main.cpp stack1.cpp

21 Ορισμός μιγαδικών class Complex { private: double re, im; public: void set (double r, double i); Complex operator + (Complex c); int operator == (Complex c); };

22 Ορισμός και χρήση αντικειμένων Complex a, b, c; a.set(3, 4); b.set(1, 0); c = a + b; if (c == b + a) cout << "correct.\n"; else cout << "mistake!\n";

23 Ορισμός μεθόδων void Complex::set (double r, double i) { re = r; im = i; }

24 Ορισμός τελεστών Complex Complex::operator + (Complex c) { Complex result; result.set(re + c.re, im + c.im); return result; } int Complex::operator == (Complex c) { return (re == c.re && im == c.im); }

25 Κλάσεις και εμβέλεια Complex Complex::operator + (Complex c); Complex c1, c2, c; c = c1 + c2; Complex Complex::operator + (double d); double d; c = c1 + d; c = d + c2; // wrong!!! z 1 + z 2 z + rr + z

26 Κλάσεις και εμβέλεια class Complex { private: double re, im; public: void set (double r, double i); //... } int main () { Complex c; c.set(1, 0); // correct c.re = 1; // wrong }

27 Κλάσεις και εμβέλεια  Απόκρυψη πληροφοριών Ο προγραμματιστής ορίζει τα πεδία των αντικειμένων που θα είναι ορατά από τον υπόλοιπο κόσμο Καλύτερη δόμηση προγραμμάτων Ανεξαρτησία διαπροσωπείας και υλοποίησης  Μειονεκτήματα Πολλές φορές απαιτούνται συναρτήσεις πρόσβασης στα μη ορατά πεδία double Complex::getRe ();

28 Ένα καλύτερο stack… class StackInt{ private: struct StackElement { int data; StackElement * next; }; StackElement * top; public: void init(); void push (int n); void pop (); int read (); void empty (); void print (); };

29 Ένα καλύτερο stack void StackInt::init(){ top = NULL; } void StackInt::push (int n) { StackElement *pushed= new StackElement; pushed->data = n; pushed->next = top; top = pushed; }

30 Ένα καλύτερο stack top NULL pushed NULL pushed = new StackElement pushed -> next = top top = pushed top

31 Ένα καλύτερο stack top 1000 pushed NULL pushed = new StackElement next = top top = pushed top

32 Ένα καλύτερο stack 1000 NULL top

33 Ένα καλύτερο stack void StackInt::pop (){ StackElement * popped = top; if (popped == NULL) { cerr << "Error: Empty stack\n"; exit(EXIT_FAILURE); } top = top->next; delete popped; } int StackInt::read (){ if (top == NULL) { cerr << "Error: Empty stack\n"; exit(EXIT_FAILURE); } return top->data; }

34 Ένα καλύτερο stack 1000 NULL top top = top->next top popped popped = top

35 Ένα καλύτερο stack 1000 NULL top popped delete popped

36 Ένα καλύτερο stack 1000 NULL top popped

37 Ένα καλύτερο stack void StackInt::empty () { while (top != NULL) pop(); } void StackInt::print () { cout << "The stack contains: "; for (StackElement *p=top; p!=NULL; p=p->next) cout data << ", "; cout << "no (more) data.\n"; }