ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Συκά Φωτεινή Γπ 2013-2014
Κεφάλαιο 7 μέρος2 ο Είδη, τεχνικέςκαιπεριβάλλοντα προγραμματισμού
ΕίδηΠρογραμματισμού Επιταχυνόμενη εξέλιξη υλικού και λογισμικού ανάπτυξη προγραμματισμού Απαιτήσεις για αξιοπιστία, ποιότητα και χαμηλό κόστος στο λογισμικό συστηματοποίηση προγραμματισμού Τις τελευταίες δεκαετίες δημιουργούνται συνεχώς Νέες μέθοδοι, τεχνικές και πρότυπα στον προγραμματισμό Νέες εξειδικευμένες γλώσσες προγραμματισμού Οιγλώσσες3 ης γενιάςμετέτρεψαντονπρογραμματισμόσεμια ευχάριστη και δημιουργική εργασία, όπου οι προγραμματιστές απελευθερωμένοι από δουλειές ρουτίνας πέτυχαν να δημιουργήσουν νέα εργαλεία και τεχνικές και η εξέλιξη της Πληροφορικής συνεχίζεται από τότε με ιλιγγιώδεις ρυθμούς
ΕίδηΠρογραμματισμού Είδηπρογραμματισμού: Διαδικασιακός Δομημένος Παράλληλος Αντικειμενοστραφής Συναρτησιακός Λογικός
1. Διαδικασιακόςπρογραμματισμός (procedural programming) Τοπρόγραμμαείναιγραμμένοσεμιαγλώσσαη οποίαείναιεξαρτημένηαπότηδιαδικασία. Η διαδικασία είναι το χαρακτηριστικό των περισσοτέρωνγλωσσών3 ης γενιάς. Μια τέτοια γλώσσα δίνει έμφαση στον προγραμματισμό των υπολογιστικών(π.χ. μέσος όρος, φόρος, ποσοστό) και λογικών(π.χ. μέγιστοελάχιστο) διαδικασιών που απαιτούνται για την επίλυσηενόςπροβλήματος. Γλώσσεςεξαρτημένεςαπότηδιαδικασία: COBOL, PASCAL, FORTRAN
1. Διαδικασιακόςπρογραμματισμός (procedural programming) Προβλήματα που λύνονται με διαδικασιακό προγραμματισμό: λογιστικέςεφαρμογές, Εμπορικές εφαρμογές διοικητικέςεφαρμογές(μισθοδοσία), Μεταφορών(κράτησηθέσης, εισιτήρια) Στο διαδικασιακό προγραμματισμό το πρόγραμμα είναιμιαδιαδικασίαπουεκτελείέναπροςένατα βήματα του αλγορίθμου που λύνει το πρόβλημα. Οι εντολές εκτελούνται ακολουθιακά η μία μετά την άλληεκτόςκαιανυπάρχουνσυνθήκεςμεβάσητις οποίες μπορεί κάποιες εντολές να παραλείπονται ή άλλες να επαναλαμβάνονται
Ερώτηση5(Τιγνωρίζετεγιατο διαδικασιακόπρογραμματισμό) Σελίδα 58. Ενότητα 7.3.1
Ερώτηση6(Παραδείγματαγλωσσών εξαρτημένααπότηδιαδικασία) Σελίδα 58. Ενότητα 7.3.1 COBOL, FORTRAN, PASCAL
2. Δομημένοςπρογραμματισμός (structural programming) Προϋποθέτει τη δομημένη σχεδίαση και έλεγχο ενός δομημένου προγράμματος Το πρόγραμμα αποτελείται από ανεξάρτητα τμήματα(modules) τα οποία συνδέονται με βάση κάποιοσχέδιο. Χρησιμοποιούνται οι βασικές αλγοριθμικές δομές της ακολουθίας (διαδοχής), επιλογής και επανάληψης.
2. Δομημένοςπρογραμματισμός (structural programming) Χρησιμοποιεί τις τεχνικές του τμηματικού προγραμματισμού και ιεραρχικού σχεδιασμού Χρησιμοποιεί τα διαγράμματα HIPO για την αναπαράσταση των παραπάνω τεχνικών. Σε ένα διάγραμμα HIPO εμφανίζονται τα διάφορα επίπεδα ιεραρχίας και τα τμήματα του προγράμματος με αριθμό σύμφωνα με τη σειρά εκτέλεσης
Διάγραμμα HIPO
Ερώτηση 7(Οι βασικές αλγοριθμικές δομές και τεχνικές σχεδίασης στο δομημένο προγραμματισμό) Στον δομημένο προγραμματισμό, οι βασικές αλγοριθμικές δομές είναι οι δομές της διαδοχής (ακολουθία), της απλής επιλογής και της επανάληψης. Στον δομημένο προγραμματισμό χρησιμοποιούνται οι τεχνικές του ιεραρχικού και του τμηματικού προγραμματισμού.
Ερώτηση8(Πουχρησιμοποιούνταιτα διαγράμματαhipo) Τα διαγράµµατα HIPO χρησιµοποιούνται στον δοµηµένο προγραµµατισµό για την αναπαράσταση των τεχνικών του ιεραρχικού σχεδιασµού και του τµηµατικού προγραµµατισµού. Στα διαγράµµατα αυτά εµφανίζονται τα διάφορα επίπεδα ιεραρχίας και τα διάφορα τµήµατα προγράµµατος µε αριθµό σύµφωνα µε τη σειρά εκτέλεσής τους.
3. Παράλληλοςπρογραμματισμός (parallel programming) Οφείλει την καθιέρωσή του στην εξέλιξη του υλικού Αρχιτεκτονική πολλών επεξεργαστών με κοινή μνήμη Παράλληλοι αλγόριθμοι Επιτρέπει την ταυτόχρονη εκτέλεση διαδικασιών από διαφορετικούς επεξεργαστές Διαφορετικά υποπρογράμματα του ίδιου προγράμματος μπορούν να εκτελούνται παράλληλα(ταυτόχρονα) από διαφορετικούς επεξεργαστές
3. Παράλληλοςπρογραμματισμός (parallel programming) Ανάγκη για ταυτόχρονη εκτέλεση και επικοινωνία μεταξύ των εκτελούμενων διεργασιών επέκταση σε κλασικές γλώσσες διαδικασιακού προγραμματισμού(ada, Modula2, Concurrent C) ή σχεδιασμόςνέωνγλωσσών(occam) Παράλληλος προγραμματισμός αποτελεσματική εκμετάλλευση των δυνατοτήτων που παρέχει η αρχιτεκτονική των παράλληλων επεξεργαστών
Ερώτηση9(Πουοφείλειτηνκαθιέρωσήτουο παράλληλος προγραμματισμός) Ο Παράλληλος Προγραµµατισµός οφείλει την καθιέρωσή του στην ανάπτυξη του υλικού. Η εµφάνιση της αρχιτεκτονικής των πολλών επεξεργαστών οι οποίοι χρησιµοποιούν κοινή µνήµη είχε ως συνέπεια την ανάπτυξη των παράλληλων αλγορίθµων οι οποίοι και επέβαλαν τον Παράλληλο Προγραµµατισµό. Αντιπροσωπευτική γλώσσα για παράλληλη επεξεργασία είναι η γλώσσα Occam.
4. Αντικειμενοστραφής προγραμματισμός(object oriented) Βασίζεται στην ενσωμάτωση των δεδομένων και του τρόπου χειρισμού αυτών μέσα από την έννοια του αντικειμένου (οποιαδήποτε οντότητα άνθρωπος, σχολείο, αυτοκίνητο, τραπέζι κτλ. αναπαρίσταται ως αντικείμενο) Κάθε αντικείμενο έχει δεδομένα που είναι τα χαρακτηριστικά του Κάθε αντικείμενο έχει μεθόδους που είναι οι ενέργειες που μπορούνναγίνουνπάνωσταδεδομένα(χειρισμός, επεξεργασία) και καθορίζουν τη συμπεριφορά του αντικειμένου Οι μέθοδοι μπορεί να είναι διαδικασίες ή συναρτήσεις
4. Αντικειμενοστραφής προγραμματισμός(object oriented) Μπορούμε να έχουμε κλάσεις(ομάδες) αντικειμένων στις οποίες ορίζονται κοινά χαρακτηριστικά για ένα μεγάλο σύνολο αντικειμένων και για κάθε κλάση υποκλάσεις (υποσύνολοαντικειμένων) ιεραρχικάδομημένες. Οι υποκλάσεις κληρονομούν τα χαρακτηριστικά και μεθόδους των κλάσεων από τις οποίες προήλθαν και μπορούμεναορίσουμενέεςιδιότητεςκαιμεθόδους.
Παράδειγμααντικειμενοστραφούς προγραμματισμού(java)
Ερώτηση10 (Τι είναι ο αντικειμενοστραφής προγραμματισμός) Σελίδα 60. Ενότητα 7.3.4
Ερώτηση11 (Τι είναι τα χαρακτηριστικά και ποιες οι μέθοδοι στον αντικειμενοστραφή προγραμματισμό) Τα χαρακτηριστικά ενός αντικειµένου είναι τα δεδοµένα από τα οποία αποτελείται Οι µέθοδοι του αντικειµένου είναι οι ενέργειες οι οποίες σχετίζονται µε την επεξεργασία των δεδοµένων και καθορίζουν τη συµπεριφορά τουαντικειµένου στο πρόγραµµα. Οι µέθοδοι µπορεί να είναιδιαδικασίες ή συναρτήσεις του χρήστη
5. Συναρτησιακόςπρογραμματισμός (functional programming) Στηρίζεται στην έννοια της συνάρτησης, όπως την έχουμε γνωρίσει από τα μαθηματικά. Η συνάρτηση δίνει τη δυνατότητα απεικόνισης ενός πεδίου ορισμού σε ένα πεδίο τιμών. Οι εντολές και οι δομές ελέγχου είναι συναρτήσεις οι οποίες έχουν ως ορίσματα δεδομένα ή άλλες συναρτήσεις. Μέσααπότιςσυναρτήσειςυλοποιούνταιοιδιάφορεςδομέςπ.χ. επανάληψη Η έννοια της μεταβλητής και της εκχώρησης τιμής αντικαθίστανται από την έννοια της δέσμευσης ονομάτων σε τιμές Οι ίδιες οι συναρτήσεις μπορεί να αντιμετωπίζονται σαν δεδομένα και έτσι να εμφανίζονται ως είσοδος ή έξοδος άλλων συναρτήσεων Θεωρητικό υπόβαθρο ο λογισμός Λάμδα Παραδείγματα γλωσσών: LISP, FORTH και logo.
ΠαράδειγμαΣυναρτησιακού Λογισμού(Lisp)
Ερώτηση12 (Τι είναι ο συναρτησιακός προγραμματισμός) Ο Συναρτησιακός Προγραµµατισµός στηρίζεταιστηνέννοιατηςσυνάρτησης, όπως την έχουµε γνωρίσει από τα µαθηµατικά. Η συνάρτηση δίνει τη δυνατότητα απεικόνισης ενός πεδίου ορισµού σε ένα πεδίο τιµών. Στο Συναρτησιακό προγραµµατισµό οι εντολές και οι δοµές ελέγχου είναι συναρτήσεις οι οποίες έχουν ως ορίσµατα δεδοµένα ή άλλες συναρτήσεις.
Ερώτηση13 (Παραδείγματα γλωσσών συναρτησιακού προγραμματισμού) Lisp, FORTH, LOGO
6. Λογικόςπρογραμματισμός(logic programming) (διαφορά από τον διαδικασιακό προγραμματισμό:) Στο πρόγραμμα δεν περιγράφεται ο αλγόριθμος επίλυσης του προβλήματος αλλά η γνώση που σχετίζεται με το πρόβλημα. Ο Λογικός Προγραμματισμός σε αντίθεση με το Διαδικασιακό, στηρίζεται στηγνώση. Η γνώση περιγράφεται υπό μορφή γεγονότων και κανόνων ενώ ορίζεται μία πρόταση στόχος προς απόδειξη. Για την απόδειξη της πρότασης αυτής το πρόγραμμα εφαρμόζει τους κανόνες του πάνω στα γεγονότα. Πεδίο εφαρμογής η Τεχνητή Νοημοσύνη Χαρακτηριστική Γλώσσα: Prolog
ΠαράδειγμαΛογικού Προγραμματισμού(Prolog) has(jack,apples) has(ann,plums) has(dan,money) fruit(apples) fruit(plums)?-has(jack,x). /* whathasjack? */ X = apples?- has(x,apples),has(y,plums). /* who has apples and who has plums? */ X = jacky = ann?-has(x,apples),has(x,plums). /* doessomeonehaveapplesandplums? */ no?-has(dan,x),fruit(x). /* hasdanfruits? */ no?-has(x,y),notfruit(y). /* doessomeonehavesomethingelse? */ X = dany = money
Ερώτηση14 (Διαφορές Διαδικασιακού Λογικού Προγραμματισμού) Στον Λογικό προγραμματισμό, στο πρόγραμμα δεν περιγράφεται ο αλγόριθμος επίλυσης του προβλήματος αλλάηγνώσηπουσχετίζεταιμετοπρόβλημα. Ο Λογικός Προ-γραμματισμός σε αντίθεση με το Διαδικασιακό, στηρίζεται στη γνώση. Η γνώση περιγράφεται υπό μορφή γεγονότων και κανόνων ενώ ορίζεται μία πρόταση στόχος προς απόδειξη. Για την απόδειξη της πρότασης αυτής το πρόγραμμα εφαρμόζειτουςκανόνεςτουπάνωσταγεγονότα.
6. Λογικόςπρογραμματισμός(logic programming) Διαδικασιακός προγραμματισμός Ο προγραμματιστής περιγράφει τα βήματα του αλγορίθμου Λογικός προγραμματισμός Ο προγραμματιστής Περιγράφει τη γνώση σχετικά με το θέμα Προσδιορίζει τους στόχους Γράφει τους κανόνες Η πρόταση στόχος πρέπει να αποδειχθεί αληθής με χρήση των κανόνων Ηεφαρμογήτωνκανόνωνγιατην απόδειξη του στόχου δεν αποτελεί μέρος του προγραμματισμού αλλά εκτελείται αυτόματα
Προγραμματιστικάπεριβάλλοντα Ο προγραμματιστής κωδικοποιεί ένα πρόγραμμα σε μια γλώσσα προγραμματισμού υψηλού επιπέδου Ο υπολογιστής μπορεί να εκτελέσει ένα πρόγραμμα μόνο αν είναι γραμμένο σε γλώσσα μηχανής Άρα απαιτείται μετατροπή του προγράμματος Πώς; Με ένα μεταφραστικό πρόγραμμα μεταγλωττιστή
Μεταγλωττιστής Ειδικό πρόγραμμα που μεταφράζει ένα άλλο πρόγραμμα, από μια γλώσσα προγραμματισμού σε γλώσσα μηχανής Πρόγραμμαπροςμετάφρασηπηγαίο(source) πρόγραμμα Μεταφρασμένο αντικείμενο(object) πρόγραμμα 2 κατηγορίες μεταγλωττιστών Compiler Interpreter
Μεταγλωττιστής
Ερώτηση15 (Πηγαίο πρόγραμμα, αντικείμενο πρόγραμμα, μεταγλωττιστής) σελ. 61, 62 καιτοσχήμασελίδα62
Compiler Διαβάζει πρόγραμμα γραμμένο σε γλώσσα υψηλού επιπέδουκαιτομεταφράζεισεγλώσσαμηχανής. Αρχικά γίνεται έλεγχος για ορθογραφικά(γραμματικά) και συντακτικάλάθη. Αν βρεθούν λάθη, πρέπει να διορθωθούν(με χρήση προγράμματος που λέγεται συντάκτης διορθωτής κειμένου (editor) Η διαδικασία επαναλαμβάνεται όσες φορές χρειάζεται μέχρι να μην υπάρχουν πλέον λάθη Αν δεν βρει κανένα λάθος, ο compiler παράγει το αντικείμενο πρόγραμμα(κώδικα) Προσοχή: Το αντικείμενο πρόγραμμα που παράγεται από ένα μεταγλωττιστή δεν είναι ακόμα εκτελέσιμο από τον επεξεργαστή (πρέπει να ακολουθήσουν και άλλες διαδικασίες μέχρι να γίνει εκτελέσιμο)
Compiler συνοψίζοντας Κάνει συντακτική και γραμματική ανάλυση του πηγαίου προγράμματος με εκτύπωση λαθών Κάνει την κατάληψη του απαραίτητου χώρου στην κύρια μνήμη για να μπορεί να εκτελεστεί το πρόγραμμα Φυλάσσει το αντικείμενο πρόγραμμα στο δίσκο Παράγει, κατά βούληση του χρήστη, πρόγραμμα σε γλώσσα μηχανής και/ή συμβολική γλώσσα Παράγει πίνακες στη μνήμη που είναι απαραίτητοι για τη μετάφρασητουπρογράμματος(πίνακεςσταθερών, βρόχων κλπ)
Interpreter διερμηνέας Μεταγλώττιση(μετάφραση) προγράμματος από γλώσσα υψηλού επιπέδουσεγλώσσαμηχανήςκαιταυτόχρονηεκτέλεση. ελέγχει για ορθογραφικά(γραμματικά) και συντακτικά λάθη τις εντολές του πηγαίου προγράμματος τη εξετάζοντας τη μία μετά την άλλη κατά τη σειράεκτέλεσηςτους. ανγιαμιαεντολήδενβρειλάθος, παράγειτιςαντίστοιχεςεντολέςσε κώδικα μηχανής, την εκτελεί και συνεχίζει με τη μετάφραση της επόμενης εντολής. Σταματάει όταν βρει συντακτικό γραμματικό λάθος σε μια εντολή και ενημερώνει το χρήστη.. Γλώσσα που χρησιμοποιεί interpreter η BASIC(ευκολία προγραμματισμού που οφείλεται στο διερμηνέα και στο διαλογικό περιβάλλον που δημιουργεί)
Ομοιότητεςμεταξύ compiler και interpreter (ερώτηση 15) Και τα δύο μεταφραστικά προγράμματα που μετατρέπουν ένα πρόγραμμα από γλώσσα υψηλού επιπέδου σε γλώσσα μηχανής Πριν τη μετάφραση κάνουν έλεγχο για συντακτικά και γραμματικά ορθογραφικά λάθη
Διαφορέςμεταξύ compiler και interpreter (ερώτηση 16) Compiler Interpreter Κάνει ανάλυση(συντακτική και γραμματική) ολόκληρου του πηγαίου προγράμματος και το μετατρέπει σε αντικείμενο πρόγραμμα μόνο εφόσον δεν υπάρχουνλάθη. δεν ελέγχει τη σύνταξη ολόκληρου του πηγαίου προγράμματος πριν από την εκτέλεση. επαναλαμβάνεται η διαδικασία μετάφρασης ελέγχου κάθε φορά που εκτελείται το πηγαίο πρόγραμμα. Εφόσον γίνει επιτυχής μετάφραση, το αντικείμενο πρόγραμμα μπορεί να χρησιμοποιηθεί όσες φορές θέλουμε χωρίς να προηγηθεί ξανά μετάφραση. Η εκτέλεση ενός προγράμματος είναι πιο γρήγορη Ο συντακτικός έλεγχος και η μετάφραση γίνεται σε μία εντολή κάθε φορά που συναντάται, κατά την εκτέλεση του προγράμματος Ο έλεγχος και η διόρθωση των λαθών γίνονται ευκολότερα, γιατί ο προγραμματιστής πληροφορείται αμέσως για κάθε συντακτικό ή γραμματικό λάθος, το διορθώνει και συνεχίζει την εκτέλεση του προγράμματος Η εκτέλεση ενός προγράμματος είναι πολύ πιο αργή
Γραφή εκτέλεσηπρογράμματος Το πηγαίο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού με τη βοήθεια ενός απλού προγράμματος επεξεργασίαςκειμένου(πουλέγεταιεκδότης-διορθωτής(editor)). (το κείμενο του προγράμματος που παράγεται ονομάζεται πηγαίος κώδικας, source code) Ο μεταγλωττιστής ελέγχει το πηγαίο πρόγραμμα για ορθογραφικά ή συντακτικά λάθη. Σε περίπτωση που διαπιστώνονται λάθη: ο μεταγλωττιστής δίνει κατάλληλα μηνύματα, ο editor χρησιμοποιείται για τη διόρθωση τους και το πηγαίο πρόγραμμα επανελέγχεται από το μεταγλωττιστή. Ηδιαδικασίααυτήεπαναλαμβάνεταιμέχριταλάθηναμηδενιστούν. Στην περίπτωση αυτή, η μεταγλώττιση του προγράμματος είναι επιτυχήςκαιπαράγεταιτοαντικείμενοπρόγραμμα.
Γραφή εκτέλεσηπρογράμματος Το αντικείμενο πρόγραμμα δεν είναι κατ ανάγκη εκτελέσιμο από τον υπολογιστή αλλά πρέπει να συνδεθεί με υποπρογράμματα της βιβλιοθήκης της γλώσσας ή του προγραμματιστή με τη βοήθεια ενός άλλου προγράμματος του συνδέτη(linker) ώστετελικάναπαραχθείεκτελέσιμοςκώδικας. [διαδικασία: γραφήμεταγλώττισησύνδεσηεκτέλεση]. Σε άλλες περιπτώσεις αντί του συνδέτη χρησιμοποιείται ένα άλλο πρόγραμμα, ο φορτωτής(loader), ο οποίος συνδέει το αντικείμενο πρόγραμμα με υποπρογράμματα της βιβλιοθήκης της γλώσσας ή του προγραμματιστή και φορτώνει στη μνήμη γιαεκτέλεσητουκώδικαμηχανήςπουπροκύπτει. [διαδικασία: γραφήμεταγλώττισηφόρτωση].
Γραφή εκτέλεσηπρογράμματος (Ερώτηση17)
Σύγχροναπρογραμματιστικά περιβάλλοντα(ερώτηση18) Ολοκληρωμένοπεριβάλλον: για την ανάπτυξη ενός προγράμματος συνυπάρχουν διάφορα από τα προγράμματαπουαναφέρθηκαν(π.χ. editor compiler linker) τα προγράμματα αυτά συνεργάζονται στο ίδιο περιβάλλον, οπότε διευκολύνεται και επιταχύνεται η ολοκλήρωση της ανάπτυξης του προγράμματος καθώς και η μετάβαση στα διάφορα στάδια(pame) Γραφικό περιβάλλον: ένα ολοκληρωμένο περιβάλλον που διαθέτει και εργαλεία σχεδίασης με τη βοήθεια γραφικών Τα εργαλεία γραφικών χρησιμεύουν για να σχεδιάσει ο προγραμματιστής στην οθόνη την εφαρμογή του.(scratch, Visual Basic)