Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Απορία για OOP Inheritance vs Interface

Îåêßíçóå áðü ôï ìÝëïò Kostis. Τελευταία δημοσίευση από το μέλος nikos123 στις 27-01-2012, 15:37. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  25-01-2012, 23:05 69017

    Απορία για OOP Inheritance vs Interface

    Φιλαράκια είμαι καινούργιος στο Object Oriented Programming και θα ήθελα την βοήθειά σας στο εξής.

    Διαβάζω διάφορα περί Inheritance (το οποίο και καταννοώ) και για interface (Isomething, το οποίο δεν καταννοώ).

    Μπορεί κάποιος να μου εξηγήσει την διαφορά, πότε χρησιμοποιώ το inheritance και πότε το dInterface?

    Ευχαριστώ πολύ 

  •  26-01-2012, 00:36 69018 σε απάντηση της 69017

    Απ: Απορία για OOP Inheritance vs Interface

    Για ξεκίνημα διάβασε αυτό http://www.dotnetzone.gr/cs/blogs/mkelaiditis/pages/9421.aspx και τα ξαναλέμε στη συνέχεια...

     


    Vir prudens non contra ventum mingit
  •  26-01-2012, 02:50 69019 σε απάντηση της 69017

    Απ: Απορία για OOP Inheritance vs Interface

    Γενικά είναι πολύ καλή συνήθεια να ΜΗΝ ξεκινάς να γράφεις κλάσεις, αλλά να ξεκινάς γράφοντας interfaces (όχι, δεν τηρώ την συμβουλή μου όσο θά 'πρεπε). Είναι πολύ σημαντικό να μπορείς να περιγράψεις ΠΟΙΕΣ είναι οι λειτουργίες των αντικειμένων σου ΧΩΡΙΣ να σε απασχολεί πως αυτές υλοποιούνται. Θα γλυτώσεις το γράψιμο ΠΟΛΥ κώδικα αργότερα, χώρια του ότι θα είσαι σε θέση ν' αντιλαμβάνεσαι τις δυνατότητες των οντοτήτων σου ξεκάθαρα, ως σύνολο, αλλά και χωριστά. Αν ασκηθείς αρκετά, θα αποφύγεις πολύ rewriting στην πορεία και θα είσαι σε θέση να οργανώσεις πολύ καλύτερα τις κλάσεις σου. Επειδή θα βρεις πολλά κείμενα που να ασχολούνται με το "τεχνικό" μέρος, εγώ θα ήθελα να λειτουργήσω συμπληρωματικά παραθέτοντας μόνο ένα παράδειγμα:

    IDevice      IBattery
    Plug()        Charge()
    Unplug()    StopCharging()
    TurnOn()
    TurnOff()

    IPhone ...όχι το γνωστό.
    Dial()
    HangUp()

    ICellPhone: IDevice, IBattery, IPhone

    ICamera        IFlash
    Focus()         FlashOn()
    Zoom()         FlashOff()

    IPhotoCamera: ICamera, IFlash
    TakePicture()
    SavePicture()
    DeletePicture()

    IVideoCamera: ICamera
    CaptureVideo()
    SaveVideo()
    DeleteVideo()

    IRadio                                          ISpeakers
    PlugInHeadphones()                      VolumeOn()
    UnplugHeadphones()                     VolumeOff()
    SearchStation()                            IncreaseVolume()
    TuneStation(RadioFrequency)        DecreaseVolume()
    RadioOn()
    RadioOff()

    Cellphone no camera, no radio ( ICellPhone, ISpeakers)
    Cellphone with camera, no video, no radio (ICellPhone, IPhotoCamera, ISpeakers).
    Cellphone with camera, video, no radio (ICellPhone, IPhotoCamera, IVideoCamera, ISpeakers)
    Cellphone with everything ( ICellPhone, IPhotoCamera, IVideoCamera, IRadio, ISpeakers)

    Με το παράδειγμα αυτό θέλω να σου δείξω πόσο σημαντικό είναι να μπορείς να φαντάζεσαι, να διαχωρίζεις και να συνθέτεις τις λειτουργίες, χωρίς να χρειάζεται να τις υλοποιήσεις. Το πως θα υλοποιηθούν αυτές, εξαρτάται από το εκάστοτε hardware. Το θέμα είναι να υπάρχουν. Μετά είναι πρακτικά αδύνατο να χάσεις το μονοπάτι και να αρχίζεις να patch-άρεις κώδικα (πράγμα που δεν αποφύγεις αν ΔΕΝ ΔΙΑΧΩΡΙΣΕΙΣ τη λειτουργικότητα των κλάσεών σου). Απλά, θέλει άσκηση.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  27-01-2012, 15:05 69032 σε απάντηση της 69018

    Απ: Απορία για OOP Inheritance vs Interface

    Φιλαράκια σας ευχαριστώ πολύ και τους δύο για την βοήθεια.

    Ερώτηση: Πότε χρησιμοποιώ inheritance και πότε Interface?

  •  27-01-2012, 15:37 69035 σε απάντηση της 69032

    Απ: Απορία για OOP Inheritance vs Interface

    Το ένα δεν αποκλείει το άλλο.
    Γενικά μια class μπορεί να έχει πολλά interfaces. Το κάθε ένα αναπαριστά μια λειτουργικότητα της κλάσης.
    Οι clients που χρησιμοποιούν την κλάση για μια συγκεκριμένη λειτουργία δεν χρειάζεται να γνωρίζουν για τις υπόλοιπες, γιαυτό και αναφέρονται σ 'αυτήν σαν interface.
    Π.χ. Ο client μπορεί να περιμένει ένα IList. Αυτό δίνει ευελιξία ώστε να προγραμματιστή να υλοποιήσει ArrayList, List, SortedList ... η οποιαδήποτε δομή ανάλογα με τα πλεονεκτήματα τους χωρίς να επηρεαστεί ο client.

    Client μπορεί να είναι και το unit testing  γιαυτό και τεστάρεται καλύτερα μια (μεγάλη) κλάση που έχει interfaces. Τεστάρουμε χωριστά την κάθε λειτουργία της.
     

    Inheritance χρησιμοποιούμε για να απομονώσουμε κοινό κώδικα δύο οι περισσοτέρων παρόμοιων κλάσεων. 

     
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems