ΚΕΦΑΛΑΙΟ 6, 10
ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Στη θεωρία του κεφαλαίου αυτού θα εντάξεις την ενότητα 6.4 του κεφαλαίου 6 (βλ. σελ 131-136).
<Κεφάλαιο 6>
ΕΝΤΟΛΗ GOTO: παράδειγμα προς αποφυγή, το μαύρο πρόβατο τού προγραμματισμού
Στα πρώτα χρόνια δημιουργίας Γλωσσών Προγραμματισμού κυριαρχούσε ο αδόμητος προγραμματισμός και κυρίως η εντολή διακλάδωσης GOTO που ευθύνεται γι αυτόν και θεωρείται το μαύρο πρόβατο του προγραμματισμού (βλ βιβλίο σελ 134, παράδειγμα).
Η χρήση αυτής της εντολής είχε τα ακόλουθα αποτελέσματα:
1. μεγάλα προγράμματα και ιδιαίτερα μπερδεμένα,
2. απαιτούνταν πάρα πολύς χρόνος για τη συγγραφή, διόρθωση και συντήρηση.
Όλες οι σύγχρονες γλώσσες υποστηρίζουν το δομημένο προγραμματισμό και διαθέτουν εντολές που καθιστούν τη χρήση της εντολής GOTO περιττή. Για λόγους συμβατότητας και μόνο, μερικές την διατηρούν ακόμα στο ρεπερτόριο των εντολών τους.
Η εντολή GOTO δεν θα μας απασχολήσει και καλό είναι να μην χρησιμοποιείται.
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ: η καλή μεθοδολογία προγραμματισμού
Ο δομημένος προγραμματισμός είναι μία μεθοδολογία σύνταξης προγραμμάτων, η οποία στηρίζεται στη χρήση τριών και μόνο στοιχειωδών δομών:
1. τη δομή ακολουθίας,
2. τη δομή επιλογής,
3. και τη δομή επανάληψης
4. και διέπεται από την αρχή ότι κάθε πρόγραμμα όπως και κάθε υποπρόγραμμα, έχει μία είσοδο και μία έξοδο.
ΠΛΕΟΝΕΚΤΗΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
1. διευκολύνει τη δημιουργία απλούστερων προγραμμάτων που γράφονται για να επιλυθούν σύνθετα πολλές φορές προβλήματα,
2. κι αυτό επιτυγχάνεται γιατί διευκολύνει την ανάλυση του προγράμματος σε τμήματα,
3. βοηθά στην άμεση μεταφορά του αλγορίθμου σε πρόγραμμα,
4. βοηθά στον περιορισμό των λαθών κατά την ανάπτυξη του προγράμματος,
5. διευκολύνει την κατανόηση του προγράμματος από τρίτους,
6. βοηθά στην ευκολότερη διόρθωση και συντήρηση του προγράμματος.
Για όλα τα παραπάνω, σήμερα ο όρος δομημένος προγραμματισμός θεωρείται ότι περιέχει τόσο την ιεραρχική σχεδίαση όσο και τον τμηματικό προγραμματισμό.
<Κεφάλαιο 10>
Ο τμηματικός προγραμματισμός είναι ένα από τα βασικότερα συστατικά του δομημένου προγραμματισμού.
Ας δούμε πως προέκυψε:
Από την αρχή της εμφάνισης των υπολογιστών γίνονται προσπάθειες ανάπτυξης τεχνικών προγραμματισμού που σκοπό έχουν:
1. να διευκολύνουν τη συγγραφή απλών, κομψών προγραμμάτων,
2. να μειώσουν τα λάθη,
3. να βοηθήσουν στην ευκολότερη κατανόηση του προγράμματος από τρίτους*,
4. και να επιτρέψουν την παρακολούθηση και συντήρηση του προγράμματος.
*Να τονίσουμε ότι ένα μεγάλο πρόγραμμα όσο χρησιμοποιείται, χρειάζεται να συντηρηθεί από διαφορετικούς προγραμματιστές.
Ο καλύτερος τρόπος για να επιτευχθεί ο παραπάνω στόχος αλλά και να αντιμετωπισθούν σύνθετα προβλήματα είναι η ιεραρχική σχεδίαση προγράμματος ή αλλιώς «από πάνω προς τα κάτω» ή top-down program design.
ΙΕΡΑΡΧΙΚΗ ΣΧΕΔΙΑΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ
Η ιεραρχική σχεδίαση περιλαμβάνει τη διάσπαση του κύριου προβλήματος σε απλούστερα υποπροβλήματα και αυτά με τη σειρά τους σε άλλα μικρότερα, έτσι ώστε να καταλήξουμε σε πολύ απλά υποπροβλήματα που μπορούν να σχεδιαστούν και να γραφούν εύκολα.
Στην ιεραρχική σχεδίαση χρησιμοποιούμε πολλές φορές διαγραμματικές τεχνικές όπως μάθαμε στο κεφ 1.
Η ιεραρχική σχεδίαση προγράμματος υλοποιείται με τον τμηματικό προγραμματισμό.
ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης και ανάπτυξης των προγραμμάτων η οποία αντιμετωπίζει το πρόγραμμα σαν ένα σύνολο από απλούστερα τμήματα προγραμμάτων(βλ σελ 205).
Το καθένα από αυτά τα τμήματα αντιστοιχεί σε υποπρόβλημα του κύριου προβλήματος. Θεωρείται ανεξάρτητη ενότητα και γράφεται ξεχωριστά από τα υπόλοιπα τμήματα προγράμματος.
ΠΛΕΟΝΕΚΤΗΜΑΤΑ ΤΜΗΜΑΤΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
1. Διευκολύνει την ανάπτυξη του αλγορίθμου και του αντίστοιχου προγράμματος.
Με τη σταδιακή επίλυση υποπροβλημάτων και τη δημιουργία των αντίστοιχων υποπρογραμμάτων τελικά επιλύεται το συνολικό πρόβλημα.
2. Διευκολύνει την κατανόηση και διόρθωση του προγράμματος.
Ο χωρισμός του προγράμματος σε μικρότερα αυτοτελή και ανεξάρτητα τμήματα επιτρέπει τη γρήγορη διόρθωση τους από διαφορετικούς πολλές φορές προγραμματιστές (*βλ. προηγ. σελ.).
3. Απαιτεί λιγότερο χρόνο και προσπάθεια στη συγγραφή του προγράμματος. Από τη στιγμή που ένα υποπρόγραμμα έχει γραφτεί για να κάνει μία λειτουργία, μπορεί να καλείται από πολλά σημεία του προγράμματος. Έτσι το πρόγραμμα είναι πιο απλό ενώ μειώνεται το μέγεθός του, ο χρόνος συγγραφής του και τα λάθη του.
4. Επεκτείνει τις δυνατότητες των Γλωσσών Προγραμματισμού.
Όλα τα υποπρογράμματα μαζί συνθέτουν «βιβλιοθήκες» που προσθέτουν κι άλλες δυνατότητες σε μία γλώσσα προγραμματισμού από αυτές που ήδη προσφέρει (ενσωματωμένες συναρτήσεις π.χ. ΗΜ(x), Τ_Ρ(x)).
ΥΠΟΠΡΟΓΡΑΜΜΑ
Υποπρόγραμμα λέγεται το τμήμα προγράμματος που επιτελεί αυτόνομο έργο και έχει γραφτεί χωριστά από το υπόλοιπο πρόγραμμα.
ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΥΠΟΠΡΟΓΡΑΜΜΑΤΩΝ
1. Κάθε υποπρόγραμμα έχει μία είσοδο και μία έξοδο. Συγκεκριμένα ενεργοποιείται με την είσοδο σε αυτό, που γίνεται πάντοτε στην αρχή του, εκτελεί ορισμένες ενέργειες και απενεργοποιείται με την έξοδο, που γίνεται πάντοτε από το τέλος του.
2. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα. Αυτό σημαίνει ότι μπορεί να σχεδιαστεί, να αναπτυχθεί και να συντηρηθεί αυτόνομα.
3. Κάθε υποπρόγραμμα πρέπει να μην είναι πολύ μεγάλο. Δηλαδή να είναι τόσο ώστε να είναι εύκολα κατανοητό και να εκτελεί μία λειτουργία.
ΌΛΑ ΟΣΑ ΠΡΕΠΕΙ ΝΑ ΞΕΡΟΥΜΕ ΓΙΑ ΕΝΑ ΥΠΟΠΡΟΓΡΑΜΜΑ;
Τα υποπρογράμματα γράφονται μετά το τέλος του κύριου προγράμματος.
Οι διευθύνσεις επιστροφής (return address) των υποπρογραμμάτων αποθηκεύονται από το μεταφραστή στη στοίβα χρόνου εκτέλεσης (execution time stack) (βλ σελ 219). Ένα υποπρόγραμμα χρησιμοποιεί και ορίζει παραμέτρους για να επικοινωνεί με τα άλλα τμήματα προγράμματος.
ΕΙΔΗ ΥΠΟΠΡΟΓΡΑΜΜΑΤΟΣ
Υπάρχουν δύο είδη υποπρογράμματος. Η ΔΙΑΔΙΚΑΣΙΑ και η ΣΥΝΑΡΤΗΣΗ.
Κάθε διαδικασία ή συνάρτηση μπορεί να καλείται: από το κύριο πρόγραμμα ή από άλλη διαδικασία ή συνάρτηση.
ΔΙΑΔΙΚΑΣΙΑ: είναι ένας τύπος υποπρογράμματος που μπορεί να εκτελεί όλες τις λειτουργίες ενός προγράμματος, δηλαδή εισαγωγή δεδομένων (ΔΙΑΒΑΣΕ), υπολογισμούς (ΕΝΤΟΛΗ ΕΚΧΩΡΗΣΗΣ), εμφάνιση ή εκτύπωση αποτελεσμάτων (ΓΡΑΨΕ). Το όνομα της βασίζεται στην ονοματολογία της ΓΛΩΣΣΑΣ.
Η λίστα παραμέτρων δεν είναι υποχρεωτική.
Για να καλέσουμε μία ΔΙΑΔΙΚΑΣΙΑ γράφουμε :
ΚΑΛΕΣΕ <όνομα της ΔΙΑΔΙΚΑΣΙΑΣ>
ΣΥΝΑΡΤΗΣΗ: είναι ένας τύπος υποπρογράμματος που υπολογίζει και επιστρέφει μόνο μία τιμή με το όνομά της, Όπως οι μαθηματικές συναρτήσεις (ΕΝΤΟΛΗ ΕΚΧΩΡΗΣΗΣ). Μπορεί να επιστρέψει ΑΚΕΡΑΙΑ, ΠΡΑΓΜΑΤΙΚΗ, ΧΑΡΑΚΤΗΡΑ ή ΛΟΓΙΚΗ τιμή. Το όνομα της βασίζεται στην ονοματολογία της ΓΛΩΣΣΑΣ.
Η λίστα παραμέτρων είναι υποχρεωτική.
Για να καλέσουμε μία ΣΥΝΑΡΤΗΣΗ γράφουμε το όνομα της ΣΥΝΑΡΤΗΣΗΣ μέσα σε μία έκφραση.
ΠΑΡΑΜΕΤΡΟΙ
Παράμετρος είναι μία μεταβλητή που επιτρέπει το πέρασμα τής τιμής της από το ένα τμήμα του προγράμματος στο άλλο. Ισχύει μόνο τοπικά στο τμήμα του προγράμματος, στο οποίο έχει δηλωθεί.
ΠΡΑΓΜΑΤΙΚΕΣ ΠΑΡΑΜΕΤΡΟΙ
Η λίστα των πραγματικών παραμέτρων καθορίζει τις παραμέτρους στην κλήση του υποπρογράμματος.
ΤΥΠΙΚΕΣ ΠΑΡΑΜΕΤΡΟΙ ή ΟΡΙΣΜΑΤΑ
Η λίστα των τυπικών παραμέτρων ή ορίσματα καθορίζει τις παραμέτρους στη δήλωση του υποπρογράμματος.
ΚΑΝΟΝΕΣ ΧΡΗΣΗΣ ΠΑΡΑΜΕΤΡΩΝ
Οι λίστες παραμέτρων πρέπει να ακολουθούν τρεις κανόνες:
1. ίδιο πλήθος πραγματικών και τυπικών παραμέτρων,
2. ίδια σειρά και διάταξη πραγματικών και τυπικών παραμέτρων
3. ίδιο κατ’ αντιστοιχία τύπο πραγματικών και τυπικών παραμέτρων (βλ σελ 220).
ΠΡΟΓΡΑΜΜΑ Παράδειγμα
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΑ: α
ΠΡΑΓΜΑΤΙΚΗ: β Πραγματικές Παράμετροι
ΧΑΡΑΚΤΗΡΕΣ: γ
……………………….
ΚΑΛΕΣΕ Διαδ1 (α, β, γ)
…………………… Τυπικές Παράμετροι ή ορίσματα
ΔΙΑΔΙΚΑΣΙΑ Διάδ1 (κ, λ, μ)
ΑΚΕΡΑΙΑ: κ
ΠΡΑΓΜΑΤΙΚΗ: λ
ΧΑΡΑΚΤΗΡΕΣ: μ
………………………….
ΑΠΑΝΤΩ ΣΕ ΟΛΕΣ ΤΙΣ ΕΡΩΤΗΣΕΙΣ – ΚΑΝΩ ΑΥΤΟΑΞΙΟΛΟΓΗΣΗ
1. Να διατυπώσετε τον ορισμό του τμηματικού προγραμματισμού.
2. Τι ονομάζεται υποπρόγραμμα (subprogram) στον τμηματικό προγραμματισμό;
3. Ποιες ιδιότητες πρέπει να διακρίνουν τα υποπρογράμματα;
4. Ποια είναι τα πλεονεκτήματα του τμηματικού προγραμματισμού;
5. Να διατυπώσετε τον ορισμό της παραμέτρου.
6. Ποια είναι τα δύο είδη υποπρογραμμάτων που μπορούν να χρησιμοποιηθούν εφαρμόζοντας την τεχνική του τμηματικού προγραμματισμού με τη ΓΛΩΣΣΑ;
7. Πως ορίζεται και καλείται και που γράφεται μια συνάρτηση (όνομα, λίστα παραμέτρων, τι προσέχουμε);
8. Πως ορίζεται και καλείται και που γράφεται μια διαδικασία (όνομα, λίστα παραμέτρων);
9. Τι είναι και ποια η εμβέλεια για πραγματικές και τυπικές παραμέτρους (ή απλά παράμετροι ή ορίσματα);
10. Τι είναι διεύθυνση επιστροφής, που αποθηκεύεται και πώς λειτουργεί η στοίβα χρόνου εκτέλεσης;
11. Ποιους κανόνες πρέπει να ακολουθούν πάντα οι λίστες παραμέτρων των υποπρογραμμάτων; (σελ 220)
ΑΣΚΗΣΕΙΣ: ΔΤ1 και ΔΤ2 σελ 109, ΔΤ1 σελ 57 και ΔΣ2 σελ 58