Τι είναι η κλωνοποίηση στην Java και οι τύποι της;



Αυτό το άρθρο σχετικά με την Κλωνοποίηση στην Java θα σας δώσει λεπτομερείς πληροφορίες σχετικά με τη διαδικασία κλωνοποίησης και τους διάφορους τύπους κλωνοποίησης που υποστηρίζονται από την Java.

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

Ακολουθούν τα θέματα που θα συζητήσω σε αυτό το άρθρο:





Κλωνοποίηση στην Ιάβα

Η κλωνοποίηση αντικειμένων στην Java είναι η διαδικασία δημιουργίας ενός ακριβούς αντιγράφου του αρχικού αντικειμένου. Με άλλα λόγια, είναι ένας τρόπος δημιουργίας ενός νέου αντικειμένου αντιγράφοντας όλα τα δεδομένα και τα χαρακτηριστικά από το αρχικό αντικείμενο. Αυτό είναι δυνατό μόνο με την εφαρμογή της μεθόδου clone () του java.lang.Object τάξη. Η μέθοδος κλώνου δημιουργεί ένα ακριβές αντίγραφο ενός αντικειμένου για το οποίο ήτανεπικαλεστεί με εντολή ανάθεσης πεδίου ανά πεδίο και θα επιστρέψει τη νέα αναφορά αντικειμένου . Ένα πράγμα που πρέπει να θυμάστε, στην Java, τα αντικείμενα που εφαρμόζουν τη διεπαφή κλώνου που είναι μια διεπαφή δείκτη επιτρέπεται να χρησιμοποιούν τον κλώνο ().

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



Πλεονεκτήματα της κλωνοποίησης στην Ιάβα

Παρακάτω παραθέτω μερικά από τα πιο ενδιαφέροντα χαρακτηριστικά της χρήσης της κλωνοποίησης στην Java.

  • Βοηθά στη μείωση των γραμμών του κώδικα.
  • Ο πιο αποτελεσματικός και αποδοτικός τρόπος αντιγραφήςαντικείμενα.
  • Επίσης, ο κλώνος () θεωρείται η ταχύτερη μέθοδος αντιγραφής ενός πίνακα.

Σημείωση: Αν και η χρήση της κλωνοποίησης μπορεί να οδηγήσει σε ορισμένα ζητήματα σχεδιασμού, αλλά αν τη χρησιμοποιήσετε με κατάλληλο στρατηγικό τρόπο, μπορεί να σας ωφελήσει.

Τύποι κλωνοποίησης στην Ιάβα

Η κλωνοποίηση στην Java μπορεί να ομαδοποιηθείσε δύο κατηγορίες:



  1. Ρηχή κλωνοποίηση
  2. Βαθιά κλωνοποίηση

Ας καταλάβουμε καθένα από αυτά ένα προς ένα.

Ρηχή κλωνοποίηση

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

ρηχό αντίγραφο - Κλωνοποίηση στην Ιάβα - EdurekaΠαρακάτω έχω δώσει το ίδιο παράδειγμα:

πακέτο edureka class EduCourse {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} class EduLearner υλοποιεί το Cloneable {int eduId String εκπαιδευόμενο EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // Προεπιλεγμένη έκδοση του κλώνου () μέθοδος προστατευμένη αντικείμενα κλώνος () ρίχνει το CloneNotSup .clone ()}} δημόσια τάξη ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = νέο EduLearner (2811, 'Max') , j2ee) EduLearner learner2 = null try {// Δημιουργία κλώνου του εκπαιδευόμενου1 και εκχώρηση του σε learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Εκτύπωση λεπτομερειών του Learnner1 System.out.p rintln ('Λεπτομέρειες του μαθητή 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Όνομα:' + learner1.learnerName) System.out.println ('Αναγνωριστικό μαθήματος: '+ learner1.eduCourse) // Εκτύπωση όλων των μαθημάτων του' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (μαθητής1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Εκτύπωση λεπτομερειών του Learner2 System.out.println ('Details of Learnner 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Όνομα:' + learner2.learnerName) System.out.println ('Id Id:' + learner2.eduCourse) // Εκτύπωση όλων των μαθημάτων του 'learner2' System.out.println ('Μαθήματα του Μαθητή 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Αλλαγή της πορείας3 του' learner2 'learner2.eduCourse.course3 =' JSP '// Αυτή η αλλαγή θα αντικατοπτρίζεται στο αρχικό' learner1 'System.out.println (' Ενημερωμένα μαθήματα εκπαιδευόμενου 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Παραγωγή:

Λεπτομέρειες του μαθητή 2: Αναγνωριστικό: 2811 Όνομα: Μέγιστο αναγνωριστικό μαθήματος: EduCourse @ 15db9742 Μαθήματα μαθητή 1: Java Spring Microservices Λεπτομέρειες του μαθητή 2: Αναγνωριστικό: 2811 Όνομα: Μέγιστο αναγνωριστικό προγράμματος: EduCourse @ 15db9742 Ενημερωμένα μαθήματα μαθητή 2: Java Spring JSP

Βαθιά κλωνοποίηση στην Ιάβα

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

iso 9000 έναντι έξι σίγμα

Παρακάτω έχω δώσει το ίδιο παράδειγμα:

πακέτο edureka class EduCourse υλοποιεί Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} προστατευμένος κλώνος αντικειμένου () ρίχνει CloneNotSupportedE return super.clone ()}} class EduLearner υλοποιεί το Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse Μέθοδος παράκαμψης κλώνου () για τη δημιουργία αντιγράφου σε βάθος ενός αντικειμένου με προστασία αντικειμένου Ο κλώνος αντικειμένου () ρίχνει το CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () επιστροφή μαθητών}} δημόσια τάξη DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = νέο EduLearner (2811, 'Max', j2ee) EduLearner μάθετε er2 = null try {// Δημιουργία κλώνου του εκπαιδευόμενου1 και εκχώρηση του στον μαθητή2 μαθητή2 = (EduLearner) μαθητής1.κλωνό ()} σύλληψη (CloneNotSupportedException e) {e.printStackTrace ()} // Εκτύπωση λεπτομερειών του Learnner1 System.out. println ('Λεπτομέρειες του μαθητή 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Όνομα:' + learner1.learnerName) System.out.println ('Αναγνωριστικό μαθήματος: '+ learner1.eduCourse) // Εκτύπωση όλων των μαθημάτων του' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (μαθητής1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Εκτύπωση λεπτομερειών του Learner2 System.out.println ('Details of Learnner 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Όνομα:' + learner2.learnerName) System.out.println ('Id Id:' + learner2.eduCourse) // Εκτύπωση όλων των μαθημάτων του 'learner2' System.out.println ('Μαθήματα του μαθητή 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Αλλαγή της πορείας3 του 'learner2' learner2.eduCourse.course3 = 'JSP' // Αυτή η αλλαγή δεν θα αντικατοπτρίζεται στην αρχική ' learner1 'System.out.println (' Μαθήματα μαθητή 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. course3) // Ενημερωμένα μαθήματα του εκπαιδευόμενου2 System.out.println («Μαθήματα μαθητή 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

Παραγωγή:

Λεπτομέρειες του μαθητή 2: Αναγνωριστικό: 2811 Όνομα: Μέγιστο αναγνωριστικό μαθήματος: edureka.EduCourse@15db9742 Μαθήματα μαθητή 1: Java Spring Microservices Λεπτομέρειες του μαθητή 2: Αναγνωριστικό: 2811 Όνομα: Μέγιστο αναγνωριστικό μαθήματος: edureka.EduCourse@6d06d69c Μαθήματα μαθητή 2 : Java Spring Microservices Μαθήματα μαθητή 1: Java Spring Microservices Μαθήματα μαθητή 2: Java Spring JSP

Αυτό μας φέρνει στο τέλος αυτού του άρθρου σχετικά με την Κλωνοποίηση στην Java. Αν θέλετε να μάθετε περισσότερα για την Java μπορείτε να ανατρέξετε στο .

Τώρα που έχετε καταλάβει τι είναι η Κλωνοποίηση στην Java, ρίξτε μια ματιά στο από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία εκμάθησης με δίκτυο περισσότερων από 250.000 ικανοποιημένων μαθητών σε όλο τον κόσμο. Το μάθημα εκπαίδευσης και πιστοποίησης Java J2EE και SOA της Edureka έχει σχεδιαστεί για φοιτητές και επαγγελματίες που θέλουν να γίνουν προγραμματιστές Java. Το μάθημα έχει σχεδιαστεί για να σας δώσει μια πρώτη αρχή στον προγραμματισμό Java και να σας εκπαιδεύσει τόσο για τις βασικές όσο και για τις προηγμένες ιδέες Java μαζί με διάφορα πλαίσια Java όπως το Hibernate & Spring.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων αυτού του άρθρου «Κλωνοποίηση σε Java» και θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό.