εφαρμογές έχουν πρόσβαση στο λειτουργικό σύστημα, άλλες υπηρεσίες ή άλλες εφαρμογές. Σκοπός Να προσδιορίσουμε τι είναι “καλό” και τι “κακό” API. Να αντιληφθούμε τις συνέπειες ενός κακού API. Να προτείνουμε κάποιες οδηγίες για την βελτίωση της σχεδίασης των API. Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ
την κατάλληλη στιγμή. Μπορεί να βρεθεί και να απομνημονευτεί εύκολα. Είναι καλά τεκμηριωμένη. Έχει μια διεπαφή την οποία χρησιμοποιούμε ενστικτωδώς. Αντιμετωπίζει σωστά τις οριακές συνθήκες. Καλό API Κακό API Είναι πιο δύσκολο να προγραμματίσεις με αυτά. Χρειάζονται εξτρά και συνήθως πολύπλοκο κώδικα. Ο εξτρά κώδικας προσφέρει περισσότερα μέρη όπου μπορούν να ”κρυφτούν” bugs. Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ
checkRead, IList checkWrite, IList checkError, int microseconds ) ; Η μέθοδος παίρνει ως όρισμα τρεις λίστες από sockets τα οποία θα παρακολουθηθούν. Εάν κανένα socket δεν είναι έτοιμο μέσα στο συγκεκριμένο χρόνο time-out (μικρο δευτερόλεπτα ), η Select() επιστρέφει. Διακομιστές που δέχονται αιτήσεις από πολλαπλούς χρήστες. καλούν την Select() μέσα σε έναν βρόγχο και, σε κάθε επανάληψη, χειρίζονται τα sockets που είναι έτοιμα. Συνηθισμένη Χρήση της Select() Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ
αυτός που την καλέι θέλει να παρακολουθήσει socket μόνο για καταστάσεις σφάλματος. Η Select() δεν παρέχει μια απλή ένδειξη ( void ). Δεν επιτρέπει timeout > 35 λεπτών. Χρησιμοποιεί λίστες αντί για συλλογές από socket. Εεε και;; “Θα γράψω ένα wrapper για την Select() που θα καλύψει όλα αυτά τα προβλήματα. Μετά θα αλλάξω όλες τις κλίσεις τις Select() στον κώδικα μου ώστε να καλούν τον wrapper.” Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ
μικρότερο είναι καλύτερο” “Μήπως ξεχάσαμε κάτι;” Οδηγίες για καλή σχεδίαση Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ Πρέπει να κατανοηθεί το πλαίσιο του ώστε να υλοποιηθεί. πχ. public string returnValueOf( String name ); Τι να κάνω αν δεν έχει πάρει τιμή η μεταβλητή; “Θα πετάξω ένα exception.” “Θα επιστρέψω null.” “Θα επιστρέψω ένα άδειο string.”
& Ειδικού-σκοπού API► “Πλούσια Πολιτική”. Πρέπει να σχεδιαστεί από την οπτική του καλούντα. Αποφυγή μετάθεσης της ευθύνης στον προγραμματιστή. Πρέπει να τεκμηριωθούν πριν υλοποιηθούν. Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ