abstract class الفئات المجردة

آخر تحديث: 2026-10-22

abstract class الفئات المجردة

الفئة المجردة (abstract class) «فئة أساس غير مكتملة»: يمكنها أن تحمل تنفيذًا فعليًا، وأن تصرح بأعضاء مجردة فقط (abstract area(): number) تلتزم الفئات الفرعية باستكمالها. لا يمكن إنشاء نسخ منها مباشرة، ولا تُستخدم إلا بالوراثة extends — وهي مناسبة للتعبير عن «كل الفئات الفرعية تتشارك الهيكل، والتفاصيل يخصص كلٌّ منها بنفسه».

المجموعةالدوال والأصناف
النوعبناء الجملة
الوضع الصارمغير مطلوب

ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.

📝 الصيغة

abstract class Shape {
  constructor(protected name: string) {}

  abstract area(): number;          // دالة مجردة: التوقيع فقط

  describe(): string {              // دالة ملموسة: تُورَّث كما هي
    return `${this.name}: ${this.area().toFixed(2)}`;
  }
}

class Circle extends Shape {
  constructor(private radius: number) { super("circle"); }
  area(): number { return Math.PI * this.radius ** 2; }
}

⚙️ المعاملات

abstract classالفئة المجردة: لا تُنشأ بـ new ولا تُستخدم إلا بالوراثة
abstract area(): numberالعضو المجرد: توقيع فقط بلا تنفيذ، ويجب على الفئات الفرعية تنفيذه وإلا كان خطأ ترجمة
protectedغالبًا ما يُقرن بالفئات المجردة: حالة مثل name مخصصة «للفئات الفرعية»

القيمة المُعادة:الطرق المجردة تُكتب التوقيع فقط؛ أما الطرق المحددة فعليها أنواع إرجاع طبيعية. ولا وجود لنسخ من الفئة المجردة، فكل الكائنات العاملة نسخ من الفئات الفرعية.

▶ مثال

عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:

الناتج:

circle: 3.14
square: 4.00

(مخرجات التشغيل بعد التحويل؛ new Shape("x") سيعطي خطأ ترجمة TS2511 — رغم أن الشيفرة JS بعد التحويل فئة عادية في الحقيقة)

💡 نقاط مهمة

ℹ️ معلومة التجريد أيضًا خاص بوقت الترجمة: يمنع tsc إجراء new Shape()، لكن الشيفرة JS بعد التحويل فئة عادية ولن يفشل new في وقت التشغيل — فهذا «ضمانة ضد الغفلة» لا «جدار رادع».
💡 تلميح الفئة المجردة مقابل الواجهة: الفئة المجردة قادرة على حمل الحالة والتنفيذ (جوهر نمط الطريقة القالبية)؛ أما الواجهة فتصف الشكل فقط. لمشاركة الكود استخدم فئة مجردة، وللتقييد على الشكل استخدم واجهة، ويمكن استخدام الاثنين معًا.
⚠️ تنبيه الفئة المجردة وراثة فردية فقط (extends لفئة واحدة)؛ وعند الحاجة إلى «قدرات متعددة» استخدم الواجهات مع التركيب، ولا تضغط سلسلة وراثة واحدة قسرًا.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س ماذا يحدث عند إنشاء نسخة من فئة مجردة بـ new؟
ج خطأ ترجمة TS2511 (لا يمكن إنشاء نسخة من فئة مجردة). أما الشيفرة JS بعد التحويل ففئة عادية ولن يخطئ new في وقت التشغيل — فلا تعتمد على حماية وقت التشغيل.
س هل يمكن للفئة المجردة أن تملك مُنشئًا؟
ج نعم، وغالبًا ما يُقرن مع protected: فالمُنشئ المحدد بـ protected يمنع أيضًا الإنشاء بـ new من الخارج (مع سماح الفئات الفرعية بالاستدعاء super) — وهو تعبير آخر عن «منع التهيئة المباشرة».
س أيهما أختار: الفئة المجردة أم الواجهة؟
ج لمشاركة التنفيذ/الحالة (طريقة describe أو حقل name) ← الفئة المجردة؛ ولتعريف عقد فقط مع إمكانية أن تحققه فئة عدة عقود ← الواجهة. والتركيبة الشائعة: واجهة للعقد الخارجي، وفئة مجردة للتنفيذ الافتراضي.
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%