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

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

HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.

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


Παρουσίαση με θέμα: "HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος."— Μεταγράφημα παρουσίασης:

1 HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος Νικολάου

2 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 2 / 38 ΕΝΟΤΗΤΑ ΙV ΛΑΘΗ ΚΑΙ ΕΠΙΔΙΟΡΘΩΣΗ Διάλεξη 1 η (και μοναδική)

3 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 3 / 38 Περιεχόμενα Λάθη κατά τη μεταγλώττιση Λάθη κατά τη μεταγλώττιση Λάθη κατά την εκτέλεση Λάθη κατά την εκτέλεση

4 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 4 / 38 Λάθη κατά τη μεταγλώττιση Συντακτικά λάθη Συντακτικά λάθη Το πρόγραμμα μας περιέχει λάθη ως προς την συντακτική του δομή Το πρόγραμμα μας περιέχει λάθη ως προς την συντακτική του δομή Σημασιολογικά λάθη Σημασιολογικά λάθη Το πρόγραμμά μας περιέχει λάθη τα οποία οφείλονται σε αποκλίσεις από τους κανόνες της γλώσσας Το πρόγραμμά μας περιέχει λάθη τα οποία οφείλονται σε αποκλίσεις από τους κανόνες της γλώσσας

5 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 5 / 38 Συντακτικά λάθη (1/15) Αναγνωρίζονται από τον τρόπο που ο μεταγλωττιστής αναφέρει το λάθος Αναγνωρίζονται από τον τρόπο που ο μεταγλωττιστής αναφέρει το λάθος “ syntax error..” “ syntax error..” “ parse error..” “ parse error..” “…κάτι expected …” “…κάτι expected …” “…κάτι missing … before / after … κάτι άλλο..” “…κάτι missing … before / after … κάτι άλλο..” Είναι συνηθισμένο ένα συντακτικό λάθος να προκαλεί σε επόμενα τμήματα του κώδικα εμφάνιση σημασιολογικών λαθών (θα δούμε γιατί) Είναι συνηθισμένο ένα συντακτικό λάθος να προκαλεί σε επόμενα τμήματα του κώδικα εμφάνιση σημασιολογικών λαθών (θα δούμε γιατί) Τα οποία ωστόσο οφείλονται αποκλειστικά και μόνο στην ύπαρξη του συντακτικού λάθους και με την επιδιόρθωση του επιλύονται Τα οποία ωστόσο οφείλονται αποκλειστικά και μόνο στην ύπαρξη του συντακτικού λάθους και με την επιδιόρθωση του επιλύονται

6 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 6 / 38 Συντακτικά λάθη (2/16) Παραδείγματα Παραδείγματα Δεν έχουμε εισάγει σαν πρώτη γραμμή του προγράμματος το #include “servant.h” όπως θα έπρεπε και δεν αναγνωρίζονται οι λέξεις κλειδιά της FLIP

7 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 7 / 38 Συντακτικά λάθη (3/16) Πρώτα εντοπίζουμε τα συντακτικά λάθη και σε κάθε περίπτωση το είδος του συντακτικού λάθους 2.Έπειτα ελέγχουμε εάν μπορούμε αμέσως να διακρίνουμε το σημείο του κώδικα που το προκαλεί. 3.Εάν τύχει και έχουμε για την ίδια γραμμή κώδικα πλέον του ενός λάθη (όπως στο παράδειγμα) και στην ίδια γραμμή έχουμε κώδικα που μπορεί να σπάσει σε περισσότερες γραμμές χωρίς να αλλάξει το κάνουμε (για να διακρίνουμε καλύτερα τα ξεχωριστά λάθη και τις γραμμές εμφάνισής τους) Ξεχάσαμε το ; μετά το name και το ; μετά το RECEND

8 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 8 / 38 Συντακτικά λάθη (4/16) Πως συντάσσουμε το πρόγραμμά μας ώστε να επιλύουμε όσο το δυνατόν ευκολότερα τα συντακτικά λάθη; Πως συντάσσουμε το πρόγραμμά μας ώστε να επιλύουμε όσο το δυνατόν ευκολότερα τα συντακτικά λάθη; Αυξητικά, προσθέτοντας τμήματα αφού σιγουρέψουμε ότι το τμήμα πάνω στο οποίο προσθέτουμε είναι συντακτικά ορθό, κάνοντας κάθε φορά compile Αυξητικά, προσθέτοντας τμήματα αφού σιγουρέψουμε ότι το τμήμα πάνω στο οποίο προσθέτουμε είναι συντακτικά ορθό, κάνοντας κάθε φορά compile Έτσι, όταν εμφανιστεί ένα λάθος ξέρουμε ότι οφείλεται στην τελευταία προσθήκη και δεν ψάχνουμε ολόκληρο τον κώδικα Έτσι, όταν εμφανιστεί ένα λάθος ξέρουμε ότι οφείλεται στην τελευταία προσθήκη και δεν ψάχνουμε ολόκληρο τον κώδικα Κάθε φορά το τμήμα που κάνουμε compile πρέπει προφανώς να είναι συντακτικά και σημασιολογικά αυτούσιο Κάθε φορά το τμήμα που κάνουμε compile πρέπει προφανώς να είναι συντακτικά και σημασιολογικά αυτούσιο  Δηλ. να μπορεί να κάνει compile από μόνο του, θα δούμε παραδείγματα γι’ αυτό

9 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 9 / 38 Συντακτικά λάθη (5/16) Με τον τρόπο αυτό, όταν εμφανιστεί ένα συντακτικό λάθος, αν ζητούμε την αιτία του κακού στην τελευταία προσαύξηση. Πώς όμως; 1. Κρύβουμε όλη την προσαύξηση με σχόλια και κάνουμε compile. Η προσθήκη δεν είναι πάντα ένα τμήμα κώδικα, αλλά μπορεί να είναι η ένωση διάσπαρτων τμημάτων σε διαφορετικά σημεία. Τα κρύβουμε όλα ως σχόλια. Αυτό λέγεται commenting out. 2. Εμφανίζουμε σταδιακά τον κρυμμένο κώδικα, ξεκινώντας από την αρχή του προγράμματος προς τα κάτω, μόνο ως μικρά αυτούσια συστατικά τμήματα. Π.χ. ένα κρύψαμε δέκα δηλώσεις,μεταβλητών τις εμφανίζουμε μία-μια και όχι όλες μαζί. Εάν κρύψαμε μία συνάρτηση, εμφανίζουμε μόνο το βασικό block βάζοντας μία προσωρινή RESULT (dummy), χωρίς να εμφανίσουμε τις εντολές. 3. Προσέξτε ότι όσο μικρότερη η προσθήκη τόσο ευκολότερα (δηλ. βάσει της διαδικασίας γρηγορότερα) για σας να εντοπίσετε το συντακτικό λάθος. Κάθε μεγαλύτερη έλλειψη αναπαριστά και την επόμενη προσαύξηση

10 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 10 / 38 Συντακτικά λάθη (6/16) Η τελευταία προσαύξηση Όπως φαίνεται προκάλεσε πολλά λάθη

11 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 11 / 38 Συντακτικά λάθη (7/16) Πρώτη κίνηση: commenting out όλης της τελευταίας προσαύξησης Τώρα πρέπει να έχουμε (προφανώς) ένα συντακτικά ορθό πρόγραμμα

12 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 12 / 38 Συντακτικά λάθη (8/16) Δεύτερη κίνηση: εμφανίζουμε την κρυμμένη προσαύξηση τμηματικά Όμως κάτι ξεχάσαμε: καθώς επαναφέρουμε ορισμό συνάρτησης, κρύβοντας όμως την υλοποίησή της, πρέπει να βάλουμε μία προσωρινή RESULT (που μετά θα την αφαιρέσουμε). Ο compiler διαμαρτύρεται ότι δεν έχουμε επιστροφή τιμής (θα δούμε μετά ότι αυτό είναι σημασιολογικό λάθος)

13 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 13 / 38 Συντακτικά λάθη (9/16) Με την dummy (προσωρινή / άχρηστη) RESULT, το πρόγραμμά μας κάνει compile. Πάμε λοιπόν να εμφανίσουμε το επόμενο όσο το δυνατόν μικρότερο τμήμα της προσθήκης.

14 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 14 / 38 Συντακτικά λάθη (10/16) Τώρα, ενώ δεν βγαίνει μήνυμα λάθους (Visual Studio) βγαίνει μία προειδοποίηση την οποία δεν πολύ-καταλαβαίνουμε. Ωστόσο, ελέγχουμε την ορθότητα την επαύξησης. Κοιτώντας τις σημειώσεις παρατηρούμε ότι η δήλωση αυτή δεν είναι ορθό συντακτικό για τύπους ADDRESSEX.

15 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 15 / 38 Συντακτικά λάθη (11/16) Μετά την επιδιόρθωση της δήλωσης κάνουμε compile και βλέπουμε ότι όλα είναι εντάξει. Συνεχίζουμε με τον ίδιο τρόπο. Για λόγους πληρότητας θα δείξουμε όλα τα επιμέρους βήματα.

16 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 16 / 38 Συντακτικά λάθη (12/16)

17 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 17 / 38 Συντακτικά λάθη (13/16)

18 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 18 / 38 Συντακτικά λάθη (14/16) Εδώ προειδοποιεί ο compiler ότι έχουμε εντολή ροής ελέγχου με κενή εντολή και «αναρωτιέται» εάν ήταν αυτό εκούσιο. Επειδή ήταν αγνοούμε την προειδοποίηση

19 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 19 / 38 Συντακτικά λάθη (15/16) Εδώ προφανώς και διώχνουμε την κενή dummy εντολή αφού βγάζουμε από τα σχόλια την πραγματική εντολή του IF

20 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 20 / 38 Συντακτικά λάθη (16/16) Ομοίως διώχνουμε την προσωρινή RESULT αφού βγάζουμε από τα σχόλια την πραγματική RSULT της συνάρτησης Τώρα πια επιβεβαιώνουμε ότι η παρούσα έκδοση του προγράμματος είναι συντακτικά ορθή.

21 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 21 / 38 Σημασιολογικά λάθη (1/10) Αυτά τα λάθη δεν σημαίνουν συντακτικές αποκλίσεις αλλά ασυμφωνίες με τους κανόνες της γλώσσας, π.χ. Αυτά τα λάθη δεν σημαίνουν συντακτικές αποκλίσεις αλλά ασυμφωνίες με τους κανόνες της γλώσσας, π.χ. Ασυμφωνίες τύπων, δηλ. χρησιμοποιείτε μεταβλητές ή εκφράσεις με τρόπο που δεν «αρμόζει» Ασυμφωνίες τύπων, δηλ. χρησιμοποιείτε μεταβλητές ή εκφράσεις με τρόπο που δεν «αρμόζει» Σύγκρουση αναγνωριστικών ονομάτων Σύγκρουση αναγνωριστικών ονομάτων Απουσία εντολής που επιστρέφει τιμή σε συνάρτηση Απουσία εντολής που επιστρέφει τιμή σε συνάρτηση Παρουσία εντολής που επιστρέφει τιμή σε διαδικασία Παρουσία εντολής που επιστρέφει τιμή σε διαδικασία Χρήση κλήσης διαδικασίας ως έκφρασης Χρήση κλήσης διαδικασίας ως έκφρασης Χρήση μη ορισμένου αναγνωριστικού ονόματος Χρήση μη ορισμένου αναγνωριστικού ονόματος

22 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 22 / 38 Σημασιολογικά λάθη (2/10) Ασυμφωνίες τύπων 1. Συνήθως εμφανίζονται με μηνύματα του τύπου “..cannot convert..”, ότι δηλ. δεν υφίσταται μετατροπή από κάποιον τύπο σε κάποιον άλλο. Η επιδιόρθωσή τους απαιτεί να ελέγξετε εάν η χρήση των μεταβλητών που υπάρχουν στη γραμμή του λάθους ονομάτων επιτρέπεται βάσει της σημασιολογίας της γλώσσας. Εδώ φταίει το γεγονός ότι χρησιμοποιούμε ως μέγεθος πίνακα μεταβλητή ενώ επιτρέπεται μόνο σταθερά.

23 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 23 / 38 Σημασιολογικά λάθη (3/10) Ασυμφωνίες τύπων 2. Όταν χρησιμοποιήσουμε μεταβλητές κάποιου τύπου με τελεστές που δεν επιτρέπονται σε αυτόν τον τύπο θα δούμε μηνύματα του τύπου “..no operator defined which..”, ότι δηλ. δεν υφίσταται ο τελεστής για τον τύπο αυτό. Η επιδιόρθωσή τους απαιτεί να ελέγξετε εάν η χρήση του τελεστή στη γραμμή του λάθους επιτρέπεται για τις συγκεκριμένες μεταβλητές βάσει της σημασιολογίας της γλώσσας. Εδώ φταίει το γεγονός ότι χρησιμοποιούμε μεταβλητή ειδικού τύπου διεύθυνσης με τον τελεστή / ενώ επιτρέπονται μόνο οι τελεστές + και – στον τύπο αυτό.

24 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 24 / 38 Σημασιολογικά λάθη (4/10) Ασυμφωνίες τύπων 3. Χρησιμοποιήσουμε άλλο τύπο εκτός ακεραίου για αναφορά σε στοιχείο πίνακα. Θα δείτε ένα παράξενο μήνυμα όπως το παραπάνω το οποίο αναφέρεται σε κώδικα του υπηρέτη. Αυτό σημαίνει απλά ότι έχετε γράψει κάτι που δεν συμβαδίζει με τον υπηρέτη και όχι ότι ο ίδιος ο υπηρέτης έχει συντακτικό λάθος. Εδώ φταίει το γεγονός ότι χρησιμοποιούμε μεταβλητή STRING ως δείκτη σε πίνακα. Το μήνυμα είναι πολύ κωδικοποιημένο. Μπορείτε να θεωρήσετε ότι λέει κάτι σαν: σε πίνακα δέκα αντικειμένων τύπου integer υπάρχει λάθος ως προς το «φιλτράρισμα» του τύπου της έκφρασης δείκτη στοιχείου

25 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 25 / 38 Σημασιολογικά λάθη (5/10) Μη ορισμένο αναγνωριστικό όνομα 1. Χρησιμοποιήσουμε μεταβλητή τύπου RECORD με αναφορά σε κάποιο πεδίο το οποίο όμως δεν είναι ορισμένο μέσα στο συγκεκριμένο RECORD. Συνήθως θα δούμε μήνυμα “..is not a member of…” και “…see declaration of…” Επιδιορθώνουμε την αναφορά όπως πρέπει (είτε εισάγουμε το νέο πεδίο ή διορθώνουμε το αναγνωριστικό της αναφοράς) Εδώ φταίει το γεγονός ότι χρησιμοποιούμε to.X (κεφαλαίο) ενώ θα έπρεπε να χρησιμοποιήσουμε το.x (μικρό)

26 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 26 / 38 Σημασιολογικά λάθη (6/10) Μη ορισμένο αναγνωριστικό όνομα 2. Χρησιμοποιήσουμε μεταβλητή με όνομα το οποίο δεν αντιστοιχεί σε ορισμένη μεταβλητή στον χώρο που χρησιμοποιείται. Συνήθως θα δούμε μήνυμα “..undeclared identifier…” Επιδιορθώνουμε με την εισαγωγή της αναγκαίας δήλωσης μεταβλητής Εδώ φταίει το γεγονός ότι χρησιμοποιούμε to i ενώ πιο πριν δεν υπάρχει δηλωμένο (…το μετά δεν παίζει ρόλο)

27 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 27 / 38 Σημασιολογικά λάθη (7/10) Απουσία εντολής που επιστρέφει τιμή σε συνάρτηση 1. Ορίζουμε συνάρτηση αλλά δεν γράφουμε κάποια εντολή RESULT. Συνήθως θα δούμε μήνυμα “..must return a value…” Επιδιορθώνουμε με την εισαγωγή των αναγκαίων εντολών RESULT ανάλογα με την αλγοριθμική υλοποίηση της συνάρτησης Εδώ φταίει το γεγονός ότι στο block της f δεν υπάρχει καμία RESULT

28 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 28 / 38 Σημασιολογικά λάθη (8/10) Απουσία εντολής που επιστρέφει τιμή σε συνάρτηση 2. Ορίζουμε συνάρτηση, έχουμε εντολή RESULT, αλλά υπάρχει ροή εκτέλεσης ώστε ποτέ να μην εκτελεστεί μία εντολή RESULT. Συνήθως θα δούμε μήνυμα “..not all control paths return a value…” Επιδιορθώνουμε με την εισαγωγή των υπολειπόμενων εντολών RESULT ανάλογα με την αλγοριθμική υλοποίηση της συνάρτησης Εδώ φταίει το γεγονός ότι στην περίπτωση που το i είναι < 0 δεν θα εκτελεστεί καμία RESULT

29 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 29 / 38 Σημασιολογικά λάθη (9/10) Εντολή που επιστρέφει τιμή σε διαδικασία. Ορίζουμε διαδικασία, αλλά βάζουμε και εντολή RESULT. Συνήθως θα δούμε μήνυμα “..’void’ function returning a value…” και “…see declaration of..” Επιδιορθώνουμε ή αφαιρώντας την εκ παραδρομής RESULT, ή μετατρέποντας σε συνάρτηση, ή χρησιμοποιώντας παράμετρο διεύθυνσης για την επιστροφή αποτελέσματος Εδώ φταίει το γεγονός η ύπαρξη της RESULT

30 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 30 / 38 Σημασιολογικά λάθη (10/10) Τα σημασιολογικά λάθη μεταγλώττισης συνήθως επιλύονται εύκολα, αρκεί να γνωρίζετε καλά τη γλώσσα που χρησιμοποιείτε Τα σημασιολογικά λάθη μεταγλώττισης συνήθως επιλύονται εύκολα, αρκεί να γνωρίζετε καλά τη γλώσσα που χρησιμοποιείτε Δυστυχώς τα μηνύματα που θα παρουσιάζει ο μεταγλωττιστής δεν είναι πάντα διαφωτιστικά για σας, οπότε πρέπει να ελέγχετε κάθε τι στη γραμμή για την οποία εντοπίζεται το λάθος Δυστυχώς τα μηνύματα που θα παρουσιάζει ο μεταγλωττιστής δεν είναι πάντα διαφωτιστικά για σας, οπότε πρέπει να ελέγχετε κάθε τι στη γραμμή για την οποία εντοπίζεται το λάθος

31 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 31 / 38 Λάθη κατά την εκτέλεση (1/3) Όταν αναφερόμαστε σε λάθη εννοούμε αποκλίνουσα συμπεριφορά του προγράμματος κατά την εκτέλεση ως προς τις προδιαγραφές ορθής λειτουργίας: Όταν αναφερόμαστε σε λάθη εννοούμε αποκλίνουσα συμπεριφορά του προγράμματος κατά την εκτέλεση ως προς τις προδιαγραφές ορθής λειτουργίας: Το πρόγραμμα πρέπει να λύνει το πρόβλημα για το οποίο προορίζεται και μόνο αυτό Το πρόγραμμα πρέπει να λύνει το πρόβλημα για το οποίο προορίζεται και μόνο αυτό

32 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 32 / 38 Λάθη κατά την εκτέλεση (2/3) Λάθη αλγοριθμικής σχεδίασης Λάθη αλγοριθμικής σχεδίασης Design errors Design errors Λάθη στην χρήση υποπρογραμμάτων τρίτων Λάθη στην χρήση υποπρογραμμάτων τρίτων Library use errors Library use errors Ελλιπής γνώση της γλώσσας Ελλιπής γνώση της γλώσσας Language misuse Language misuse Λάθη μετάφρασης του σχεδιασμένου αλγορίθμου σε κώδικα Λάθη μετάφρασης του σχεδιασμένου αλγορίθμου σε κώδικα Design / coding mismatches Design / coding mismatches

33 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 33 / 38 Λάθη κατά την εκτέλεση (3/3) Τα λάθη σας δεν είναι απαραίτητο να τερματίζουν το πρόγραμμα με κάποιο system crash ή runtime error του υπηρέτη Τα λάθη σας δεν είναι απαραίτητο να τερματίζουν το πρόγραμμα με κάποιο system crash ή runtime error του υπηρέτη Απλώς θα παρατηρείτε το πρόγραμμά σας να συμπεριφέρεται με διαφορετικό τρόπο από ότι εσείς νομίζατε ότι σχεδιάσατε Απλώς θα παρατηρείτε το πρόγραμμά σας να συμπεριφέρεται με διαφορετικό τρόπο από ότι εσείς νομίζατε ότι σχεδιάσατε Συνήθως μετά από την εκτέλεση της 1ης εντολής που είναι τμήμα του «ένοχου» κώδικα, λάθος τιμές υπολογίζονται και προκαλείται ένα είδος κατακλυσμιαίας διανομής λαθεμένων τιμών ακόμη και από τα «αθώα» τμήματα στη μνήμη του προγράμματος Συνήθως μετά από την εκτέλεση της 1ης εντολής που είναι τμήμα του «ένοχου» κώδικα, λάθος τιμές υπολογίζονται και προκαλείται ένα είδος κατακλυσμιαίας διανομής λαθεμένων τιμών ακόμη και από τα «αθώα» τμήματα στη μνήμη του προγράμματος

34 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 34 / 38 Αντιμετώπιση λαθών (1/4) Θα δούμε μερικά μόνο παραδείγματα καθώς γενική και εξαντλητική κατηγοριοποίηση δεν υφίσταται Θα δούμε μερικά μόνο παραδείγματα καθώς γενική και εξαντλητική κατηγοριοποίηση δεν υφίσταται Περισσότερο μας ενδιαφέρει το πώς αντιμετωπίζουμε την παρουσία λαθών με συστηματικό τρόπο Περισσότερο μας ενδιαφέρει το πώς αντιμετωπίζουμε την παρουσία λαθών με συστηματικό τρόπο

35 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 35 / 38 Αντιμετώπιση λαθών (2/4) Στην περίπτωση εμφάνισης λάθους Στην περίπτωση εμφάνισης λάθους Ελέγχουμε εάν το σημείο στον κώδικα όπου παρατηρείται ταυτόχρονα προκαλείται το λάθος Ελέγχουμε εάν το σημείο στον κώδικα όπου παρατηρείται ταυτόχρονα προκαλείται το λάθος  Εάν ναι, είμαστε πολύ τυχεροί και απλώς διορθώνουμε το λάθος  Εάν όχι, σημαίνει ότι υπάρχει απόσταση μεταξύ του σημείου παρατήρησης / εμφάνισης του λάθουςτου σημείου παρατήρησης / εμφάνισης του λάθους και του σημείου που το προκάλεσεκαι του σημείου που το προκάλεσε Σε μικρά τμήματα κώδικα, ο έλεγχος γίνεται με το «μάτι», σε μία διαδικασία όπου ουσιαστικά τρέχουμε τον αλγόριθμο Σε μικρά τμήματα κώδικα, ο έλεγχος γίνεται με το «μάτι», σε μία διαδικασία όπου ουσιαστικά τρέχουμε τον αλγόριθμο  η τεχνική αυτή λέγεται dry run Σε πιο δύσκολες περιπτώσεις φυτεύουμε διαγνωστικό κώδικα ελέγχου, δηλ. κλήσεις OUTPUT με τιμές μεταβλητών και μηνύματα, βάζοντας σε κλοιό τα πιθανά σημεία που μπορεί να φωλιάζει το λάθος Σε πιο δύσκολες περιπτώσεις φυτεύουμε διαγνωστικό κώδικα ελέγχου, δηλ. κλήσεις OUTPUT με τιμές μεταβλητών και μηνύματα, βάζοντας σε κλοιό τα πιθανά σημεία που μπορεί να φωλιάζει το λάθος

36 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 36 / 38 Αντιμετώπιση λαθών (3/4) Είναι ο αλγόριθμος σωστός; Λύνει γενικά το πρόβλημα; Ποιες περιπτώσεις δεν καλύπτει; Λάθη αλγοριθμικής σχεδίασης

37 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 37 / 38 Αντιμετώπιση λαθών (4/4) Να χρησιμοποιείτε συχνά διαγνωστικό κώδικα Να χρησιμοποιείτε συχνά διαγνωστικό κώδικα Να εκτυπώνετε εκφράσεις ελέγχοντας την τιμή τους Να εκτυπώνετε εκφράσεις ελέγχοντας την τιμή τους Να ελέγχετε τις τιμές μεταβλητών που αλλάζουν από κλήση υποπρογραμμάτων πριν και μετά την κλήση Να ελέγχετε τις τιμές μεταβλητών που αλλάζουν από κλήση υποπρογραμμάτων πριν και μετά την κλήση Να αφήνετε τον διαγνωστικό κώδικα σε σχόλια καθώς μπορεί να ξαναχρησιμοποιηθεί Να αφήνετε τον διαγνωστικό κώδικα σε σχόλια καθώς μπορεί να ξαναχρησιμοποιηθεί

38 HY100, 2005Α. Σαββίδης, Χ. ΝικολάουSlide 38 / 38 Προσοχή, τα λάθη θέλουν ήρεμη, γνωστική. συστηματική και …πολιτισμένη αντιμετώπιση


Κατέβασμα ppt "HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος."

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


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