oops concepts c object oriented programming concept tutorial
Αυτό το σεμινάριο εξηγεί τις έννοιες OOPS στο C #. Μπορείτε να μάθετε για τις αντικειμενοστρεφείς αρχές προγραμματισμού, όπως ο πολυμορφισμός, η εγκλεισμός, η κληρονομικότητα και η αφαίρεση:
Ο Αντικειμενοστρεφής Προγραμματισμός είναι ένα μοντέλο προγραμματισμού που λειτουργεί πάνω σε μια αρχή που περιστρέφεται γύρω από αντικείμενα αντί για δράση ή λογική. Επιτρέπει στους χρήστες να δημιουργούν αντικείμενα με βάση την απαίτηση και στη συνέχεια να δημιουργούν μεθόδους για τη λειτουργία αυτών των αντικειμένων.
Η εργασία σε αυτά τα αντικείμενα για την επίτευξη του επιθυμητού αποτελέσματος είναι ο στόχος του αντικειμενοστραφούς προγραμματισμού.
=> Εξερευνήστε ολόκληρη τη σειρά εκπαιδευτικών εκπαιδευτικών C # εδώ
Ας αναθεωρήσουμε μερικές από τις έννοιες που μάθαμε στα προηγούμενα σεμινάρια !!
Χώρος ονομάτων
Ένας χώρος ονομάτων στο C # είναι μια συλλογή τάξεων. Παρέχει μια δομή για να διατηρεί ένα όνομα κλάσης ξεχωριστό από ένα άλλο όνομα κλάσης, δηλώνοντάς τα σε διαφορετικό χώρο ονομάτων. Για να μην έρχονται σε σύγκρουση τα μαθήματα με το ίδιο όνομα.
Τάξη
Το Class είναι ένα σχεδιάγραμμα ενός τύπου δεδομένων. Είναι στην πραγματικότητα μια συλλογή αντικειμένων. Περιέχει αντικείμενα και τον ορισμό για τη λειτουργία που πρέπει να εκτελεστεί σε αυτό το αντικείμενο.
Αντικείμενα
Τα αντικείμενα είναι οι παρουσίες της κλάσης.
Στα προηγούμενα μαθήματά μας, έχουμε ήδη μάθει λεπτομερώς για την τάξη και τα αντικείμενα.
Τι θα μάθετε:
Έννοιες OOPS σε C #
Ο Αντικειμενοστρεφής Προγραμματισμός προσφέρει πολλά πλεονεκτήματα σε σχέση με τα άλλα μοντέλα προγραμματισμού όπως:
- Η ακριβής και σαφής αρθρωτή προσέγγιση για προγράμματα προσφέρει εύκολη κατανόηση και συντήρηση.
- Τα μαθήματα και τα αντικείμενα που δημιουργούνται στο έργο μπορούν να χρησιμοποιηθούν σε ολόκληρο το έργο.
- Η αρθρωτή προσέγγιση επιτρέπει την ύπαρξη διαφορετικών ενοτήτων ανεξάρτητα, επιτρέποντας έτσι σε αρκετούς διαφορετικούς προγραμματιστές να εργάζονται μαζί σε διαφορετικές ενότητες.
Σε αυτό το σεμινάριο, θα επικεντρωθούμε περισσότερο σε άλλες βασικές έννοιες OOPS:
- Ενθυλάκωση
- Πολυμορφισμός
- Κληρονομία
- Αφαίρεση
Ενθυλάκωση
Το Encapsulation είναι μια αντικειμενοστρεφής ιδέα προγραμματισμού που επιτρέπει στους προγραμματιστές να τυλίγουν δεδομένα και αποσπάσματα κώδικα μέσα σε ένα περίβλημα. Χρησιμοποιώντας το πρόγραμμα ενθυλάκωσης, μπορείτε να αποκρύψετε τα μέλη μιας τάξης από μια άλλη τάξη. Είναι σαν να περικυκλώνεις ένα λογικό στοιχείο μέσα σε ένα πακέτο. Επιτρέπει μόνο τις σχετικές πληροφορίες που είναι διαθέσιμες και ορατές έξω και επίσης μόνο σε συγκεκριμένα μέλη.
Η ενθυλάκωση υλοποιείται χρησιμοποιώντας προσδιοριστές πρόσβασης. Το Access Specifier χρησιμοποιείται για τον ορισμό της ορατότητας και της προσβασιμότητας του μέλους της τάξης στο C #.
Το C # περιέχει τους ακόλουθους προσδιοριστές πρόσβασης.
ιστότοπος για τη μετατροπή βίντεο YouTube σε mp3
- Δημόσιο
- Ιδιωτικός
- Προστατευμένο
- Εσωτερικός
Οι προσδιοριστές πρόσβασης καθορίζουν την ορατότητα της κλάσης και τις τιμές της. Σας επιτρέπει να κάνετε τα δεδομένα ορατά για ένα συγκεκριμένο μέρος του κώδικα και να τα αποκρύψετε από άλλο μέρος. Η πιο συχνά χρησιμοποιούμενη ορατότητα είναι δημόσια και ιδιωτική.
Ας ρίξουμε μια ματιά σε αυτά.
Δημόσιο: Η δημόσια λέξη-κλειδί επιτρέπει στα μέλη της να είναι ορατά από οπουδήποτε μέσα στο έργο. Αυτός ο προσδιοριστής πρόσβασης έχει τον λιγότερο περιορισμό ορατότητας.
Ιδιωτικός: Τα μέλη μπορούν να έχουν πρόσβαση μόνο στα μέλη της ίδιας τάξης. Αυτό έχει μια από τις πιο περιορισμένες ορατότητες.
Προστατευμένο: Η προστατευμένη προσβασιμότητα επιτρέπει στο μέλος να έχει πρόσβαση από την τάξη και από άλλη τάξη που κληρονομεί αυτήν την τάξη.
Εσωτερικός: Το εσωτερικό παρέχει προσβασιμότητα μέσα από το έργο. Μια άλλη παρόμοια εσωτερική προσβασιμότητα προστατεύεται εσωτερικά. Αυτό επιτρέπει το ίδιο με το εσωτερικό και η μόνη διαφορά είναι ότι μια παιδική τάξη μπορεί να κληρονομήσει αυτήν την τάξη και να προσεγγίσει τα μέλη της ακόμη και από άλλο έργο.
Πολυμορφισμός
Ο πολυμορφισμός προέρχεται από το ελληνικό λεξικό, σημαίνει ένα με πολλές μορφές. Το Poly σημαίνει πολλά και το Morph σημαίνει μορφές. Επιτρέπει στην τάξη στο C # να έχει πολλές υλοποιήσεις με το ίδιο όνομα.
Ο πολυμορφισμός βασικά χωρίζεται σε δύο μέρη:
- Πολυμορφισμός μεταγλώττισης
- Πολυμορφισμός χρόνου εκτέλεσης
# 1) Πολυμορφισμός στατικού ή μεταγλώττισης
Ο πολυμορφισμός του χρόνου μεταγλώττισης είναι επίσης γνωστός ως στατικός πολυμορφισμός. Η μέθοδος υπερφόρτωσης είναι ένας από τους τρόπους με τους οποίους επιτυγχάνεται πολυμορφισμός μεταγλώττισης. Είναι γνωστό ως πολυμορφισμός χρόνου μεταγλώττισης, καθώς η μέθοδος κλήσης της απόφασης λαμβάνεται τη στιγμή της σύνταξης.
Επιτυγχάνεται διατηρώντας το όνομα της μεθόδου το ίδιο αλλά περνώντας διαφορετικά σύνολα παραμέτρων. Στη μέθοδο υπερφόρτωσης, το σύστημα ελέγχει πρώτα την παράμετρο που χρησιμοποιείται και με βάση το σύνολο παραμέτρων που αποφασίζει να καλέσει την κατάλληλη μέθοδο.
Παράδειγμα:
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i+j) ); } void print(string a, string b) { Console.WriteLine('Printing String: ' , (a+b)); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello','World'); Console.ReadKey(); } }
Στο παραπάνω παράδειγμα, κάναμε την ίδια μέθοδο «εκτύπωση» δύο φορές χρησιμοποιώντας διαφορετικές παραμέτρους. Αρχικά, περνούμε δύο ακέραιους αριθμούς ως παραμέτρους και μετά περάσαμε δύο χορδές ως παραμέτρους. Υπάρχουν δύο μέθοδοι «εκτύπωσης» με το ίδιο όνομα.
Όταν περάσουμε μια παράμετρο με το ακέραιο σύστημα, θα αναζητήσει τη μέθοδο που ονομάζεται 'εκτύπωση' η οποία δέχεται δύο ακέραιες παραμέτρους και θα εκτελέσει αυτήν την παράβλεψη άλλων μεθόδων με το ίδιο όνομα.
Στο δεύτερο μέρος, περάσαμε την παράμετρο συμβολοσειράς. Και πάλι το σύστημα θα αναζητήσει τη μέθοδο που δέχεται δύο παραμέτρους συμβολοσειράς. Ως εκ τούτου, με βάση τις παραμέτρους που έχουν περάσει, η πρώτη μέθοδος θα προσθέσει δύο ακέραιους και η επόμενη θα συνδυάσει δύο χορδές.
# 2) Δυναμικός πολυμορφισμός ή πολυμορφισμός χρόνου εκτέλεσης
Ο πολυμορφισμός χρόνου εκτέλεσης ή ο δυναμικός πολυμορφισμός εμφανίζεται όταν τόσο το όνομα της μεθόδου όσο και η υπογραφή της μεθόδου έχουν το ίδιο όνομα και τις ίδιες παραμέτρους. Η παράκαμψη της μεθόδου είναι ένα παράδειγμα δυναμικού πολυμορφισμού. Επιτρέπει στον χρήστη να δημιουργήσει μια αφηρημένη τάξη με μερική εφαρμογή διεπαφής.
Η παράκαμψη της μεθόδου επιτυγχάνεται με χρήση κληρονομιάς. Για να επιτευχθεί μέθοδος υπέρβασης τόσο της κατηγορίας βάσης όσο και της παράγωγης κλάσης πρέπει να έχουν το ίδιο όνομα και παράμετρο. Κατά τη διάρκεια της μεταγλώττισης, ο μεταγλωττιστής δεν είναι σε θέση να αναγνωρίσει τη μέθοδο παράκαμψης, επομένως, δεν ρίχνει κανένα σφάλμα. Η απόφαση εκτέλεσης μιας μεθόδου λαμβάνεται κατά τη διάρκεια του χρόνου εκτέλεσης.
Παράδειγμα:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public void print() { Console.WriteLine('Printing from class Execute'); } public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Εάν εκτελέσουμε το παραπάνω πρόγραμμα θα έχουμε την ακόλουθη έξοδο:
Printing from class Execute
Παρόλο που η κλάση Εκτέλεση έχει κληρονομήσει όλες τις μεθόδους του προγράμματος κλάσης, αλλά όταν ονομάσαμε τη μέθοδο εκτύπωσης που υπάρχει και στις δύο τάξεις, η μέθοδος που υπάρχει στην παιδική τάξη θα αντικαταστήσει τη μέθοδο από τη γονική τάξη.
Ο δυναμικός πολυμορφισμός χρησιμοποιείται για την εφαρμογή της αφαίρεσης. Επιτρέπει στον χρήστη να δημιουργήσει μια αφηρημένη κλάση που χρησιμοποιείται για την παροχή μιας εφαρμογής για μια διεπαφή όταν κληρονομείται από μια παράγωγη κλάση. Η αφηρημένη κλάση μπορεί να περιέχει ονόματα / υπογραφή των μεθόδων και η παράγωγη κλάση μπορεί να έχει έναν πιο εξειδικευμένο ορισμό για τη μέθοδο.
Κληρονομία
Το κληρονομικό είναι ένα σημαντικό μέρος της έννοιας OOPS. Στην κληρονομιά, ορίζουμε τάξεις γονέων και παιδιών. Η θυγατρική τάξη μπορεί να κληρονομήσει όλες τις μεθόδους, τα αντικείμενα και τις ιδιότητες της γονικής τάξης. Μια παιδική τάξη μπορεί επίσης να έχει τις δικές της μεθόδους και συγκεκριμένη εφαρμογή.
Η γονική τάξη είναι επίσης γνωστή ως βασική τάξη και η θυγατρική τάξη που κληρονομεί τη βασική τάξη είναι επίσης γνωστή ως παράγωγη τάξη.
Παράδειγμα:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Εδώ, έχουμε μια τάξη που ονομάζεται ως πρόγραμμα που έχει μία μέθοδο. Έχουμε μια άλλη τάξη Εκτέλεση που κληρονομεί το Πρόγραμμα τάξης. Η κλάση Εκτέλεση είναι η παράγωγη κλάση και το πρόγραμμα κλάσης είναι γνωστό ως βασική κλάση.
Τώρα, αντί να δημιουργήσουμε μια παρουσία αντικειμένου για το πρόγραμμα κλάσης, δημιουργήσαμε μια παρουσία αντικειμένου για την κλάση Εκτέλεση. Χρησιμοποιώντας αυτήν την παρουσία μπορούμε να έχουμε πρόσβαση στη μέθοδο εκτύπωσης από την βασική κλάση.
Έτσι, η έξοδος του παραπάνω κώδικα θα είναι:
Printing from class Program
Η παράγωγη τάξη δεν κληρονομεί μόνο μεθόδους, αλλά κληρονομεί σχεδόν όλα τα μέλη της τάξης όπως πεδία, ιδιότητες κ.λπ. ανάλογα με την ορατότητα. Η κληρονομικότητα στο C # δεν επιτρέπει τη χρήση πολλαπλών κληρονομιών, δηλαδή μια τάξη δεν μπορεί να κληρονομήσει από πολλές διαφορετικές τάξεις, ωστόσο, μια τάξη μπορεί να κληρονομήσει από μια άλλη τάξη που μπορεί να κληρονομήσει από μια διαφορετική τάξη.
Αφαίρεση
Η αφαίρεση είναι μια από τις βασικές αρχές του αντικειμενοστρεφούς προγραμματισμού. Η αφαίρεση επιτρέπει στον προγραμματιστή να εμφανίζει μόνο τις απαραίτητες λεπτομέρειες στον κόσμο, ενώ κρύβει τους άλλους. Η αφαίρεση επιτυγχάνεται στο C # χρησιμοποιώντας την κλάση Abstract και τη διεπαφή.
Μια τάξη μπορεί να δηλωθεί ως αφηρημένη τάξη χρησιμοποιώντας τη λέξη-κλειδί «Περίληψη». Η κλάση Abstract στο C # είναι πάντα η βασική τάξη στην ιεραρχία. Αυτό που τους κάνει διαφορετικούς από την άλλη τάξη είναι ότι δεν μπορούν να τεθούν σε λειτουργία. Μια αφηρημένη τάξη C # πρέπει να κληρονομηθεί.
Παράδειγμα:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public void Describe() { return 'Description of the car'; } } class Hyundai : Car { }
Η έξοδος των παρακάτω είναι:
Description of the car
Εάν το συγκρίνετε με τα προηγούμενα παραδείγματα κατά τη διάρκεια της κληρονομιάς ή του δυναμικού πολυμορφισμού, τότε θα βρείτε τις ομοιότητες. Η πιο αναγνωρίσιμη διαφορά είναι η χρήση αφηρημένης λέξης-κλειδιού πριν από την κατηγορία Car. Σε περίπτωση που θέλετε να το παρακάμψετε ή να παρέχετε τη δική σας εφαρμογή παρόμοια με αυτήν που κάναμε στον δυναμικό πολυμορφισμό. Τότε μπορείτε να το επιτύχετε με τα ακόλουθα.
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
Έτσι, εάν εκτελέσετε αυτόν τον κώδικα τώρα, θα δώσει την ακόλουθη έξοδο:
Description of the car is now Hyundai
Η παράγωγη μέθοδος κλάσης παρακάμπτει τη μέθοδο βασικής κλάσης. Με αυτόν τον τρόπο, μπορείτε να δημιουργήσετε μια διαφορετική παράγωγη κλάση όπως Ferrari, Porsche, BMW κ.λπ. με τις δικές τους μεθόδους υλοποίησης.
Αν κοιτάξετε προσεκτικά, μπορείτε να δείτε ότι η μέθοδος περιγραφής μας στην αφηρημένη κλάση δεν περιέχει καμία εφαρμογή.
Τότε, γιατί ορίζουμε κενές μεθόδους;
Αυτό συμβαίνει επειδή μια κλάση Abstract παρέχει μια υπογραφή των μεθόδων και καθιστά υποχρέωση των υποκατηγοριών να δημιουργήσουν μια εφαρμογή για όλες αυτές τις μεθόδους. Αυτό επιτρέπει την κοινή χρήση της βασικής κατηγορίας, αλλά ταυτόχρονα, ελέγχει επίσης την εφαρμογή της μεθόδου της παραγόμενης κλάσης.
Διεπαφή
Στο C #, η διεπαφή είναι το προσχέδιο μιας κλάσης. Η διεπαφή είναι παρόμοια με μια αφηρημένη κλάση και χρησιμοποιείται για την επίτευξη αφαίρεσης εκατό τοις εκατό. Όλες οι μέθοδοι που περιγράφονται στη διεπαφή είναι αφηρημένες από προεπιλογή. Δεν έχει κανένα σώμα μεθόδου και δεν μπορεί να τεκμηριωθεί.
Η διεπαφή χρησιμοποιείται κυρίως για την επίτευξη πολλαπλών κληρονομιών και πλήρους αφαίρεσης. Όλη η υπογραφή της μεθόδου που δηλώνεται μέσα στη διεπαφή πρέπει να παρέχεται με εφαρμογή από την τάξη ή τη δομή που την εφαρμόζει.
Παράδειγμα:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } interface Car { string Describe(); } class Hyundai : Car { public string Describe() { return 'Description of the car is now Hyundai'; } }
Η έξοδος του παραπάνω κώδικα θα είναι:
Description of the car is now Hyundai
Εδώ, έχουμε δημιουργήσει μια διεπαφή αυτοκινήτου. Καθώς η διεπαφή δεν μπορεί να έχει ορισμό μεθόδου, μόλις δώσαμε το όνομα της μεθόδου και τον τύπο επιστροφής στη διεπαφή. Στη συνέχεια, εφαρμόσαμε το interface Car σε μια άλλη κατηγορία Hyundai. Στην εφαρμοσμένη τάξη παρείχαμε τον ορισμό για τις μεθόδους που ορίστηκαν μέσα στη διεπαφή.
συμπέρασμα
Στην έννοια Προγραμματισμός με αντικειμενικό σκοπό, κάθε μέρος του προγράμματος αντιμετωπίζεται ως αντικείμενο. Η κλάση είναι μια συλλογή παρόμοιων τύπων στοιχείων και ένα αντικείμενο είναι η παρουσία της κλάσης.
Η ενθυλάκωση στο C # επιτρέπει στον χρήστη να αποδείξει την ορατότητα της τάξης και των μελών της. Ο πολυμορφισμός επιτρέπει στις μεθόδους να έχουν το ίδιο όνομα αλλά με διαφορετικές παραμέτρους μέσα στην ίδια τάξη ή με την ίδια παράμετρο σε διαφορετική τάξη.
Η κληρονομικότητα είναι όταν μια θυγατρική τάξη που είναι επίσης γνωστή ως παράγωγη τάξη κληρονομεί όλες τις ιδιότητες, συμπεριλαμβανομένων μεθόδων, αντικειμένων, πεδίων κ.λπ. της γονικής τάξης, η οποία είναι επίσης γνωστή ως βασική τάξη. Η αφαίρεση επιτρέπει στο πρόγραμμα να εμφανίζει μόνο την υπογραφή, ενώ κρύβει τις λεπτομέρειες εφαρμογής.
Ενοποιημένο πρόγραμμα
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i + j)); } void print(string a, string b) { Console.WriteLine('Printing String '+ a + b); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello', 'World'); Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
=> Εξερευνήστε ολόκληρη τη σειρά εκπαιδευτικών εκπαιδευτικών C # εδώ
Συνιστώμενη ανάγνωση
- OOP Java: Εισαγωγή στον αντικειμενοστρεφή προγραμματισμό στην Java
- Αντικειμενοστραφής προγραμματισμός στο C ++
- Tutorial Unix Pipes: Pipes in Unix Programming
- Εκμάθηση Python DateTime με παραδείγματα
- Αντικείμενο αποθετηρίου στο QTP - Tutorial # 22
- Έννοιες Python OOPs (Μαθήματα Python, Αντικείμενα και Κληρονομικότητα)
- Tutorial QTP # 7 - Παράδειγμα αναγνώρισης αντικειμένων QTP - Πώς το QTP αναγνωρίζει μοναδικά αντικείμενα;
- Μάθετε Προηγμένες Έννοιες Σενάριο SoapUI Groovy - SoapUI Tutorial # 9