logo

منشئ في فئة مجردة في جافا

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

القواعد الواجب اتباعها أثناء تحديد المُنشئين في فئة مجردة:

  1. يمكن أن تحتوي الفئات المجردة على مُنشئات، لكن لا يمكن إنشاء مثيل لها بشكل مباشر. يتم استخدام المنشئين عند إنشاء فئة فرعية ملموسة.
  2. قد يكون هناك واحد أو أكثر من الأساليب المجردة في فئة مجردة، مما يدل على أن تلك الأساليب لا يتم تنفيذها عن طريق الفئة. لكي يتم إنشاء مثيل لها، يجب على الفئة الفرعية التي توسع فئة مجردة باستخدام أساليب مجردة أن تقوم بتنفيذ هذه الأساليب. وهذا يعني أن كل طريقة مجردة معلنة داخل فئة مجردة تحتاج إلى تطبيق إذا كانت الفئة الفرعية بحاجة إلى أن تكون فئة محددة وتكون قادرة على إنشاء مثيل لها. بمعنى آخر، يجب ملء الوظيفة التي تركتها الفئة المجردة مفتوحة بواسطة الفئة الفرعية.
  3. عندما تقوم فئة فرعية بتوسيع فئة مجردة مع المنشئات، تحتاج الفئة الفرعية إلى استدعاء أحد المنشئين داخل الفئة الفائقة بمساعدة الكلمة الرئيسية الفائقة. لأن منشئ الطبقة الفائقة يقوم بتهيئة حالة الكائن ووحدات أي موارد حيوية. إذا لم تستدعي الفئة الفرعية أحد المُنشئين في الفئة الفائقة، فلن تتم تهيئة الكائن بشكل جيد ولن يعمل بكفاءة/بشكل صحيح.
  4. من الممكن تعريف أكثر من مُنشئ واحد في فئة مجردة، على غرار بعض الفئات الأخرى. ومع ذلك، يجب تعريف كل مُنشئ بقائمة معلمات مختلفة. فهو يسمح للفئات الفرعية باختيار المُنشئ الذي سيتم الاتصال به بناءً على احتياجاتهم الخاصة.

أنواع المنشئات المنفذة باستخدام فئة الملخص:

هناك ثلاثة أنواع من المنشئين وهم:

  1. المنشئ الافتراضي
  2. منشئ المعلمة
  3. نسخ المنشئ

1. المنشئ الافتراضي: يتم إنشاء المُنشئ تلقائيًا عبر Java إذا لم يتم تحديد مُنشئ آخر في الفصل. لا يحتوي على معلمات ولا يقوم بأي تحركات باستثناء تهيئة القيم الافتراضية لحقول الفئة.

الخوارزمية:

الخطوة 1: حدد فئة مجردة تسمى 'الشكل'.

الخطوة 2: قم بتعريف متغيرين صحيحين 'x' و'y' كمتغيرين محميين.

الخطوه 3: قم بإنشاء مُنشئ افتراضي لفئة الشكل وقم بتعيين 'x' و'y' على 0.

الخطوة 4: الآن قم بإنشاء طريقة 'getArea ()' وهي طريقة مجردة ستقوم بإرجاع قيمة مزدوجة

الخطوة 5: ثم قم بإنشاء طريقتين غير مجردتين 'printPosition ()' و'setPosition (int x، int y)' اللتين تنتميان إلى فئة الشكل.

حدد جدول متعدد SQL

الخطوة 6: تقوم طريقة setPosition بتعيين قيم x وy.

الخطوة 7: يطبع أسلوب printPosition قيم x وy.

الخطوة 8: حدد فئة الدائرة التي توسع فئة الشكل.

الخطوة 9: قم بتعريف متغير مزدوج يسمى 'نصف القطر' كمحمي في فئة الدائرة.

الخطوة 10: حدد مُنشئًا لفئة الدائرة التي تقبل قيمة مزدوجة لنصف القطر.

الخطوة 11: قم بتنفيذ طريقة getArea لفئة الدائرة التي تحسب مساحة الدائرة.

الخطوة 12: حدد فئة مربعة تعمل على توسيع فئة الشكل.

الخطوة 13: قم بتعريف متغير مزدوج يسمى 'الجانب' كمحمي في فئة Square.

الخطوة 14: حدد مُنشئًا للفئة Square التي تقبل قيمة مزدوجة للجانب.

الخطوة 15: قم بتنفيذ طريقة getArea لفئة Square التي تحسب مساحة المربع.

الخطوة 16: تحديد فئة رئيسية.

الخطوة 17: تحديد الوظيفة الرئيسية في الفئة الرئيسية.

الخطوة 18: قم بإنشاء كائن دائرة وكائن مربع.

الخطوة 19: قم باستدعاء الأسلوب setPosition لكل من الكائنات الدائرية والمربعة.

الخطوة 20: قم باستدعاء طريقة getArea لكل من الكائنين Circle وSquare وطباعة النتائج.

الخطوة 21: قم باستدعاء التابع printPosition لكل من الكائنين Circle وSquare وطباعة النتائج.

تطبيق:

هنا هو تنفيذ الخطوات المذكورة أعلاه

اسم الملف: DefaultMain.java

 import java.util.*; abstract class Shape { protected int x; protected int y; // default constructor public Shape() { // initialize default values for fields x = 0; y = 0; } // abstract method to calculate area public abstract double getArea(); // other methods public void setPosition(int x,int y) { this.x=x; this.y=y; } public void printPosition() { System.out.println('The Position: ('+x + ', '+ y +')'); } } class Circle extends Shape { protected double radius; // constructor public Circle(double radius) { this.radius=radius; } // implementation of getArea() for Circle public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { protected double side; // constructor public Square(double side) { this.side = side; } // implementation of getArea() for Square public double getArea() { return side * side; } } public class DefaultMain { public static void main(String args []) { // create a Circle object Circle circle = new Circle(5); circle.setPosition(2,3); // print the area and position of the Circle object System.out.println('Area of a circle is: '+circle.getArea()); circle.printPosition(); // create a Square object Square square = new Square(4); square.setPosition(5, 7); // print the area and position of the Square object System.out.println('Area of a square is: '+square.getArea()); square.printPosition(); } } 

انتاج:

 Area of a circle is: 78.53981633974483 The Position:(2, 3) Area of a square is: 16.0 The Position:(5, 7) 

2. منشئ المعلمات: عند إنشاء كائن، يتيح لك هذا النوع من المُنشئ تمرير الوسائط إليه. عندما ترغب في تهيئة الكائن بالقيم، يكون ذلك مفيدًا. يتم تعريف المنشئ ذو المعلمات بمعلمة واحدة أو إضافية، وأثناء إنشاء كائن، يتم استخدام القيم التي تم تمريرها إلى المنشئ لتهيئة الحقول المقابلة للعنصر.

الخوارزمية:

الخطوة 1: تحديد شكل فئة مجردة.

الخطوة 2: قم بإضافة متغيرين محميين للمثيل من النوع int المسمى x وy.

الخطوه 3: قم بإنشاء مُنشئ ذي معلمات يقوم بتهيئة متغيرات الحالة x وy ويقبل معلمتين من النوع int وx وy.

الخطوة 4: تحديد شكل فئة مجردة.

الخطوة 5: قم بإضافة متغيرين محميين للمثيل من النوع int المسمى x وy.

الخطوة 6: قم بإنشاء مُنشئ ذي معلمات يقوم بتهيئة متغيرات الحالة x وy ويقبل معلمتين من النوع int وx وy.

الخطوة 7: تحديد دائرة فئة تمتد الشكل.

الخطوة 8: قم بإضافة متغير مثيل محمي من النوع المزدوج المسمى radius.

الخطوة 9: حدد مُنشئًا ذو معلمات يأخذ ثلاث معلمات من النوع int x وy وdouble radius ويقوم بتهيئة متغيرات مثيل x وy وradius باستخدام الكلمة الأساسية super().

الخطوة 10: قم بتنفيذ الطريقة المجردة getArea() عن طريق حساب مساحة الدائرة.

مجموعات جافا جافا

الخطوة 11: تحديد مربع فئة يمتد الشكل.

الخطوة 12: قم بإضافة متغير مثيل محمي من النوع ذو الاسم المزدوج.

الخطوة 13: حدد مُنشئًا ذو معلمات يأخذ ثلاث معلمات من النوع int x وy وdouble Side ويقوم بتهيئة متغيرات المثيل x وy والجانب باستخدام الكلمة الأساسية super().

الخطوة 14: قم بتنفيذ الطريقة المجردة getArea() عن طريق حساب مساحة المربع.

الخطوة 15: تحديد فئة رئيسية.

الخطوة 16: حدد طريقة ثابتة تسمى main() وهي نقطة الدخول للبرنامج.

الخطوة 17: قم بإنشاء كائن دائرة باستخدام مُنشئ ذو معلمات.

الخطوة 18: اطبع مساحة وموضع كائن الدائرة باستخدام طريقتي getArea() وprintPosition() على التوالي.

الخطوة 19: قم بإنشاء كائن مربع باستخدام مُنشئ ذو معلمات.

الخطوة 20: اطبع مساحة وموضع الكائن المربع باستخدام طريقتي getArea() وprintPosition() على التوالي.

الخطوة 21: نهاية البرنامج.

تطبيق:

تنفيذ الخطوات المذكورة أعلاه المذكورة أدناه

اسم الملف: ParameterizedMain.java

 import java.util.*; abstract class Shape { protected int x; protected int y; // parameterized constructor public Shape(int x,int y) { this.x=x; this.y=y; } // abstract method to calculate area public abstract double getArea(); // other methods public void setPosition(int x,int y) { this.x=x; this.y=y; } public void printPosition() { System.out.println('The position: ('+ x+', ' +y+')'); } } class Circle extends Shape { protected double radius; // parameterized constructor public Circle(int x,int y,double radius) { super(x,y); this.radius=radius; } // implementation of getArea() for Circle public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { protected double side; // parameterized constructor public Square(int x,int y,double side) { super(x, y); this.side = side; } // implementation of getArea() for Square public double getArea() { return side * side; } } public class ParameterizedMain { public static void main(String args []) { // create a Circle object with parameterized constructor Circle circle = new Circle(2, 3, 5); // print the area and position of the Circle object System.out.println('Area of circle is: '+circle.getArea()); circle.printPosition(); // create a Square object with parameterized constructor Square square = new Square(5, 7, 4); // print the area and position of the Square object System.out.println('Area of square is:' +square.getArea()); square.printPosition(); } } 

انتاج:

 Area of circle is: 78.53981633974483 The position: (2, 3) Area of square is:16.0 The position: (5, 7) 

3. نسخ المنشئ: يتم استخدام مُنشئ النسخ لإنشاء كائن جديد بقيم متساوية ككائن موجود (أي تم إنشاء العنصر قبل ذلك). إنه مفيد عندما نحتاج إلى إنشاء كائن جديد قد يكون نسخة طبق الأصل من كائن موجود/موجود بالفعل. يتم تعريف مُنشئ النسخ باستخدام وسيطة واحدة فقط أو معلمة واحدة تمثل عنصرًا من فئة متطابقة. ثم يقوم المنشئ بإنشاء كائن جديد بنفس قيم كائن المعلمة.

الخوارزمية:

الخطوة 1: قم بتعريف فئة مجردة مع متغيرات الحالة والمنشئ الافتراضي.

الخطوة 2: حدد مُنشئ نسخة بمعلمة من نفس نوع الفئة.

الخطوه 3: في مُنشئ النسخ، قم باستدعاء مُنشئ نسخ الفئة الفائقة باستخدام الكلمة الأساسية super لنسخ متغيرات المثيل من كائن المعلمة إلى الكائن الجديد.

الخطوة 4: قم بتعيين قيم أي متغيرات مثيل إضافية داخل الفئة الفرعية للعنصر الجديد.

الخطوة 5: تنفيذ الطريقة المجردة لحساب المساحة.

الخطوة 6: تحديد أي طرق أخرى حسب الضرورة.

الخطوة 7: في الوظيفة الرئيسية، قم بإنشاء كائن من الفئة.

الخطوة 8: قم بتعيين الموضع وأي متغيرات مثيل أخرى حسب الضرورة.

الخطوة 9: قم بإنشاء كائن جديد باستخدام مُنشئ النسخة وتمرير العنصر الأصلي كمعلمة.

الخطوة 10: قم بطباعة مساحة وموضع كل من الكائنات الأصلية والمنسوخة.

تطبيق:

ويرد أدناه تنفيذ الخطوات المذكورة أعلاه

اسم الملف: CopyMain.java

 import java.util.*; abstract class Shape { protected int x; protected int y; // copy constructor public Shape(Shape other) { this.x=other.x; this.y=other.y; } // default constructor public Shape() { // initialize default values for fields x=0; y=0; } // abstract method to calculate area public abstract double getArea(); // other methods public void setPosition(int x,int y) { this.x =x; this.y =y; } public void printPosition() { System.out.println('Position: (' +x+ ', ' +y+ ')'); } } class Circle extends Shape { protected double radius; // copy constructor public Circle(Circle other) { super(other); this.radius =other.radius; } // constructor public Circle(double radius) { this.radius =radius; } // implementation of getArea() for Circle public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { protected double side; // copy constructor public Square(Square other) { super(other); this.side =other.side; } // constructor public Square(double side) { this.side=side; } // implementation of getArea() for Square public double getArea() { return side * side; } } public class CopyMain { public static void main(String[] args) { // create a Circle object Circle circle1 = new Circle(5); circle1.setPosition(2,3); // create a copy of the Circle object using the copy constructor Circle circle2 = new Circle(circle1); // print the area and position of the original and copied Circle objects System.out.println('Original Area of circle: ' +circle1.getArea()); circle1.printPosition(); System.out.println('Copied Area of circle: '+circle2.getArea()); circle2.printPosition(); // create a Square object Square square1 =new Square(4); square1.setPosition(5,7); // create a copy of the Square object using the copy constructor Square square2 = new Square(square1); // print the area and position of the original and copied Square objects System.out.println('Original Area of square: '+square1.getArea()); square1.printPosition(); System.out.println('Copied Area of square: '+square2.getArea()); square2.printPosition(); } } 

انتاج:

 Original Area of circle: 78.53981633974483 Position: (2, 3) Copied Area of circle: 78.53981633974483 Position: (2, 3) Original Area of square: 16.0 Position: (5, 7) Copied Area of square: 16.0 Position: (5, 7)