اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

لم يتم توضيح اللغة، ولكن على أي حال  الـ Abstract Class هو كلاس مجرد لا يمكن إنشاء كائنات منه مباشرة، بل يستخدم كقاعدة لتعريف سلوك عام يتم توريثه لكلاسات أخرى.

وكمثال في بايثون، نقوم بتعريف الكلاس:

abstract class Animal:
    # تعريف السلوك العام
    def make_sound(self):
        pass
  • ثم تعريف الدوال المجردة
  • بعد ذلك نستطيع إنشاء كلاسات مشتقة
  • ثم إنشاء كائنات من الكلاسات المشتقة

أي كالتالي:

from abc import ABC, abstractmethod

# تعريف الكلاس المجرد Animal
class Animal(ABC):
    # تعريف الدالة المجردة make_sound()
    @abstractmethod
    def make_sound(self):
        pass

# تعريف الكلاس المشتق Dog
class Dog(Animal):
    # إعادة تعريف الدالة make_sound()
    def make_sound(self):
        print("Woof!")

# تعريف الكلاس المشتق Cat
class Cat(Animal):
    # إعادة تعريف الدالة make_sound()
    def make_sound(self):
        print("Meow!")

# إنشاء كائنات من الكلاسات المشتقة
dog = Dog()
cat = Cat()

# استدعاء الدالة make_sound() على الكائنات
dog.make_sound()
cat.make_sound()

 

  • 0
نشر

عندما ننشئ كلاس باستخدام الكلمة الأساسية "abstract" قبل تعريف الكلاس، فإننا نقوم بإنشاء كلاس يُعرف كـ "abstract class" وهذا النوع من الكلاسات لا يمكن إنشاء كائنات منها مباشرة، بل يستخدم فقط كقالب للتمديد من قبل كلاسات أخرى.

 

في الكلاس الذي يتم تعريفه كـ "abstract class"، يمكن أن يحتوي على طرقٍ (methods) مجردة (abstract methods)، وهي طرق لم يتم تقديم تنفيذ لها داخل الكلاس نفسه. بدلاً من ذلك، يترك تنفيذ هذه الطرق للكلاسات التي تمتد من الكلاس الـ "abstract".

 

لتعريف كلاس بشكل مبسط باستخدام الـ "abstract"، وبما أنك لم تحدد لغة البرمجة فيمكن استخدام الكود التالي بلغة Java لفهم المبدء جيدا: 

abstract class Shape {

    // مثال على طريقة مجردة

    abstract double area();

    

    // مثال على طريقة غير مجردة

    void display() {

        System.out.println("This is a shape.");

    }

}



class Circle extends Shape {

    double radius;

    

    Circle(double r) {

        radius = r;

    }

    

    // تنفيذ الطريقة المجردة

    double area() {

        return Math.PI * radius * radius;

    }

}



class Main {

    public static void main(String[] args) {

        Circle circle = new Circle(5);

        circle.display();

        System.out.println("Area of the circle: " + circle.area());

    }

}

 

وفي هذا المثال قمت باستخدام كلاس مجرد "Shape" لتحديد سلوك عام للأشكال الهندسية، مع ترك تنفيذ الطرق الخاصة بكل شكل محدد (مثل الدائرة في هذه الحالة) للكلاسات التي تمتد من "Shape".

  • 0
نشر

في لغة C++، تقدر تنشئ كلاس مجرد باستخدام الكلمة المفتاحية abstract.

ما هو الكلاس المجرد؟

هو كلاس لا يمكن إنشاء كائنات منه مباشرة. يهدف إلى تعريف خصائص وسلوكيات مشتركة بين عدة كلاسات أخرى، 
لماذا نستخدم الكلاس المجرد

  •  تُسهل إعادة استخدام الكود المشترك بين الكلاسات المشتقة.
  •  تُتيح لك التركيز على السلوكيات العامة دون الحاجة إلى تفاصيل التنفيذ.

مثال بسيط علي كيفية انشاء  الكلاس المجرد

class AbstractClass {
  public:
    // تعريف خصائص عامة
    virtual ~AbstractClass() {} // تعريف destructor افتراضي

    // تعريف دالة مجردة
    virtual void abstractFunction() = 0;

  protected:
    // تعريف خصائص محمية

  private:
    // تعريف خصائص خاصة
};

في هذه الكود البسيط يوضح بنية الكلاس المجرد ويجب ان تتبع بعض القواعد المهمه عند انشاء اي كلاس مجرد  

  • يجب تعريف الدوال المجردة باستخدام الكلمة المفتاحية virtual و = 0.
  • لا يتم تعريف جسم الدالة داخل الكلاس المجرد.
  • تُعرف أجسام الدوال المجردة في الكلاسات المشتقة.
  • تُستخدم الكلمة المفتاحية public لتحديد وراثة الكلاس المجرد.
  • يجب إعادة تعريف جميع الدوال المجردة في الكلاسات المشتقة.
     

مثال كامل يمكنك فهم منه كل شئ :
 

class Animal {
  public:
    virtual ~Animal() {} // destructor افتراضي
    virtual void speak() = 0; // دالة مجردة

  protected:
    // خصائص محمية

  private:
    // خصائص خاصة
};

class Dog : public Animal {
  public:
    void speak() override { // إعادة تعريف الدالة المجردة
      cout << "Woof!" << endl;
    }

  protected:
    // خصائص محمية

  private:
    // خصائص خاصة
};

class Cat : public Animal {
  public:
    void speak() override { // إعادة تعريف الدالة المجردة
      cout << "Meow!" << endl;
    }

  protected:
    // خصائص محمية

  private:
    // خصائص خاصة
};

int main() {
  Dog* dog = new Dog();
  dog->speak(); // "Woof!"

  Cat* cat = new Cat();
  cat->speak(); // "Meow!"

  return 0;
}

شرح الكود

الكود يُعرّف كلاسين مجردين (Animal) وكلاسين مشتقين (Dog و Cat):

1. الكلاس المجرد Animal:

  • يُعرّف باستخدام الكلمة المفتاحية abstract.
  • لا يمكن إنشاء كائنات مباشرة منه.
  • يحتوي على:دالة مجردة ()speak :
  • تُعرّف باستخدام virtual و = 0.
  • لا يتم تعريف جسم الدالة.
  • خصائص محمية وخاصة.

2. الكلاسات المشتقة (Dog و Cat):

  • ترث من الكلاس المجرد Animal باستخدام public.
  • تُعيد تعريف الدالة المجردة ()speak :
  • تُعرّف باستخدام override.
  • تُحدد سلوك الدالة الخاص بكل كلاس.
  • قد تحتوي على خصائص محمية وخاصة.

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...