"Institute of Educational Policy" Books
7.4 Αρχές κατασκευής λογισμικού
Ένα πρόγραμμα δεν είναι τίποτα περισσότερο από μια σειρά οδηγιών προς την ΚΜΕ του υπολογιστή, που την καθοδηγεί να κάνει συγκεκριμένες ενέργειες. Τα μικρά προγράμματα μπορούν να κατασκευαστούν συνήθως από ένα άτομο σαν μια μικρή διαδικασία, μια σειρά δηλαδή από συγκεκριμένες οδηγίες. Το ίδιο άτομο μπορεί να συντηρεί και να προσαρμόζει το πρόγραμμα σε νέες ανάγκες, να παίρνει σχεδιαστικές αποφάσεις, κλπ. Το ίδιο ισχύει για προγράμματα που κατασκευάζονται από μικρές ομάδες, με καλή επικοινωνία μεταξύ των μελών τους.
Τμηματικός προγραμματισμός Τι γίνεται όμως όταν το πρόγραμμα είναι μεγάλο και εμπλέκονται στην κατασκευή του δεκάδες ή και εκατοντάδες άτομα σε μία ή περισσότερες ομάδες; Η προφανής λύση είναι να τεμαχιστεί το μεγάλο πρόγραμμα σε μικρότερα τμήματα, τα οποία θα κατασκευαστούν ανεξάρτητα και στη συνέχεια θα συνδυαστούν, για να δημιουργηθεί το συνολικό σύστημα. Αυτή η στρατηγική ονομάζεται τμηματικός προγραμματισμός (modular programming) και αποτελεί τη βασική αρχή πάνω στην οποία στηρίζεται η ανάπτυξη του λογισμικού από τη δεκαετία του ‘50 και μετά.
Υπορουτίνα Βασικό εργαλείο για την υλοποίηση αυτής της αρχής ήταν η επινόηση της υπορουτίνας (subroutine) στις αρχές της δεκαετίας του ‘50. Η υπορουτίνα είναι ένα τμήμα κώδικα στο οποίο έχουμε δώσει ένα όνομα και μπορεί να εκτελεστεί σε οποιοδήποτε σημείο του προγράμματος απλώς με αναφορά στο όνομά της. Οι υπορουτίνες δίνουν το βασικό μηχανισμό για την τμηματική ανάπτυξη του λογισμικού. Οι διάφορες υπορουτίνες γράφονται ανεξάρτητα και στη συνέχεια συντίθενται και δημιουργούν το τελικό πρόγραμμα. Παρ’ όλο που οι υπορουτίνες προσφέρουν το βασικό μηχανισμό για τμηματικό προγραμματισμό, αυτές και μόνο δεν επαρκούν για τη δημιουργία ενός σωστά δομημένου λογισμικού. Είναι απαραίτητη μεγάλη πειθαρχία στον τρόπο χρήσης τους. Χωρίς αυτή την πειθαρχία είναι πολύ εύκολο να κατασκευαστούν προγράμματα εξαιρετικά πολύπλοκα και δυσνόητα, που δύσκολα τροποποιούνται εκ των υστέρων.
Δομημένος προγραμματισμός Στα τέλη της δεκαετίας του 1960 υπήρξε μια μεγάλη προσπάθεια προς την κατεύθυνση της καθιέρωσης ενός πειθαρχημένου τρόπου γραφής προγραμμάτων. Το αποτέλεσμα ήταν η εξέλιξη του τμηματικού προγραμματισμού σε αυτό που ονομάστηκε δομημένος προγραμματισμός (structured programming). Βασική τεχνική του δομημένου προγραμματισμού είναι η διάσπαση των λειτουργιών του προγράμματος σε άλλες, απλούστερες και ανεξάρτητες κατά το δυνατό, επιμέρους λειτουργίες και στη συνέχεια η υλοποίησή τους με καθορισμένους τύπους δομών ελέγχου. Οι δομές αυτές είναι: - Η διαδοχή (ακολουθία). Οι εντολές βρίσκονται σε ακολουθία και εκτελούνται με τη σειρά που είναι γραμμένες. - Η επιλογή. Η εκτέλεση των εντολών εξαρτάται από την τιμή αλήθειας της συνθήκης. - Η επανάληψη. Οι εντολές επαναλαμβάνονται, εφόσον αληθεύει ή δεν αληθεύει η συνθήκη.
Η διάσπαση των λειτουργιών σε απλούστερες, που ονομάζεται και λειτουργική αποσύνθεση (functional decomposition), γίνεται από πάνω προς τα κάτω, δηλαδή ξεκινώντας από την πιο σύνθετη λειτουργία στην κορυφή και φθάνοντας στην πιο απλή στη βάση. Το πρόγραμμα διασπάται συνεχώς σε απλούστερα, έως ότου καταλήξουμε σε επίπεδο απλών υπορουτινών. Αυτές οι υπορουτίνες αναπτύσσονται ξεχωριστά και στη συνέχεια συντίθενται και δημιουργούν το τελικό πρόγραμμα. Οι αρχές του δομημένου προγραμματισμού εφαρμόστηκαν αρχικά στη γλώσσα ALGOL, αλλά έγιναν ευρύτερα γνωστές μέσω της Pascal. Σήμερα όλες σχεδόν οι σύγχρονες γλώσσες είναι σχεδιασμένες έτσι ώστε να υποστηρίζουν αυτές τις αρχές.
Ιδρυτής του δομημένου προγραμματισμού θεωρείται ο Dijkstra, ο οποίος διατύπωσε τις πρώτες υποδείξεις που αφορούσαν τον περιορισμό της εντολής GOTO.