Προγραμματισμός

Εξερεύνηση της γενίκευσης, της εξειδίκευσης και της εξάρτησης στο OOP

Το OOP (αντικειμενοστραφής προγραμματισμός) είναι ένα παράδειγμα που επικεντρώνεται σε αντικείμενα και δεδομένα και όχι σε ενέργειες και λογική. Όταν εργάζεστε με το OOP, είναι επιτακτική ανάγκη να προσδιορίσετε τα αντικείμενα και τις σχέσεις τους.

Στο OOP, ένα πρόβλημα αποσυντίθεται σε διάφορα αντικείμενα και πώς σχετίζονται μεταξύ τους - μια διαδικασία γνωστή ως μοντελοποίηση δεδομένων. Οι βασικές σχέσεις μεταξύ αντικειμένων περιλαμβάνουν: συσχέτιση, γενίκευση, εξειδίκευση, συσσωμάτωση, εξάρτηση και σύνθεση. Σε αυτό το άρθρο θα συζητήσουμε τις σχέσεις εξάρτησης και κληρονομιάς στο OOP με παραδείγματα κώδικα στο C # για να επεξηγήσουμε τις έννοιες.

Εξάρτηση

Η εξάρτηση είναι μια σχέση μεταξύ δύο ή περισσότερων αντικειμένων στην οποία ένα αντικείμενο εξαρτάται από το άλλο αντικείμενο ή αντικείμενα για την υλοποίησή του. Εάν ένα από αυτά τα αντικείμενα αλλάξει, τα άλλα αντικείμενα μπορούν να επηρεαστούν. Η σχέση εξάρτησης μεταξύ δύο ή περισσότερων αντικειμένων απεικονίζεται στο UML χρησιμοποιώντας διακεκομμένα βέλη. Με άλλα λόγια, όταν υπάρχει σχέση εξάρτησης μεταξύ δύο ή περισσότερων αντικειμένων, το αντικείμενο πρέπει να γνωρίζει για τα άλλα αντικείμενα από τα οποία εξαρτάται.

Εξετάστε τα μαθήματα BlogEntry και View. Ενώ το πρώτο περιέχει όλες τις σχετικές πληροφορίες που σχετίζονται με τις καταχωρίσεις ιστολογίου, η τελευταία ασχολείται με την εμφάνιση των δεδομένων που λαμβάνονται από την τάξη BlogEntry στο περιβάλλον χρήστη. Έτσι, η κλάση Προβολή εξαρτάται από την κλάση BlogEntry για την εμφάνιση περιεχομένων (καταχωρίσεις ιστολογίου) στη διεπαφή χρήστη. Ως εκ τούτου, υπάρχει σχέση εξάρτησης μεταξύ των κλάσεων Προβολή και BlogEntry. Μια σχέση εξάρτησης αντιπροσωπεύεται στο UML χρησιμοποιώντας ένα διακεκομμένο βέλος.

δημόσια τάξη BlogEntry

    {

// Μέλη της τάξης BlogEntry

    }

δημόσια τάξη Προβολή

    {

// Μέλη της κατηγορίας Προβολή

    }

Γενίκευση και εξειδίκευση

Η γενίκευση μπορεί να οριστεί ως η τεχνική εξαγωγής των βασικών χαρακτηριστικών (αυτά περιλαμβάνουν χαρακτηριστικά, ιδιότητες και μεθόδους) από δύο ή περισσότερες υποκατηγορίες και στη συνέχεια τον συνδυασμό τους σε μια γενικευμένη βασική τάξη (που ονομάζεται επίσης superclass). Αντίθετα, η εξειδίκευση είναι το αντίστροφο της γενίκευσης - χρησιμοποιείται για την αναπαράσταση σχέσης "τύπου" δημιουργώντας υποκατηγορίες από υπάρχουσες βασικές τάξεις.

Η κληρονομικότητα ορίζεται ως η ικανότητα μιας τάξης να επεκτείνει μία ή περισσότερες τάξεις (επίσης γνωστές ως βασικές τάξεις). Σημειώστε ότι η γενίκευση είναι η ισχυρότερη μορφή ταξικών σχέσεων καθώς οι τάξεις που συμμετέχουν σε μια σχέση γενίκευσης συνδέονται στενά μεταξύ τους - οι περισσότερες εσωτερικές περιπλοκές της γονικής τάξης είναι ορατές στην παιδική τάξη.

Η τάξη που επεκτείνει τη βασική ή τη γονική τάξη είναι επίσης γνωστή ως θυγατρική τάξη ή παράγωγη τάξη. Η κληρονομική ή γενικευμένη τάξη επεκτείνει ή κληρονομεί τη βάση ή τη μητρική τάξη. Στην κληρονομιά, μια παιδική τάξη κληρονομεί τις μεθόδους και τα χαρακτηριστικά της βάσης ή της γονικής τάξης εκτός από εκείνες που είναι ιδιωτικές. Στην ουσία, τα ιδιωτικά μέλη της βασικής τάξης δεν κληρονομούνται καθώς ανήκουν "αποκλειστικά" στην τάξη στην οποία ανήκουν. Ως εκ τούτου, θα πρέπει να επωφεληθείτε από τη γενίκευση μόνο όταν πρέπει να αντιπροσωπεύσετε μια τάξη που είναι στην πραγματικότητα μια πιο εξειδικευμένη μορφή μιας άλλης τάξης.

Η κληρονομικότητα είναι των ακόλουθων τύπων:

  • Μονόκλινο
  • Πολλαπλούς
  • Πολυεπίπεδο
  • Ιεραρχικός
  • Υβρίδιο

Η ενιαία κληρονομιά είναι η απλούστερη μορφή κληρονομιάς στην οποία μια τάξη επεκτείνει μια άλλη τάξη. Το παρακάτω απόσπασμα κώδικα απεικονίζει αυτήν τη μορφή κληρονομιάς - σημειώστε πώς η κλάση BlogAuthor επεκτείνει την τάξη Συγγραφέας.

δημόσια τάξη Συγγραφέας

    {

// Μέλη της τάξης συγγραφέων

    }

δημόσια τάξη BlogAuthor: Συγγραφέας

    {

// Μέλη της τάξης BlogAuthor

    }

Σε πολλές κληρονομίες έχετε πολλές βασικές κατηγορίες από τις οποίες προέρχεται μια κλάση. Σημειώστε ότι η πολλαπλή κληρονομικότητα δεν υποστηρίζεται σε γλώσσες προγραμματισμού OOP όπως Java ή C #.

Ο επόμενος τύπος κληρονομιάς στη λίστα μας είναι η κληρονομιά πολλών επιπέδων. Σε αυτήν τη μορφή κληρονομιάς έχετε τάξεις που κληρονομούνται μεταξύ τους για να σχηματίσουν μια αλυσίδα. Το ακόλουθο απόσπασμα κώδικα το δείχνει αυτό.

Πρόσωπο δημόσιας τάξης

    {

// Μέλη της κατηγορίας Person

    }

δημόσια τάξη Συγγραφέας: Πρόσωπο

    {

// Μέλη της τάξης συγγραφέων

    }

δημόσια τάξη BlogAuthor: Συγγραφέας

    {

// Μέλη της τάξης BlogAuthor

    }

Στην ιεραρχική κληρονομιά έχετε τάξεις που αντιπροσωπεύουν μια ιεραρχική δομή μέσω της κληρονομιάς, παρόμοια με ένα οικογενειακό δέντρο. Σε αυτόν τον τύπο κληρονομιάς, έχετε περισσότερες από μία παιδικές τάξεις που έχουν την ίδια βάση ή γονική τάξη. Με άλλα λόγια, αυτός είναι ένας τύπος κληρονομιάς στην οποία μια ή περισσότερες παράγωγες τάξεις έχουν μια κοινή βάση ή μια τάξη γονέα.

Η υβριδική κληρονομιά είναι ένας τύπος κληρονομιάς στον οποίο δύο ή περισσότερες μορφές κληρονομιάς συνδυάζονται σε μία. Ουσιαστικά, αυτός ο τύπος κληρονομιάς είναι ένας συνδυασμός δύο ή περισσότερων μορφών κληρονομιάς για να σχηματιστεί μια κλειστή δομή. Σημειώστε ότι η υβριδική κληρονομιά δεν υποστηρίζεται επίσης σε γλώσσες προγραμματισμού OO όπως C # ή Java.