في مناقشتنا السابقة ، أصبحنا نعرف كيف نفعل ذلك تمرير مرجع كائن إلى طريقة. بنفس الطريقة ، يمكننا تمرير المرجع إلى مُنشئ لتهيئة متغيرات الحالة لكائن آخر من نفس الفئة. يمكنك استخدام نفس قيمة متغيرات الحالة للكائن الذي يتم إرساله إلى المُنشئ. يتم نسخ كائن واحد إلى كائنات أخرى. دعنا نتحقق من مُنشئ نسخة دروس جافا بلغة جافا.
نسخة جافا تعليمي منشئ في جافا
- مزايا استخدام منشئ النسخ
- مساوئ استخدام منشئ النسخ
- برنامج منشئ النسخ
- شرح كود و مخرجات الجافا
مزايا استخدام منشئ النسخ
هناك العديد من حالات الاستخدام حيث يعمل Copy Constructors بشكل جيد فيما يتعلق بالمنشآت الأخرى في Java.
كما نعلم ، يمكن استنساخ الكائنات في Java باستخدام طريقة clone (). لكن نسخ الكائن باستخدام استنساخ () ليست مرنة وقابلة للتوسيع، لا يعمل بشكل جيد أيضًا.
المشكلة الأولى هي ذلك لا يوجد استدعاء منشئ يحدث عندما يتم استنساخ الكائن. ونتيجة لذلك ، تقع على عاتقك ، بصفتك كاتبًا لطريقة الاستنساخ ، التأكد من تعيين جميع الأعضاء بشكل مناسب. فيما يلي مثال على المكان الذي قد تسوء فيه الأمور.
ضع في اعتبارك تتبع الصف للمجموععدد الكائنات من هذا النوع ، باستخدام عضو ثابت ثابت. في المنشئين ستزيد العدد. ومع ذلك ، إذا قمت بنسخ الكائن ، نظرًا لعدم استدعاء أي مُنشئ ، فلن يعكس العدد حقًا عدد الكائنات!
علاوة على ذلك ، إذا كان للفصل حقول نهائية ، فهذهلا يمكن إعطاء قيمة في طريقة الاستنساخ. يؤدي إلى مشاكل في تهيئة الحقول الأخيرة للكائن بشكل صحيح. إذا كان الحقل الأخير يشير إلى بعض الحالة الداخلية للكائن ، فحينئذٍ ينتهي الكائن المستنسخ بمشاركة الحالة الداخلية ، وهذا بالتأكيد ليس صحيحًا للكائنات القابلة للتغيير.
عيوب استخدام Copy Constructor في Java
ككائن واحد هو نسخة طبق الأصل من أي شيء آخرالتغيير في الأول سيغير عن غير قصد قيم متغيرات الحالة من الآخر. لذلك يجب أن تكون حذرًا وأفضل ألا تعلن عن مُنشئ النسخ على أنه عام. خلاف ذلك ، أثناء الميراث ، فإنه لا يرضي مبدأ مفتوح مغلق (OCP). يقول OCP ، بقلم برتراند ماير ، ذلك يجب أن تكون كيانات البرامج مفتوحة للتمديد ، ولكنها مغلقة للتعديلات.
برنامج منشئ النسخ
class Employee{ String employeeName; String address; int age; double salary; /*Default Constructor */ Employee(){ employeeName = "Platini"; address = "France"; age = 45; salary = 120500.92; } /* Parameterized Constructor */ Employee(String empName,String addr,int ag,double sal){ employeeName = empName; address = addr; age = ag; salary = sal; } /* Copy Constructor */ Employee(Employee emp){ employeeName = emp.employeeName; address = emp.address; age = emp.age; salary = emp.salary; } void showDetails(){ System.out.println("Employee's Name: "+employeeName); System.out.println("Employee's Address: "+address); System.out.println("Employee's Age: "+age); System.out.println("Employee's Salary: "+salary); } } class ConstructorDemo{ public static void main(String args[]){ System.out.println("Employee Details"); System.out.println("----------------"); Employee employee1 = new Employee(); employee1.showDetails(); System.out.println("----------------"); String employeeName = "John"; String address = "Los Angles"; int age = 25; double salary = 34503.92; Employee employee2 = new Employee(employeeName,address,age,salary); employee2.showDetails(); System.out.println("----------------"); Employee employee3 = new Employee(); employee3.showDetails(); System.out.println("----------------"); Employee employee4 = new Employee(employee2); employee4.showDetails(); System.out.println("----------------"); Employee employee5 = new Employee(employee3); employee5.showDetails(); } }
انتاج |
شرح كود و مخرجات الجافا
يرجى مراعاة الرمز المميز باللون الأحمر ،في الأساس ، في فئة الموظف ، ستجد بناء الجملة حول كيفية الإعلان عن مُنشئ النسخ. لقد أنشأنا كائنين آخرين للموظف 4 والموظف 5 وهما نسخة من الموظف 2 والموظف 3 على التوالي. من المخرج ، من الواضح أن متغيرات الحالة للموظف 4 لها نفس قيمة قيم متغيرات الحالة للموظف 2. وينطبق الشيء نفسه على الموظف 5.
بعد ذلك ، سنرى كيفية استخدام الكلمة الأساسية "ثابتة" في جافا. اطلع على المزيد من البرامج التعليمية المفيدة والمبادئ التوجيهية النهائية حول برمجة Java هنا.
تعليقات