ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού Είδη προγραµµατισµού και χαρακτηριστικά Διαδικασία δηµιουργίας εκτελέσιµου κώδικα Κατηγορίες προγραµµατιστικών περιβαλλόντων 2. Κύκλος ανάπτυξης προγράµµατος Πρόγραµµα : εντολές που εκτελούνται από τον υπολογιστή : εργαλείο για την επίλυση προβλήµατος µε τη βοήθεια υπολογιστή Κύκλος ανάπτυξης προγράµµατος Τυποποιηµένη διαδικασία που ακολουθείται για την ανάπτυξης προγράµµατος (επίλυση προβλήµατος µέσω Η/Υ) Σχεδίαση προγράµµατος α. κατανόηση προβλήµατος - αποσαφήνιση - δεδοµένα, ζητούµενα - περιορισµοί (βαθµός >= 0 <= 20) (καθορισµός απαιτήσεων) - συνθήκες (πότε υπολογίζεται φόρος) - ανάλυση σε απλούστερα προβλήµατα β. επιλογή µεθόδου επίλυσης - όγκος δεδοµένων - πολυπλοκότητα - δυνατότητες υπολογιστή υπολογισµός µεγίστου από τρεις αριθµούς if A > B then if A > C then MAX:=A else MAX :=C else if B > C then MAX := B else MAX := C; ΜΑΧ:=Α; if B > MAX then MAX := B; if C > MAX then MAX := C 1
Λοιπές διαδικασίες γ. κωδικοποίηση µετάφραση προγράµµατος δ. έλεγχος προγράµµατος ε. τεκµηρίωση προγράµµατος 3. Γλώσσες προγραµµατισµού 3.1. Γλώσσα µηχανής Σύνολο εντολών επεξεργαστή (Instruction set) Γλώσσα µηχανής : εντολές γραµµένες σαν ακολουθίες 0 / 1 σταθερού ή µεταβλητού µήκους Πρόγραµµα σε γλώσσα µηχανής : εξαρτηµένο από τον επεξεργαστή (διακόπτες διάτρητες κάρτες) 3.2. Συµβολικές γλώσσες Συµβολική γλώσσα (assembly) Μνηµονικά ονόµατα σε εντολές γλώσσας µηχανής Μνηµονικά ονόµατα σε διευθύνσεις µνήµης Παράδειγµα add %L1,%L2,%L3!%L1+%L2->%L3 add %L1,1,%L1!increment L1 sub %g0,%i3,%i3!negate i3 sub %L1,10,%G0!compare %L1 to 10 (discard result) add %L1,%G0,%L2!move %L1 to %L2 (add 0 to it) add %G0,%G0,%L4!clear L4 (0+0 ->%L4) ld [%L1+%L2],%L3!word at address [%L1+%L2]->%L3 ld [%L1+8],%L2!word at address [%L1+8]->%L2 ld [%L1],%L2!word at address [%L1]->%L2 st %g0,[%i2+0]!0 -> word at address in %i2 st %g0,[%i2]!same as above call printf Γλώσσες χαµηλού επιπέδου Αυστηρά συνδεδεµένες µε τον επεξεργαστή Συναρµολογητές (assemblers) Μετάφραση προγράµµατος από συµβολική γλώσσα σε γλώσσα µηχανής (0/1) Άνθρωπος πρόγραµµα Χρήση Προγράµµατα διαχείρισης συστήµατος. 3.3. Γλώσσες υψηλού επιπέδου Ανάγκη για γλώσσες ανεξάρτητες από τον υπολογιστή. Χαρακτηριστικά Έχουν λέξεις κλειδιά (αγγλικής γλώσσας) [read, write, while, begin, DIV, MOD, κτλ], σύµβολα [+, -, * /] και προτάσεις [while A do] Μια εντολή σε γλώσσα υψηλού επιπέδου µεταφράζεται συνήθως σε πολλές εντολές γλώσσας µηχανής [A:=B+C] 2
Γραµµατικοί και συντακτικοί κανόνες Ελάχιστη εξάρτηση από τον υπολογιστή Βιβλιοθήκες υποπρογραµµάτων δηµιουργία νέων βιβλιοθηκών Κατηγοριοποίηση ανάλογα µε τη λειτουργικότητα επιστηµονικές εφαρµογές (FORTRAN, C, APL) εµπορικές εφαρµογές (COBOL, RPG) εκπαιδευτικές εφαρµογές (BASIC, LOGO) ειδικές εφαρµογές (τεχνητή νοηµοσύνη) (LISP, PROLOG) επιστηµονικές και εµπορικές εφαρµογές (PASCAL, PL-1) 3.4. Γλώσσες 4 ης Γενιάς Ερώτηση 4 : Τι γνωρίζετε για τις γλώσσες τέταρτης γενιάς Οι γλώσσες τέταρτης γενιάς είναι γλώσσες προγραµµατισµού (ή προγραµµατιστικά περιβάλλοντα) που κάθε µία είναι σχεδιασµένη για ένα συγκεκριµένο σκοπό (όπως για παράδειγµα η ανάπτυξη µιας εµπορικής εφαρµογής πληροφοριακό σύστηµα) Η χρήση γλωσσών υψηλού επιπέδου διευκόλυνε τη διαδικασία ανάπτυξης προγραµµάτων αλλά ο προγραµµατισµός παρέµεινε µια δύσκολη και χρονοβόρα διαδικασία επιρρεπής σε λάθη. Με τη χρήση γλωσσών τέταρτης γενιάς, καταρχήν επιταχύνεται η διαδικασία ανάπτυξης προγραµµάτων. Παρέχουν στον προγραµµατιστή δοµές και εντολές που µπορούν να χρησιµοποιηθούν για τη δηµιουργία εφαρµογών οι οποίες θα χρειαζόταν πολύ περισσότερες εντολές µε µια γλώσσα υψηλού επιπέδου. Έτσι έχουµε µικρότερα προγράµµατα µε λιγότερα λάθη. Είναι διαλογικές γλώσσες (δηλαδή υπάρχει αλληλεπίδραση µε τον προγραµµατιστή και ανάδραση) µε συνέπεια να είναι πιο εύκολη η χρήση τους. Δεν απαιτούνται τόσο εξειδικευµένες γνώσεις προγραµµατισµού όπως για µια γλώσσα υψηλού επιπέδου. 3.5. Ερωτήσεις Ερώτηση 1 : διαφορές γλώσσες µηχανής γλώσσες χαµηλού επιπέδου Ερώτηση 2 : διαφορές γλώσσες υψηλού επιπέδου γλώσσες χαµηλού επιπέδου Ερώτηση 3 : Κατηγορίες γλωσσών υψηλού επιπέδου ανάλογα µε τη λειτουργικότητά τους. 4. Είδη προγραµµατισµού 4.1. Διαδικασιακός Προγραµµατισµός ερώτηση 5. (Τι γνωρίζετε για το διαδικασιακό προγραµµατισµό) ερώτηση 6 (Παραδείγµατα γλωσσών που είναι εξαρτηµένα από τη διαδικασία) Το πρόγραµµα είναι γραµµένο σε µια γλώσσα η οποία είναι εξαρτηµένη από τη διαδικασία. Γλώσσες οι οποίες είναι εξαρτηµένες από τη διαδικασία είναι οι γλώσσες της 3 ης γενιάς. 3
Μια τέτοια γλώσσα δίνει έµφαση στον προγραµµατισµό των υπολογιστικών (µέσος όρος, φόρος, ποσοστό) και λογικών διαδικασιών (µέγιστο - ελάχιστο) που απαιτούνται για την επίλυση ενός προβλήµατος. Γλώσσες εξαρτηµένες από τη διαδικασία (COBOL, PASCAL, FORTRAN) Προβλήµατα που λύνονται µε διαδικασιακό προγραµµατισµό : λογιστικές εφαρµογές, διοικητικές εφαρµογές (µισθοδοσία), συγκοινωνίες (κράτηση θέσης, εισιτήρια) Στο διαδικασιακό προγραµµατισµό το πρόγραµµα είναι µια διαδικασία που εκτελεί ένα προς ένα τα βήµατα του αλγορίθµου που λύνει το πρόβληµα. Οι εντολές εκτελούνται ακολουθιακά η µία µετά την άλλη εκτός και αν υπάρχουν συνθήκες µε βάση τις οποίες µπορεί κάποιες εντολές να παραλείπονται ή άλλες να επαναλαµβάνονται. 4.2. Δοµηµένος Προγραµµατισµός ερώτηση 7. (Βασικές αλγοριθµικές δοµές και τεχνικές σχεδίασης στο δοµηµένο προγραµµατισµό) ερώτηση 8 (Που χρησιµοποιούνται τα διαγράµµατα HIPO) Το πρόγραµµα αποτελείται από ανεξάρτητα τµήµατα τα οποία συνδέονται µε βάση κάποιο σχέδιο. Χρησιµοποιούνται οι αλγοριθµικές δοµές της ακολουθίας, επιλογής και επανάληψης. Χρησιµοποιεί τις τεχνικές του τµηµατικού προγραµµατισµού και ιεραρχικού σχεδιασµού Χρησιµοποιεί τα διαγράµµατα HIPO για την αναπαράσταση των παραπάνω τεχνικών. Σε ένα διάγραµµα HIPO εµφανίζονται τα διάφορα επίπεδα ιεραρχίας και 4.3. Παράλληλος προγραµµατισµός Ερώτηση 9 (Που οφείλει την καθιέρωσή του ο παράλληλος προγραµµατισµός) Οφείλει την καθιέρωσή του στην εξέλιξη του υλικού (πολλοί επεξεργαστές µε κοινή µνήµη) Επιτρέπει την ταυτόχρονη εκτέλεση διαδικασιών από διαφορετικούς επεξεργαστές Διαφορετικά υποπρογράµµατα του ίδιου προγράµµατος µπορούν να εκτελούνται ταυτόχρονα Γλώσσα Occam 4.4. Αντικειµενοστραφής προγραµµατισµός Ερώτηση 10 (Τι είναι ο αντικειµενοστραφής προγραµµατισµός) Ερώτηση 11 (Τι είναι τα χαρακτηριστικά και ποιες οι µέθοδοι στον αντικειµενοστραφή προγραµµατισµό) Ο αντικειµενοστραφής προγραµµατισµός βασίζεται στην έννοια του αντικειµένου (οποιαδήποτε οντότητα άνθρωπος, αυτοκίνητο, πλοίο, τραπέζι κτλ. αναπαρίσταται ως αντικείµενο) Κάθε αντικείµενο έχει δεδοµένα που είναι τα χαρακτηριστικά του 4
Κάθε αντικείµενο έχει µεθόδους που είναι οι ενέργειες που µπορούν να γίνουν πάνω στα δεδοµένα (χειρισµός) και καθορίζουν τη συµπεριφορά του αντικειµένου Οι µέθοδοι µπορεί να είναι διαδικασίες ή συναρτήσεις Μπορούµε να έχουµε κλάσεις (οµάδες) αντικειµένων στις οποίες ορίζονται κοινά χαρακτηριστικά για ένα µεγάλο σύνολο αντικειµένων και για κάθε κλάση υποκλάσεις (υποσύνολο αντικειµένων) ιεραρχικά δοµηµένες. Οι υποκλάσεις κληρονοµούν τα χαρακτηριστικά και µεθόδους τα κλάσεων από τις οποίες προήλθαν και µπορούµε να ορίσουµε νέες ιδιότητες και µεθόδους. 4.5. Συναρτησιακός προγραµµατισµός Ερώτηση 12 (Τι είναι ο συναρτησιακός προγραµµατισµός) Ερώτηση 13 (Παραδείγµατα γλωσσών συναρτησιακού προγραµµατισµού) ( Απαντήσεις & Λύσεις Βιβλίου) 4.6. Λογικός προγραµµατισµός Ερώτηση 14 (Διαφορές Διαδικασιακού Λογικού προγραµµατισµού) ( Απαντήσεις & Λύσεις Βιβλίου) 5
5. Προγραµµατιστικά περιβάλλοντα Ένα πρόγραµµα γράφεται από τον προγραµµατιστή σε µια γλώσσα προγραµµατισµού (υψηλού επιπέδου). Για να εκτελεστεί από τον υπολογιστή (επεξεργαστή) θα πρέπει να µεταφραστεί σε γλώσσα µηχανής. Αυτή η µετάφραση γίνεται από ένα πρόγραµµα που ονοµάζεται µεταγλωττιστής. 5.1. Μεταγλωττιστής Ερώτηση 15 (Πηγαίο πρόγραµµα, αντικείµενο πρόγραµµα και µεταγλωττιστής) Ερώτηση 16 (Οµοιότητες διαφορές compiler interpreter) Ο µεταγλωττιστής είναι ένα ειδικό πρόγραµµα που µεταφράζει ένα άλλο πρόγραµµα από µια γλώσσα υψηλού επιπέδου σε γλώσσα µηχανής. το πρόγραµµα σε γλώσσα υψηλού επιπέδου ονοµάζεται πηγαίο (source) πρόγραµµα (πηγαίος κώδικας source code). το µεταφρασµένο πρόγραµµα ονοµάζεται αντικείµενο (object) πρόγραµµα. 5.2. Κατηγορίες µεταγλωττιστών COMPILER : Μεταγλώττιση (µετάφραση) προγράµµατος από γλώσσα υψηλού επιπέδου σε γλώσσα µηχανής. έλεγχος για ορθογραφικά (γραµµατικά π.χ. writa αντί για write) και συντακτικά (π.χ. λείπει ; η κάποιο end.) λάθη. αν δεν βρει κανένα λάθος παράγει το αντικείµενο πρόγραµµα και το αποθηκεύει στο δίσκο. ανάλογα µε τη βούληση του χρήστη µπορεί να παράγει το πρόγραµµα σε γλώσσα µηχανής ή / και συµβολική γλώσσα). 6
ΠΡΟΣΟΧΗ το αντικείµενο πρόγραµµα που παράγεται από ένα µεταγλωττιστή δεν είναι εκτελέσιµο από τον επεξεργαστή. INTERPRETER (διερµηνέας): Μεταγλώττιση (µετάφραση) προγράµµατος από γλώσσα υψηλού επιπέδου σε γλώσσα µηχανής και ταυτόχρονη εκτέλεση. έλεγχος για ορθογραφικά (γραµµατικά π.χ. writa αντί για write) και συντακτικά (π.χ. λείπει ; η κάποιο end.) λάθη τις εντολές του πηγαίου προγράµµατος τη µία µετά την άλλη µε τη σειρά. αν για µια εντολή δεν βρει λάθος, παράγει τις αντίστοιχες εντολές µηχανής και τις εκτελεί. σταµατάει όταν βρει συντακτικό γραµµατικό λάθος σε µια εντολή και ενηµερώνει το χρήστη.. Οµοιότητες Compiler Interpreter Είναι και τα δύο µεταφραστικά προγράµµατα που µετατρέπουν ένα πρόγραµµα από γλώσσα υψηλού επιπέδου σε γλώσσα µηχανής. Διαφορές Compiler Interpreter Ο compiler κάνει ανάλυση(συντακτική και γραµµατική) ολόκληρου του πηγαίου προγράµµατος και το µετατρέπει σε αντικείµενο πρόγραµµα µόνο εφόσον δεν υπάρχουν λάθη. Αντίθετα, ο interpreter δεν ελέγχει τη σύνταξη ολόκληρου του πηγαίου προγράµµατος πριν από την εκτέλεση. Με τη χρήση compiler και εφόσον γίνει επιτυχής µετάφραση, το αντικείµενο πρόγραµµα µπορεί να χρησιµοποιηθεί όσες φορές θέλουµε χωρίς να προηγηθεί µετάφραση. Αντίθετα, µε τη χρήση interpreter, πάντα θα πρέπει να επαναλαµβάνεται η διαδικασία µετάφρασης ελέγχου κάθε φορά που εκτελείται το πηγαίο πρόγραµµα. Ο συντακτικός έλεγχος και η µετάφραση γίνεται σε κάθε µία από τις εντολές του πηγαίου προγράµµατος. Εφόσον δεν υπάρχουν λάθη, παράγεται η αντίστοιχη εντολή σε κώδικα µηχανής, εκτελείται και συνεχίζεται η µετάφραση της επόµενης εντολής. Ο έλεγχος και η διόρθωση των λαθών ενός προγράµµατος µε τη χρήση interpreter είναι πιο εύκολη από ότι η διόρθωση µε τη χρήση compiler, αφού στην περίπτωση του interpreter το πρόγραµµα σταµατά στο σηµείο του λάθους, ο προγραµµατιστής το πληροφορείται, το διορθώνει και συνεχίζει την εκτέλεση του προγράµµατος. Η εκτέλεση ενός προγράµµατος µε interpreter είναι πολύ πιο αργή σε σύγκριση µε την εκτέλεση του ιδίου προγράµµατος, µεταφρασµένου µε compiler. 7
5.3. Γραφή Εκτέλεση προγράµµατος Ερώτηση 17 (Διαδικασία γραφής εκτέλεσης προγράµµατος) 5.4. Σύγχρονα προγραµµατιστικά περιβάλλοντα Ερώτηση 18 (Ποια είναι τα σύγχρονα προγραµµατιστικά περιβάλλοντα) Ολοκληρωµένο περιβάλλον Γραφικό περιβάλλον 8