Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Προγραμματισμός Βασικές Έννοιες.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Προγραμματισμός Βασικές Έννοιες."— Μεταγράφημα παρουσίασης:

1 Προγραμματισμός Ιlalis@inf.uth.gr1 Βασικές Έννοιες

2 Γενικές Πληροφορίες Διδάσκων: Πέτρος Λάμψας (plampsas@uth.gr) Υπεύθυνος Εργαστηρίου: Γιώργος Δημητρίου (dimitriu@uth.gr) Θεωρία: Παρασκευή 10:00-13:00 Δικτυακός τόπος μαθήματος: http://eclass.uth.gr/eclass/courses/INFS100/ Προγραμματισμός Ιlalis@inf.uth.gr2

3 Προγραμματισμός Ιlalis@inf.uth.gr3 Αλγόριθμο, με την ευρύτερη έννοια του όρου, ονομάζουμε την ακολουθία των ενεργειών που πρέπει να πραγματοποιηθούν για να λυθεί ένα συγκεκριμένο (π.χ. υπολογιστικό) πρόβλημα. Συνηθισμένοι παράμετροι προβλημάτων: –σωστός υπολογισμός του αποτελέσματος –καλή απόδοση (ταχύτητα) –εξοικονόμηση πόρων (μνήμη, ενέργεια, δίκτυο) Για κάθε πρόβλημα μπορεί να υπάρχουν πολλοί διαφορετικοί αλγόριθμοι, με διαφορετικές ιδιότητες. Αλγόριθμος

4 Προγραμματισμός Ιlalis@inf.uth.gr4 Ένας αλγόριθμος μπορεί να περιγραφεί σε μια συμβατική καθομιλουμένη γλώσσα ή/και με την βοήθεια κάποιας ειδικής γλώσσας προσδιορισμού. Μια γλώσσα προσδιορισμού έχει συγκεκριμένους κανόνες σύνταξης (ποιές προτάσεις επιτρέπονται) και συγκεκριμένη σημασιολογία (τη σημασία έχει κάθε επιτρεπτή πρόταση). Μια γλώσσα προγραμματισμού είναι μια (ειδική) γλώσσα προσδιορισμού, η οποία σχεδιάζεται έτσι ώστε κάθε επιτρεπτή πρόταση της να μπορεί να μετατραπεί σε εντολές που εκτελούνται σε ειδικά σχεδιασμένες μηχανές εκτέλεσης –πιο συγκεκριμένα τον επεξεργαστή (CPU) ενός Η/Υ. Γλώσσα προγραμματισμού

5 Προγραμματισμός Ιlalis@inf.uth.gr5 Ένα πρόγραμμα δεν είναι τίποτα παραπάνω (αλλά ούτε και λιγότερο) από μια πρόταση που γράφεται στα πλαίσια μιας γλώσσας προγραμματισμού. Όπως κάθε πρόταση, ένα πρόγραμμα πρέπει να είναι (α) συντακτικά σωστό (β) σημασιολογικά ορθό. Αντίθετα με περιγραφές που δίνονται σε κάποια καθομιλουμένη ή/και μαθηματική γλώσσα, ένα πρόγραμμα μπορεί να εκτελεστεί σε έναν Η/Υ. Πρόγραμμα

6 Προγραμματισμός Ιlalis@inf.uth.gr6 Το συντακτικό μιας γλώσσας ορίζει το σύνολο των επιτρεπτών προτάσεων (ακολουθία συμβόλων). Κάθε επιτρεπτή πρόταση αντιστοιχεί σε ένα συντακτικά ορθό πρόγραμμα, το οποίο μπορεί να μεταφραστεί επιτυχώς και να εκτελεστεί. Υπάρχουν ειδικές γλώσσες περιγραφής των κανόνων σύνταξης γλωσσών προγραμματισμού, π.χ.: –Extended Backus Naur Form (EBNF) –συντακτικά διαγράμματα Ο μόνος τρόπος να κατανοήσει κανείς (πλήρως) όλες τις επιτρεπτές προτάσεις μιας γλώσσας είναι να συμβουλευτεί αυτές τις περιγραφές. Συντακτικό

7 Προγραμματισμός Ιlalis@inf.uth.gr7 ΣυμβολισμόςΣημασία Α Α Β Α ακολουθούμενο από το Β Α | Β Α ή Β [Α] «τίποτα» ή Α {Α} «τίποτα» ή Α ή Α Α ή Α Α Α ή... 'Α' το τερματικό στοιχείο 'Α' EBNF

8 Προγραμματισμός Ιlalis@inf.uth.gr8 ΣυμβολισμόςΣημασία Α Α και μετά Β Α ή Β «τίποτα» ή Α «τίποτα» ή Α ή Α Α ή Α Α Α ή... το τερματικό στοιχείο 'Α' Συντακτικά διαγράμματα Α ΑΒ Α Β Α Α Α

9 Προγραμματισμός Ιlalis@inf.uth.gr9 Σύνταξη: κανόνες για τον σχηματισμό προτάσεων. Σημασία: το νόημα (π.χ. σειρά αποτίμησης) που έχουν οι συντακτικά επιτρεπτές προτάσεις. Η σύνταξη μιας γλώσσας δεν μπορεί να ορίσει ταυτόχρονα και την σημασία της, αλλά υπάρχουν γλώσσες προσδιορισμού σημασίας (σημασιολογίας). Υπάρχουν όμως συντακτικά επιτρεπτές προτάσεις που δεν έχουν ορισμένη (μια μοναδική) σημασία; Σε γλώσσες προγραμματισμού: πιθανώς, αλλά είναι λάθος(!) να τις χρησιμοποιεί ο προγραμματιστής. Στην ανθρώπινη γλώσσα: βεβαίως, στην οποία περίπτωση απλά προκαλείται κάποια σύγχιση. Σύνταξη και σημασία

10 Προγραμματισμός Ιlalis@inf.uth.gr10 ακέραια-έκφραση = ακέραιος[πράξη ακέραια-έκφραση] ακέραιος = [πρόσημο]νούμερο{νούμερο} νούμερο = '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9' πρόσημο = '+'|'-' πράξη = '+'|'-'|'*'|'/' ΕBNF ακέραια-έκφραση ακέραιος πρόσημο Syntax diagram ψηφίο + - πράξη ψηφίο ακέραια-έκφραση ακέραιος πράξη * / + - πρόσημο 0 1 ψηφίο 9

11 Προγραμματισμός Ιlalis@inf.uth.gr11 Συντακτικά ορθές προτάσεις: -2+13 15/5-2 Όμως, σε τι τιμές αντιστοιχούν; -2+13 (-2)+(13) ή –(2+13) 15/5-2 (15/5)-2 ή 15/(5-2) Η προηγούμενη σύνταξη δεν ορίζει (ούτε και θα μπορούσε ποτέ να ορίσει) την σειρά αποτίμησης, δηλαδή την σημασία, των παραπάνω προτάσεων. Παραδείγματα

12 Προγραμματισμός Ιlalis@inf.uth.gr12 Εκτέλεση εντολών

13 Προγραμματισμός Ιlalis@inf.uth.gr13 Οι εντολές ενός προγράμματος εκτελούνται από «αριστερά προς τα δεξιά» και «από πάνω προς τα κάτω», όπως διαβάζουμε ένα κείμενο. Μπορεί να γίνουν άλματα, είτε «προς τα εμπρός» είτε «προς τα πίσω», οπότε κάποιες εντολές μπορεί να παρακαμφθούν ή/και να εκτελεστούν παραπάνω από μια φορά. Τα άλματα πραγματοποιούνται με ειδικές εντολές που ορίζει κάθε γλώσσα προγραμματισμού: (α) ελέγχου ροής εκτέλεσης προγράμματος (β) κλήσης υποπρογραμμάτων Εκτέλεση εντολών

14 Προγραμματισμός Ιlalis@inf.uth.gr14 Μοντέλο εκτέλεσης προγράμματος εκτέλεσε την εντολή μεταβλητές προγράμματος επέλεξε την πρώτη εντολή επέλεξε την επόμενη εντολή μνήμη διάβασμα γράψιμο

15 Προγραμματισμός Ιlalis@inf.uth.gr15 Ο προγραμματιστής μπορεί να επηρεάσει την ροή εκτέλεσης του προγράμματος μέσω εντολών ελέγχου. Οι εντολές ελέγχου διαβάζουν την κατάσταση του προγράμματος και ανάλογα μεταφέρουν τον έλεγχο σε ένα διαφορετικό σημείο του κώδικα. Έστω η εντολή if goto με την εξής σημασιολογία: αν η είναι αληθής τότε η εκτέλεση μεταφέρεται στην εντολή με αριθμό στο κείμενο του προγράμματος. Μπορούμε εύκολα να φτιάξουμε προγράμματα με εντολές που εκτελούνται υπό συνθήκη ή/και επανειλημμένα. Έλεγχος ροής εκτέλεσης

16 Προγραμματισμός Ιlalis@inf.uth.gr16 πρόγραμμα P(x,y) 1:s <- 0 2:if (x=0) goto 6 3:s <- s + y 4:x <- x -1 5:if (1=1) goto 2 6:print s εκτέλεση P(3,5) εκτέλεση P(0,5) παράμετροι s <- 0 if (x=0) goto 6 print s s <- 0 if (x=0) goto 6 s <- s + y x <- x -1 if (1=1) goto 2 if (x=0) goto 6 s <- s + y x <- x -1 if (1=1) goto 2 if (x=0) goto 6 s <- s + y x <- x -1 if (1=1) goto 2 if (x=0) goto 6 print s

17 Προγραμματισμός Ιlalis@inf.uth.gr17 Το κείμενο (κώδικας) του προγράμματος είναι δεδομένο, δεν αλλάζει την ώρα της εκτέλεσης. Παρ’ όλα αυτά, όταν χρησιμοποιούνται εντολές ελέγχου, η σειρά με την οποία θα εκτελεσθούν οι εντολές στην πραγματικότητα δεν είναι γνωστή εκ των πρoτέρων. Η σειρά εκτέλεσης εξαρτάται από την (αρχική / τρέχουσα) κατάσταση του προγράμματος. Μια αρχική κατάσταση ΑΚ1 μπορεί να οδηγήσει σε μια εκτέλεση Ε1, και μια αρχική κατάσταση ΑΚ2 μπορεί να οδηγήσει σε μια διαφορετική εκτέλεση Ε2. Σχόλιο

18 Προγραμματισμός Ιlalis@inf.uth.gr18 Χρησιμοποιούμε τον όρο «υποπρόγραμμα» για να αναφερθούμε σε μια ομάδα εντολών (και δεδομένων) που είναι συντακτικά ή/και εκτελεστικά ανεξάρτητη (αυτόνομη) από τον υπόλοιπο κώδικα. Ένα πρόγραμμα μπορεί να αποτελείται από (ή να χρησιμοποιεί) πολλά διαφορετικά υποπρογράμματα. Η χρήση υποπρογραμμάτων βοηθά σημαντικά στην (α) δομημένη ανάπτυξη, (β) αναγνωσιμότητα και (γ) επαναχρησιμοποίηση του κώδικα. Όταν καλείται ένα υποπρόγραμμα, η εκτέλεση μεταφέρεται στο υποπρόγραμμα, και όταν τερματιστεί η εκτέλεση του, επιστρέφει στο πρόγραμμα που πραγματοποίησε την κλήση. Υποπρογράμματα

19 Προγραμματισμός Ιlalis@inf.uth.gr19 πρόγραμμα P1 code A call P2 code B πρόγραμμα P2 call P3 code C return εκτέλεση P1 πρόγραμμα P3 code D return code A call P2 call P3 code D return code C return code B

20 Προγραμματισμός Ιlalis@inf.uth.gr20 Μνήμη και μεταβλητές

21 Προγραμματισμός Ιlalis@inf.uth.gr21 Καθώς η μνήμη του Η/Υ είναι δυαδική, όλα τα δεδομένα ενός προγράμματος αποθηκεύονται σαν ακολουθίες από bits, δηλαδή τιμές 0 ή 1. Κωδικοποίηση: η μετατροπή δεδομένων από ένα σύστημα σε ένα άλλο (π.χ. δεκαδικό -> δυαδικό). Όσο μεγαλύτερο το πεδίο τιμών που επιθυμούμε να καλύψουμε και όσο μεγαλύτερη η ακρίβεια με την οποία επιθυμούμε να καταγράψουμε τις τιμές αυτές, τόσο περισσότερα bits/bytes απαιτούνται για την αποθήκευση της ψηφιακής τιμής. Με Ν bits κωδικοποιούμε 2 Ν διαφορετικές τιμές, π.χ. Καλύπτουμε το πεδίο φυσικών [0...2 Ν -1] ή αντίστοιχα το πεδίο ακεραίων [-2 Ν-1...2 Ν-1 -1]. Κωδικοποίηση δεδομένων στους Η/Υ

22 Προγραμματισμός Ιlalis@inf.uth.gr22 Η μνήμη των Η/Υ είναι ουσιαστικά μια διάταξη από «κουτιά» κάθε ένα από τα οποία μπορεί να χρησιμοποιηθεί για την αποθήκευση 1 bit (0 / 1). Ένας τυπικός Η/Υ διαθέτει κύρια μνήμη (RAM) εκατοντάδων Megabyte έως και λίγων Gigabyte, και σκληρό δίσκο πολλών δεκάδων Gigabyte. –1 byte = 8 bits –1 KiB = 1024 B = 2 10 B (1 KB = 1000 B = 10 3 B) –1 MiB = 1024 KiB (1 MB = 1000 KB) –1 GiB = 1024 MiB (1 GB = 1000 MB) –1 TiB = 1024 GiB (1 TB = 1000 GB) –… Μνήμη Η/Υ

23 Προγραμματισμός Ιlalis@inf.uth.gr23 Η μνήμη του Η/Υ μοντελοποιείται (αφαιρετικά) ως μια συστοιχία από Ν (συνεχόμενα) bytes. Η μνήμη προσπελαύνεται, προσδιορίζοντας: (α) την θέση (διεύθυνση) του byte από το οποίο αρχίζει να εφαρμόζεται η πράξη (β) τον αριθμό bytes που αφορά η πράξη Η πράξη «ανάγνωσης» επιστρέφει τις τιμές των bytes που έχουν αποθηκευτεί στις αντίστοιχες θέσεις. Η πράξη «γραψίματος» προσδιορίζει τις τιμές των bytes προς αποθήκευση στις αντίστοιχες θέσεις. Μοντελοποίηση και πρόσβαση μνήμης

24 Προγραμματισμός Ιlalis@inf.uth.gr24 00111010 11010101 11101011 00111010 11110101 00001010 11100110................ 0 1 2 3 4 5 Ν-1 Ν διεύθυνσηπεριεχόμενα μηχανισμός πρόσβασης μνήμης op=read adr=3 len=1 10101011 01010111

25 Προγραμματισμός Ιlalis@inf.uth.gr25 00111010 00111010 11110101 00001010 11100110................ 0 1 2 3 4 5 Ν-1 Ν διεύθυνσηπεριεχόμενα μηχανισμός πρόσβασης μνήμης Η/Υ adr=1 len=2 00010101 11101010 01010111 00101010 11010101 op=write

26 Προγραμματισμός Ιlalis@inf.uth.gr26 Για κάθε δεδομένο που χρησιμοποιεί ένα πρόγραμμα, πρέπει να καθοριστεί (από τον προγραμματιστή): (α) η θέση μνήμης για την αποθήκευση του (β) ο αριθμός των bytes που χρειάζονται για την αποθήκευση των τιμών που μπορεί να λάβει (γ) η κωδικοποίηση που χρησιμοποιείται για κάθε τιμή στο δυαδικό σύστημα (της μνήμης) Είναι ιδιαίτερα δύσκολο άν όχι αδύνατο για τον προγραμματιστή να θυμάται μια τέτοια αντιστοίχιση, για κάθε δεδομένο που χρησιμοποιεί το πρόγραμμα, κατά την συγγραφή ή/και ανάγνωση του κώδικα. Χρειάζεται κατάλληλη υποστήριξη από τις γλώσσες προγραμματισμού... Δεδομένα προγράμματος και μνήμη

27 Προγραμματισμός Ιlalis@inf.uth.gr27 Για διευκόλυνση του προγραμματιστή, κάθε γλώσσα ορίζει ένα σύνολο από βασικούς τύπους δεδομένων. Κάθε βασικός τύπος έχει ένα (α) εκ των προτέρων καθορισμένο μέγεθος (σε bytes) και χαρακτηρίζεται (β) από μια συγκεκριμένη δυαδική κωδικοποίηση και κατα συνέπεια και ένα αντίστοιχο πεδίο τιμών. Ο προγραμματιστής μπορεί να ορίσει κάθε δεδομένο του προγράμματος ως ένα αντικείμενο ενός τύπου, καθορίζοντας έτσι (έμμεσα) τόσο το μέγεθος όσο και την κωδικοποίηση του (την σημασία των bits). Σημείωση: η μνήμη του Η/Υ αποθηκεύει τις τιμές των bits/bytes χωρίς να γνωρίζει τον τύπο τους, δηλαδή το πως αυτές ερμηνεύονται από το πρόγραμμα. Τύποι δεδομένων

28 Προγραμματισμός Ιlalis@inf.uth.gr28 Για ευκολία, σε κάθε αντικείμενο δεδομένων δίνεται (εκτός από τον τύπο του) και ένα μνημονικό όνομα. Το όνομα του δεδομένου μπορεί να χρησιμοποιείται, αντί της διεύθυνσης του, στις πράξεις ανάγνωσης και αλλαγής τών τιμών του. Σημείωση: η πρόσβαση στην μνήμη εξακολουθεί να γίνεται με βάση την θέση μνήμης και τον αριθμό bytes προς ανάγνωση/αποθήκευση – η αντιστοίχιση αυτή γίνεται (αυτόματα) από την εκάστοτε γλώσσα προγραμματισμού (μεταφραστή). Ονομασία (θέσεων) δεδομένων

29 Προγραμματισμός Ιlalis@inf.uth.gr29 Με τον όρο μεταβλητή αναφερόμαστε σε ένα αντικείμενο δεδομένων του προγράμματος στο οποίο έχει δοθεί ένα όνομα και τύπος. Όταν λέμε ότι «διαβάζουμε» μια μεταβλητή, εννοούμε ότι διαβάζουμε την τιμή που έχει αποθηκευτεί στην αντίστοιχη θέση της μνήμης. Όταν λέμε ότι «αναθέτουμε» μια τιμή σε μια μεταβλητή, εννοούμε ότι γράφουμε αυτή την τιμή στην αντίστοιχη θέση της μνήμης. Με τον όρο «δέσμευση» μεταβλητής εννοούμε την δέσμευση αντίστοιχου χώρου στην μνήμη, και με τον όρο «ζωή» μεταβλητής εννοούμε το διάστημα κατά το οποίο αυτός ο χώρος παραμένει δεσμευμένος. Μεταβλητές προγράμματος

30 Προγραμματισμός Ιlalis@inf.uth.gr30 00111010 00000000 11110101 00001010 11100110................ 0 1 2 3 4 5 Ν-1 Ν διεύθυνσηπεριεχόμενα 00101010 11010101 int v; θεση/διεύθυνση: 3 τύπος: int τύπος int μέγεθος: 2 bytes ερμηνεία: ακέραιος κωδικοποίηση: 2’s complement 00000010 τι τιμή έχει η μεταβλητή v; διάβασε από την διεύθυνση της v όσα bytes ορίζει ο τύπος της T, και ερμήνεψε τα σύμφωνα με την σύμβαση κωδικοποίησης του T αποτέλεσμα

31 Προγραμματισμός Ιlalis@inf.uth.gr31 Κάθε γλώσσα δίνει, μέσω κατάλληλων εκφράσεων, την δυνατότητα χρήσης της τιμής των μεταβλητών για την παραγωγή νέων τιμών (του ιδίου τύπου). Κάθε τύπος δεδομένων μπορεί να έχει ειδικούς τελεστές πράξεων – με αντίστοιχη σημασιολογία. Οι τιμές που υπολογίζονται μέσα από εκφράσεις πράξεων μπορεί να χρησιμοποιηθούν «αυτούσιες» ή/και να αποθηκευτούν σε (νέες) μεταβλητές. Η αποθήκευση μιας τιμής σε μεταβλητή γίνεται μέσω ειδικής πράξης που ονομάζεται και ανάθεση. Συνήθως υπάρχει ένας μοναδικός τελεστής ανάθεσης, για όλους τους τύπους των δεδομένων. Τελεστές πράξεων και ανάθεσης

32 Προγραμματισμός Ιlalis@inf.uth.gr32 Ένα πρόγραμμα πρέπει να μπορεί να εισάγει/εξάγει δεδομένα από/προς το «περιβάλλον» του, συνήθως από το πληκτρολόγιο και προς την οθόνη του Η/Υ. Για αυτό το σκοπό ορίζονται/υποστηρίζονται ειδικές εντολές εισόδου/εξόδου (input/output commands). Είσοδος / Έξοδος (input/output) πρόγραμμα είσοδος έξοδος

33 Προγραμματισμός Ιlalis@inf.uth.gr33 Μετάφραση

34 Προγραμματισμός Ιlalis@inf.uth.gr34 Οι εντολές μιας γλώσσας προγραμματισμού σπάνια αντιστοιχούν (επακριβώς) σε εντολές της γλώσσας (μηχανής) που εκτελεί ένας επεξεργαστής Η/Υ. Για να εκτελεστεί ένα πρόγραμμα, πρέπει οι εντολές του να μετατραπούν σε εντολές γλώσσας μηχανής. Αυτό ονομάζει μεταγλώτιση και γίνεται από ειδικά προγράμματα, τους μεταγλωτιστές (compilers). Η μεταγλώτιση γίνεται (συνήθως) ως ξεχωριστή διαδικασία, πολύ πριν αρχίσει η εκτέλεση του κώδικα. Υπάρχουν περιπτώσεις όπου η μετάφραση γίνεται ακριβώς πριν την εκτέλεση (just in time compilation). Μετάφραση / μεταγλώτιση (compilation)

35 Προγραμματισμός Ιlalis@inf.uth.gr35 PxPx CPU y compiler Χ -> Y P’y

36 Προγραμματισμός Ιlalis@inf.uth.gr36 PxPx CPU y compiler X -> Z P’’y P’z compiler Z -> Y

37 Προγραμματισμός Ιlalis@inf.uth.gr37 Όταν ο κώδικας δεν μεταφράζεται σε γλώσσα μηχανής αλλά εκτελείται, εντολή προς εντολή, μέσα από ένα άλλο πρόγραμμα, τότε αυτό ονομάζεται ερμηνεία και το πρόγραμμα που την πραγματοποιεί διερμηνέας (interpreter). Η ερμηνεία οδηγεί συνήθως σε πιο αργή εκτέλεση από την μετάφραση, γιατί (α) δεν γίνεται αποδοτική απεικόνιση των πράξεων σε εντολές επεξεργαστή, και (β) δεν μπορεί να γίνουν βελτιστοποιήσεις. Όμως με την ερμηνεία ο κώδικας είναι (1) συνήθως πιο μικρός σε μέγεθος και (2) μεταφέρσιμος οπότε μπορεί να εκτελεσθεί σε διαφορετικές πλατφόρμες χωρίς ανάγκη μετάφρασης για κάθε μια από αυτές. Ερμηνεία (interpretation)

38 Προγραμματισμός Ιlalis@inf.uth.gr38 PxPx CPU y compiler X -> Z P’z Z interpreter

39 Προγραμματισμός Ιlalis@inf.uth.gr39 Γιατί δεν γράφουμε τα προγράμματα μας απ’ ευθείας στην γλώσσα του επεξεργαστή; 1. Ανεξαρτησία: ο κώδικας υψηλού επιπέδου έχει ισχύ ανεξάρτητα από τους διάφορους επεξεργαστές Η/Υ που υπάρχουν –και θα υπάρξουν στο μέλλον. 2.Αφαίρεση: ο κώδικας υψηλού επιπέδου βασίζεται σε πολύπλοκες εκφράσεις (που μπορεί να μην υφίστανται στην γλώσσα ενός επεξεργαστή) που διευκολύνουν σημαντικά τον προγραμματισμό. 3.Αναγνωσιμότητα: ο κώδικας υψηλού επιπέδου είναι (συνήθως) πολύ πιο κατανοητός σε έναν άνθρωπο από τον κώδικα σε επίπεδο επεξεργαστή, και άρα είναι πιο εύκολο να επιδιορθωθεί / αλλαχθεί. Σχόλιο

40 Προγραμματισμός Ιlalis@inf.uth.gr40 Αν στη μετάφραση εντοπιστεί συντακτικό λάθος, αυτή τερματίζεται (εκτυπώνεται μήνυμα λάθους), διαφορετικά παράγεται κώδικας μηχανής. Το γεγονός ότι ένα πρόγραμμα μεταφράστηκε επιτυχώς δεν εγγυάται ότι η εκτέλεση του θα έχει και το επιθυμητό / αναμενόμενο αποτέλεσμα. Η εκτέλεση ενός (μεταγλωτισμένου) προγράμματος γίνεται πάντα σωστά, δηλαδή όπως ορίζεται από την σημασιολογία της γλώσσας προγραμματισμού. Αυτό δεν σημαίνει ότι το πρόγραμμα κάνει αυτό που θέλουμε – μπορεί να υπάρχουν σημασιολογικά ή/και λογικά λάθη. Ορθότητα προγραμμάτων

41 Προγραμματισμός Ιlalis@inf.uth.gr41 Υπολογισμός x=1+2+...+n Στην καθομιλουμένη γλώσσα: Θέσε το x ίσο με 0. Πρόσθεσε στο x την τιμή 1. Πρόσθεσε στο x την τιμή 2. Πρόσθεσε στο x την τιμή 3.... Πρόσθεσε στο x την τιμή n-1. Πρόσθεσε στο x την τιμή n. Στη γλώσσα προγραμματισμού C: x = 0; x = x+1; x = x+2 x = x+3;... x = x+n-1; x = x+n; συντακτικό λάθος δεν έχουμε βάλει ; εκεί που θα έπρεπε εντοπίζεται από τον μεταφραστή

42 Προγραμματισμός Ιlalis@inf.uth.gr42 Υπολογισμός x=1+2+...+n Στην καθομιλουμένη γλώσσα: Θέσε το x ίσο με 0. Πρόσθεσε στο x την τιμή 1. Πρόσθεσε στο x την τιμή 2. Πρόσθεσε στο x την τιμή 3.... Πρόσθεσε στο x την τιμή n-1. Πρόσθεσε στο x την τιμή n. Στη γλώσσα προγραμματισμού C: x = 0; x = x+1; x == x+2; x = x+3;... x = x+n-1; x = x+n; σημασιολογικό λάθος δεν έχουμε καταλάβει τι κάνει ο τελεστής == δεν εντοπίζεται από τον μεταφραστή

43 Προγραμματισμός Ιlalis@inf.uth.gr43 Υπολογισμός x=1+2+...+n Στην καθομιλουμένη γλώσσα: Θέσε το x ίσο με 0. Πρόσθεσε στο x την τιμή 1. Πρόσθεσε στο x την τιμή 3.... Πρόσθεσε στο x την τιμή n-1. Πρόσθεσε στο x την τιμή n. Στη γλώσσα προγραμματισμού C: x = 0; x = x+1; x = x+3;... x = x+n-1; x = x+n; λογικό λάθος έχουμε υλοποιήσει λάθος αλγόριθμο δεν εντοπίζεται από τον μεταφραστή

44 Προγραμματισμός Ιlalis@inf.uth.gr44 Συντακτικό επίπεδο (εύκολο) –ο κώδικας δεν αντιστοιχεί σε επιτρεπτή πρόταση σύμφωνα με τους κανόνες σύνταξης της γλώσσας Σημασιολογικό επίπεδο (δύσκολο) –ο κώδικας είναι συντακτικά σωστός αλλά εμείς δεν χρησιμοποιούμε σωστά κάποια εντολή (η πρόθεση μας δεν συμπίπτει με την αντίστοιχη σημασιολογία) και παράγεται λάθος αποτέλεσμα Λογικό επίπεδο (πιο δύσκολο) –ο κώδικας είναι συντακτικά σωστός και όλες οι εντολές χρησιμοποιούνται σωστά, όμως υπάρχει λάθος σε επίπεδο αλγορίθμου (σκέψης) Αποσφαλμάτωση

45 Προγραμματισμός Ιlalis@inf.uth.gr45 Λάθη σε σημασιολογικό επίπεδο προκύπτουν γιατί –δεν μπήκαμε ποτέ στον κόπο να διαβάσουμε και να καταλάβουμε την σημασιολογία της γλώσσας –βασιζόμαστε σε μηχανισμούς (π.χ. μετατροπής τύπων) της γλώσσας που δεν κατέχουμε πλήρως –η σημασιολογία της γλώσσας είναι ελλειπώς ορισμένη και (κακώς) χρησιμοποιούμε εκφράσεις με απροσδιόριστη / αβέβαιη σημασία (κατάληξη) –από τυχαίο λάθος σε επίπεδο γραψίματος (ένας χαρακτήρας λιγότερο / περισσότερο, μικρά ή/και κεφαλαία γράμματα, κλ), που οδηγεί σε μια διαφορετική αλλά (ατυχώς) επιτρεπτή έκφραση Αποσφαλμάτωση


Κατέβασμα ppt "Προγραμματισμός Βασικές Έννοιες."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google