Upgrade to Pro — share decks privately, control downloads, hide ads and more …

apidesignmatter.pdf

 apidesignmatter.pdf

Dimitrios Flaco Mengidis

March 14, 2014
Tweet

Transcript

  1. του Michi Henning ©2007 ACM QUEUE Παρουσίαση του άρθρου: Α.Τ.Ε.Ι.

    Θεσσαλονίκης • Σχολή Τεχνολογικών Εφαρμογών • Τμήμα Πληροφορικής Επιμέλεια: Δημήτριος Μεγγίδης, Α.Μ: 03/2226 Εργασία στα πλαίσια του μαθήματος “Μεθοδολογίες Προγραμματισμού ΙΙ” Θεσσαλονίκη 2009
  2. Εισαγωγικά Το API ορίζετε ως μια διεπαφή με την οποία

    εφαρμογές έχουν πρόσβαση στο λειτουργικό σύστημα, άλλες υπηρεσίες ή άλλες εφαρμογές. Σκοπός  Να προσδιορίσουμε τι είναι “καλό” και τι “κακό” API.  Να αντιληφθούμε τις συνέπειες ενός κακού API.  Να προτείνουμε κάποιες οδηγίες για την βελτίωση της σχεδίασης των API. Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ
  3. Η σωστή κλήση για μια συγκεκριμένη δουλειά:  Είναι διαθέσιμη

    την κατάλληλη στιγμή.  Μπορεί να βρεθεί και να απομνημονευτεί εύκολα.  Είναι καλά τεκμηριωμένη.  Έχει μια διεπαφή την οποία χρησιμοποιούμε ενστικτωδώς.  Αντιμετωπίζει σωστά τις οριακές συνθήκες. Καλό API Κακό API  Είναι πιο δύσκολο να προγραμματίσεις με αυτά.  Χρειάζονται εξτρά και συνήθως πολύπλοκο κώδικα.  Ο εξτρά κώδικας προσφέρει περισσότερα μέρη όπου μπορούν να ”κρυφτούν” bugs. Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ
  4. .NET socket Select() function C# public static void Select( IList

    checkRead, IList checkWrite, IList checkError, int microseconds ) ;  Η μέθοδος παίρνει ως όρισμα τρεις λίστες από sockets τα οποία θα παρακολουθηθούν.  Εάν κανένα socket δεν είναι έτοιμο μέσα στο συγκεκριμένο χρόνο time-out (μικρο δευτερόλεπτα ), η Select() επιστρέφει. Διακομιστές που δέχονται αιτήσεις από πολλαπλούς χρήστες. καλούν την Select() μέσα σε έναν βρόγχο και, σε κάθε επανάληψη, χειρίζονται τα sockets που είναι έτοιμα. Συνηθισμένη Χρήση της Select() Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ
  5. Παρατηρήσεις:  Η Select() επικαλύπτει τα ορίσματα της  Σπάνια

    αυτός που την καλέι θέλει να παρακολουθήσει socket μόνο για καταστάσεις σφάλματος.  Η Select() δεν παρέχει μια απλή ένδειξη ( void ).  Δεν επιτρέπει timeout > 35 λεπτών.  Χρησιμοποιεί λίστες αντί για συλλογές από socket. Εεε και;; “Θα γράψω ένα wrapper για την Select() που θα καλύψει όλα αυτά τα προβλήματα. Μετά θα αλλάξω όλες τις κλίσεις τις Select() στον κώδικα μου ώστε να καλούν τον wrapper.” Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ
  6. Ο “απλός” wrapper... ...φτάνει τις 100 και, γραμμές πολύπλοκου και

    ακατάστατου κώδικα. + Τα πιθανά λάθη που θα προκαλέσει αυτός. = Αύξηση του προγραμματιστικού κόστους. Πρόταση public static int Select( ISet checkRead, ISet checkWrite, Timespan microseconds, out ISet readable, out ISet writeable, out ISet error ) ; Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ Υλοποίηση Αποσφαλμάτωση
  7.  Το API πρέπει να είναι λιτό και λειτουργικό. “Το

    μικρότερο είναι καλύτερο” “Μήπως ξεχάσαμε κάτι;” Οδηγίες για καλή σχεδίαση Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ  Πρέπει να κατανοηθεί το πλαίσιο του ώστε να υλοποιηθεί. πχ. public string returnValueOf( String name ); Τι να κάνω αν δεν έχει πάρει τιμή η μεταβλητή; “Θα πετάξω ένα exception.” “Θα επιστρέψω null.” “Θα επιστρέψω ένα άδειο string.”
  8. Οδηγίες για καλή σχεδίαση  Γενικού-σκοπού API ► “Ελεύθερη Πολιτική”

    & Ειδικού-σκοπού API► “Πλούσια Πολιτική”.  Πρέπει να σχεδιαστεί από την οπτική του καλούντα.  Αποφυγή μετάθεσης της ευθύνης στον προγραμματιστή.  Πρέπει να τεκμηριωθούν πριν υλοποιηθούν. Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ
  9. Βιβλιογραφία Τίτλος: “API Design matters” Συγγραφέας: Michi Henning, ZeroC Queue

    Volume 5 , Issue 4 (May-June 2007) © ACM New York USA http://portal.acm.org/citation.cfm?id=1255421.1255422 Σχόλια, Απορίες Δημήτριος Μεγγίδης • Θεσσαλονίκη 2009 Α.Τ.Ε.Ι. Θεσσαλονίκης • Μεθοδολογίες Προγραμματισμού ΙΙ