ما هو الاستنساخ في جافا وأنواعه؟



ستمنحك هذه المقالة حول الاستنساخ في Java رؤى تفصيلية لعملية الاستنساخ وأنواع الاستنساخ المختلفة التي تدعمها Java.

أثناء البرمجة ، غالبًا ما نواجه سيناريوهات نحتاج فيها إلى إعادة استخدام جزء كامل من التعليمات البرمجية. تؤدي إعادة كتابة الكود إلى جعل البرنامج ضخمًا ، وكل ذلك مع تقليل كفاءة البرنامج. وهكذا ، توفر لنا Java ميزة ممتازة والتي تنقذ من هذه المهمة المرهقة. يُعرف هذا باسم الاستنساخ في Java ومن خلال وسيط هذه المقالة ، سأقدم لك رؤى كاملة حوله.

فيما يلي المواضيع التي سأناقشها في هذه المقالة:





الاستنساخ في جافا

استنساخ الكائن في Java هو عملية إنشاء نسخة طبق الأصل من الكائن الأصلي. بمعنى آخر ، إنها طريقة لإنشاء كائن جديد عن طريق نسخ جميع البيانات والسمات من الكائن الأصلي. هذا ممكن فقط من خلال تنفيذ طريقة clone () من java.lang.Object صف دراسي. تقوم طريقة النسخ بإنشاء نسخة طبق الأصل من الكائن الذي تم استخدامه من أجلهيتم استدعاؤه في أمر تعيين حقل تلو الآخر وسيعيد مرجع الكائن الجديد . هناك شيء واحد يجب أن تتذكره ، في Java ، يُسمح للكائنات التي تنفذ واجهة النسخ وهي واجهة علامة باستخدام clone ().

ما هو الفرق بين html و xml

الآن بعد أن أصبحت على دراية بما هو الاستنساخ في Java ، فلنرى مزايا مختلفة لاستخدام هذه الميزة.



مزايا الاستنساخ في جافا

أدرجت أدناه بعضًا من أكثر الميزات إثارة للاهتمام لاستخدام الاستنساخ في Java.

  • يساعد في تقليل سطور الكود.
  • الطريقة الأكثر فعالية وكفاءة للنسخشاء.
  • أيضًا ، تعتبر clone () أسرع طريقة لنسخ مصفوفة.

ملاحظة: على الرغم من أن استخدام الاستنساخ قد يؤدي إلى بعض مشكلات التصميم ، إلا أنه إذا كنت تستخدمه بطريقة استراتيجية مناسبة فقد يفيدك ذلك.

أنواع الاستنساخ في جافا

يمكن تجميع الاستنساخ في Javaإلى فئتين:



  1. الاستنساخ الضحل
  2. استنساخ عميق

دعونا نفهم كل واحد منهم واحدا تلو الآخر.

الاستنساخ الضحل

في Java ، عندما تتم عملية الاستنساخ عن طريق استدعاء طريقة clone () ، فإنها تسمى Shallow Cloning. إنها عملية الاستنساخ الافتراضية في Java حيث سيتم إنشاء نسخة ضحلة من الكائن الأصلي مع الحقل المحدد. في حالة احتواء الكائن الأصلي على إشارات إلى بعض الكائنات الأخرى كحقول ، فسيتم استنساخ مراجع هذا الكائن فقط بدلاً من إنشاء كائن جديد. بمعنى آخر ، إذا قمت بتغيير قيمة الكائنات المستنسخة ، فسوف تنعكس في الأصل أيضًا. وبالتالي ، فإن الاستنساخ الضحل يعتمد على الكائن الأصلي.

لوحة كيفية إنشاء مجموعة

نسخة ضحلة - استنساخ في جافا - Edurekaلقد قدمت أدناه مثالًا على ذلك:

package 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 implements Cloneable {int eduIName String EduCourse eduCourse public EduLearner (int eduId، String learnerName، EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // Default version of clone () method المحمي Object clone () يطرح supernotation .clone ()}} public class ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java'، 'Spring'، 'Microservices') EduLearner learner1 = new EduLearner (2811، 'Max' ، j2ee) EduLearner learner2 = null try {// Creating a clone of learner1 and تعيينه لـ learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // طباعة تفاصيل Learner1 System.out.p rintln ('تفاصيل Learner 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('الاسم:' + learner1.learnerName) System.out.println ('معرف الدورة التدريبية: '+ learner1.eduCourse) // طباعة جميع مقررات' learner1 'System.out.println (' دورات المتعلم 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // طباعة تفاصيل Learner2 System.out.println ('تفاصيل المتعلم 2:') System.out.println ('المعرف:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('معرف الدورة:' + 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) // Changing the course3 of' 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 الاسم: Max معرف الدورة: EduCourse @ 15db9742 دورات المتعلم 1: Java Spring Microservices تفاصيل المتعلم 2: المعرف: 2811 الاسم: Max Course ID: EduCourse @ 15db9742 دورات المتعلم 2: Java Spring Microservices الدورات المحدثة للمتعلم 2: Java Spring JSP

استنساخ عميق في جافا

في Java ، عندما تتم عملية الاستنساخ عن طريق تنفيذ واجهة Cloneable ، يطلق عليها Deep Cloning. في هذا النوع من الاستنساخ ، سيتم إنشاء نسخة طبق الأصل من جميع حقول الكائن الأصلي. ولكن في حالة احتواء الكائن الأصلي على إشارات إلى كائنات أخرى كحقول ، فسيتم أيضًا إنشاء نسخة من هذه الكائنات عن طريق استدعاء طريقة clone (). هذا يجعل الكائن المستنسخ مستقلاً عن الكائن الأصلي ولن تنعكس أي تغييرات يتم إجراؤها على أي كائن على الكائن الآخر.

كيفية استخدام goto في c ++

لقد قدمت أدناه مثالًا على ذلك:

حزمة edureka class EduCourse تنفذ Cloneable {String course1 String course2 String course3 العامة EduCourse (String crs1، String crs2، String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} المحمية كائن استنساخ () يلقي CloneNotSupportedEx return super.clone ()}} فئة EduLearner تنفذ Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId، String learnerName، EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName // this.ueduCourse} يؤدي تجاوز طريقة clone () لإنشاء نسخة عميقة من كائن محمي كائن clone () إلى CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learner}} فئة عامة DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java'، 'Spring'، 'Microservices') EduLearner learner1 = new EduLearner (2811، 'Max'، j2ee) EduLearner Learn er2 = null try {// Creating a clone of learner1 and تعيينه لـ learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // طباعة تفاصيل Learner1 System.out. println ('تفاصيل Learner 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Name:' + learner1.learnerName) System.out.println ('معرف الدورة التدريبية: '+ learner1.eduCourse) // طباعة جميع مقررات' learner1 'System.out.println (' دورات المتعلم 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // طباعة تفاصيل Learner2 System.out.println ('تفاصيل المتعلم 2:') System.out.println ('المعرف:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('معرف الدورة:' + 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) // دورات محدثة من learner2 System.out.println ('دورات المتعلم 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

انتاج:

تفاصيل المتعلم 2: المعرف: 2811 الاسم: Max معرف الدورة: edureka.EduCourse@15db9742 دورات المتعلم 1: Java Spring Microservices تفاصيل المتعلم 2: المعرف: 2811 الاسم: Max Course ID: edureka.EduCourse@6d06d69c دورات المتعلم 2 : دورات Java Spring Microservices للمتعلم 1: دورات Java Spring Microservices للمتعلم 2: Java Spring JSP

يقودنا هذا إلى نهاية هذه المقالة حول الاستنساخ في Java. إذا كنت تريد معرفة المزيد عن Java ، يمكنك الرجوع إلى موقعنا .

الآن بعد أن فهمت ما هو الاستنساخ في Java ، تحقق من ملف من Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرين في جميع أنحاء العالم. تم تصميم دورة تدريب وشهادة Java J2EE و SOA من Edureka للطلاب والمهنيين الذين يرغبون في أن يصبحوا مطوري Java. تم تصميم الدورة التدريبية لمنحك السبق في برمجة Java وتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & Spring.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات بمقال 'الاستنساخ في جافا' وسنعاود الاتصال بك في أقرب وقت ممكن.