ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
|
|
- Σάρρα Αλεξάκης
- 8 χρόνια πριν
- Προβολές:
Transcript
1 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ CS-409, Χειμερινό εξάμηνο 2011 Πανεπιστήμιο Ιωαννίνων, Τμήμα Πληροφορικής Παναγιώτης Τσαπάρας
2 Συστάσεις Ποιός είμαι: Γραφείο: Β.3 Προτιμώμενες ώρες γραφείου: Τρίτη/Πέμπτη 2-4 π.μ. Ποιοί είσαστε: Συμπληρώστε τη φόρμα με τα στοιχεία σας για την λίστα του μαθήματος.
3 Γενικές πληροφορίες για το μάθημα Διαλεξεις: Τεταρτη 3-6 π.μ. Εργαστήρια: Πέμπτη 12-2 π.μ. Web:
4 Βαθμολογία Ασκήσεις: 40% Οι ασκήσεις είναι υποχρεωτικές για όλους όσους παίρνουν το μάθημα, ανεξαρτήτως έτους. Τελική εξέταση: 60% Προϋπόθεση επιτυχίας: Ασκήσεις >= 4.0 και Τελική εξέταση >= 4.0 Βαθμός = 0.4*Ασκήσεις + 0.6*Τελική >= 5.0
5 «Προαπαιτούμενα» CS-106: Εισαγωγή στον προγραμματισμό CS-208: Προγραμματισμός σε C «Συνεργίες» CS-304: Αρχές Γλωσσών Προγραμματισμού (3ο εξαμ.) CS-302: Δομές Δεδομένων (3ο εξαμ.)
6 Στόχοι του μαθήματος Να κατανοήσετε τις βασικές αρχές του Αντικειμενοστρεφή Προγραμματισμού (Object Oriented Programming) και να αποκτήσετε πρακτική εξάσκηση με τις γλώσσες προγραμματισμού C++ και Java.
7 Θέματα που θα καλύψουμε Διαδικασιακός vs. Αντικειμενοστρεφής προγραμματισμός Διαφορές και ομοιότητες μεταξύ C και C++ Δημιουργία και Καταστροφή αντικειμένων. Κληρονομικότητα και πολυμορφισμός Καθιερωμένη Βιβλιοθήκη Προτύπων (Standard Template Library) Εισαγωγή στη γλώσσα προγραμματισμού Java.
8 Βιβλιογραφία Αντικειμενοστρεφής Προγραμματισμός στη C++, R. Lafore, Εκδόσεις Κλειδάριθμος, 2005, ISBN Η Γλώσσα Προγραμματισμού C++, B. Stroustrup, Εκδόσεις Κλειδάριθμος, 2003 ISBN Java με UML, E. Lervik, V. Havdal, Εκδόσεις Κλειδάριθμος, 2004, ISBN Thinking in Java, Bruce Eckel, Building Java Programs: A Back to Basics Approach, 2nd edition, Stuart Reges and Marty Stepp Οι διαφάνειες του μαθήματος στηρίζονται στα παραπάνω βιβλία και στις διαφάνειες των κ. Χ. Τζώρτζη και κ. Α. Ζάρρα.
9 ΕΙΣΑΓΩΓΗ Γενικές ιδέες αντικειμενοστραφή προγραμματισμού
10 Εισαγωγή Ως σχεδιαστές / προγραμματιστές λογισμικού σκοπό έχουμε να υλοποιούμε λογισμικό για την επίλυση προβλημάτων με βάση κάποιες δοσμένες απαιτήσεις.
11 Βασικά σταδία ανάπτυξης λογισμικού Ανάλυση απαιτήσεων Τι ζητάει το πρόβλημα Σχεδίαση Από ποια βασικά δομικά στοιχεία θα αποτελείται το λογισμικό. Πχ. Δομές δεδομένων, συναρτήσεις, κλάσεις Υλοποίηση / Κατασκευή Κωδικοποίηση σε C, C++, Java, Fortran Έλεγχος Αποσφαλμάτωση (testing/debugging) Εγκατάσταση Συντήρηση (maintenance) Συντήρηση του υπάρχοντος κώδικα Επεκτάσεις και διορθώσεις με βάση νέες ανάγκες
12 Δημιουργία μεγάλων συστημάτων Μεγάλης κλίμακας λογισμικό αναπτύσσεται από ομάδες προγραμματιστών που μοιράζονται τις αρμοδιότητες για τα διάφορα στάδια της διαδικασίας. Οι ομάδες συχνά ανανεώνονται με νέο κόσμο. Σε τέτοιες περιπτώσεις το μείζον πρόβλημα δεν είναι πλέον η υλοποίηση ενός μόνο αλγορίθμου ή η μετατροπή ενός αλγορίθμου σε κώδικα. Το μείζον πρόβλημα είναι η βέλτιστη σχεδίαση και υλοποίηση του κώδικα με στόχους: Επιτάχυνση της φάσης της υλοποίησης Διευκόλυνση της φάσης του ελέγχου Διευκόλυνση της συντήρησης.
13 Συντήρηση Τι περιλαμβάνει η συντήρηση? Επιδιόρθωση σφαλμάτων που προκύπτουν μετά την εγκατάσταση και χρήση του λογισμικού Προσθήκη νέων λειτουργιών λόγω της μεταβολής των αρχικών απαιτήσεων των χρηστών του λογισμικού
14 Προγραμματιστικές απαιτήσεις Για να εξασφαλίσουμε εύκολη συντήρηση, θέλουμε κώδικα ο οποίος: να είναι εύκολο να διαβαστεί και να κατανοηθεί από κάποιον που τον βλέπει για πρώτη φορά (αναγνωσιμότητα -- readability) να ανταποκρίνεται στο μοντέλο που έχουμε για την πραγματικότητα (intuitiveness). να είναι εύκολο να επαναχρησιμοποιηθεί (reusability). Χρειαζόμαστε ένα προγραμματιστικό μοντέλο (programming paradigm) που να μας εξασφαλίζει τα παραπάνω.
15 Spaghetti κώδικας Όλος ο κώδικας μια σειρά εντολών μέσα στη συνάρτηση main(). Αδύνατον να διαβαστεί όταν γίνει πάνω από μερικές εκατοντάδες γραμμές. Πολύ δύσκολη η αποσφαλμάτωση και η αλλαγή του κώδικα γιατί απαιτεί αλλαγές σε πολλά διαφορετικά σημεία.
16 Διαδικασιακός προγραμματισμός Δημιουργία λογικών μονάδων κώδικα στη μορφή συναρτήσεων (functions). Ο κώδικας γίνεται μια σειρά από κλήσεις σε συναρτήσεις. Οι συναρτήσεις μπορούν να οργανωθούν ιεραρχικά όπου η μία καλεί την άλλη. Η αναγνωσιμότητα του κώδικα βελτιώνεται αισθητά. Η επαναχρησιμοποίηση του κώδικα γίνεται πιο εύκολα, και η αποσφαλμάτωση περιορίζεται σε λιγότερα σημεία. Το μοντέλο αυτό χρησιμοποιή9ηκε επιτυχώς για πολλές δεκαετίες.
17 Μειονεκτήματα Όταν πολλές συναρτήσεις πρέπει να χρησιμοποιήσουν τα ίδια δεδομένα, τότε αυτά πρέπει να είναι καθολικά (global) Καθολικές μεταβλητές Οι καθολικές μεταβλητές είναι προσπελάσιμες από οποιαδήποτε συνάρτηση. Συνάρτηση 1 Συνάρτηση 2
18 Μειονεκτήματα Όταν το πρόγραμμα μεγαλώσει, η πρόσβαση στα καθολικά δεδομένα γίνεται δύσκολο να ελεγχθεί Καθολικά δεδομένα Καθολικά δεδομένα Καθολικά δεδομένα Συνάρτηση 1 Συνάρτηση 2 Συνάρτηση 3 Συνάρτηση 4 Συνάρτηση 5 Αλλαγές στα καθολικά δεδομένα έχουν ως αποτέλεσμα να πρέπει να τσεκάρουμε όλες τις συναρτήσεις για να δούμε ποιες επηρεάζονται. Είναι εύκολο μια συνάρτηση να αλλάξει κατά λάθος κάτι που δεν πρέπει. Η ανάγνωση και η αποσφαλμάτωση (debugging) του κώδικα γίνονται πιο δύσκολα.
19 Μειονεκτήματα Ο διαδικασιακός προγραμματισμός δεν μοντελοποιεί σωστά τον πραγματικό κόσμο. Στον φυσικό κόσμο έχουμε οντότητες (αντικείμενα, ανθρώπους) που έχουν χαρακτηριστικά, και μπορούν να εκτελέσουν κάποιες δράσεις. Ο διαδικασιακός προγραμματισμός δεν ομαδοποιεί μαζί τα δεδομένα και τις δράσεις για να ορίσει την αντίστοιχη οντότητα.
20 Αντικειμενοστρεφής προγραμματισμός Στον αντικειμενοστραφή προγραμματισμό οι μεταβλητές και οι συναρτήσεις που επενεργούν πάνω σε αυτές τις μεταβλητές ομαδοποιούνται σε μια αφαίρεση που ονομάζουμε κλάση. Τα αντικείμενα είναι στιγμιότυπα (instances) των κλάσεων. Αποθηκεύουν δεδομένα, και εκτελούν συναρτήσεις πάνω σε αυτά τα δεδομένα. Ένα φυσικό αντικείμενο μπορεί να μοντελοποιηθεί ως ένα αντικείμενο στον ΑΣΠ.
21 Γενική ιδέα σε πρώτη φάση, φανταστείτε μια κλάση σαν ένα struct Χ το οποίο πέρα από τα πεδία του ορίζει και ένα σύνολο από συναρτήσεις μέσω των οποίων το υπόλοιπο λογισμικό επεξεργάζεται τα δεδομένα που αποθηκεύονται στα πεδία μεταβλητών τύπου Χ
22 Παράδειγμα Procedural struct Human { int height; int age; ; void isborn(struct Human *ahuman); void ages(struct Human *ahuman); void grows(struct Human *ahuman, int inc) main(){ struct Human peter; isborn(&peter); ages(&peter); grows(&peter, 10); void isborn(struct Human *ahuman){ ahuman->height = 40; ahuman->age = 0; void ages(struct Human *ahuman){ ahuman->age += 1; void grows(struct Human *ahuman, int inc){ ahuman->height += inc;
23 Παράδειγμα OOP #include <cstdio> using namespace std; class Human { private: int height; int age; public: void Ages(); void IsBorn(); void Grows(int inc); ; void Human::Ages(){ age += 1; // απλούστερος κώδικας!!! void Human::IsBorn(){ height = 40; age = 0; void Human::Grows(int inc){ height += inc; int main(){ Human peter; peter.isborn(); peter.ages(); peter.grows(10); // απλούστερος κώδικας!!!
24 Λίγη ορολογία Τα πεδία height,age τα λέμε χαρακτηριστικά της κλάσης Human Οι συναρτήσεις IsBorn, Ages, Grows ονομάζονται μέθοδοι της κλάσης Human Οι μεταβλητή peter τύπου Human είναι ένα αντικείμενο της κλάσης Human Οι τιμές των πεδίων ενός αντικειμένου κατά τη διάρκεια εκτέλεσης του λογισμικού ορίζουν την κατάσταση του αντικειμένου Οι μέθοδοι της κλάσης ορίζουν τη συμπεριφορά των αντικειμένων της Δηλ. τον τρόπο με τον οποίο μεταβάλλεται η κατάσταση των αντικειμένων της κλάσης όταν κληθεί μια μέθοδος.
25 Ενθυλάκωση (encapsulation) Τα χαρακτηριστικά και οι μέθοδοι χωρίζονται σε public και private. Private χαρακτηριστικά: η επεξεργασία των τιμών τους για ένα αντικείμενο γίνεται μόνο μέσω των μεθόδων της κλάσης (απόκρυψη δεδομένων data hiding). Public μέθοδοι: μπορούν να χρησιμοποιηθούν οπουδήποτε στον κώδικα για την αλλαγή της κατάστασης ενός αντικειμένου της κλάσης τα σφάλματα δημιουργούνται σε σημεία του κώδικα στα οποία γίνεται επεξεργασία δεδομένων (π.χ. ανάθεση τιμών).αν η επεξεργασία γίνεται μέσω συγκεκριμένων μεθόδων τα σφάλματα βρίσκονται εκεί και όχι διάσπαρτα σε όλο τον κώδικα! Ο συνδυασμός δεδομένων και συναρτήσεων μέσα στα αντικείμενα, και η «προστασία» των private δεδομένων μέσω των public συναρτήσεων λέγεται ενθυλάκωση (encapsulation)
26 Μια αναλογία Τα αντικείμενα ως οργανισμοί μέσα σε μια εταιρεία: Κάθε οργανισμός (μισθοδοσία, πωλήσεις, προσωπικό) έχει κάποια δεδομένα. Η πρόσβαση στα δεδομένα γίνεται μόνο μέσα από τις υπηρεσίες που προσφέρει ο οργανισμός. Κανείς άλλος δεν έχει πρόσβαση στα δεδομένα.
27 Μια άλλη αναλογία Το ipod ως αντικείμενο: Έχει κάποια χαρακτηριστικά (φυσικά χαρακτηριστικά, τραγούδια, On/Off, κλπ) και μια κατάσταση. Μπορεί να εκτελέσει συγκεκριμένες δράσεις (TurnOn, TurnOff, Play, Pause, κλπ). Στον πραγματικό κόσμο, δεν υπάρχει μια συνάρτηση Play(iPod,song) η οποία να παίρνει ως ορίσματα το ipod και ένα τραγούδι. Αντιθέτως ζητάμε να εκτελέσουμε τη δράση ipod.play(song). Οι κλάσεις μας προσφέρουν αφαίρεση: Δεν έχει σημασία πως δουλεύει το ipod, αρκεί να εκτελεί τις πράξεις που θέλουμε. Στις Δομές Δεδομένων, οι κλάσεις αντιστοιχούν σε Αφηρημένους Τύπους Δεδομένων.
28 Τι μπορούμε να παραστήσουμε ως αντικείμενα Φυσικά αντικείμενα Ανθρώπους Στοιχεία από user interfaces. Δομές Δεδομένων Συλλογές Δεδομένων Νέους τύπους δεδομένων. Στοιχεία από παιχνίδια. Κλπ
29 Συνάθροιση & Σύνθεση Αντικειμένων Μπορούμε να κατασκευάσουμε αντικείμενα που αποτελούνται από άλλα επιμέρους αντικείμενα επαναχρησιμοποιώντας κώδικα.. class Door { int code;.. ; class Room { Door x;. ; class Building { ; Room parts[10]; Door main_door; main () { Building xxx; Με τις κλάσεις ορίζουμε νέους τύπους δεδομένων
30 Κληρονομικότητα (Inheritance) Φανταστείτε ένα πρόβλημα που έχει ως αντικείμενα πελάτες, υπαλλήλους και άλλα συναφή Τόσο οι πελάτες όσο και οι υπάλληλοι έχουν κοινά χαρακτηριστικά και συμπεριφορά (μεθόδους) Θα πρέπει να φτιάξω 2 κλάσεις. π.χ. Ύψος, βάρος κλπ. Θα χω πολλές φορές τον ίδιο κώδικα.
31 Κληρονομικότητα Για να το αποφύγουμε και να έχουμε καλύτερη επαναχρησιμοποίηση δεδομένων και λειτουργιών χρησιμοποιούμε τον μηχανισμό της κληρονομικότητας. Ορίζουμε μια βασική κλάση (π.χ., Άνθρωπος) Αυτή θα ορίζει τα κοινά χαρακτηριστικά / μεθόδους Η βασική κλάση επαναχρησιμοποιείται για τον ορισμό νέων παράγωγων κλάσεων (π.χ. πελάτης, υπάλληλος). Οι παράγωγες κλάσεις κληρονομούν τα χαρακτηριστικά της βασικής κλάσης αλλά έχουν και επιπλέον δικά τους χαρακτηριστικά και μεθόδους.
32 Σύνοψη Ο αντικειμενοστραφής προγραμματισμός προσφέρει ένα πιο κατανοητό μοντέλο προγραμματισμού, στηριγμένο πάνω στις κλάσεις και τα αντικείμενα. Το μοντέλο αυτό έχει επιπλέον πλεονεκτήματα Ενθυλάκωση (Encapsulation) Ορισμός νέων τύπων δεδομένων Επαναχρησιμοποίηση κωδικα Κληρονομικότητα Σε μεγάλες (και μικρότερες) εταιρείες όλα τα αρκετά μεγάλα συστήματα λογισμικού γίνονται σε γλώσσες αντικειμενοστραφή προγραμματισμού (C++, Java, C#, ). Γλώσσες που δεν είναι κλασσικά αντικειμενοστραφής (π.χ., scripting γλώσσες όπως Python), προσφέρουν δυνατότητες αντικειμενοστραφή προγραμματισμού. Οι βασικές αρχές είναι κοινές.
33 ΔΙΑΔΙΚΑΣΙΑΚΟΣ VS. ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ
34 Ένα απλό παράδειγμα Έστω ένα απλό πρόγραμμα του χειρίζεται πληροφορία για ένα σύνολο ανθρώπων Κάθε άνθρωπος χαρακτηρίζεται από όνομα ηλικία..
35 Spaghetti υλοποίηση # include <stdio.h> # include <stdlib.h> struct Person { char * name; int age; ;
36 int main(){ struct Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0;
37 Προβλήματα Ο κώδικας είναι δύσκολο να διαβαστεί και να συντηρηθεί Π.χ., έστω ότι κατά την εκτέλεση του προγράμματος προκύπτει πρόβλημα λόγω της απουσίας ελέγχου για το αν έχει επιτύχει η δυναμική δέσμευση μνήμης.
38 int main(){ struct Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); /* BOOM!!! */ printf ("%s", y.name); return 0;
39 Debugging Για να το επιλύσει πρέπει να αναζητηθούν όλα τα σημεία του κώδικα στα οποία γίνεται δέσμευση μνήμης για το πεδίο name των εκάστοτε μεταβλητών τύπου Person. αυτός που κάνει την αναζήτηση δεν είναι απαραίτητα αυτός που κατασκεύασε το πρόγραμμα ομάδα ελέγχου ομάδα συντήρησης
40 int main(){ struct Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); /* BOOM!!! */ printf ("%s", y.name); return 0;
41 Διαδικασιακή λύση Ι Προσθήκη ελέγχου σε κάθε σημείο
42 int main(){ struct Person x, y; x.name = (char *) malloc (10* sizeof(char)); if(x.name == NULL) {printf(.. ); return 1; x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); if(y.name == NULL) {printf(.. ); return 1; y.age = 0; /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0;
43 Διαδικασιακή λύση ΙΙ Καλύτερος σχεδιασμός του προγραμματος κατασκευή μιας συνάρτησης για την αρχικοποίηση μεταβλητών τύπου Person ο κώδικας που δεσμεύει δυναμικά μνήμη θα είναι συγκεντρωμένος σε μια συνάρτηση και όχι διάσπαρτος σε όλο το πρόγραμμα.
44 Συνάρτηση αρχικοποίησης # include <stdio.h> struct Person { char * name; int age; ; void init(struct Person *p){ p->name = (char *) malloc (10* sizeof(char)); p->age = 0;
45 int main(){ struct Person x, y; init(&x); /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); init(&y); /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0;
46 Debugging Για επιλύσουμε το πρόβλημα ελέγχου για δέσμευση μνήμης πρέπει να αναζητηθεί η συνάρτηση στην οποία γίνεται δέσμευση μνήμης για το πεδίο name των εκάστοτε μεταβλητών τύπου Person. οι συνθήκες αναζήτησης έχουν βελτιωθεί σε σχέση με το spaghetti μοντέλο μόλις βρούμε την συνάρτηση έχουμε τελειώσει.. μία αλλαγή αντί για πολλές όμως, αυτός που κάνει την αναζήτηση δεν είναι απαραίτητα αυτός που κατασκεύασε το πρόγραμμα Πιθανότατα πρέπει να ελεγχθούν πολλές συναρτήσεις για να βρούμε ποια πρέπει να διορθωθεί
47 # include <stdio.h> struct Person { char * name; int age; ; void init(struct Person *p){ p->name = (char *) malloc (10* sizeof(char)); if (p -> name == NULL) {printf(.. ); exit(1); p->age = 0;
48 int main(){ struct Person x, y; init(&x); /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); init(&y); /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); f(); return 0;
49 Αντικειμενοστρεφής λύση Ομαδοποίηση των δεδομένων Person και του κώδικα που χρησιμοποιείται για την επεξεργασία αυτών των δεδομένων π.χ. της συνάρτησης init(). ορισμός της κλάσης Person.
50 Ορισμός κλάσης # include <cstdlib> # include <cstring> // αυτό είναι σχόλιο!! class Person { public: // τι είναι αυτό το public?? char * name; // πεδία χαρακτηριστικά κλάσης int age; void init(); // μέθοδοι κλάσης δήλωση (declaration) void set_name(char *n); void set_age(int a); char *get_name(); int get_age(); ; // προσοχή στο ερωτηματικό είναι υποχρεωτικό
51 // ορισμός μεθόδων (definition) void Person::init(){ name = (char *) malloc (10* sizeof(char)); // τι είναι αυτό το name??? age = 0; void Person::set_name(char *n) { strcpy(name, n); void Person::set_age(int a) { age = a; // τι είναι αυτό το age??? char *Person::get_name() { return name; int Person::get_age() { return age;
52 int main(){ Person x, y; // δήλωση αντικειμένου x.init(); // κλήση μεθόδου στο αντικείμενο /*... */ x.set_name("name1"); printf ("%s", x.get_name()); y.init(); /*... */ y.set_name("name2"); printf ("%s", y.get_name()); return 0;
53 Πρόβλημα Έστω πάλι πως κατά την εκτέλεση του προγράμματος προκύπτει πρόβλημα λόγω της απουσίας ελέγχου για το αν έχει επιτύχει η δυναμική δέσμευση μνήμης.
54 int main(){ Person x, y; // δήλωση αντικειμένου x.init(); // κλήση μεθόδου στο αντικείμενο /*... */ x.set_name("name1"); printf ("%s", x.get_name()); y.init(); /*... */ y.set_name("name2"); /* ΒΟΟΟΜΜΜ */ printf ("%s", y.get_name()); return 0;
55 Debugging Για επιλύσουμε το πρόβλημα ελέγχου για δέσμευση μνήμης πρέπει να αναζητηθεί η συνάρτηση στην οποία γίνεται δέσμευση μνήμης για το πεδίο name των εκάστοτε μεταβλητών τύπου Person οι συνθήκες αναζήτησης έχουν βελτιωθεί ακόμα περισσότερο σε σχέση με το διαδικαστικό μοντέλο. από τις δεκάδες / εκατοντάδες συναρτήσεις/μεθόδους του προγράμματος γνωρίζουμε ποιες χρησιμοποιούνται για την επεξεργασία μεταβλητών τύπου Person από τη δήλωση της κλάσης..
56 # include <cstdlib> # include <cstring> class Person { public: char * name; // πεδία χαρακτηριστικά κλάσης int age; void init(); // μέθοδοι κλάσης void set_name(char *n); void set_age(int a); char *get_name(); int get_age(); μόνο αυτές οι μέθοδοι είναι ύποπτες!!! ;
57 void Person::init(){ name = (char *) malloc (10* sizeof(char)); if (name == NULL) {printf( ); exit(1); age = 0; void Person::set_name(char *n) { strcpy(name, n); void Person::set_age(int a) { age = a; char *Person::get_name() { return name; int Person::get_age() { return age;
58 int main(){ Person x, y; // δήλωση αντικειμένου x.init(); // κλήση μεθόδου στο αντικείμενο /*... */ x.set_name("name1"); printf ("%s", x.get_name()); y.init(); /*... */ y.set_name("name2"); printf ("%s", y.get_name()); καμιά αλλαγή εδώ!!! return 0;
59 Συντήρηση Η χρήση κλάσεων από μόνη της λύνει το πρόβλημα μας???? δηλαδή την εύρεση των σημείων του κώδικα στο οποίο πρέπει να προστεθούν έλεγχοι Γενικά όχι, αν πρόκειται για ένα λογισμικό μεγάλης κλίμακας ο κώδικας που κατασκευάζεται από έναν προγραμματιστή μπορεί να χρησιμοποιηθεί από έναν άλλο προγραμματιστή τι μπορεί να προκύψει σε αυτή την περίπτωση???
60 # include <cstdio> # include <cstdlib> # include <cstring> class Person { public: char * name; int age; void init(); void set_name(char *n); void set_age(int a); char *get_name(); int get_age(); ;
61 Πρόβλημα Ότι (πεδίο / μέθοδο) δηλώνουμε σαν public σε μια κλάση μπορεί να χρησιμοποιηθεί σε όλο τον υπόλοιπο κώδικα. Άρα ένας απρόσεκτος προγραμματιστής που θα χρησιμοποιήσει αντικείμενα της κλάσης μας μπορεί να αρχικοποιεί απευθείας τα πεδία αυτών των αντικειμένων, ξεχνώντας παράλληλα να κάνει τους απαραίτητους ελέγχους..
62 int main(){ Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0;
63 Encapsulation Η λύση στο πρόβλημα ανεξέλεγκτη πρόσβαση σε πεδία και μεθόδους μιας κλάσης από άλλους προγραμματιστές είναι η αρχή της ενθυλάκωσης (encapsulation) σε κάθε κλάση διαχωρίζει ο προγραμματιστής που την υλοποίησε ποια πεδία και μέθοδοι (public) μπορούν να χρησιμοποιηθούν από όλο τον υπόλοιπο κώδικα ποια πεδία και μέθοδοι (private) μπορούν να χρησιμοποιηθούν μόνο μέσω κλήσης των public μεθόδων της κλάσης μια συνήθης πρακτική την οποία πρέπει να ακολουθείτε είναι ότι όλα τα πεδία τα δηλώνουμε private
64 # include <cstdio> # include <cstdlib> # include <cstring> class Person { private: char * name; int age; public: void init(); void set_name(char *n); void set_age(int a); char *get_name(); int get_age(); ;
65 int main(){ Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0; προσπάθεια πρόσβασης σε private πεδία COMPILE ERRORS!!!
66 Compiling τα προγράμματα C++ τα αποθηκεύουμε σε αρχεία.cpp τα κάνουμε compile χρησιμοποιώντας g++ αντί για gcc
67 Ένα άλλο παράδειγμα Έστω μια εφαρμογή διαχείρισης Αριθμών Φορολογικού Μητρώου (ΑΦΜ).
68 Ανάλυση απαιτήσεων δύο βασικές αρμοδιότητες καταχώρηση νέων αριθμών φορολογικού μητρώου ΑΦΜ = ακέραιος αριθμός με 5 ψηφία καταγραφή του πλήθους των ΑΦΜ που καταλήγουν σε 0, 1, 2,, 9
69 Σχεδίαση καταχώρηση νέων αριθμών issuenew( ) : ανάγνωση και αποθήκευση σε ένα πίνακα Α ενός νέου ΑΦΜ checkvalidity( ): επαλήθευση αριθμών φορολογικού μητρώου που υπάρχουν στον πίνακα Α έλεγχος αν είναι 5ψήφιοι. καταγραφή του πλήθους των ΑΦΜ που καταλήγουν σε 0, 1, 2,, 9 countbylastdigit( ): καταγραφή του πλήθους των ΑΦΜ που καταλήγουν σε 0, 1, 2,, 9 σε δεύτερο πίνακα Β printnumbers( ): εμφάνιση στην οθόνη του πίνακα Β
70 Υλοποίηση #include <stdio.h> void issuenew (int A[], int *size); void checkvalidity(int A[], int size); void countbylastdigit(int A[], int size, int B[]); void printnumbers(int B[]);
71 Υλοποίηση int main(){ int A[100]; int currentsize = 0; int B[10]; issuenew(a, ¤tsize); issuenew(a, ¤tsize); issuenew(a, ¤tsize); checkvalidity(a, currentsize); countbylastdigit(a, currentsize, B); printnumbers(b); return 0;
72 Υλοποίηση void issuenew (int A[], int *size){ int input; printf("enter new number: "); scanf("%d", &input); A[*size] = input; (*size)++;
73 Υλοποίηση void checkvalidity(int A[], int size){ int i; int length; int temp; for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\nx");
74 Υλοποίηση void countbylastdigit(int A[], int size, int B[]){ int i; int lastdigit; for(i = 0; i < 10; i++) B[i] = 0; for(i = 0; i < size; i++){ lastdigit = A[i] % 10; B[lastDigit]++; void printnumbers(int B[]){ int i; printf("count by last digit:\n"); for (i = 0; i < 10; i++){ printf("%d: %d\n", i, B[i]);
75 Συντήρηση το φορολογικό σύστημα αλλάζει και τα ΑΦΜ γίνονται ποιες συναρτήσεις επηρεάζονται από αυτή την αλλαγή?
76 Συντήρηση void issuenew (int A[], int *size){ int input; printf("enter new number: "); scanf("%ld", &input); A[*size] = input; (*size)++;
77 Συντήρηση void checkvalidity(int A[], int size){ int i; int length; int temp; for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\nx");
78 void checkvalidity(int A[], int size){ int i; int length; int temp; for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\nx");
79 Συντήρηση void checkvalidity(int A[], int size){ int i; int length; int temp; for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 6) { printf("error with number in position %d\n", i); return; printf("all OK!\nx");
80 void countbylastdigit(int A[], int size, int B[]){ int i; int lastdigit; for(i = 0; i < 10; i++) B[i] = 0; for(i = 0; i < size; i++){ lastdigit = A[i] % 10; B[lastDigit]++; void printnumbers(int B[]){ int i; printf("count by last digit:\n"); for (i = 0; i < 10; i++){ printf("%d: %d\n", i, B[i]);
81 Σχεδίαση Στον αντικειμενοστρεφή προγραμματισμό για κάθε αρμοδιότητα μιας εφαρμογής ορίζουμε μια νέα κλάση ομαδοποιούμε δεδομένα και συναρτήσεις οι οποίες διαχειρίζονται αυτά τα δεδομένα μια κλάση είναι σαν ένα struct στη C το οποίο αποτελείται από ένα σύνολο πεδίων / χαρακτηριστικών ένα σύνολο συναρτήσεων / μεθόδων
82 Υλοποίηση #include <cstdio> class ManageAFM{ private: int A[100]; int size; public: void init(); void issuenew(); void checkvalidity(); int getlastdigitsandsize(int LastDigits[]); /* επιστρέφει το size και τα τελευταία ψηφία των Α[i] */ ;
83 Υλοποίηση void ManageAFM::init(){ size = 0; void ManageAFM::issueNew (){ int input; printf("enter new number: "); scanf("%d", &input); A[size] = input; size++;
84 Υλοποίηση void ManageAFM::checkValidity(){ int i; int length; int temp; for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\nx");
85 Υλοποίηση int ManageAFM::getLastDigitsAndSize(int LastDigits[]){ int i; for(i = 0; i < size; i++){ LastDigits[i] = A[i] % 10; return size;
86 Υλοποίηση class AFMStatistics{ private: int B[10]; public: void init(); void countbylastdigit(int LastDigits[], int size); void printnumbers(); ; void AFMStatistics::init(){ int i; for(i = 0; i < 10; i++) B[i] = 0;
87 Υλοποίηση void AFMStatistics::countByLastDigit(int LastDigits[], int size){ int i; int lastdigit; for(i = 0; i < size; i++){ lastdigit = LastDigits[i]; B[lastDigit]++; void AFMStatistics::printNumbers(){ int i; printf("count by last digit:\n"); for (i = 0; i < 10; i++){ printf("%d: %d\n", i, B[i]);
88 int main(){ ManageAFM manager; AFMStatistics stats; int LastDigits[100]; int currentsize; manager.init(); manager.issuenew(); manager.issuenew(); manager.issuenew(); manager.checkvalidity(); currentsize = manager.getlastdigitsandsize(lastdigits); stats.init(); stats.countbylastdigit(lastdigits, currentsize); stats.printnumbers(); return 0;
89 Συντήρηση - τι κερδίσαμε??? ποιες μέθοδοι εξαρτώνται από τον πίνακα με τα ΑΦΜ (πίνακας Α)
90 Συντήρηση - τι κερδίσαμε??? void ManageAFM::init(){ size = 0; void ManageAFM::issueNew (){ int input; printf("enter new number: "); scanf("%ld", &input); A[size] = input; size++;
91 Συντήρηση - τι κερδίσαμε??? void ManageAFM::checkValidity(){ int i; int length; int temp; for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\nx");
92 Συντήρηση - τι κερδίσαμε??? int ManageAFM::getLastDigitsAndSize (int LastDigits[]){ int i; for(i = 0; i < size; i++){ LastDigits[i] = A[i] % 10; return size;
93 Συντήρηση - τι κερδίσαμε??? #include <cstdio> class ManageAFM{ private: int A[100]; int size; public: void init(); void issuenew(); void checkvalidity(); int getlastdigitsandsize (int LastDigits[]); ;
94 Συντήρηση - τι κερδίσαμε??? ποιες μέθοδοι εξαρτώνται από τον πίνακα με τα στατιστικά (πίνακας Β)??
95 void AFMStatistics::init(){ int i; for(i = 0; i < 10; i++) B[i] = 0; void AFMStatistics::countByLastDigit (int LastDigits[], int size){ int i; int lastdigit; for(i = 0; i < size; i++){ lastdigit = LastDigits[i]; B[lastDigit]++; void AFMStatistics::printNumbers(){ int i; printf("count by last digit:\n"); Συντήρηση - τι κερδίσαμε??? for (i = 0; i < 10; i++){ printf("%d: %d\n", i, B[i]);
96 Συντήρηση - τι κερδίσαμε??? class AFMStatistics{ private: int B[10]; public: void init(); void countbylastdigit (int LastDigits[], int size); void printnumbers (); ;
97 Συντήρηση - τι κερδίσαμε??? οι μέθοδοι που εξαρτώνται από τα εκάστοτε δεδομένα μιας εφαρμογής είναι αυτές που τα χειρίζονται ποιες τα χειρίζονται?? μόνο αυτές που ορίζονται στην ίδια κλάση με τα δεδομένα στην κλάση της οποίας η αρμοδιότητα είναι η διαχείριση των δεδομένων
98 Συντήρηση - τι κερδίσαμε??? άρα για να ανακαλύψουμε ποιον κώδικα πρέπει να ελέγξουμε μετά από ένα σενάριο συντήρησης που αφορά τα δεδομένα μιας κλάσης αρκεί να εξετάσουμε ποιες μέθοδοι ορίζονται σε αυτή την κλάση
Αντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διαφάνειες του μαθήματος Απόστολος Ζάρρας Πάνος Βασιλειάδης Παναγιώτης Τσαπάρας www.cs.uoi.gr/~pvassil/courses/oop/ Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό (Object
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Διαδικαστικά
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Διαδικαστικά Συστάσεις Ποιος είμαι εγώ: Παναγιώτης Τσαπάρας Email: tsap@cs.uoi.gr Γραφείο: Β.3 (προτιμώμενες ώρες: μετά τις 10, πριν τις 7) Web: http://www.cs.uoi.gr/~tsap
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Η εξέλιξη των γλωσσών προγραμματισμού Η εξέλιξη των γλωσσών προγραμματισμού είναι μια διαδικασία αφαίρεσης Στην αρχή ένα πρόγραμμα ήταν
Πληροφορική 2. Γλώσσες Προγραμματισμού
Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων
Εισαγωγή στον Προγραμματισμό (με. τη C)
Υποχρεωτικό Μάθημα 3 ου Εξαμήνου Χειμερινό Εξάμηνο Ακ. Έτους 20 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Εισαγωγή στον Προγραμματισμό (με τη C) Διδάσκουσα: Φατούρου Παναγιώτα faturu [at] csd.uoc.gr
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή Οποιαδήποτε κλάση
Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java
Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,
Προγραμματισμός Η/Υ 1 (Εργαστήριο)
Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες
Μεθόδων Επίλυσης Προβλημάτων
ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 9 Συναρτήσεις Μέρος II Θέματα ιάλεξης Μη- ομημένος
Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή
Διάλεξη 2η: Αλγόριθμοι και Προγράμματα
Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα
Δομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Ενότητα 14 Δυναμική διαχείριση μνήμης Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Στατική δέσμευση μνήμης Με τη δήλωση απλών μεταβλητών
Εισαγωγή στον δομημένο προγραμματισμό
Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Εισαγωγή στον δομημένο προγραμματισμό Ενότητα 12 η : Δυναμική Ανάθεση Θέσης Αν. καθηγητής Στεργίου Κώστας e-mail: kstergiou@uowm.gr Τμήμα Μηχανικών Πληροφορικής
Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and
Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)
Κεφάλαιο 8.7 Πολυδιάστατοι Πίνακες (Διάλεξη 19) Πολυδιάστατοι πίνακες Μέχρι τώρα μιλούσαμε για Μονοδιάστατους Πίνακες. ή π.χ. int age[5]= {31,28,31,30,31; για Παράλληλους πίνακες, π.χ. int id[5] = {1029,1132,1031,9991,1513;
Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου
Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής
Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)
Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε
Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;
Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class
Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ
Επανάληψη για τις Τελικές εξετάσεις (Διάλεξη 24) Εισαγωγή Το μάθημα EPL032 έχει ως βασικό στόχο την επίλυση προβλημάτων πληροφορικής με την χρήση της γλώσσας προγραμματισμού C. Επομένως πρέπει: Nα κατανοήσετε
Η γλώσσα προγραμματισμού C
Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η
ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών
ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών ΜΟΡΥΕ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ Διαδικασιακός ή Διαδικαστικός (Procedural)
Δομημένος Προγραμματισμός
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 1 η Εισαγωγή στη Γλώσσα C Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή
Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr
Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην
Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός
Περιεχόμενα. Πρόλογος... 21
Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31
Μεθόδων Επίλυσης Προβλημάτων
ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 13 Πίνακες & Συναρτήσεις Εισαγωγή Στις προηγούμενες
Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13
Wrapper Classes, Abstract Classes and Interfaces Διάλεξη #13: Μεταβλητές/μέθοδοι κλάσης, αφηρημένες κλάσεις και διαπροσωπείες Μεταβλητές /πεδία κλάσης [class variables] Τα αντικείμενα ανήκουν σε κλάσεις
Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014
Πίνακες 0 Μαρτίου 014 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα του συγκεκριμένου τύπου. Στην περίπτωση που θέλουμε
Προγραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας
Προγραμματισμός ΙI (Θ)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Αντικείμενα μέσα σε αντικείμενα Ορίζουμε κλάσεις για να ορίσουμε τύπους δεδομένων τους οποίους χρειαζόμαστε Π.χ., ο τύπος δεδομένων Date
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 4ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος Συναρτήσεις (functions) 56 Τεμαχισμός του προγράμματος σε μικρότερα κομμάτια που είναι πιο κατανοητά, πιο εύκολα
Δομημένος Προγραμματισμός
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 5: Απαριθμητές (enums) Δομές (structures)και Ενώσεις (unions) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Απαριθμητές - Δομές, φωλιασμένες δομές, τρόποι δήλωσης
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα
Εργαστήριο 9: Αρχεία
Εργαστήριο 9: Αρχεία Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αρχεία, Είσοδος/Έξοδος από/προς αρχεία - Δυαδικά αρχεία - Παραδείγματα ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ.
ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ Αντικειμενοστραφής προγραμματισμός Web Sites:
Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)
Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα τοποθετούνται
Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1
Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων Προγραμματισμός II 1 lalis@inf.uth.gr Βιβλιοθήκες Τμήματα λογισμικού ευρύτερης χρησιμότητας που έχουν σχεδιαστεί με σκοπό να διευκολύνουν την ανάπτυξη πολλών διαφορετικών
Εισαγωγή στον Προγραμματισμό με C++
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό με C++ Ενότητα # 9: Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό Κωνσταντίνος Κουκουλέτσος Τμήμα
Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C
Κεφάλαιο 9.1-9.2 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Ένα string είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης κτλ. Π.χ. Hello How are you? 121212 *Apple#123*%
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Κλάσεις και αντικείμενα #include <iostream.h<
Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 3 η Είσοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή
Μεθόδων Επίλυσης Προβλημάτων
ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 12 Πολυδιάστατοι Πίνακες Πολυδιάστατοι πίνακες
Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.
1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα
Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ Σχεδιασμός και υλοποίηση υποδομής σημείωσης διεργασιών στον
Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ
Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (
Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#
Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct
Διάλεξη 11η: Δείκτες, μέρος 1
Διάλεξη 11η: Δείκτες, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Pointers I CS100, 2016-2017
FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017
FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017 Μ4. Συναρτήσεις, Υπορουτίνες, Ενότητες - Ασκήσεις Γεώργιος Παπαλάμπρου Επικ. Καθηγητής ΕΜΠ Εργαστήριο Ναυτικής Μηχανολογίας george.papalambrou@lme.ntua.gr
Μεθόδων Επίλυσης Προβλημάτων
ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 9 Συναρτήσεις Μέρος I Θέματα ιάλεξης Μη- ομημένος
Επανάληψη για τις Τελικές εξετάσεις
Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού
Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ
Εισαγωγή στον Προγραµµατισµό Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Συναρτήσεις 19.11.16 Β. Ντουφεξή 2 Προβλήματα: Οσο μεγαλώνουν τα προγράμματα, γίνονται πιο πολύπλοκα.
Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Προχωρημένα Θέματα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ανακατεύθυνση Εισόδου/Εξόδου Συνήθως η τυπική είσοδος ενός προγράμματος (stdin) προέρχεται
Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2
Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή
3 Αλληλεπίδραση Αντικειμένων
Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 2:Αλφαριθμητικές Σειρές Χαρακτήρων (Strings)- Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγικές Έννοιες σε Strings(Αρχικοποίηση, Ανάγνωση & Εκτύπωση) Πίνακες από Strings
Στοίβες με Δυναμική Δέσμευση Μνήμης
ΕΠΛ 231 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ 10/02/10 Παύλος Αντωνίου Στοίβες με Δυναμική Δέσμευση Μνήμης Στοίβα: Στοίβα είναι μια λίστα που έχει ένα επιπλέον περιορισμό. Ο περιορισμός είναι ότι οι εισαγωγές
Κεφάλαιο 3.1, : Συναρτήσεις I. (Διάλεξη 11)
Κεφάλαιο 3.1,3.3-3.4: Συναρτήσεις I (Διάλεξη 11) 11-1 Μη-Δομημένος Προγραμματισμός Το πρόγραμμα στα αριστερά δεν είναι Αρθρωτό (δεν έχει σωστή δομή). Όλη η λειτουργικότητα ορίζεται μέσα στην main. Το αποτέλεσμα
Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εγγραφές Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η Ανάγκη Ομαδοποίησης Πολλές φορές έχουμε πληροφορίες διαφορετικού τύπου οι οποίες όμως έχουν μεγάλη
Wrapper Classes, Abstract Classes and Interfaces
Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους
C: Από τη Θεωρία στην Εφαρμογή
Δρ. Γ. Σ. Τσελίκης Δρ. Ν. Δ. Τσελίκας C: Από τη Θεωρία στην Εφαρμογή Ενδεικτικές Ασκήσεις από το Βιβλίο C: Από τη Θεωρία στην Εφαρμογή (Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας) Ενδεικτικές Ασκήσεις του Βιβλίου Ε.Α.1
(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)
(Κεφάλαιο 2.7 και 12) Αρχεία στην C (Διάλεξη 15) 14-1 Επανάληψη στην Αποθήκευση (Storage) Για να αποθηκεύσουμε δεδομένα από ένα πρόγραμμα, πρέπει να χρησιμοποιήσουμε την Δευτερεύουσα Μνήμη 14-2 Επανάληψη
Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εισαγωγή στην C++ Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η γλώσσα C++ Σχεδιάστηκε το 1979 από τον Bjarne Stroustrup στα Bell Laboratories Βασίζεται
Δομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 4: Δείκτες και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής θέματα: Πίνακες Δεικτών, Παραδείγματα, Πολυδιάστατοι πίνακες Πέρασμα παραμέτρων σε προγράμματα C Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες:
Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Σκοπός του μαθήματος Σκοπός του παρόντος μαθήματος είναι να μάθετε να κάνετε εισαγωγή δεδομένων σε πίνακες και περαιτέρω επεξεργασία
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08 Constructors (Κατασκευαστές) Ειδικός τύπος μεθόδων που δημιουργούν αντικείμενα μιας κλάσης και: Εκτελούνται κατά την αρχικοποίηση των αντικειμένων
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Βιβλιογραφία "C Προγραμματισμός", Deitel & Deitel, Πέμπτη Έκδοση, Εκδόσεις
Προγραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15
Προγραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16
Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1
Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής
3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις
3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών Ακαδηµαϊκό έτος 2010 2011, Χειµερινό εξάµηνο Ασκήσεις Επανάληψης Ενδιάµεσης
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο2-Νο3
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο2-Νο3 1 Κανόνες Ομαλής Λειτουργίας Ερχόμαστε στην ώρα μας Δεν καπνίζουμε και τρώμε εντός της αίθουσας Επιτρέπετε το
#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,
Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες
Στόχοι και αντικείμενο ενότητας Ο τύπος του Πίνακα (βλ. ενότητα #2α) Ορισμός και αρχικοποίηση Αποθήκευση πινάκων στη μνήμη Πολυδιάστατοι πίνακες #6. Πίνακες και Δείκτες Ο τύπος του Δείκτη Η έννοια του
ΠΡΟΧΩΡΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Χαρίδημος Κονδυλάκης Εισαγωγή
ΠΡΟΧΩΡΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Χαρίδημος Κονδυλάκης Εισαγωγή ΟΡΓΑΝΩΣΗ ΜΑΘΗΜΑΤΟΣ Πληροφορίες Διδάσκοντα Διδάσκοντας: Χαρίδημος Κονδυλάκης Email: Kondylak@ics.forth.gr Εβδομαδιαίες Ώρες Διδασκαλίας: 2 ώρες
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 1: Αντικειμενοστραφής Προγραμματισμός Εισαγωγή OBJECT-ORIENTED PROGRAMMING ΔΙΔΑΣΚΟΝΤΕΣ: Iωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ
Προγραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 12: Συναρτήσεις & Δείκτες Αλλαγή του «εξωτερικού» περιβάλλοντος Αν σαν παράμετρος μιας συνάρτησης δοθεί μια μεταβλητή, σαν πραγματική παράμετρος θα περαστεί η τιμή της.
Προγραμματισμός Η/Υ 1 (Εργαστήριο)
Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 8: Πίνακες Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1
Περιεχόμενα. Πρόλογος... 17
Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για
Μεθόδων Επίλυσης Προβλημάτων
ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 10 Αρχεία στην C Επανάληψη στην Αποθήκευση (Storage)
Εισαγωγή στην επιστήμη των υπολογιστών
Εισαγωγή στην επιστήμη των υπολογιστών Λογισμικό Υπολογιστών Γλώσσες Προγραμματισμού 1 Εξέλιξη Οι γλώσσες προγραμματισμού είναι σύνολα από προκαθορισμένες λέξεις οι οποίες συνδυάζονται σε προγράμματα σύμφωνα
Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python
Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Β Μέρος Δομή Ελέγχου if-elif-else Επαναληπτική Δομή Ελέγχου while Επαναληπτική Δομή Ελέγχου for Αλληλεπίδραση χρήστη-προγράμματος Συναρτήσεις Η δομή
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο
Προγραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων με κοινά χαρακτηριστικά και κοινή συμπεριφορά. Ένα καλούπι/πρότυπο
Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT
Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Οκτώβριος 2018 1/28 1 (implicit) μετατροπές 2 (Functions) 3 (Pointers) 4 (Arrays) 2/28 (implicit)