Θεωρία, Ερωτήσεις Ανάπτυξης, Quiz & Ασκήσεις
Τα τρία στάδια επίλυσης ενός προβλήματος με τον υπολογιστή είναι:
Προγραμματισμός είναι η διαδικασία που γίνεται για τη δημιουργία του προγράμματος, δηλαδή το σύνολο των εντολών που πρέπει να δοθούν στον υπολογιστή, ώστε να υλοποιηθεί ο αλγόριθμος για την επίλυση του προβλήματος.
Ο προγραμματισμός είναι αυτός που δίνει την εντύπωση ότι οι υπολογιστές είναι έξυπνες μηχανές που επιλύουν πολύπλοκα προβλήματα. Στην πραγματικότητα, ο υπολογιστής μπορεί απλά να:
Οι φυσικές και τεχνητές γλώσσες εμφανίζουν τα εξής κοινά χαρακτηριστικά:
Η βασικότερη διαφορά είναι η δυνατότητα εξέλιξης:
Η ιεραρχική σχεδίαση ή «από πάνω προς τα κάτω» (top-down program design) περιλαμβάνει:
Σκοπός: Η διάσπαση ενός προβλήματος σε μια σειρά από απλούστερα υποπροβλήματα, τα οποία να είναι εύκολο να επιλυθούν, οδηγώντας στην επίλυση του αρχικού.
Μπορεί να παρασταθεί με τη βοήθεια διαγραμματικών τεχνικών (π.χ. δομημένα διαγράμματα).
Ο τμηματικός προγραμματισμός υλοποιεί την ιεραρχική σχεδίαση:
Πλεονεκτήματα: Διευκολύνει τη δημιουργία του προγράμματος, μειώνει τα λάθη και επιτρέπει την ευκολότερη παρακολούθηση, κατανόηση και συντήρηση.
Αναπτύχθηκε από την ανάγκη να υπάρχει μια κοινή μεθοδολογία σύνταξης προγραμμάτων και τη μείωση των εντολών GOTO, που χρησιμοποιούνταν στο παρελθόν.
Βασικές Αρχές:
Ο δομημένος προγραμματισμός περιέχει τόσο την ιεραρχική σχεδίαση όσο και τον τμηματικό προγραμματισμό.
Ένα πρόγραμμα περιγράφει «ενέργειες» (επεξεργασία) που εφαρμόζονται πάνω σε δεδομένα. Το βασικό ερώτημα είναι αν η φιλοσοφία του προγράμματος είναι προτιμότερο να στηρίζεται στις ενέργειες ή στα δεδομένα.
Ο συντάκτης είναι το πρόγραμμα που χρησιμοποιείται για την αρχική σύνταξη και τη διόρθωση των προγραμμάτων. Είναι ουσιαστικά ένας μικρός επεξεργαστής κειμένου με δυνατότητες που διευκολύνουν τη γρήγορη γραφή των εντολών.
Δέχεται σαν είσοδο ένα πρόγραμμα γραμμένο σε μια γλώσσα υψηλού επιπέδου και παράγει ένα ισοδύναμο πρόγραμμα σε γλώσσα μηχανής, το οποίο μπορεί να εκτελείται οποτεδήποτε από τον υπολογιστή και είναι ανεξάρτητο από το αρχικό.
Διαβάζει μία προς μία τις εντολές του αρχικού προγράμματος και για κάθε μία εκτελεί αμέσως μια ισοδύναμη ακολουθία εντολών γλώσσας μηχανής.
Το αντικείμενο πρόγραμμα είναι σε μορφή κατανοητή από τον υπολογιστή, αλλά δεν μπορεί να εκτελεστεί αμέσως. Χρειάζεται να συμπληρωθεί και να συνδεθεί με άλλα τμήματα:
Το πρόγραμμα που επιτρέπει αυτή τη σύνδεση ονομάζεται συνδέτης – φορτωτής. Το αποτέλεσμα είναι το εκτελέσιμο πρόγραμμα (executable), που είναι το τελικό πρόγραμμα που εκτελείται από τον υπολογιστή.
Η διαδικασία από τον πηγαίο κώδικα μέχρι την εκτέλεση ακολουθεί τα εξής στάδια:
Σε ένα πρόγραμμα μπορούν να εμφανιστούν δύο είδη λαθών:
| Χαρακτηριστικό | Μεταγλωττιστής | Διερμηνευτής |
|---|---|---|
| Τρόπος εκτέλεσης | Μετατρέπει όλο το πρόγραμμα πριν την εκτέλεση | Διαβάζει και εκτελεί μία προς μία τις εντολές |
| Ταχύτητα | Πιο γρήγορη εκτέλεση του τελικού προγράμματος | Πιο αργή εκτέλεση |
| Διόρθωση λαθών | Πρέπει να περάσει από μεταγλώττιση και σύνδεση πριν χρησιμοποιηθεί | Άμεση εκτέλεση και άμεση διόρθωση |
| Αποτέλεσμα | Παράγει ανεξάρτητο εκτελέσιμο/αντικείμενο πρόγραμμα | Δεν παράγει ανεξάρτητο πρόγραμμα |
Σύγχρονες υλοποιήσεις: Τα σύγχρονα προγραμματιστικά περιβάλλοντα παρουσιάζουν μεικτές υλοποιήσεις — χρήση διερμηνευτή κατά τη φάση της δημιουργίας του προγράμματος και μεταγλώττισης κατά την τελική έκδοση.
Ένα προγραμματιστικό περιβάλλον πρέπει να περιέχει τρία προγράμματα:
Τα σύγχρονα περιβάλλοντα παρέχουν αυτά τα προγράμματα με ενιαίο τρόπο (IDE). Το κάθε περιβάλλον έχει διαφορετικά εργαλεία και ιδιότητες. Για παράδειγμα, ένα περιβάλλον οπτικού προγραμματισμού (visual) πρέπει να περιέχει έναν ειδικό συντάκτη που διευκολύνει τη δημιουργία γραφικών αντικειμένων (φόρμες, λίστες κ.τ.λ.).
Τα στάδια επίλυσης ενός προβλήματος με τον υπολογιστή είναι:
Προγραμματισμός είναι η διαδικασία που γίνεται για τη δημιουργία του προγράμματος, δηλαδή το σύνολο των εντολών που πρέπει να δοθούν στον υπολογιστή, ώστε να υλοποιηθεί ο αλγόριθμος για την επίλυση του προβλήματος.
Ο προγραμματισμός είναι αυτός που δίνει την εντύπωση ότι οι υπολογιστές είναι έξυπνες μηχανές που επιλύουν πολύπλοκα προβλήματα. Ο υπολογιστής μπορεί απλά να αποθηκεύει στη μνήμη ακολουθίες δυαδικών ψηφίων, να τις ανακτά, να κάνει αριθμητικές πράξεις και να τις συγκρίνει.
Οι γλώσσες προγραμματισμού δημιουργήθηκαν με σκοπό την επικοινωνία του ανθρώπου (προγραμματιστή) με τη μηχανή.
Ως φυσικές γλώσσες αναφέρονται εκείνες οι οποίες χρησιμοποιούνται για την επικοινωνία μεταξύ ανθρώπων, ενώ οι τεχνητές γλώσσες χρησιμοποιούνται για την επικοινωνία μεταξύ ανθρώπων και της μηχανής. Με αυτές τις γλώσσες ο προγραμματιστής μπορεί να δίνει εντολές που πρέπει να εκτελεί ο υπολογιστής.
Οι φυσικές και τεχνητές γλώσσες εμφανίζουν τα εξής κοινά χαρακτηριστικά:
Η βασικότερη διαφορά μεταξύ των φυσικών και τεχνητών γλωσσών είναι η δυνατότητα εξέλιξης.
Οι φυσικές γλώσσες εξελίσσονται συνεχώς, δημιουργούνται νέες λέξεις, ενώ κανόνες γραμματικής και σύνταξης αλλάζουν με την πάροδο του χρόνου, γιατί η γλώσσα χρησιμοποιείται για την επικοινωνία μεταξύ των ανθρώπων που εξελίσσονται και αλλάζουν ανάλογα με τις εποχές και τον κοινωνικό περίγυρο.
Οι τεχνητές γλώσσες χαρακτηρίζονται από στασιμότητα, αφού κατασκευάζονται συνειδητά για έναν συγκεκριμένο σκοπό. Βελτιώνονται και μεταβάλλονται από τους δημιουργούς τους με σκοπό να διορθωθούν αδυναμίες, να καλύψουν μεγαλύτερο εύρος εφαρμογών και για να ακολουθήσουν τις νέες τεχνολογίες.
Η ιεραρχική σχεδίαση ή «από πάνω προς τα κάτω» (top-down program design) περιλαμβάνει τον καθορισμό των βασικών λειτουργιών ενός προγράμματος σε ανώτερο επίπεδο, και στη συνέχεια τη διάσπαση των λειτουργιών του σε όλο και μικρότερες λειτουργίες μέχρι το τελευταίο επίπεδο που οι λειτουργίες του είναι πολύ απλές ώστε να επιλυθούν εύκολα (συνεχής διαίρεση του προβλήματος σε υποπροβλήματα).
Σκοπός της ιεραρχικής σχεδίασης είναι η διάσπαση ενός προβλήματος σε μια σειρά από απλούστερα υποπροβλήματα, τα οποία να είναι εύκολο να επιλυθούν, οδηγώντας στην επίλυση του αρχικού.
Η ιεραρχική σχεδίαση μπορεί να παρασταθεί με τη βοήθεια διαγραμματικών τεχνικών.
Ο τμηματικός προγραμματισμός υλοποιεί την ιεραρχική σχεδίαση προγράμματος. Το πρόβλημα αναλύεται σε επιμέρους υποπροβλήματα, κάθε ένα από τα οποία αποτελεί ανεξάρτητη ενότητα που γράφεται ξεχωριστά από τα υπόλοιπα τμήματα προγράμματος.
Ο τμηματικός προγραμματισμός διευκολύνει τη δημιουργία του προγράμματος, μειώνει τα λάθη και επιτρέπει την ευκολότερη παρακολούθηση, κατανόηση και συντήρηση του προγράμματος από τρίτους.
Ο δομημένος προγραμματισμός αναπτύχθηκε από την ανάγκη να υπάρχει μια κοινή μεθοδολογία σύνταξης προγραμμάτων και τη μείωση των εντολών GOTO, που χρησιμοποιούνταν στο παρελθόν.
Η εντολή GOTO έχει ως συνέπεια την αλλαγή της ροής του προγράμματος, τη διακλάδωση σε μια άλλη εντολή του προγράμματος εκτός από την επόμενη.
Όλες οι σύγχρονες γλώσσες προγραμματισμού υποστηρίζουν το δομημένο προγραμματισμό και διαθέτουν εντολές που καθιστούν τη χρήση της εντολής GOTO περιττή. Για λόγους συμβατότητας με παλιότερες εκδόσεις και συντήρησης παλιών προγραμμάτων, μερικές τη διατηρούν στο ρεπερτόριό τους.
Ο δομημένος προγραμματισμός δεν είναι απλώς ένα είδος προγράμματος, είναι μια μεθοδολογία σύνταξης προγραμμάτων που έχει σκοπό να βοηθήσει τον προγραμματιστή στην ανάπτυξη σύνθετων προγραμμάτων, να μειώσει τα λάθη, να εξασφαλίσει την εύκολη κατανόηση και να διευκολύνει τις διορθώσεις και τις αλλαγές.
Βασικές Αρχές Δομημένου Προγραμματισμού:
Αν και ο δομημένος προγραμματισμός αρχικά εμφανίστηκε σαν μια προσπάθεια περιορισμού των εντολών GOTO, σήμερα αποτελεί τη βασική μεθοδολογία προγραμματισμού, ενθαρρύνοντας και βοηθώντας στην ανάλυση του προγράμματος σε επιμέρους τμήματα, περιέχοντας τόσο την ιεραρχική σχεδίαση όσο και τον τμηματικό προγραμματισμό.
Ο δομημένος προγραμματισμός εμφανίζει τα εξής πλεονεκτήματα:
Η ιδέα του αντικειμενοστραφούς προγραμματισμού έχει τις ρίζες της σε πολύ απλή ιδέα. Ένα πρόγραμμα περιγράφει «ενέργειες» (επεξεργασία) που εφαρμόζονται πάνω σε δεδομένα. Ένα βασικό ερώτημα που τίθεται είναι αν η φιλοσοφία, η δομή του προγράμματος είναι προτιμότερο να στηρίζεται στις «ενέργειες» ή στα δεδομένα.
Η απάντηση σε αυτό το ερώτημα προσδιορίζει και τη βασική διαφορά ανάμεσα στις παραδοσιακές προγραμματιστικές τεχνικές και στην αντικειμενοστραφή σχεδίαση.
Η αντικειμενοστραφής σχεδίαση εκλαμβάνει ως πρωτεύοντα δομικά στοιχεία ενός προγράμματος τα δεδομένα, από τα οποία δημιουργούνται με κατάλληλη μορφοποίηση τα αντικείμενα (objects). Αυτή η σχεδίαση αποδείχθηκε ότι επιφέρει καλύτερα αποτελέσματα, αφού τα προγράμματα που δημιουργούνται είναι περισσότερο ευέλικτα και εύκολα στη συντήρηση.
Ο αντικειμενοστραφής προγραμματισμός χρησιμοποιεί την ιεραρχική σχεδίαση, τον τμηματικό προγραμματισμό και ακολουθεί τις αρχές του δομημένου προγραμματισμού.
Συντάκτης (editor) ονομάζεται το πρόγραμμα το οποίο χρησιμοποιείται για την αρχική σύνταξη και τη διόρθωση των προγραμμάτων. Είναι ουσιαστικά ένας μικρός επεξεργαστής κειμένου με δυνατότητες που διευκολύνουν τη γρήγορη γραφή των εντολών των προγραμμάτων.
Κάθε πρόγραμμα που γράφεται σε οποιαδήποτε γλώσσα προγραμματισμού πρέπει να μετατραπεί σε μορφή αναγνωρίσιμη και εκτελέσιμη από τον υπολογιστή, δηλαδή σε εντολές γλώσσας μηχανής. Η μετατροπή επιτυγχάνεται με τη χρήση ειδικών μεταφραστικών προγραμμάτων: του μεταγλωττιστή και του διερμηνευτή.
Μεταγλωττιστής (compilers): Δέχεται σαν είσοδο ένα πρόγραμμα γραμμένο σε μια γλώσσα υψηλού επιπέδου και παράγει ένα ισοδύναμο πρόγραμμα σε γλώσσα μηχανής, το οποίο μπορεί να εκτελείται οποτεδήποτε από τον υπολογιστή και είναι ανεξάρτητο από το αρχικό.
Διερμηνευτής (interpreters): Διαβάζει μία προς μία τις εντολές του αρχικού προγράμματος και για κάθε μία εκτελεί αμέσως μια ισοδύναμη ακολουθία εντολών γλώσσας μηχανής.
Το αρχικό πρόγραμμα που γράφεται από τον προγραμματιστή ονομάζεται πηγαίο (source), ενώ το πρόγραμμα που παράγεται από το μεταγλωττιστή ονομάζεται αντικείμενο πρόγραμμα (object).
Το αντικείμενο πρόγραμμα που προκύπτει από το μεταγλωττιστή είναι σε μορφή κατανοητή από τον υπολογιστή, αλλά δεν είναι σε θέση να εκτελεστεί. Χρειάζεται να συμπληρωθεί και να συνδεθεί με άλλα τμήματα του προγράμματος, απαραίτητα για την εκτέλεσή του:
Το πρόγραμμα που επιτρέπει τη σύνδεση αυτή ονομάζεται συνδέτης – φορτωτής (linker - loader). Το αποτέλεσμα του συνδέτη είναι η παραγωγή του εκτελέσιμου προγράμματος (executable), το οποίο είναι το τελικό πρόγραμμα που εκτελείται από τον υπολογιστή.
Η διαδικασία για τη μετάφραση και την εκτέλεση ενός προγράμματος είναι η εξής:
Σε ένα πρόγραμμα μπορούν να εμφανιστούν δύο είδη λαθών: τα συντακτικά και τα λογικά.
Συντακτικά λάθη: Εμφανίζονται κατά το στάδιο της μεταγλώττισης και ανιχνεύονται από το μεταγλωττιστή ή το διερμηνευτή, εμφανίζοντας κατάλληλα διαγνωστικά μηνύματα. Οφείλονται σε αναγραμματισμούς ονομάτων εντολών, παραλείψεις δηλώσεων κ.τ.λ. Τα διορθωμένα προγράμματα επαναυποβάλλονται για μεταγλώττιση μέχρι να εξαλειφθούν πλήρως τα λάθη, ώστε να παραχθεί το τελικό εκτελέσιμο πρόγραμμα.
Λογικά λάθη: Εμφανίζονται μόνο στην εκτέλεση, ανιχνεύονται μόνο από τον προγραμματιστή, είναι τα πλέον σοβαρά και δύσκολα στη διόρθωση, και οφείλονται σε σφάλματα κατά την υλοποίηση του αλγορίθμου.
Η χρήση μεταγλωττιστή έχει το μειονέκτημα ότι πριν χρησιμοποιηθεί ένα πρόγραμμα πρέπει να περάσει από το στάδιο της μεταγλώττισης και σύνδεσης.
Η χρήση διερμηνευτή έχει το πλεονέκτημα της άμεσης εκτέλεσης και της άμεσης διόρθωσης, καθιστώντας όμως την εκτέλεση του προγράμματος πιο αργή από εκείνη του ισοδύναμου προγράμματος που παράγει ο μεταγλωττιστής.
Τα σύγχρονα προγραμματιστικά περιβάλλοντα παρουσιάζουν μεικτές υλοποιήσεις: χρήση διερμηνευτή κατά τη φάση της δημιουργίας του προγράμματος και μεταγλώττισης κατά την τελική έκδοση.
Ένα προγραμματιστικό περιβάλλον πρέπει να περιέχει τρία προγράμματα:
Τα σύγχρονα προγραμματιστικά περιβάλλοντα παρέχουν αυτά τα προγράμματα με ενιαίο τρόπο.
Το κάθε προγραμματιστικό περιβάλλον έχει επίσης διαφορετικά εργαλεία και ιδιότητες. Για παράδειγμα, ένα περιβάλλον οπτικού προγραμματισμού (visual) πρέπει να περιέχει οπωσδήποτε έναν ειδικό συντάκτη που να διευκολύνει τη δημιουργία γραφικών αντικειμένων (φόρμες, λίστες κ.τ.λ.), παρέχοντας στον προγραμματιστή τα αντίστοιχα γραφικά εργαλεία.
1. Τα τρία στάδια επίλυσης προβλήματος με υπολογιστή είναι:
2. Ο προγραμματισμός είναι:
3. Ποιο χαρακτηριστικό διαφοροποιεί κυρίως τις φυσικές από τις τεχνητές γλώσσες;
4. Οι τρεις βασικές δομές του δομημένου προγραμματισμού είναι:
5. Ο μεταγλωττιστής παράγει:
6. Ο διερμηνευτής:
7. Τα συντακτικά λάθη:
8. Ποιο είναι το πλεονέκτημα του διερμηνευτή έναντι του μεταγλωττιστή;
9. Το πρόγραμμα που γράφει ο προγραμματιστής ονομάζεται:
10. Ένα προγραμματιστικό περιβάλλον πρέπει να περιέχει:
Σκορ: 0 / 10
Συμπλήρωσε τα κενά με τις κατάλληλες λέξεις:
«Τα τρία στάδια επίλυσης προβλήματος με υπολογιστή είναι: ο ακριβής ___________ του προβλήματος, η ανάπτυξη του ___________ και η διατύπωση του αλγορίθμου σε κατανοητή μορφή από τον υπολογιστή, δηλαδή ο ___________.»
Λύση: προσδιορισμός, αλγορίθμου, προγραμματισμός.
Αντιστοίχισε τα χαρακτηριστικά της Στήλης Α με τον τύπο γλώσσας της Στήλης Β:
| Στήλη Α | Στήλη Β |
|---|---|
| 1. Επικοινωνία ανθρώπου-μηχανής | α. Φυσικές γλώσσες |
| 2. Εξελίσσονται συνεχώς | β. Τεχνητές γλώσσες |
| 3. Χαρακτηρίζονται από στασιμότητα | |
| 4. Επικοινωνία μεταξύ ανθρώπων |
Λύση:
Χαρακτήρισε τις παρακάτω προτάσεις ως Σωστό (Σ) ή Λάθος (Λ):
Λύση:
Αντιστοίχισε τα εργαλεία της Στήλης Α με τη λειτουργία της Στήλης Β:
| Στήλη Α (Εργαλείο) | Στήλη Β (Λειτουργία) |
|---|---|
| 1. Μεταγλωττιστής | α. Διαβάζει μία προς μία τις εντολές και τις εκτελεί |
| 2. Διερμηνευτής | β. Παράγει το εκτελέσιμο πρόγραμμα |
| 3. Συνδέτης – Φορτωτής | γ. Παράγει το αντικείμενο πρόγραμμα |
| 4. Συντάκτης | δ. Επεξεργαστής κειμένου για σύνταξη προγράμματος |
Λύση:
Περιγράψε με λεπτομέρεια τη διαδικασία από τη στιγμή που ο προγραμματιστής γράφει τον κώδικα μέχρι την εκτέλεση του προγράμματος, αναφέροντας:
Λύση: