Κεφάλαιο 6 6.1 Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία σημαντικά στάδια : Σον ακριβή προσδιορισμό του προβλήματος Σην ανάπτυξη του αντίστοιχου αλγορίθμου Ση διατύπωση του αλγορίθμου σε κατανοητή μορφή από τον υπολογιστή.(ανάπτυξη προγράμματος) Ο προγραμματισμός ασχολείται με το τρίτο στάδιο, δηλαδή την δημιουργία προγραμμάτων. Πρόγραμμα είναι το σύνολο των εντολών που πρέπει να δοθούν στον υπολογιστή, ώστε να υλοποιηθεί ο αλγόριθμος για την επίλυση του προβλήματος. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού. 6.2 Γλώσσες προγραμματισμού Όταν πρωτοεμφανίστηκαν οι υπολογιστές, οι λειτουργίες που εκτελούσαν έπρεπε να γραφούν σαν ακολουθίες 0 και 1 (δυαδικό σύστημα), που είναι μορφή κατανοητή από τον υπολογιστή αλλά όχι για τον άνθρωπο. Η γλώσσα αυτή επικοινωνίας με τον υπολογιστή ονομάζεται γλώσσα μηχανής. Ένα πρόγραμμα γραμμένο σε γλώσσα μηχανής είναι μια ακολουθία δυαδικών ψηφίων. Πρέπει να σημειωθεί ότι μέχρι σήμερα οι υπολογιστές για να κατανοήσουν κάτι πρέπει να το μετατρέψουν σε ακολουθία 0 και 1. Οι συμβολικές γλώσσες (όπως η Assemply), είναι γλώσσες προγραμματισμού χαμηλού επιπέδου στις οποίες οι εντολές δίνονται σαν λέξεις που συμβολίζουν την ενέργεια που πρόκειται να εκτελεσθεί. Οι λέξεις αυτές (εντολές) είναι κατανοητές από τον άνθρωπο όχι όμως από τον υπολογιστή. Για να γίνει αυτό πρέπει να μεταφραστούν σε ακολουθία δυαδικών ψηφίων και στην συνέχεια να εκτελεστούν. Σην μετάφραση αυτή την αναλαμβάνει ένα ειδικό πρόγραμμα που ονομάζεται συμβολομεταφραστής. Οι συμβολικές γλώσσες χρησιμοποιούνται για ειδικούς σκοπούς. Εξαρτώνται σε μεγάλο βαθμό από την αρχιτεκτονική του υπολογιστή και δεν μπορούν να μεταφερθούν σε άλλο (μεταφερσιμότητα). Σέλος δεν διαθέτουν εντολές για σύνθετες λειτουργίες, συνεπώς τα προγράμματα είναι μακροσκελή και δύσκολο να συντηρηθούν. 64
Αυτές οι ανεπάρκειες των συμβολικών γλωσσών είχαν σαν αποτέλεσμα τη δημιουργία των γλωσσών υψηλού επιπέδου. Παρακάτω θα γνωρίσουμε μερικές γλώσσες υψηλού επιπέδου καθώς και τα βασικότερα χαρακτηριστικά τους. Γλώσσα προγραμματισμού FORTRAN COBOL ALGOL PL/1 LISP PROLOG BASIC PASCAL C C++ JAVA VISUAL BASIC Βασικά χαρακτηριστικά Μαθηματικές και επιστημονικές εφαρμογές Εμπορικές εφαρμογές Επιλύει γενικής φύσεως προβλήματα Προσπάθησε ανεπιτυχώς να καλύψει όλους τους τομείς προγραμματισμού (Εμπορικές και επιστημονικές εφ/γές) Προβλήματα τεχνητής νοημοσύνης Προβλήματα τεχνητής νοημοσύνης Εύκολη γλώσσα (για αρχάριους). Επιλύει γενικής φύσεως προβλήματα Γενικής χρήσης, κατάλληλη για εκπαίδευση και για δημιουργία ισχυρών δομημένων προγραμμάτων. Φρησιμοποιήθηκε για την ανάπτυξη του λειτουργικού συστήματος UNIX. Είναι κατάλληλη για δομημένες εφαρμογές και έχει δυνατότητες γλώσσας χαμηλού επιπέδου Αντικειμενοστραφής γλώσσα και αποτελεί εξέλιξη της C Αντικειμενοστραφής γλώσσα. Αναπτύχθηκε με σκοπό την ανάπτυξη εφαρμογών που θα εκτελούνται σε κατανεμημένα περιβάλλοντα, δηλαδή σε διαφορετικούς υπολογιστές οι οποίοι είναι συνδεδεμένοι στο διαδίκτυο. Γλώσσα οπτικού προγραμματισμού και προγραμματισμού οδηγούμενου από το γεγονός Με τον όρο οπτικό προγραμματισμό εννοούμε τη δυνατότητα να δημιουργούμε γραφικά μια εφαρμογή, με τη χρήση έτοιμων τμημάτων κώδικα για παράδειγμα τα πλαίσια διαλόγου ή τα μενού. Ο οδηγούμενος από το γεγονός προγραμματισμός είναι η δυνατότητα να ενεργοποιούνται λειτουργίες του προγράμματος με την εκτέλεση ενός γεγονότος, για παράδειγμα το κλικ του ποντικιού. Σα χαρακτηριστικά των γλωσσών 4 ης γενιάς είναι : Αποκρύπτονται αρκετές λεπτομέρειες υλοποίησης και στηρίζονται στα δεδομένα Ο χρήστης έχει τη δυνατότητα να υποβάλλει εύκολα ερωτήσεις και να πάρει πληροφορίες από βάσεις δεδομένων Ο χρήστης μπορεί να καθορίσει τον τρόπο εμφάνισης των πληροφοριών που τον ενδιαφέρουν 65
ΣΑ ΠΛΕΟΝΕΚΣΗΜΑΣΑ ΣΨΝ ΓΛΨΨΝ ΤΧΗΛΟΤ ΕΠΙΠΕΔΟΤ ΕΙΝΑΙ: Ο φυσικότερος και πιο κατανοητός τρόπος έκφρασης των προβλημάτων Η ανεξαρτησία από τον τύπο του υπολογιστή. Προγράμματα σε μία γλώσσα υψηλού επιπέδου μπορούν να εκτελεστούν σε οποιονδήποτε υπολογιστή χωρίς καθόλου η με ελάχιστες αλλαγές. Η δυνατότητα αυτή ονομάζεται μεταφερσιμότητα και είναι σημαντικό προσόν. Η ευκολία εκμάθησης και εκπαίδευσης Ευκολότερη η διαδικασία διόρθωσης λαθών και συντήρησης των προγραμμάτων Μικρότερος χρόνος και κόστος παραγωγής νέων προγραμμάτων Οι διάφορες γλώσσες προγραμματισμού μπορούν να ταξινομηθούν προγραμματισμού που αντιπροσωπεύουν. Έτσι αυτές διακρίνονται σε: με βάση την κατηγορία Διαδικασιακές ή αλγοριθμικές π.χ Pascal Αντικειμενοστραφείς π.χ C++ υναρτησιακές π.χ LISP Μη διαδικασιακές π.χ PROLOG Ερωταπαντήσεων π.χ SQL Μια άλλη ταξινόμηση μπορεί να προκύψει με βάση την περιοχή χρήσης. Με αυτό το κριτήριο διακρίνουμε : Γενικής χρήσης, π.χ PASCAL, BASIC οι οποίες δια κρίνονται σε o επιστημονικής κατεύθυνσης, π.χ FORTRAN o Εμπορικής κατεύθυνσης π.χ COBOL Προγραμματισμού συστημάτων π.χ C Σεχνητής νοημοσύνης π.χ LISP, PROLOG Ειδικής χρήσης για εφαρμογές στη ρομποτική, γραφικά με υπολογιστή κ.α 66
6.3 Υυσικές και τεχνητές γλώσσες Οι φυσικές γλώσσες και οι γλώσσες προγραμματισμού προσδιορίζονται από: Σο αλφάβητο, είναι το σύνολο των στοιχείων που χρησιμοποιεί μια γλώσσα Σο λεξιλόγιο, αποτελείται από τις λέξεις που δημιουργούνται από τα στοιχεία του αλφαβήτου Ση γραμματική, η οποία αποτελείται από το τυπικό (τυπολογικό) και το συντακτικό. Συπικό είναι το σύνολο των κανόνων που ορίζει τις αποδεκτές μορφές μιας λέξης. υντακτικό είναι οι κανόνες δημιουργίας προτάσεων από συνδυασμούς λέξεων. Ση σημασιολογία που είναι οι κανόνες που καθορίζουν το νόημα των λέξεων, των εκφράσεων και των προτάσεων μιας γλώσσας. Μια βασική διαφορά μεταξύ φυσικών και τεχνητών γλωσσών είναι η δυνατότητα εξέλιξής τους. Οι φυσικές γλώσσες εξελίσσονται συνεχώς, είναι δυναμικές όπως λέμε, αντίθετα οι τεχνητές γλώσσες παραμένουν στάσιμες, εκτός και εάν ο δημιουργός τους αποφασίσει να τις βελτιώσει. 6.4 Σεχνικές σχεδίασης προγραμμάτων Από τότε που εμφανίστηκαν οι υπολογιστές, γίνονται συνεχείς προσπάθειες να αναπτυχθούν μέθοδοι και τεχνικές προγραμματισμού που να εξασφαλίζουν την δημιουργία απλών και κομψών προγραμμάτων που να είναι εύκολα στη γραφή τους και την κατανόησή τους. ΙΕΡΑΡΦΙΚΗ ΦΕΔΙΑΗ ΠΡΟΓΡΑΜΜΑΣΟ Η τεχνική της ιεραρχικής σχεδίασης και επίλυσης ονομάζεται και διαδικασία από επάνω προς τα κάτω. Περιλαμβάνει την συνεχή διάσπαση των λειτουργιών του προγράμματος σε όλο και μικρότερες λειτουργίες, μέχρι οι λειτουργίες να είναι πολύ απλές, ώστε να επιλυθούν εύκολα. Για την υποβοήθηση της ιεραρχικής σχεδίασης χρησιμοποιούνται διάφορες διαγραμματικές τεχνικές. ΣΜΗΜΑΣΙΚΟ ΠΡΟΓΡΑΜΜΑΣΙΜΟ Η ιεραρχική σχεδίαση του προγράμματος υλοποιείται με τον τμηματικό προγραμματισμό. ύμφωνα με τον τμηματικό προγραμματισμό, μετά την ιεραρχική σχεδίαση του προγράμματος (δηλ. τη διαίρεσή του σε πιο απλά τμήματα), κάθε τμήμα του προγράμματος, που ονομάζεται ενότητα(module), υλοποιείται ξεχωριστά από τα υπόλοιπα τμήματα. Ο τμηματικός προγραμματισμός έχει τα εξής πλεονεκτήματα: Διευκολύνει τη δημιουργία του προγράμματος Μειώνει τα λάθη Επιτρέπει την εύκολη κατανόηση και διόρθωση του προγράμματος Επεκτείνει τις δυνατότητες των γλωσσών προγραμματισμού 67
ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΣΙΜΟ Ο δομημένος προγραμματισμός στηρίζεται στη χρήση των τριών στοιχειωδών λογικών δομών, της ακολουθίας, της επιλογής και της επανάληψης.. Όλα τα προγράμματα μπορούν να γραφούν χρησιμοποιώντας συνδυασμούς μόνο αυτών των τριών δομών. Κάθε πρόγραμμα όπως και κάθε ενότητα προγράμματος έχει μόνο μία είσοδο και μία έξοδο. Σα πλεονεκτήματα του δομημένου προγραμματισμού είναι: Δημιουργία απλούστερων προγραμμάτων Άμεση μεταφορά των αλγορίθμων σε προγράμματα Διευκόλυνση της ανάλυσης του προγράμματος σε τμήματα Περιορισμός των λαθών κατά την ανάπτυξη του προγράμματος Διευκολύνει την ανάγνωση και κατανόηση του προγράμματος από τρίτους Ευκολότερη διόρθωση και συντήρηση. Ο δομημένος προγραμματισμός βοηθάει στην ανάλυση του προγράμματος σε επιμέρους τμήματα, έτσι ώστε σήμερα ο όρος δομημένος προγραμματισμός περιέχει τόσο την ιεραρχική σχεδίαση όσο και τον τμηματικό προγραμματισμό. 6.7 Προγραμματιστικά περιβάλλοντα Κάθε πρόγραμμα που γράφτηκε σε οποιαδήποτε γλώσσα προγραμματισμού, πρέπει να μετατραπεί σε μορφή αναγνωρίσιμη και εκτελέσιμη από τον υπολογιστή, δηλαδή σε εντολές γλώσσας μηχανής. Η μετατροπή αυτή επιτυγχάνεται με χρήση ειδικών μεταφραστικών προγραμμάτων. Τπάρχουν δύο κατηγορίες τέτοιων προγραμμάτων, οι μεταγλωττιστές (compilers) και οι διερμηνευτές (interpreters). ΜΕΣΑΓΛΨΣΣΙΣΕ Η διαδικασία μεταγλώττισης και εκτέλεσης ενός προγράμματος είναι η εξής : 1. Σο αρχικό πρόγραμμα το οποίο δημιουργείται στο συντάκτη, ονομάζεται πηγαίο πρόγραμμα, ενώ το πρόγραμμα που παράγεται από τον μεταγλωττιστή λέγεται αντικείμενο πρόγραμμα. 2. Κατά τη διαδικασία παραγωγής του αντικείμενου προγράμματος, ο μεταγλωττιστής ανιχνεύει τα λάθη του πηγαίου προγράμματος (μόνο τα συντακτικά λάθη) και εμφανίζει μηνύματα στον προγραμματιστή για την διόρθωσή τους. Μετά το πηγαίο πρόγραμμα υποβάλλεται εκ νέου για μεταγλώττιση. Σο αντικείμενο πρόγραμμα θα δημιουργηθεί μόνον εάν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη. 3. Σο αντικείμενο πρόγραμμα είναι σε μορφή κατανοητή από τον υπολογιστή αλλά πρέπει να συνδεθεί με άλλα προγράμματα που είναι απαραίτητα για την εκτέλεσή του. Σα προγράμματα αυτά είτε τα γράφει ο προγραμματιστής είτε βρίσκονται στις βιβλιοθήκες της γλώσσας προγραμματισμού. 68
4. Ση διαδικασία της σύνδεσης των προγραμμάτων αυτών την αναλαμβάνει ένα άλλο πρόγραμμα που ονομάζεται συνδέτης φορτωτής. 5. Σο αποτέλεσμα του συνδέτη φορτωτή είναι η παραγωγή του εκτελέσιμου προγράμματος, το οποίο είναι και το τελικό πρόγραμμα που εκτελείται από τον υπολογιστή. ΠΗΓΑΙΟ ΠΡΟΓΡΑΜΜΑ ΜΕΣΑΓΛΩ ΣΣΙΣΗ ΑΝΣΙΚΕΙΜΕΝΟ ΠΡΟΓΡΑΜΜΑ ΤΝΔΕΣΗ ΥΟΡΣΩΣΗ ΕΚΣΕΛΕΙΜΟ ΠΡΟΓΡΑΜΜΑ Παρατήρηση Σις περισσότερες φορές κάθε πρόγραμμα αρχικά έχει λάθη. Σα λάθη του προγράμματος είναι γενικά δύο ειδών, τα λογικά και τα συντακτικά. Σα λογικά λάθη εμφανίζονται κατά την εκτέλεση του προγράμματος ενώ τα συντακτικά λάθη κατά την μεταγλώττιση ΔΙΕΡΜΗΝΕΤΣΕ Οι διερμηνευτές έχουν τα παρακάτω χαρακτηριστικά : 1. Για κάθε μια από τις εντολές του πηγαίου προγράμματος παράγει και εκτελεί αμέσως μια ισοδύναμη εντολή σε γλώσσα μηχανής. 2. Εμφανίζει ενημερωτικά μηνύματα για τα λάθη κάθε εντολής και διακόπτει τη διαδικασία διερμηνείας και εκτέλεσης 3. Με το διερμηνευτή έχουμε το πλεονέκτημα της άμεσης διόρθωσης και άμεσης εκτέλεσης μιας εντολής. 4. Επειδή επαναλαμβάνεται κάθε φορά η διερμηνεία του προγράμματος, η εκτέλεσή του καθίσταται πιο αργή από εκείνη του ισοδύναμου εκτελέσιμου προγράμματος που παράγει ο μεταγλωττιστής. Πάντως τα σύγχρονα προγραμματιστικά περιβάλλοντα παρουσιάζονται συνήθως με μεικτές υλοποιήσεις, όπου χρησιμοποιείται διερμηνευτής κατά τη φάση δημιουργίας του προγράμματος και μεταγλωττιστής για τη τελική έκδοση και εκμετάλλευση του προγράμματος. 69
Α Κ Η Ε Ι ΓΙΑ Λ Τ Η 1. Να περιγράψετε τη διαδικασία για τη μετατροπή με μεταγλωττιστή ενός πηγαίου προγράμματος σε εκτελέσιμο πρόγραμμα, συμπεριλαμβανομένης της ανίχνευσης και διόρθωσης λαθών. 2. Να αναφέρετε τρία πλεονεκτήματα των γλωσσών υψηλού επιπέδου σε σχέση με τις συμβολικές γλώσσες. 3. Να απαντήσετε με ωστό - Λάθος Ένα πρόγραμμα σε γλώσσα μηχανής είναι μια ακολουθία δυαδικών ψηφίων Ο μεταγλωττιστής δέχεται στην είσοδό του ένα πρόγραμμα γραμμένο σε μια γλώσσα υψηλού επιπέδου και παράγει ένα ισοδύναμο πρόγραμμα σε γλώσσα μηχανής Σο πηγαίο πρόγραμμα εκτελείται από τον υπολογιστή χωρίς μεταγλώττιση. Ο διερμηνευτής διαβάζει μία προς μία τις εντολές του πηγαίου προγράμματος και για κάθε μία εκτελεί αμέσως μια ισοδύναμη ακολουθία εντολών μηχανής Ένα πρόγραμμα σε γλώσσα μηχανής χρειάζεται μεταγλώττιση Η FORTRAN αναπτύχθηκε ως γλώσσα κατάλληλη για την επίλυση μαθηματικών και επιστημονικών προβλημάτων Η εντολή GOTO που αλλάζει τη ροή εκτέλεσης ενός προγράμματος είναι απαραίτητη στο δομημένο προγραμματισμό. Σα συντακτικά λάθη στον πηγαίο κώδικα εμφανίζονται κατά το στάδιο της μεταγλώττισής του. Η JAVA χρησιμοποιείται ιδιαίτερα για προγραμματισμό στο διαδίκτυο (Internet) Για την εκτέλεση μιας εντολής συμβολικής γλώσσας απαιτείται η μετάφρασή της σε γλώσσα μηχανής Σο πρόγραμμα που παράγεται από τον μεταγλωττιστή λέγεται εκτελέσιμο. 4. 1. Για ποιο λόγο αναπτύχθηκαν οι συμβολικές γλώσσες ; 2. Ποιος ο ρόλος του συμβολομεταφραστή ; 5. ε ποιες στοιχειώδεις λογικές δομές στηρίζεται ο δομημένος προγραμματισμός ; Να αναφέρετε τέσσερα πλεονεκτήματα του δομημένου προγραμματισμού. 70
6. Σι καλείται αλφάβητο μιας γλώσσας ; Από τι αποτελείται το λεξιλόγιο μιας γλώσσας ; Σι είναι το τυπικό μιας γλώσσας ; Σι είναι το συντακτικό μιας γλώσσας ; 7. Να γράψετε στο τετράδιό σας τους αριθμούς της τήλης Α και δίπλα σε κάθε αριθμό ένα από τα γράμματα της τήλης Β, ώστε να προκύπτει η σωστή αντιστοίχιση (στη τήλη Β υπάρχει ένα επιπλέον στοιχείο). τήλη Α Είδος εφαρμογών 1. επιστημονικές α. COBOL 2. εμπορικές επιχειρησιακές β. LISP 3. τεχνητής νοημοσύνης γ. FORTRAN 4. γενικής χρήσης - εκπαίδευσης δ. PASCAL ε. JAVA τήλη Β Γλώσσες 71