Περίληψη
Αυτό το μάθημα κλείνει την πρώτη ενότητα του κύκλου μαθημάτων, αφιερωμένη στα πρώτα βήματα στον προγραμματισμό με C++. Ανασυνθέτει την αλυσίδα των εννοιών που οδηγεί από το πρόβλημα με την προδιαγραφή του στο σφάλμα ταξινομημένο κατά τη στιγμή του, περνώντας από τον αλγόριθμο, τον πηγαίο κώδικα, τη μεταγλώττιση και τη σύνδεση, το εκτελέσιμο αρχείο και την επικοινωνία του προγράμματος με τον έξω κόσμο· ξεχωρίζει όσα από αυτά ισχύουν σε κάθε γλώσσα από όσα είναι ιδιαίτερα της C++· συγκεντρώνει την απροσδιόριστη συμπεριφορά που έδειξε η ενότητα και τον κανόνα του κύκλου μαθημάτων που απορρέει από αυτήν, να μεταγλωττίζουμε πάντα με προειδοποιήσεις και, όσο αναπτύσσουμε, με ανιχνευτές (sanitizers)· επαναλαμβάνει στην τελική του αξιολόγηση τις δεξιότητες της αρχικής αξιολόγησης· και τελειώνει με έξι προκλήσεις που συνδυάζουν ολόκληρη την ενότητα: τα ρέστα με τον ελάχιστο αριθμό κερμάτων, έναν στοιχισμένο πίνακα χωρίς βρόχους, ένα πρόγραμμα με πέντε ελαττώματα πέντε ειδών, ένα πείραμα για το buffer εξόδου, μια ημερομηνία με σταθερή μορφή και την εξήγηση του μεταγλωττιστή σε κάποιον που γνωρίζει μόνο μια διερμηνευόμενη γλώσσα.
Μαθησιακοί στόχοι
- Να διανύετε χωρίς βοήθεια τον δρόμο από την εκφώνηση ως το εκτελεσμένο πρόγραμμα: να προδιαγράφετε, να γράφετε τον αλγόριθμο, να τον εκτελείτε με το χέρι, να τον γράφετε σε C++, να τον μεταγλωττίζετε με τις επιλογές του κύκλου μαθημάτων, να τον εκτελείτε και να ελέγχετε το αποτέλεσμά του.
- Να εξηγείτε ποιο εργαλείο δρα σε κάθε βήμα αυτού του δρόμου (επεξεργαστής κειμένου, προεπεξεργαστής, μεταγλωττιστής, συνδέτης, ανιχνευτές) και τι δέχεται και τι παραδίδει το καθένα.
- Να αναγνωρίζετε το είδος ενός σφάλματος (μεταγλώττισης, σύνδεσης, εκτέλεσης ή λογικό) από τον τρόπο που εκδηλώνεται, και να διορθώνετε πολλά σφάλματα με τη σειρά που αποκαλύπτονται.
- Να εξηγείτε με ένα παράδειγμα τι είναι η απροσδιόριστη συμπεριφορά και γιατί ο κύκλος μαθημάτων μεταγλωττίζει με προειδοποιήσεις και ανιχνευτές.
- Να ξεχωρίζετε, σε όσα μάθατε στην ενότητα, όσα ισχύουν σε κάθε γλώσσα από όσα είναι ιδιαίτερα της C++.
Όσα πέτυχε η ενότητα
Η ενότητα έθεσε ως σκοπό να οδηγήσει όποιον δεν έχει προγραμματίσει ποτέ από ένα πρόβλημα διατυπωμένο στην καθημερινή γλώσσα ως ένα πρόγραμμα που μεταγλωττίζεται, εκτελείται, διαβάζει δεδομένα και γράφει αποτελέσματα, γνωρίζοντας τι έκανε κάθε εργαλείο στη διαδρομή. Το πέτυχε στηριζόμενη μόνο σε όσα η εισαγωγή δήλωσε ως γνωστά: τη σχολική αριθμητική, τη συνήθεια να ακολουθούμε γραπτές οδηγίες και τον χειρισμό αρχείων και φακέλων.
Από το πρόβλημα στον αλγόριθμο
Το μάθημα Από το πρόβλημα στον αλγόριθμο καθιέρωσε ότι ένα πρόβλημα καθορίζεται από την προδιαγραφή του, μια σύμβαση που υπόσχεται τη μετασυνθήκη σε κάθε είσοδο που ικανοποιεί την προσυνθήκη και τίποτα έξω από αυτήν. Ένας αλγόριθμος είναι μια πεπερασμένη, σαφής και γενική διαδικασία, που γράφεται σε αριθμημένα βήματα, εκτελείται με το χέρι με έναν πίνακα ίχνους και συντίθεται από ακολουθία, απόφαση και επανάληψη· κάθε επανάληψη συνοδεύεται από μια φθίνουσα ποσότητα, μια φυσική ποσότητα που μειώνεται σε κάθε γύρο και εγγυάται ότι τερματίζει.
Προγράμματα, μεταγλωττιστές και C++
Το μάθημα Προγράμματα, μεταγλωττιστές και C++ έδειξε ότι το κείμενο ενός προγράμματος C++ δεν εκτελείται όπως είναι: ο προεπεξεργαστής, ο μεταγλωττιστής και ο συνδέτης το μετατρέπουν σε εκτελέσιμο αρχείο. Από αυτό προέκυψε η διάκριση που διατρέχει την ενότητα: ό,τι εξαρτάται μόνο από το κείμενο ανακαλύπτεται κατά τη μεταγλώττιση ή τη σύνδεση, και ό,τι εξαρτάται από τα δεδομένα, μόνο κατά την εκτέλεση. Το μάθημα σύγκρινε το μεταγλωττιζόμενο μοντέλο με το διερμηνευόμενο και αιτιολόγησε γιατί ο κύκλος μαθημάτων χρησιμοποιεί τη C++23 και τη ζητά με -std=c++23.
Εγκατάσταση του περιβάλλοντος
Το μάθημα Εγκατάσταση του περιβάλλοντος σε Windows, macOS και Linux εγκατέστησε έναν μεταγλωττιστή ικανό για C++23 και το Visual Studio Code με την επέκτασή του για C++. Το μάθημα μεθόδου που δίνει είναι ότι ο επεξεργαστής κειμένου δεν μεταγλωττίζει, αλλά καλεί έναν μεταγλωττιστή που πρέπει να τον βρίσκει το τερματικό, και ότι το ακριβές κείμενο ενός μηνύματος ξεχωρίζει την αστοχία εγκατάστασης από την αστοχία κλήσης.
Μεταγλώττιση, εκτέλεση και ρύθμιση
Το μάθημα Μεταγλώττιση, εκτέλεση και ρύθμιση καθόρισε τον κύκλο επεξεργασίας, αποθήκευσης, μεταγλώττισης, εκτέλεσης και ανάγνωσης, και την εντολή του κύκλου μαθημάτων. Διέκρινε το σφάλμα, που εμποδίζει το εκτελέσιμο, από την προειδοποίηση, που το επιτρέπει αλλά επισημαίνει ύποπτο κώδικα· ενεργοποίησε τους ανιχνευτές (τον ανιχνευτή σφαλμάτων μνήμης, AddressSanitizer, και τον ανιχνευτή απροσδιόριστης συμπεριφοράς, UndefinedBehaviorSanitizer), που επιτηρούν την εκτέλεση, και έδειξε τα όριά τους· και εξήγησε ότι αρχείο, μεταγλωττιστής και κονσόλα πρέπει να συμφωνούν στο UTF-8.
Ανατομία ενός προγράμματος
Το μάθημα Ανατομία ενός προγράμματος ανέλυσε το ελάχιστο πρόγραμμα: τις κεφαλίδες, που δηλώνουν κάθε εξάρτηση· τη main, σημείο εισόδου του οποίου η τιμή είναι ο κωδικός εξόδου· τον χώρο ονομάτων std· τις εντολές, τα μπλοκ και τα σχόλια. Δίδαξε να διαβάζουμε τα μηνύματα από το πρώτο και καθόρισε τον οδηγό ύφους του κύκλου μαθημάτων.
Είσοδος, έξοδος και σφάλματα
Το μάθημα Είσοδος, έξοδος και σφάλματα έφερε το πρόγραμμα σε επαφή με τον έξω κόσμο: η std::println γράφει ακριβώς ό,τι ζητήθηκε, με προδιαγραφές μορφής, και η std::cin διαβάζει και σταματά στον πρώτο χαρακτήρα που δεν χρησιμεύει. Μια ανάγνωση που σκοντάφτει σε χαρακτήρα ο οποίος δεν μπορεί να σχηματίσει τον αριθμό μηδενίζει τη μεταβλητή και αφήνει τη ροή εισόδου σε κατάσταση σφάλματος, σιωπηλά (ένας αριθμός που δεν χωρά στον τύπο ή μια εξαντλημένη είσοδος αφήνουν στη μεταβλητή άλλη τιμή, και το μάθημα απαριθμεί αυτές τις περιπτώσεις)· γι’ αυτό η ανάγνωση ελέγχεται. Το μάθημα έκλεισε την ενότητα ταξινομώντας τα σφάλματα κατά τη στιγμή τους: μεταγλώττισης, σύνδεσης, εκτέλεσης και λογικά.
Φόρτωση του περιεχομένου…
Ολοκληρώθηκε
Συνδεθείτε για να αποθηκεύσετε την πρόοδό σας