ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΔΙΟΙΚΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ Τεχνολογίες και Εφαρμογές Διαδικτύου Κατερίνα Πραματάρη Τεχνολογίες και Εφαρμογές Διαδικτύου
Κατευθυντήριες Γραμμές Προγραμματισμού 1. Δομές Ελέγχου 2. Αλγόριθμοι 3. Δομές δεδομένων 4. Χειρισμός σφαλμάτων/ εξαιρέσεων 2
Δομές ελέγχου Παράδειγμα benefit = minimum; if (age < 75) goto A; benefit = maximum; goto C; if (age < 65) goto B; if (age < 55) goto C; A: if (age < 65) goto B; benefit = benefit * 1.5 + bonus goto C; B: if (age < 55) goto C; benefit = benefit * 1.5; C: next statement Το ίδιο πολύ πιο απλά: If (age < 55) benefit = minimum; elseif (age < 65) benefit = minimum + bonus; elseif (age < 75) benefit = minimum * 1.5 + bonus; else benefit = maximum; 3
Αλγόριθμοι Η ταχύτητα εκτέλεσης του κώδικα μπορεί να περιλαμβάνει κρυμμένα προβλήματα Το κόστος συγγραφής του ταχύτερου κώδικα Το κόστος ελέγχου του κώδικα λόγω αυξημένης πολυπλοκότητας Το χρονικό κόστος κατανόησης του κώδικα Το χρονικό κόστος τροποποίησης του κώδικα Αν η ταχύτητα είναι σημαντική, θα πρέπει να μάθετε τον τρόπο που ο μεταγλωττιστής βελτιστοποιεί τον κώδικά σας. 4
Δομές Δεδομένων Το πρόγραμμα πρέπει να διατηρείται απλό Χρήση δομών δεδομένων για απλοποίηση κώδικα Π.χ. Χρήση αναδρομής Ζώνη Βάση Ποσοστό 0 0 10 10.000 1.000 12 20.000 2.200 15 30.000 3.700 18 40.000 5.500 20 5
Χειρισμός σφαλμάτων Τύποι σφαλμάτων Αλγοριθμικό σφάλμα Συντακτικό σφάλμα Σφάλματα υπολογισμού και ακρίβειας Σφάλματα πίεσης ή υπερφόρτωσης Σφάλματα χωρητικότητας ή ορίων Σφάλματα χρονισμού/ συγχρονισμού Σφάλματα επίδοσης Σφάλματα ανάκτησης... Πρόβλεψη για χειρισμό σφαλμάτων/ εξαιρέσεων στο τέλος κάθε συστατικού 6
Γενικές Κατευθυντήριες Γραμμές Συμφωνία υλοποίησης με σχεδιασμό Τεκμηρίωση Ο κώδικας θα πρέπει να μπορεί να διαβάζεται εύκολα από πάνω προς τα κάτω Απομόνωση εισόδου και εξόδου (επίπεδο παρουσίασης) Συμπερίληψη ψευδοκώδικα Ναι στην αναθεώρηση και το ξαναγράψιμο, αλλά όχι στην πρόχειρη επιδιόρθωση (patching) Επαναχρησιμοποίηση 7
Επαναχρησιμοποίηση Εκτελεί το συστατικό τη λειτουργία; Παρέχει τα δεδομένα που χρειάζονται; Αν απαιτούνται ορισμένες τροποποιήσεις, αξίζει να γίνουν ή είναι καλύτερο να αναπτυχθεί το συστατικό από την αρχή; Είναι σωστά τεκμηριωμένο το συστατικό έτσι ώστε να μπορείτε να το κατανοήσετε χωρίς να χρειάζεται να επαληθεύσετε την υλοποίησή του γραμμή προς γραμμή; Υπάρχει πλήρης καταγραφή του ιστορικού ελέγχου και τροποποιήσεων του συστατικού, έτσι ώστε να είστε σίγουροι ότι δεν περιέχει σφάλματα; 8
Επαναχρησιμοποιούμενα Συστατικά Κατασκευάστε τα συστατικά με γενικό τρόπο, χρησιμοποιώντας παραμέτρους και προβλέποντας παρόμοιες καταστάσεις Απομονώστε τμήματα που έχουν μεγάλη πιθανότητα να αλλάξουν από αυτά που θα παραμείνουν χωρίς αλλαγές Κατασκευάστε γενική και καλά ορισμένη διασύνδεση/ διεπαφή για το συστατικό Χρησιμοποιήστε ξεκάθαρες συμβάσεις ονοματολογίας Τεκμηριώστε τις δομές δεδομένων και τους αλγόριθμους Διαχωρίστε τα τμήματα επικοινωνίας και χειρισμού λαθών και κατασκευάστε τα με τρόπο ώστε να τροποποιούνται εύκολα 9
Τεκμηρίωση Εσωτερική Τεκμηρίωση Εξωτερική Τεκμηρίωση ****************************************************************** * COMPONENT TO FIND INTERSECTION OF TWO LINES * COMPONENT NAME: FINDIT * PROGRAMMER: E. ELLIS * VERSION: 1.0 ( 2 FEB 2001) * * INPUT DESCRIPTION * OUTPUT DESCRIPTION * ΨΕΥΔΟΚΩΔΙΚΑΣ ****************************************************************** 10
Πλαίσιο Σχολίων Κεφαλίδας Πώς ονομάζετε το συστατικό Ποιος το έγγραψε Πώς ταιριάζει το συστατικό στο γενικό σχέδιο του συστήματος Πότε γράφηκε και αναθεωρήθηκε Για ποιο λόγο υπάρχει Πώς το συστατικό χρησιμοποιεί τις δομές δεδομένων, τους αλγόριθμους και τον έλεγχο Τρόπο κλήσης του συστατικού και αποτελέσματα εξόδου 11
Άλλα σχόλια στο πρόγραμμα Είναι άχρηστο το ακόλουθο: //αύξησε το i3 i3 = i3 + 1; Καλύτερα: //αύξησε το μετρητή για να διαβαστεί η επόμενη περίπτωση ή ακόμη καλύτερα: case_counter = case_counter +1; 12
Γράψτε: Λογικά ονόματα μεταβλητών και ετικέτες εντολών Weekwage = (hrrate * hours) + 0.5 * hrrate * (hours 40); Αντί: z = (a * b) + 0.5 * a * (b 40); 13
Μορφοποίηση για την αύξηση της κατανόησης if (xcoord < ycoord) result = -1; elseif (xcoord == ycoord) if (slope1 > slope2) result = 0; else result 1; elseif (slope1 >slope 2) result = 2; elseif (slope1 < slope2) result = 3; else result = 4; 14
Εξωτερική Τεκμηρίωση Περιγραφή του προβλήματος Περιγραφή των αλγορίθμων Περιγραφή των δεδομένων Συμπληρώνει και επικαιροποιεί το έντυπο σχεδίασης του συστήματος 15