النوع المجرد
في لغات البرمجة ، يُعرف النوع المجرد (أو النوع الوجودي ) [ 1 ] بأنه نوع في نظام الأنواع الاسمية لا يمكن إنشاء مثيل له مباشرةً؛ في المقابل، يمكن إنشاء مثيل للنوع الملموس مباشرةً. ولا يمكن إنشاء مثيل للنوع المجرد إلا بشكل غير مباشر، عبر نوع فرعي ملموس .
قد لا يوفر النوع المجرد أي تطبيق، أو قد يوفر تطبيقًا غير مكتمل. في بعض اللغات، تُعرف الأنواع المجردة التي لا توفر تطبيقًا (بدلاً من تطبيق غير مكتمل) باسم البروتوكولات أو الواجهات أو التوقيعات أو أنواع الفئات . في البرمجة الكائنية التوجه القائمة على الفئات ، تُنفذ الأنواع المجردة كفئات مجردة (تُعرف أيضًا باسم الفئات الأساسية المجردة )، وتُنفذ الأنواع الملموسة كفئات ملموسة . في البرمجة العامة ، المفهوم المماثل هو المفهوم ، الذي يحدد بناء الجملة والدلالات بشكل مشابه، ولكنه لا يتطلب علاقة نوع فرعي: فقد يُحقق نوعان غير مرتبطين المفهوم نفسه.
غالبًا ما تُقدَّم تطبيقاتٌ واحدةٌ أو أكثر للأنواع المجردة بشكلٍ منفصل، على سبيل المثال، في شكل أنواع فرعية ملموسة يمكن إنشاء مثيلات لها. في البرمجة كائنية التوجه، قد يتضمن الصنف المجرد أساليبَ مجردةً أو خصائصَ مجردةً [ 2 ] تشترك فيها أصنافه الفرعية. ومن الأسماء الأخرى لميزات اللغة التي تُستخدم (أو قد تُستخدم) لتطبيق الأنواع المجردة: السمات ، والمزيجات ، والنكهات ، والأدوار ، أو أصناف الأنواع .
قد تتضمن الأنواع المجردة أيضًا أي عدد من الطرق والخصائص غير المجردة، كما هو الحال عند تطبيق نمط طريقة القالب الذي يستخدم مزيجًا من الطرق الثابتة ذات التطبيقات الثابتة وطرق الربط التي يمكن تجاوزها في الفئات الفرعية الملموسة لتوفير منطق مخصص.
الخلق
يمكن إنشاء الفئات المجردة أو الإشارة إليها أو محاكاتها بعدة طرق:
- باستخدام الكلمة المفتاحية
abstractالصريحة في تعريف الفئة، كما هو الحال في Java أو D أو C# . - من خلال تضمين طريقة واحدة أو أكثر من الطرق المجردة (تسمى الدوال الافتراضية البحتة في لغة C++ ) في تعريف الفئة، والتي تم الإعلان عن قبولها كجزء من بروتوكولها، ولكن لم يتم توفير أي تنفيذ لها.
- عن طريق الوراثة من نوع مجرد، وعدم تجاوز جميع الميزات المفقودة اللازمة لإكمال تعريف الفئة. بعبارة أخرى، يصبح النوع الفرعي الذي لا يُنفذ جميع الطرق المجردة من النوع الأصل مجردًا في حد ذاته. [ 2 ] [ 3 ]
- في العديد من لغات البرمجة الديناميكية، مثل Smalltalk ، يُمكن اعتبار أي فئة تُرسل دالة معينة إلى `this` ، ولكنها لا تُنفذ تلك الدالة، فئةً مجردة. (مع ذلك، في العديد من هذه اللغات، مثل Objective-C ، لا يتم اكتشاف الخطأ إلا عند استخدام الفئة، وتُعيد الرسالة خطأً استثنائيًا مثل "لا يتعرف على المُحدد: xxx" كما
- [NSObject doesNotRecognizeSelector:(SEL)selector]هو الحال عند اكتشاف دالة غير مُنفذة).
أمثلة
جافا
افتراضيًا، تكون جميع الطرق في جميع الفئات ملموسة، ما لم تُستخدم الكلمة المفتاحية abstract. قد تتضمن الفئة المجردة طرقًا مجردة، أي طرقًا لا يوجد لها تطبيق. افتراضيًا، تكون جميع الطرق في جميع الواجهات مجردة، ما لم تُستخدم الكلمة المفتاحية default. يمكن استخدام الكلمة المفتاحية default لتحديد طريقة ملموسة في واجهة.
// بشكل افتراضي، جميع الطرق في جميع الفئات ملموسة، ما لم يتم استخدام الكلمة المفتاحية abstract. abstract class Demo { // قد تتضمن الفئة المجردة طرقًا مجردة، والتي ليس لها تنفيذ. public abstract int sum ( int x , int y );// قد تتضمن الفئة المجردة أيضًا طرقًا ملموسة. public int product ( int x , int y ) { return x * y ; } }// بشكل افتراضي، جميع الدوال في جميع الواجهات مجردة، إلا إذا تم استخدام الكلمة المفتاحية default. interface DemoInterface { int getLength (); // يمكن استخدام الكلمة المفتاحية abstract هنا، على الرغم من أنها غير مجدية تمامًا // يمكن استخدام الكلمة المفتاحية default في هذا السياق لتحديد دالة ملموسة في واجهة default int product ( int x , int y ) { return x * y ; } }![]()
الاستخدام
تُعدّ الأنواع المجردة سمةً مهمةً في لغات البرمجة الكائنية ذات الكتابة الثابتة . لا تمتلك العديد من اللغات ذات الكتابة الديناميكية سمةً مكافئةً (مع أن استخدام الكتابة الديناميكية يجعل الأنواع المجردة غير ضرورية)؛ ومع ذلك، توجد السمات في بعض اللغات الحديثة ذات الكتابة الديناميكية.
يرى بعض المؤلفين أن الفئات يجب أن تكون فئات طرفية (أي ليس لها أنواع فرعية)، أو أن تكون مجردة. [ 4 ] [ 5 ]
تُعد الأنواع المجردة مفيدة لأنها يمكن استخدامها لتحديد وفرض بروتوكول ؛ مجموعة من العمليات التي يجب أن تدعمها جميع الكائنات التي تنفذ البروتوكول.
تُعد الأنواع المجردة أيضًا جزءًا أساسيًا من نمط طريقة القالب .
انظر أيضاً
مراجع
- ↑ ميتشل، جون سي؛ بلوتكين، جوردون دي؛ الأنواع المجردة لها نوع وجودي ، معاملات ACM في لغات البرمجة والأنظمة، المجلد 10، العدد 3، يوليو 1988، الصفحات 470-502
- 1 2 "الأساليب والفئات المجردة (دروس جافا > تعلم لغة جافا > الواجهات والوراثة)" . Oracle.com . تم الاطلاع عليه بتاريخ 14 أغسطس 2019 .
- ↑ "الدوال الافتراضية البحتة والفئات المجردة في لغة C++" . GeeksforGeeks.org . 15 يوليو 2014.
- ↑ ريل، آرثر (1996). أساليب التصميم الموجهة للكائنات . أديسون-ويسلي بروفيشنال. ص 89. ISBN 0-201-63385-X.
- ↑ مايرز، سكوت (1996). لغة سي++ أكثر فعالية . أديسون-ويسلي بروفيشنال. ص 258. ISBN 0-201-63371-Xاجعل
الفئات غير الورقية مجردة
للمزيد من القراءة
- كتاب "التعلم الأساسي للغة جافا" (Head First Java) . دار نشر أورايلي ميديا. 2003. 688 صفحة. رقم ISBN 0-596-00920-8.
- جافا الأساسية: منهج متكامل بقلم ر. ناجيسوارا راو
روابط خارجية
- "شرح الواجهات المجردة أو الهيكلية"
- الأنواع ولغات البرمجة بقلم بنيامين بيرس (مطبعة معهد ماساتشوستس للتكنولوجيا 2002)
- النوع المجرد في برنامج Rosetta Code
- نظرية الأنواع
