Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ Κεφάλαιο 6: Εισαγωγή στον προγραμματισμό 6.3 Φυσικές και τεχνητές γλώσσες 6.4 Τεχνικές σχεδίασης προγραμμάτων 6.7 Προγραμματιστικά περιβάλλοντα
6.3 Φυσικές και τεχνητές γλώσσες (1/4) Γλώσσες προγραμματισμού: Αναπτύχθηκαν για να μπορεί ο προγραμματιστής να δίνει εντολές στον υπολογιστή. Χρησιμοποιούνται για την επικοινωνία του ανθρώπου με τη μηχανή. Είναι τεχνητές γλώσσες που, όμως, ακολουθούν τις βασικές αρχές της γλωσσολογίας.
6.3 Φυσικές και τεχνητές γλώσσες (2/4) Χαρακτηριστικά γλωσσών (φυσικών και τεχνητών): Αλφάβητο: Το σύνολο των στοιχείων (συμβόλων) που χρησιμοποιούνται από μια γλώσσα. Λεξιλόγιο: Το σύνολο των αποδεκτών από τη γλώσσα λέξεων (δημιουργούνται ως ακολουθίες συμβόλων) Παρατήρηση: Στις γλώσσες προγραμματισμού κάθε λέξη έχει μοναδική σημασία
6.3 Φυσικές και τεχνητές γλώσσες (3/4) Χαρακτηριστικά γλωσσών (φυσικών και τεχνητών): Γραμματική: Αποτελείται από το Τυπικό: Το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή (π.χ. γλώσσα, γλώσσες, γλώσσας, όχι όμως γλώσσατ) Συντακτικό: σύνολο των κανόνων που καθορίζει τη νομιμότητα της διάταξης και της σύνδεσης των λέξεων της γλώσσας για τη δημιουργία προτάσεων (εντολών). Σημασιολογία: το σύνολο των κανόνων που καθορίζει το νόημα των λέξεων και κατά επέκταση των εκφράσεων και προτάσεων που χρησιμοποιούνται σε μία γλώσσα.
6.3 Φυσικές και τεχνητές γλώσσες (4/4) Διαφορές φυσικών και τεχνητών γλωσσών: Οι φυσικές γλώσσες εξελίσσονται διαρκώς: Νέες λέξεις δημιουργούνται Οι κανόνες γραμματικής και σύνταξης αλλάζουν Επηρεάζονται από τον κοινωνικό περίγυρο Οι τεχνητές γλώσσες παραμένουν στάσιμες: Κατασκευάζονται για ένα συγκεκριμένο σκοπό Έχουν αυστηρούς κανόνες γραμματικής και σύνταξης Εντούτοις οι γλώσσες προγραμματισμού διορθώνονται και μεταβάλλονται για να καλύψουν νέες απαιτήσεις
6.4 Τεχνικές Σχεδίασης Προγραμμάτων (1/8) Υπάρχουν διάφορες μεθοδολογίες ανάπτυξης προγραμμάτων: Ιεραρχική σχεδίαση Τμηματικός προγραμματισμός Δομημένος Προγραμματισμός
6.4 Τεχνικές Σχεδίασης Προγραμμάτων (2/8) Ιεραρχική σχεδίαση: Διαδικασία σχεδίασης από «από πάνω προς τα κάτω» (top-down program design): Οι βασικές λειτουργίες ορίζονται σε ανώτερο επίπεδο Στη συνέχεια διασπόνται σε μικρότερες Στόχος στο χαμηλότερο επίπεδο να υπάρχουν μόνο απλές λειτουργίες Στόχος η διάσπαση του αρχικού προβλήματος σε απλούστερα Χρησιμοποιούνται συχνά διαγραμματικές τεχνικές
6.4 Τεχνικές Σχεδίασης Προγραμμάτων (3/8) Ιεραρχική σχεδίαση (παράδειγμα): Υπολογισμός φόρου εισοδήματος
6.4 Τεχνικές Σχεδίασης Προγραμμάτων (4/8) Τμηματικός προγραμματισμός: Υλοποιεί την ιεραρχική σχεδίαση Κάθε υποπρόβλημα αποτελεί ανεξάρτητη ενότητα (module) Η σωστή διαίρεση του αρχικού προβλήματος σε μικρότερα είναι κρίσιμη και συχνά δύσκολη διαδικασία Πλεονεκτήματα: Μείωση λαθών Ευκολότερη παρακολούθηση αλλαγών Ευκολότερη κατανόηση Ευκολότερη συντήρηση προγράμματος από τρίτους
6.4 Τεχνικές Σχεδίασης Προγραμμάτων (5/8) Δομημένος προγραμματισμός: Παρουσιάστηκε από τους Bohm και Jacopini το 1964 Καθιερώθηκε από τον Dijkstra to 1968 μέσω της μελέτης “GO TO Statement Considered Harmful – η εντολή GOTO θεωρείται επιβλαβής” Έχει εξέχουσα θέση και υποστηρίζεται σε όλες τις σύγχρονες γλώσσες προγραμματισμού. Αναπτύχθηκε από την ανάγκη να υπάρχει μία κοινή μεθοδολογία στην ανάπτυξη των προγραμμάτων και τη μείωση των εντολών GOTO που χρησιμοποιούνται στο πρόγραμμα.
6.4 Τεχνικές Σχεδίασης Προγραμμάτων (6/8) Η εντολή GOTO – Το μαύρο πρόβατο του προγραμματισμού:
6.4 Τεχνικές Σχεδίασης Προγραμμάτων (7/8) Δομημένος προγραμματισμός: Στηρίζεται στη χρήση τριών και μόνο στοιχειωδών λογικών δομών: Δομή ακολουθίας Δομή επιλογής Δομή επανάληψης Κάθε πρόγραμμα (αλλά και κάθε ενότητα προγράμματος (module)) έχει μόνο μία είσοδο (σημείο έναρξης) και μόνο μία έξοδο (σημείο τερματισμού)
6.4 Τεχνικές Σχεδίασης Προγραμμάτων (8/8) Πλεονεκτήματα Δομημένου προγραμματισμού: Δημιουργία απλούστερων προγραμμάτων Άμεση μεταφορά των αλγορίθμων σε προγράμματα. Διευκόλυνση ανάλυσης του προγράμματος σε τμήματα. Περιορισμός των λαθών κατά την ανάπτυξη του προγράμματος. Διευκόλυνση στην ανάγνωση και κατανόηση του προγράμματος από τρίτους. Ευκολότερη διόρθωση και συντήρηση.
6.7 Προγραμματιστικά περιβάλλοντα (1/6) Κάθε πρόγραμμα (σε οποιαδήποτε γλώσσα προγραμματισμού) πρέπει να μετατραπεί σε Γλώσσα Μηχανής (μόνη μορφή αναγνωρίσιμη από τον Η/Υ) Η μετατροπή γίνεται από τα μεταφραστικά προγράμματα: Μεταγλωττιστές (Compilers): Μεταφράζει ολόκληρο το πρόγραμμα σε γλώσσα μηχανής. Παράγεται ένα νέο εκτελέσιμο πρόγραμμα σε γλώσσα μηχανής Διερμηνείς (Interpreters): Μεταφράζει μία-μία τις εντολές σε γλώσσα μηχανής. Κάθε εντολή εκτελείται αμέσως μετά τη μετάφρασή της. Δεν παράγεται εκτελέσιμο πρόγραμμα
6.7 Προγραμματιστικά περιβάλλοντα (2/6) Ορισμοί: Πηγαίο πρόγραμμα (source program): To αρχικό πρόγραμμα που γράφει ο προγραμματιστής σε μια γλώσσα προγραμματισμού. Αντικείμενο πρόγραμμα (object program): To πρόγραμμα που παράγει αρχικά ο μεταγλωττιστής. Είναι σε γλώσσα μηχανής αλλά όχι έτοιμο για εκτέλεση. Εκτελέσιμο πρόγραμμα (executable program): Το τελικό πρόγραμμα (σε γλώσσα μηχανής) που παράγεται μετά τη σύνδεση του αντικείμενου προγράμματος με άλλα τμήματα κώδικα και βιβλιοθήκες. Η σύνδεση γίνεται από ένα ειδικό πρόγραμμα τον Συνδέτη-Φορτωτή (linker-loader)
6.7 Προγραμματιστικά περιβάλλοντα (3/6) Διαδικασία μετάφρασης: Το πηγαίο πρόγραμμα ελέγχεται για συντακτικά λάθη (λάθη στη δομή και μορφή της γλώσσας) Αν δεν υπάρχουν λάθη παράγεται από τον μεταγλωττιστή το αντικείμενο πρόγραμμα Τέλος, ο συνδέτης παράγει το εκτελέσιμο πρόγραμμα
6.7 Προγραμματιστικά περιβάλλοντα (4/6) Διαδικασία μετάφρασης:
6.7 Προγραμματιστικά περιβάλλοντα (5/6) Μεταγλωττιστής vs Διερμηνέας: Μεταγλωττιστής: (-) Πριν τη χρήση του το πρόγραμμα πρέπει να περάσει τη διαδικασία μεταγλώττισης και σύνδεσης. (+) Το εκτελέσιμο πρόγραμμα που παράγεται δεν χρειάζεται εκ νέου μετάφραση. Διερμηνέας: (+) Άμεση εκτέλεση του προγράμματος και ευκολότερος εντοπισμός λογικών λαθών (λάθη στη δομή και λογική του αλγορίθμου) (-) Πιο αργή εκτέλεση, απαιτείται κάθε φορά η μετάφραση κάθε εντολής
6.7 Προγραμματιστικά περιβάλλοντα (6/6) Προγραμματιστικά Περιβάλλοντα: Περιλαμβάνουν: Έναν συντάκτη (editor), δηλ. πρόγραμμα για τη σύνταξη και διόρθωση των προγραμμάτων Έναν μεταγλωττιστή (compiler) για τη μετάφραση του προγράμματος σε γλώσσα μηχανής Έναν συνδέτη (linker) για τη σύνδεση του αντικείμενου προγράμματος και τη δημιουργία του τελικού εκτελέσιμου προγράμματος Περιλαμβάνουν επίσης ειδικά εργαλεία π.χ. ένα περιβάλλον οπτικού (visual) προγραμματισμού περιέχει ειδικό συντάκτη για τη δημιουργία γραφικών αντικειμένων.