English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليمات Java الأساسية

Java Flow Control

Java Arrays

Java Object-Oriented (I)

Java Object-Oriented (II)

Java Object-Oriented (III)

معالجة الاستثناءات Java

Java List

Java Queue (الطابور)

Java Map Collections

Java Set Collections

Java Input/Output (I/O)

Java Reader/Writer

مواضيع أخرى في Java

الصفوف التجريبية والطرق التجريبية Java

في هذا الدليل، سنتعلم التجريد في Java. سنتعلم الفئات التجريدية والطرق في Java وكيفية استخدامها في البرامج.

فئة تجريدية Java

الفئة التجريدية هي فئة لا يمكن إنشاؤها (لا يمكننا إنشاء مثال على الفئة التجريدية). في Java، نستخدم كلمة المفتاح abstract لتعريف فئة تجريدية.

abstract class Animal {
   //خصائص والطرق
}

إذا حاولت إنشاء مثال على فئة抽象ة، سيظهر خطأ في التجميع. على سبيل المثال،

Animal a1 = new Animal()

سيظهر خطأ في التجميع:

 الحيوان هو مجرد مفهوم؛ لا يمكن إنشاء مثاله

على الرغم من أننا لا يمكننا إنشاء كائن من الفئة التجريدية، ولكن يمكننا إنشاء فرع من الفئة التجريدية. يمكننا إنشاء كائن من الفرع لاستدعاء أعضاء الفئة التجريدية.

قبل أن نعرف عنها بشكل دقيق، نحتاج إلى فهم طريقة التجريد.

طريقة التجريد في Java

نستخدم نفس الكلمة المفتاحية abstract لإنشاء طريقة تجريدية. تم إعلان طريقة تجريدية دون تنفيذها. على سبيل المثال،

abstract void makeSound();

في هذا السياق، makeSound() هي طريقة تجريدية.

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

يمكن للفئة التجريدية أن تحتوي على طرق تجريدية وطرق غير تجريدية. هذا مثال.

abstract class Animal {
   public void displayInfo() {
      System.out.println("أنا حيوان.");
   }
   abstract void makeSound();
}

في المثال السابق، قمنا بإنشاء فئة تجريدية Animal. تحتوي هذه الفئة على طريقة تجريدية makeSound() وطرق غير تجريدية displayInfo().

وراثة الفئة التجريدية

لا يمكن لتجريد الفئة أن يتم إنشاؤها. لاستدعاء أعضاء الفئة التجريدية، يجب أن نرثها. على سبيل المثال

مثال 1: وراثة الفئة التجريدية

abstract class Animal {
 public void displayInfo() {
   System.out.println("أنا حيوان.");
 }
}
class Dog extends Animal {
}
class Main {
 public static void main(String[] args) {
   Dog d1 = new Dog();
   d1.displayInfo();
 }
}

الإخراج:

أنا حيوان.

في المثال السابق، قمنا بإنشاء فئة تجريدية Animal. لا يمكننا إنشاء كائن من فئة Animal. لاستدعاء طريقة displayInfo() من فئة Animal، نرث فرع Dog من Animal.

ثم، نستخدم كائن d1 من Dog لاستدعاء الطريقة displayInfo().

إعادة كتابة الطريقة التجريدية

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

 بسبب أن فرعنا يحتوي على طريقة تجريدية، نحتاج إلى إعادة كتابتها.

ملاحظة:إذا تم إعلان الفرع أيضًا كتجريدي، فلا يجب عليك إعادة كتابة الطريقة التجريدية.

مثال 2: تغطية الطريقة التجريدية

abstract class Animal {
   abstract void makeSound();
   public void eat() {
      System.out.println("أستطيع أكل.");
   }
}
class Dog extends Animal {
   public void makeSound() {
      System.out.println("بورك بورك");
   }
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();
      d1.eat();
   }
}

الإخراج:

بورك بورك.
أستطيع أكل.

في المثال السابق، قمنا بإنشاء فئة تجريدية Animal. تحتوي هذه الفئة على طريقة تجريدية makeSound() وطرق غير تجريدية eat().

نحن نرث فئة Dog من فئة Animal. هنا، يغطي فرع Dog الطريقة التجريدية displayInfo().

 ثم قمنا بإنشاء كائن Dog d1. باستخدام هذا الكائن، نحن نستدعي طرق d1.displayInfo() و d1.eat().

الوصول إلى بناء محرك السيارة للفئة الفرعية

مثل الفئات غير المحددة، نستخدم كلمة المفتاح super للوصول إلى بناء محرك السيارة للفئة الفرعية من الفئة الفرعية. على سبيل المثال،

abstract class Animal {
   Animal() {
      ...
   }
}
class Dog extends Animal {
   Dog() {
      super();
      ...
   }
}

في هذا، نستخدم super() في بناء محرك السيارة الفرعية Dog للوصول إلى بناء محرك السيارة للفئة Animal.

ملاحظة، يجب أن يكون super دائمًا الخطوة الأولى في بناء محرك السيارة الفرعية. الوصولكلمات المفتاح Javaللحصول على معلومات إضافية.

لماذا نستخدم التعبير في Java؟

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

مثال واقعي للتعبير يمكن أن يكون نظام الفرامل في الدراجة النارية. نعرف وظيفة الفرامل. عندما نضغط على الفرامل، تتوقف الدراجة النارية. ولكن عمل الفرامل يبقى لنا مخفيًا.

من المزايا الرئيسية لتغطية مبدأ العمل في نظام الفرامل، أن الآن يمكن للمصنعين استخدام فرامل مختلفة للدراجات النارية المختلفة، ولكن وظيفة الفرامل هي نفسها.

لنأخذ مثالاً لنجعل فهمنا أفضل عن التعبير عن Java.

مثال 3: التعبير عن Java

abstract class Animal {
   abstract void makeSound();
}
class Dog extends Animal {
   public void makeSound() {
      System.out.println("Bark bark.");
   }
}
class Cat extends Animal {
   public void makeSound() {
      System.out.println("Meows ");
   }
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();
      Cat c1 = new Cat();
      c1.makeSound();
   }
}

الإخراج:

Bark bark
Meows

في المثال السابق، قمنا بإنشاء سلسلة فرعية Animal. تحتوي سلسلة الفروع Animal على طريقة تعريفية makeSound().

قانون makeSound() غير قادر على تنفيذ داخل Animal. لأن كل حيوان ينفذ صوتًا مختلفًا. لذلك، لدى كل فرع من فروع Animal طريقة تنفيذ مختلفة لـ makeSound().

لا يمكننا تنفيذ makeSound() في Animal بطريقة تعمل بشكل صحيح مع جميع فرعات Animal. لذلك، يبقى تنفيذ makeSound() في Animal في حالة سرية.

 في المثال السابق، Dog قام بإنشاء تنفيذ الخاص به لـ makeSound()، وCat قام بإنشاء تنفيذ الخاص به لـ makeSound().

نقاط التذكر

  • نستخدم كلمة المفتاح abstract لإنشاء الفئة التجريبية والطريقة التجريبية.

  • لا تحتوي الطريقة التجريبية على أي تنفيذ (جسم الطريقة).

  • الفئة التي تحتوي على طرق تجريبية يجب أن تكون تجريبية.

  • لا يمكننا إنشاء موضوع للفئة التجريبية.

  • لتحقيق الوظائف للفئة التجريبية، نتعاقب مع الفرعية التي تنحدر منها ونقوم بإنشاء موضوع للفرعية.

  • يجب على الفرعية أن تعيد كتابة جميع الطرق التجريبية للفئة التجريبية. ولكن إذا تم إعلان الفرعية كتجريبية، فإنه لا يتعين عليها إعادة كتابة الطرق التجريبية.

  • يمكننا استخدام مرجع الفئة التجريبية لتحليل الخصائص والطرق التجريبية. على سبيل المثال،

    Animal.staticMethod();

واجهات Java

في Java، الواجهة تشبه الفئة التجريبية ولكن الواجهة لا تحتوي على أي طرق غير تجريبية. في الدرس التالي، سنتعلم المزيد عن الواجهات.