ما فائدة الـinterface فى لغة الجافا
#1
تمت المشاركة 24 July 2007 - 11:16 PM
ااسف لطرح سؤال مبتداء جداً ويمكن الحصول على الكثير من الروابط من خلال جوجل, ولكن اريد معرفة الفائدة وليس كيفية الاستخدام..
اعرف مثلاُ ان كلاس abstact تستطيع ان تضع فيه بعض الدوال العادية بالاضافة لدوال abstract يتم تعريفها لاحقاً, ولكن إذا قمت بعمل كلاس interface فقط ولا يحتوى على اى دوال بشفرة ما الفائدة التى احصل عليها, هل هى فقط لعمل تنظيم واجبار المستخدم ان يلتزم بإستخدام اسماء دوال معينة ام ان هناك شيئ اخر لا اعرفه..
والسلام عليكم
#2
تمت المشاركة 24 July 2007 - 11:50 PM
في الجافا موضوع مهم جدا فعن طريقة تقوم بتعريف ال methods دون كتابة ما تحتويه هذه ال methods من وضيفة عمل
هذه مهمة في عدة حالات ساقول مثال بسيط يمكن ان تستفيد منه و تفهم ماذا يعني ال interface
اذا كانا نعم مشرو ع للجامعة مثلا وكان لدينا نوعين من الطلاب طلاب ماستر وطلاب بكلوريوس
جميع الطلاب لهم معلومات ثابتة وطريقة حساب العلامات بطريقة تابتة هذا على سبيل المثال
و لا كن طلاب الماجستير تكون علامة النجاح لديهم من 75 اما طلاب البكلوريوس فعلامة النجاح من 60
في هذه الحالة ال method التي تحدد هل الطالب ناجح او راسب هي مثود واحدة يمكن ان نعرفها في ال interface و ليكن اسمها S
ولا كن مع ان هذه الmethod واحدة الا اننا سنعيد تعريفها في كل من الكلاسين التابعين لطلاب الماجستير و طلاب البكلوريو بطريقة مختلفة لمعرفة الطالب ناجح او راسب
هذا مثال بسيط يمكن ان نستفيد منه في فهم الفائدة لل interface
اتمني ان تكون الفكرة وصلت و وفقك الله
#3
تمت المشاركة 24 July 2007 - 11:55 PM
#4
تمت المشاركة 25 July 2007 - 12:29 AM
عندي كم معلومة بسيطة يمكن تفيدك في هذه المسألة , بالنسبة للفرق بين الClass والInterface فهو معروف وسأذكرها للفائدة فقط - فلا يمكنك أن ترث من أكثر من كلاس واحد لكن يمكن أن تقوم بـ implement لأكثر من Interface - وهذه هو إختصار لجواب مسألتك والتفصيل قادم إن شاء الله - وتوجد فروق أخرى مثل أنك لا تستطيع أن تكون object (كائن) من الInterface بخلاف الClass الذي أهمية هي تكوين كائن منه .
يوجد أيضاً ال abstract class الذي يختلف عن ال Interface في أنه لا تستطيع أن ترث أكثر من نوع منه بخلاف الInterface - مثل ما ذكرت سابقاً - , ويوجد فرق آخر وهو أن الabstract class يسمح بتعريف دوال وكاملة وبيانات داخله بخلاف الInterface .
إذا متى نستخدم الabstract class ومتى نستخدم الInterface . أو بالأصح ما فائدة الabstract class و الInterface .
بالنسبة للــ abstract class ميزته أنه يسمح لك بتعريف دوال تكون أساسية للـ class بحيث يكون النواة الأساسية للكلاس , أو ما يسمى بالـ Default behavior بحيث أنك توفر دوال تكون تستخدم في جميع الكلاسات حتى لو لم يقوم الذي يرث منها بإعادة تعرفيها مثل دالة ToString وهذه يستخدمونها كبنية تحتية للكلاس مثل كلاس Object . ويستخدم بقلة لأنه كما ذكرت لا يمكن أن ترث منه إلا مرة واحدة وبالتالي التوسعة والتطوير تحتاج إلى جهد أكبر .
أما الInterface فأهم ميزه له أنه يسمح بالـImplement من أكثر من الInterface , وهذه ميزته أن يسمح لك بتطوير الكود بسهولة وبالتالي مسألة تطوير الكود هي فقط إضافة Interface جديدة فقط . وغالباً ما تستخدم لدلالة عن الFuncyionaltiy التي يوفرها الكلاس , فأنت تضمن أن الكلاس الذي سيأتيك يستقبل نوع محدد ويعيد نوع آخر محدد . ويستخدم بكثرة لأنه يريح المبرمجين وليس عليه قيود كـabstract class .
فمثلاً, لو كنت تريد أن تكتب دالة مثلاُ تستقبل كائن من خصائصة أنه يستطيع نسخ نفسه فهل ستعرف هذه الدالة في Interface أو في abstract class. الأفضل أن تعرفها في Interface حتى تريح المبرمجين ولا تجبرهم على الوراثة فقط من الكلاس الذي كتبته .
عموماً , الآن يستخدم الabstract class لدلالة على تصنيف هذا الClass فهو من أي نوع بالضبط أما الInterface فهو يستخدم لدلالة على Functyionaltiy التي يقدمها هذا الكلاس (هل يمكنه القراءة , الكتابة , العمل في الخلفية ).
ولو تلاحظ أنها كان السائد لتعريف Thread هو أن ترث من الكلاس Thread وتقوم بعمل إعادة تعريف للدالة run ومن ثم يعمل كائن لوحده , لكن بعدها تم تعريف Interface Runnable يتيح نفس خصائص الThread مع تعريف الدالة Run , وهذه الإضافة هي فقط لتسهيل العمل للمبرمجين حتى لا يجبروا على أن يرثوا فقط لمرة واحدة .
أتمنى إني أكون وضحت شئ تستفيد منه .
تم تعديل هذه المشاركة بواسطة b.m.s: 25 July 2007 - 12:35 AM
#5
تمت المشاركة 25 July 2007 - 12:29 AM
هي ليست اكثر من اضافة نوع من التنظيم والتقييد للمطوريين وذلك يفيد في المشاريع الكبيرة وفي المشريع البرمجية التي يشترك فيها اكثر من شخص ..
كما يفيد في مواضيع اعادة الاستخدام Reuseabiliy ..
عندما تريد اتاحة فرصة لغيرك الاستفادة من عملك بدون طمس معالمه (توزيعات مختلفة لنفس الفكرة )
كما ان موضوع الواجهات Interface فتحت افاق واسعة ومرونة في مجال هندسة البرمجيات من خلال مايسمى النماذج التصميمية Design Patterns باعتبارها اعلى مستوى ممكن من التجريد ( تجريد التفاصيل ) والنظر من اعلى
وبهذه الطريقة .. توزيع العمل على مستويات .. يسهل الفهم والقراءة Readability
وتحقيق قراءة اسهل وفهم اسهل وخواص اعادة الاستخدام يفيد في زيادة معايير جودة المنتج البرمجي وفق المعايير العالمية لجودة البرمجيات التي تعتمدها IEEE والـ ISO
وهذه المعايير تؤخذ بعين الاعتبار في شركات البرمجيات الكبيرة ومسابقات البرمجيات العالمية بتخصيص فريق خاص لفحص تحقيق بنودها
تم تعديل هذه المشاركة بواسطة nardien28: 25 July 2007 - 12:51 AM
#6
تمت المشاركة 25 July 2007 - 12:31 AM
كما هو معروف أن الجافا لا تدعم تعدد الأباء وذلك بسبب المشاكل التي يسببها كأن يكون الأبين لهم نفس الخصائص
فما الحل
الحل يكمن في الانترفيس حيث يقوم المستoخدم بالاستعاضة عن الفئة بفئتها الأصلية التي تشكل لها التأثير الأساسي
مثلاً عندما تحتاج إلى فئة ترث طابور وترث Frame في نفس الوقت فأنتا تقوم بوراثة Frame وعمل واجهة تحتوي على الطرق التي يقوم بها الطابور مثلاً الطريقة أول والطريقة التالي وهكذا
بهذا أنتا تملك طابور ونافذة في نفس الكائن
يوجد طريقة أخرى لحل عملية تعدد الأباء ألا وهي التداخل باستخدام أحد البترن المشهورة فيرث خصائص الكائن
بدون أن يسبب مشاكل التعددية
يمكنك مراجعة موضوع للأخ مبدئ جافا يتكلم عن كيفية الوراثة باستخدام التداخل composition
أرجو أن يكون كلامي واضحاً
#7
تمت المشاركة 25 July 2007 - 12:32 AM
المستخدم يستطيع عمل ال S في مل من الكلاسين
و لكن عن طريق الانتر فيس يكون S عبارة عن مثود واحدة و هاذا هو الاصل لانها لها نفس الوضيفة بغظ النضر عن النتيجة التي ترجعها هذه المثود
فعندما اريد معرفة الطلاب الناجحين استدعي S
اما على كلامك فيجب ان استدعي كل من المثودين المعرفات في كل من الكلاسين
و هذه هي فكرة الاوبجكت اورينتيد
في البرمجة
#8
تمت المشاركة 25 July 2007 - 12:49 AM
انا ايضا تسئلت هذا السؤال عندما دراسة هذه الغة --السبب اني لم اكن اعرف هذا المصطلح الي عند دراستها-- ، ولعلي لم اجد اجابة شافيه
ولكن الملاحظ انها تظهر بشكل واضح مع الاحداث -- even -- لذلك قولت لنفس لعلا السبب هو توحيد استخدام اسم الميسود اللي المفروض المترجم يعرفها بمعني معين
شكرا
#9
تمت المشاركة 25 July 2007 - 12:58 AM
اشكركم جميعاً بعنف وحرارة على اثراء الموضوع..
اغلب هذه المعلومات قراتها واستطعت فهمها ولكن المشكلة هى ان خلفيتى هى برمجة الاسمبلي ونحن فى لغة الاسمبلي نحاول قدر الامكان التقليل من الشفرة وعدم كتابة اى تعليق او توضيح فقط شفرة معقدة..
والان بعد هذا الشرح استطيع ان اقول باني فهمت المغزى ولي عودة إن شاء الله تعالى..
والسلام عليكم
#10
تمت المشاركة 25 July 2007 - 01:03 AM


تسجيل الدخول
التسجيل
المساعدة
الموضوع مقفل


ارجع للأعلى
متعدد الإقتباسات

