Προγραμματισμός Υπολογιστών με C++ 1η διάλεξη (2012-13) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1
Γιατί να μάθει κανείς C++; Απαιτούμενο προσόν για πολλές θέσεις εργασίας. Υψηλού επιπέδου προγραμματισμός. Διαδικασιακός προγραμματισμός. Αντικειμενοστρεφής προγραμματισμός. Γενικευμένος προγραμματισμός. Πλήρης έλεγχος στον προγραμματιστή. Όπως και η C, υποκαθιστά σε πολλές περιπτώσεις τη χρήση συμβολογλώσσας (assembly). Μεγάλη ταχύτητα εκτέλεσης. Αντίτιμο: Περίπλοκη γλώσσα. Η εκμάθησή της απαιτεί υπομονή, χρόνο και εξάσκηση. 2
Τι θα ακούσετε σήμερα Οργάνωση του μαθήματος και συμβουλές. Ιστοσελίδες και επικοινωνία. Διαλέξεις, εργαστήρια και εργασίες. Διαφάνειες, βιβλιογραφία. Πώς θα περάσω το μάθημα; Ιστορικά στοιχεία και σχέση με τις C, Java. Πρώτα βήματα με τη C++. Απλά παραδείγματα προγραμμάτων. Μεταγλώττιση προγραμμάτων. Μεταγλωττιστές που θα χρησιμοποιήσουμε. 3
Ιστοσελίδες και επικοινωνία Ιστοσελίδες μαθήματος. http://eclass.aueb.gr/. Γραφτείτε στο μάθημα για να στέλνετε μηνύματα, να λαμβάνετε ανακοινώσεις κλπ. Διαφάνειες διαλέξεων, ανακοινώσεις, σύνδεσμοι, κλπ. Περιοχές συζητήσεων. Αν ξέρετε την απάντηση, απαντήστε! Επικοινωνία. Στείλτε πρώτα μήνυμα στην κατάλληλη περιοχή συζητήσεων ή ρωτήστε τους υπευθύνους των εργαστηρίων. Ώρες γραφείου: βλ. ιστοσελίδες διδάσκοντα. Μηνύματα ηλεκτρονικού ταχυδρομείου μόνο αν είναι αδύνατη η χρήση των ομάδων συζητήσεων (π.χ. προσωπικά θέματα). 4
Διαλέξεις Οι διαφάνειες των διαλέξεων: Βρίσκονται ήδη στο e-class. Δεν αναπληρώνουν τα συγγράμματα, στα οποία θα πρέπει να ανατρέχετε για περισσότερες πληροφορίες. Κανόνες διαλέξεων (και ευγένειας): Παρακαλώ μην μπαίνετε στο αμφιθέατρο μετά την έναρξη του μαθήματος. Αν αργήσατε, παρακαλώ περιμένετε το διάλειμμα. Αν θέλετε να φύγετε, κάντε το αθόρυβα. Μη μιλάτε μεταξύ σας, μην καπνίζετε, μην καταναλώνετε φαγητά, αναψυκτικά κλπ. 5
Εργαστήρια και εργασίες Εργαστήρια (από την επόμενη εβδομάδα): Απορίες, ασκήσεις, βοήθεια στις εργασίες. Προαιρετική παρακολούθηση. Εργαστηριακές τάξεις. Ο αριθμός των τάξεων και οι υπεύθυνοί τους θα ανακοινωθούν στο e-class. Εργασίες: 4 υποχρεωτικές εργασίες. 20% του τελικού βαθμού. Αυστηρά ανά ζεύγη: ίδια ζεύγη για όλες τις εργασίες, άτομα της ίδιας εργαστηριακής τάξης σε κάθε ζεύγος. Ατομική προφορική εξέταση στο τέλος του εξαμήνου. Δείτε και το έγγραφο γενικών οδηγιών των εργασιών στο e-class για περισσότερες πληροφορίες. 6
Προτεινόμενα βιβλία Μπορείτε να λάβετε δωρεάν ένα από τα ακόλουθα: Deitel, H.M. και Deitel, P.J., «C++ Προγραμματισμός», 6η έκδοση, Εκδόσεις Μ. Γκιούρδας, 2010. Liberty, J. και Jones,B., «Πλήρες Εγχειρίδιο της C++», 5η έκδοση, Εκδόσεις Μ. Γκιούρδας, 2006. Schildt, H., «Μάθετε τη C++ από το Μηδέν», 3η έκδοση, Κλειδάριθμος, 2004. Schildt, H., «C++ Βήμα προς Βήμα», 2η έκδοση, Εκδόσεις Μ. Γκιούρδας, 2005. Μπορείτε να τα ξεφυλλίσετε στη βιβλιοθήκη. Δίνονται ως βοηθήματα και βιβλία αναφοράς. Οι διαλέξεις δεν ακολουθούν κάποιο συγκεκριμένο βιβλίο. Η βιβλιοθήκη έχει και πολλά άλλα βιβλία C++! Επίσης, υπάρχουν βιβλία που διατίθενται δωρεάν σε ηλεκτρονική μορφή (βλ. ιστοσελίδα συνδέσμων στο e-class). 7
Προαπαιτούμενες γνώσεις «Εισαγωγή στον Προγραμματισμό Υπολογιστών» «Προγραμματισμός Υπολογιστών με Java» Το μάθημα απευθύνεται σε φοιτητές που ξέρουν Java. Μηχανισμοί που είναι κοινοί στις δύο γλώσσες θεωρούνται γνωστοί. «Δομές Δεδομένων» Ένα μέρος του μαθήματος εξετάζει πώς μπορούν να υλοποιηθούν σε C++ δομές δεδομένων, σε χαμηλότερο επίπεδο από ό,τι στο μάθημα των Δομών Δεδομένων (όπου χρησιμοποιείται Java). Π.χ. με δείκτες και δυναμική καταχώριση μνήμης, χωρίς αυτόματη αποκομιδή απορριμάτων. Το μάθημα απευθύνεται σε φοιτητές που παρακολουθούν ταυτόχρονα τις Δομές Δεδομένων (ή τις έχουν ήδη περάσει). 8
Πώς θα περάσω το μάθημα; Παρακολούθηση διαλέξεων και τήρηση σημειώσεων. Πάνω στις διαφάνειες, αλλά και πρόσθετες σημειώσεις από τον πίνακα. Μελέτη διαφανειών και σημειώσεων μετά από κάθε διάλεξη. Όπου χρειάζεται, μελέτη σχετικών τμημάτων βιβλίων. Εξάσκηση στον υπολογιστή κατά το διάβασμα. Ενεργή συμμετοχή στα εργαστήρια. Παρακολούθηση των περιοχών συζητήσεων στο e-class. Σοβαρή ενασχόληση με τις εργασίες. Επανάληψη μέσω των διαφανειών πριν τις εξετάσεις. Λύσιμο παλαιών θεμάτων εξετάσεων. 9
Ιστορικά στοιχεία: η γλώσσα C Δεκαετία '70: Ο D. Ritchie δημιουργεί στα Bell Labs τη C επηρεασμένος από τις B και BCPL. Η C χρησιμοποιείται στην ανάπτυξη του UNIX. Υποκαθιστά σε πολλές περιπτώσεις τη χρήση συμβολογλώσσας (assembly). 1978: The C Programming Language των Kernighan & Ritchie. Δεκαετία '80: Η C σταδιακά κυριαρχεί. Πρώτα πρότυπα ANSI C (1989) και ISO C (1999). 10
Ιστορικά στοιχεία: C και C++ Δεκαετία '80: Ο B. Stroustrup δημιουργεί στα Bell Labs την C++ ως επέκταση της C. Η C++ υποστηρίζει αντικειμενοστρεφή, διαδικασιακό και γενικευμένο προγραμματισμό. Πρώτο πρότυπο ANSI/ISO C++ (1998). Πρόσφατο νέο πρότυπο ISO C++ (2011). Πολλοί μεταγλωττιστές υποστηρίζουν ήδη τις περισσότερες προσθήκες της C++11, αλλά τα περισσότερα βιβλία όχι... H C είναι περίπου υποσύνολο της C++, αλλά υπάρχουν εξαιρέσεις και πρακτικές της C που δεν συνιστώνται στην C++. Tις σκεφτόμαστε ως διαφορετικές γλώσσες. 11
C++ και Java Δεκαετία '90: Η Sun (τώρα μέρος της Oracle) δημιουργεί την Java, δανειζόμενη πολλά στοιχεία από τη C++. Παρόλο που η Java μοιάζει με τη C++, πρόκειται για διαφορετικές γλώσσες. Π.χ: Η C++ επιτρέπει συναρτήσεις που δεν είναι μέθοδοι τάξεων. Η C++ επιτρέπει τη χρήση δεικτών και δεν παρέχει αυτόματη αποκομιδή απορριμμάτων. (Η C++11 καθορίζει μηχανισμούς αποκομιδής απορριμάτων, αλλά η υποστήριξή τους από τους μεταγλωττιστές είναι προαιρετική). Ο κάθε μεταγλωττιστής της C++ παράγει εκτελέσιμο κώδικα για συγκεκριμένο επεξεργαστή. C++: περισσότερες δυνατότητες, πιο δύσκολη. 12
Μεταγλώττιση προγραμμάτων αρχεία πηγαίου κώδικα (σε (++ C part1.cpp, part2.cpp, προεπεξεργαστής αρχεία πηγαίου κώδικα με τροποποιήσεις του προεπεξεργαστή μεταγλωττιστής αρχεία αντικειμενικού κώδικα (κώδικας ( μηχανής part1.o, part2.o, συνδέτης βιβλιοθήκες αρχείο εκτελέσιμου κώδικα (κώδικας ( μηχανής myprog.exe 13
Ένα πρώτο πρόγραμμα σε C++ #include <iostream> using namespace std; // Εντολή προς τον προεπεξεργαστή. int main( ) { cout << "Το πρώτο μου πρόγραμμα\n"; cout << "Γεια σου " << "κόσμε!" << endl; /* cout << "Αυτό δεν τυπώνεται." << endl; cout << "Ούτε και αυτό." << endl; */ return 0; // Επιστρέφεται στο λειτουργικό. Όλα καλά. } Σε παλιότερους μεταγλωττιστές γράφουμε: #include <iostream.h> χωρίς το using namespace. 14
Μετά την προεπεξεργασία Tο #include <iostream>... δηλώσεις από το iostream εισάγει εδώ τα περιεχόμενα... δηλώσεις από το iostream του αρχείου κεφαλίδας using namespace std; iostream. Το αρχείο αυτό υπάρχει σε έναν ειδικό φάκελο του συστήματος. Περιέχει δηλώσεις που χρειάζονται π.χ. για να χρησιμοποιήσουμε το cout. int main( ) { cout << "Το πρώτο μου πρόγραμμα\n"; cout << "Γεια σου " << "κόσμε!" << endl; return 0; } 15
Ένα πιο σύνθετο πρόγραμμα #include <iostream> using namespace std; int compute(int arg) { return 2 * arg; } int main( ) { int i = 5; cout << compute(i) << endl << i << endl; return 0; } 16
Δηλώσεις και ορισμοί συναρτήσεων #include <iostream> using namespace std; int compute(int arg); int main( ) { int i; cin >> i; cout << compute(i) << endl; return 0; } // Δήλωση της compute. // Είσοδος από το πληκτρολόγιο. // Χρήση της compute πριν από // τον ορισμό της. int compute(int arg) { return 2 * arg; } // Ορισμός της συνάρτησης. 17
Συναρτήσεις που δεν επιστρέφουν τιμές #include <iostream> using namespace std; void compute(float); int main( ) { float f; cin >> f; compute(f); return 0; } void compute(float arg) { cout << arg / 2 << endl; } // Στις δηλώσεις, τα ονόματα των // ορισμάτων είναι προαιρετικά. // Μεταβλητή κινητής υποδιαστολής. Διαδικασιακός (procedural) προγραμματισμός: Tα προγράμματα αποτελούνται από διαδικασίες (στις C και C++ «συναρτήσεις»). Η εκτέλεση ξεκινά από την αρχική διαδικασία (main), η οποία μπορεί να καλεί υποδιαδικασίες. 18
Μεταγλώττιση με τον GCC από γραμμή ( Cygwin εντολών (σε Unix ή Όλα τα βήματα μαζί: g++ -o myprog.exe part1.cpp part2.cpp part3.cpp Δημιουργία αντικειμενικού κώδικα χωρίς σύνδεση: g++ -c part1.cpp part2.cpp part3.cpp g++ -c part2.cpp (αν έγιναν αλλαγές μόνο σε αυτό ( cpp. το αρχείο Σύνδεση αρχείων αντικειμενικού κώδικα: g++ -o myprog.exe part1.o part2.o part3.o 19
(! το Χρήση NetBeans (δοκιμάστε 20
Μεταγλωττιστές του μαθήματος GCC: προτεινόμενος μεταγλωττιστής για τις εργασίες..( μαθήματος Διατίθεται ελεύθερα (βλ. ιστοσελίδα συνδέσμων Μπορεί να χρησιμοποιηθεί από γραμμή εντολών σε Unix (θα δείτε πώς στα εργαστήρια, μαζί με τη χρήση makefiles). Σε Windows μπορεί να χρησιμοποιηθεί μέσω της γραμμής εντολών της συλλογής Cygwin (βλ. ιστοσελίδα συνδέσμων), όχι μέσω της γραμμής εντολών των Windows. Μπορεί να χρησιμοποιηθεί και μέσω των Eclipse και NetBeans (βλ. ιστοσελίδα συνδέσμων). MS Visual Studio: θα χρησιμοποιηθεί στα εργαστήρια. Οι φοιτητές του Τμήματος Πληροφορικής έχουν δικαίωμα να πάρουν δωρεάν αντίγραφο. Ρωτήστε στα CSLAB. 21