ما هي الطريقة المجردة؟
الطريقة المجردة هي الطريقة التي ليس لها تطبيق. أي أنه يحتوي فقط على إعلان، حتى تعرف الاسم ونوع الإرجاع والمتغيرات التي سيقبلها. فيما يلي مثال على الطريقة المجردة الأساسية:public abstract int example(int a1, int a2);
عندما تنظر إلى هذه الطريقة، يمكنك معرفة أنها تُرجع عددًا صحيحًا وتقبل عددين صحيحين كوسيطة لها. ما لا يمكنك قوله هو كيفية تنفيذ هذه الطريقة. وذلك لأنه لتنفيذه، عليك تجاوزه. عند إنشاء طريقة مجردة في جافا، يجب عليك الالتزام ببعض الإرشادات وإلا فلن يتم تجميع برنامجك بشكل صحيح. يتذكر:
-
أساليب جافا المجردة ليس لها أي تطبيق. أي أنه لا ينبغي أبدًا أن يتبعها أقواس متعرجة وجسم يوضح كيفية استخدام الطريقة. لقد انتهى للتو بفاصلة منقوطة.
-
إذا قمت بإنشاء طريقة مجردة، فلا يمكن وضعها إلا في فئة مجردة. أي أنه لا يمكن أن يكون لديك فئة محددة تحتوي على طريقة مجردة بداخلها.
أنا. كملاحظة جانبية، إذا كان لديك فئة مجردة، فيمكن أن تحتوي على مُنشئات. ومع ذلك، ليس من الضروري أن يكون لها طريقة مجردة. -
عندما تقوم فئة محددة بتوسيع فئة مجردة، يجب عليها أيضًا تنفيذ جميع الأساليب المجردة للفئة الأصلية وإلا لا يمكن أن تكون ملموسة ويجب الإعلان عنها مجردة.
توسيع فئات جافا مجردة
لنفترض أننا نريد كتابة برنامج حول الأشكال الأساسية التي ستعيد المحيط والمساحة. لذلك نقوم بإنشاء فئة مجردة الأصل. ولكن لأن كل شكل له قواعده الخاصة، يجب حساب كل شكل بشكل مختلف، لذلك نكتب فئة الشكل المجردة مثل هذا:abstract class Shape {
String shapeName = " ";
Shape(String name) {
this.shapeName = name;
}
abstract double area();
abstract double perimeter();
}
الآن، إذا أردنا استخدام هذه الأساليب المجردة فعليًا، فيجب علينا توسيع شكل فئة Java الأصلية المجردة ثم إنشاء مثيل لهذه الأساليب. لذلك يجب على كل فئة ملموسة تنفيذ أساليب مجردة للمنطقة والمحيط.
class Quadrilateral extends Shape
{
double length, width;
Quadrilateral(double l, double w, String name)
{
super(name);
this.length = l;
this.width = w;
}
@Override
public double perimeter()
{
return ((2*length)+(2*width));
}
@Override
public double area()
{
return (length*width);
}
}
Implementing the Quadrilateral class would then look like this
class Main
{
public static void main (String[] args)
{
// creating a Quadrilateral object using Shape as reference
Shape rectangle = new Quadrilateral(3,4, "Rectangle");
System.out.println("Area of rectangle is " + rectangle.area());
System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
}
}
يبدو الإخراج من وحدة التحكم كما يلي:
Area of rectangle is 12.0
Perimeter of rectangle is 14.0
لاحظ أن الفئة الرباعية لا تحتاج إلى إنشاء مُنشئ الشكل (اسم السلسلة) من الفئة الأصلية Shape . ذلك لأنها ليست طريقة مجردة. ومع ذلك، إذا قمت بتنفيذ منطقة أو محيط في الفصل الدراسي فقط، فيجب أن يكون الفصل الجديد مجردًا لأنه لم يتضمن كليهما. يمكنك أيضًا استخدام الأساليب المجردة في الواجهات.
طرق جافا مجردة مع واجهات
دعونا نراجع سريعًا ماهية الواجهة وكيف تختلف عن الفئة المجردة. في الواجهة، تكون أي متغيرات معلنة في الواجهة عامة وثابتة ونهائية. من ناحية أخرى، تحتوي الفئات المجردة على متغيرات غير نهائية فقط. كل شيء في الواجهة يكون عامًا بشكل افتراضي. يمكن أن تحتوي الفئة المجردة على فئة خاصة ومحمية وعامة وما إلى ذلك. وأخيرًا، لا تقوم الفئة بتوسيع الواجهة، بل تقوم بتنفيذها. قبل JDK 8، لم يكن من الممكن أن تحتوي الواجهة على أي شيء سوى الأساليب المجردة. الآن، يمكن أن تحتوي الواجهة على أساليب افتراضية وثابتة. ولهذا السبب، ابتعدت أفضل الممارسات عن استخدام الأساليب المجردة كقوالب قابلة للتوسيع وركزت على الواجهات وتنفيذها. لذا، إذا أردت إنشاء شكل كواجهة ثم تنفيذه على شكل رباعي ، كيف سيبدو؟ أولاً، يجب عليك التخلص من مُنشئ الشكل (اسم السلسلة) . سيبدو الأمر هكذا باستخدام الطريقتين التجريديتين فقط:interface Shape {
abstract double area();
abstract double perimeter();
}
So the Quadrilateral class would then look like this:
class Quadrilateral implements Shape {
double length, width;
Quadrilateral(double l, double w) {
this.length = l;
this.width = w;
}
@Override
public double perimeter() {
return ((2*length)+(2*width));
}
@Override
public double area() {
return (length*width);
}
}
أخيرًا، سيكون استخدام الشكل الرباعي الجديد أثناء تنفيذ واجهة الشكل هو نفسه تقريبًا:
class Main
{
public static void main (String[] args)
{
// creating a Quadrilateral object using Shape as reference
Shape rectangle = new Quadrilateral(3,4);
System.out.println("Area of rectangle is " + rectangle.area());
System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
}
}
وستبدو نسخة وحدة التحكم كما يلي:
Area of rectangle is 12.0
Perimeter of rectangle is 14.0
إذا كنت ترغب في استكشاف المزيد حول الاختلافات بين الواجهات والفئات المجردة، يمكنك العثور على مزيد من المعلومات هنا.
ولكن لماذا نستخدم أساليب جافا المجردة؟
هناك العديد من الأسباب وراء استخدام الأساليب المجردة في Java ولماذا يجب أن تشعر بالراحة عند استخدامها. فيما يلي ثلاثة أسباب سريعة تدفعك إلى استخدامها عندما يكون ذلك مناسبًا.-
تجنب ازدواجية الجهود – انظر إلى مثالنا الخاص بالترميز؛ تخيل أنك وفريقك بحاجة إلى إنشاء فئات لأشكال أخرى غير المستطيل. كم عدد الطرق المختلفة التي يمكنك التوصل إليها لتصميم هذا الفصل؟ عشرة؟ خمسة عشر؟ وهذه مشكلة بسيطة. تخيل شيئًا أكثر تعقيدًا. يمكنك أنت وفريقك التوصل إلى مائة طريقة. ومن ثم ستواجه المهمة الشاقة المتمثلة في نسجها معًا في برنامج متماسك. وهذا يقودنا إلى النقطة التالية: تعريف التنفيذ.
-
تسمح الأساليب المجردة في Java بتعريف الاستخدام والتنفيذ - عندما تستخدم فئة أو واجهة مجردة، وبواسطة التصميم، الأساليب المجردة، فإنك تحدد كيفية تفاعل الأشخاص الآخرين مع واجهتك. يتيح لهم ذلك معرفة المتغيرات التي يجب عليهم استخدامها وأنواع الإرجاع التي يمكنهم توقعها.
على الرغم من أنه يمكنهم تجاوزها وإنشاء فئات محددة تنفذ واجهتك بطرق فريدة، إلا أنك لا تزال تحدد الاستخدام الأساسي للتعليمات البرمجية الخاصة بك. إذا أراد شخص ما تنفيذ الشكل، فعليه تجاوز أو تنفيذ كل من المحيط والمساحة. - سهولة القراءة وتصحيح الأخطاء - سيؤدي وجود أساليب مجردة إلى تحسين سهولة قراءة التعليمات البرمجية الخاصة بك. عندما تكتب فصلًا يطبق واجهة، فأنت تعرف ما الذي تبحث عنه. أنت تعلم أن كل طريقة مجردة في الواجهة ستكون قيد التنفيذ، وهذا يجعل من السهل قراءة وتعقب أي أخطاء. الأساليب المجردة هي مجرد بداية لتعلم كيفية استخدام تعدد الأشكال بشكل صحيح في Java وغيرها من اللغات الموجهة للكائنات. عندما تبدأ في فهمها واستخدامها، سيبدأ فصل جديد تمامًا من رحلة البرمجة الخاصة بك.
GO TO FULL VERSION