ما فائدة الـinterface فى لغة الجافا
#1
مرشح 0
تم الارسال 24/07/2007 - 11:16 PM
ااسف لطرح سؤال مبتداء جداً ويمكن الحصول على الكثير من الروابط من خلال جوجل, ولكن اريد معرفة الفائدة وليس كيفية الاستخدام..
اعرف مثلاُ ان كلاس abstact تستطيع ان تضع فيه بعض الدوال العادية بالاضافة لدوال abstract يتم تعريفها لاحقاً, ولكن إذا قمت بعمل كلاس interface فقط ولا يحتوى على اى دوال بشفرة ما الفائدة التى احصل عليها, هل هى فقط لعمل تنظيم واجبار المستخدم ان يلتزم بإستخدام اسماء دوال معينة ام ان هناك شيئ اخر لا اعرفه..
والسلام عليكم
شارك هذا الموضوع
#2
مرشح 0
تم الارسال 24/07/2007 - 11:50 PM
في الجافا موضوع مهم جدا فعن طريقة تقوم بتعريف ال methods دون كتابة ما تحتويه هذه ال methods من وضيفة عمل
هذه مهمة في عدة حالات ساقول مثال بسيط يمكن ان تستفيد منه و تفهم ماذا يعني ال interface
اذا كانا نعم مشرو ع للجامعة مثلا وكان لدينا نوعين من الطلاب طلاب ماستر وطلاب بكلوريوس
جميع الطلاب لهم معلومات ثابتة وطريقة حساب العلامات بطريقة تابتة هذا على سبيل المثال
و لا كن طلاب الماجستير تكون علامة النجاح لديهم من 75 اما طلاب البكلوريوس فعلامة النجاح من 60
في هذه الحالة ال method التي تحدد هل الطالب ناجح او راسب هي مثود واحدة يمكن ان نعرفها في ال interface و ليكن اسمها S
ولا كن مع ان هذه الmethod واحدة الا اننا سنعيد تعريفها في كل من الكلاسين التابعين لطلاب الماجستير و طلاب البكلوريو بطريقة مختلفة لمعرفة الطالب ناجح او راسب
هذا مثال بسيط يمكن ان نستفيد منه في فهم الفائدة لل interface
اتمني ان تكون الفكرة وصلت و وفقك الله
#3
مرشح 0
تم الارسال 24/07/2007 - 11:55 PM
#4
مرشح 0
تم الارسال 25/07/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/07/2007 - 12:35 AM
#5
مرشح 0
تم الارسال 25/07/2007 - 12:29 AM
هي ليست اكثر من اضافة نوع من التنظيم والتقييد للمطوريين وذلك يفيد في المشاريع الكبيرة وفي المشريع البرمجية التي يشترك فيها اكثر من شخص ..
كما يفيد في مواضيع اعادة الاستخدام Reuseabiliy ..
عندما تريد اتاحة فرصة لغيرك الاستفادة من عملك بدون طمس معالمه (توزيعات مختلفة لنفس الفكرة )
كما ان موضوع الواجهات Interface فتحت افاق واسعة ومرونة في مجال هندسة البرمجيات من خلال مايسمى النماذج التصميمية Design Patterns باعتبارها اعلى مستوى ممكن من التجريد ( تجريد التفاصيل ) والنظر من اعلى
وبهذه الطريقة .. توزيع العمل على مستويات .. يسهل الفهم والقراءة Readability
وتحقيق قراءة اسهل وفهم اسهل وخواص اعادة الاستخدام يفيد في زيادة معايير جودة المنتج البرمجي وفق المعايير العالمية لجودة البرمجيات التي تعتمدها IEEE والـ ISO
وهذه المعايير تؤخذ بعين الاعتبار في شركات البرمجيات الكبيرة ومسابقات البرمجيات العالمية بتخصيص فريق خاص لفحص تحقيق بنودها
تم تعديل هذه المشاركة بواسطةnardien28: 25/07/2007 - 12:51 AM
#6
مرشح 0
تم الارسال 25/07/2007 - 12:31 AM
كما هو معروف أن الجافا لا تدعم تعدد الأباء وذلك بسبب المشاكل التي يسببها كأن يكون الأبين لهم نفس الخصائص
فما الحل
الحل يكمن في الانترفيس حيث يقوم المستoخدم بالاستعاضة عن الفئة بفئتها الأصلية التي تشكل لها التأثير الأساسي
مثلاً عندما تحتاج إلى فئة ترث طابور وترث Frame في نفس الوقت فأنتا تقوم بوراثة Frame وعمل واجهة تحتوي على الطرق التي يقوم بها الطابور مثلاً الطريقة أول والطريقة التالي وهكذا
بهذا أنتا تملك طابور ونافذة في نفس الكائن
يوجد طريقة أخرى لحل عملية تعدد الأباء ألا وهي التداخل باستخدام أحد البترن المشهورة فيرث خصائص الكائن
بدون أن يسبب مشاكل التعددية
يمكنك مراجعة موضوع للأخ مبدئ جافا يتكلم عن كيفية الوراثة باستخدام التداخل composition
أرجو أن يكون كلامي واضحاً
#7
مرشح 0
تم الارسال 25/07/2007 - 12:32 AM
المستخدم يستطيع عمل ال S في مل من الكلاسين
و لكن عن طريق الانتر فيس يكون S عبارة عن مثود واحدة و هاذا هو الاصل لانها لها نفس الوضيفة بغظ النضر عن النتيجة التي ترجعها هذه المثود
فعندما اريد معرفة الطلاب الناجحين استدعي S
اما على كلامك فيجب ان استدعي كل من المثودين المعرفات في كل من الكلاسين
و هذه هي فكرة الاوبجكت اورينتيد
في البرمجة
#8
مرشح 0
تم الارسال 25/07/2007 - 12:49 AM
انا ايضا تسئلت هذا السؤال عندما دراسة هذه الغة --السبب اني لم اكن اعرف هذا المصطلح الي عند دراستها-- ، ولعلي لم اجد اجابة شافيه
ولكن الملاحظ انها تظهر بشكل واضح مع الاحداث -- even -- لذلك قولت لنفس لعلا السبب هو توحيد استخدام اسم الميسود اللي المفروض المترجم يعرفها بمعني معين
شكرا
#9
مرشح 0
تم الارسال 25/07/2007 - 12:58 AM
اشكركم جميعاً بعنف وحرارة على اثراء الموضوع..
اغلب هذه المعلومات قراتها واستطعت فهمها ولكن المشكلة هى ان خلفيتى هى برمجة الاسمبلي ونحن فى لغة الاسمبلي نحاول قدر الامكان التقليل من الشفرة وعدم كتابة اى تعليق او توضيح فقط شفرة معقدة..
والان بعد هذا الشرح استطيع ان اقول باني فهمت المغزى ولي عودة إن شاء الله تعالى..
والسلام عليكم
#10
مرشح 0
تم الارسال 25/07/2007 - 01:03 AM
#11
مرشح 0
تم الارسال 25/07/2007 - 01:20 AM
احمد غريب, on Jul 25 2007, 02:03 AM, said:
اهلين يا اخوي اردت ان اعلق على كلامك في اختيارك لتعلم لغة الجافا في البداية اود ان اسدي لك نصيحة من شخص عمل مبرمج في لغة الجافا لمدة سنتين وكنت اكبر عدو لشركة مايكروسفت
ولكن في النهايه وجدت ان السوق اليوم يتجه بكل دعمه وامكانياته و طلبه على تقنية الدوت نت
و الحمد الله بعد ان كنت لا اود معرفة الدوت نت اصبحت مبرمج في هذه الغة
اود ان اقول لك اذا اردت ان تتعلم البرمجة بصفة عصرية و قوية فعليك في الجافا اما اذا اردت ان تركب مع القطار الذي يسير بسرعة الزمن و تفتح لنفسك افاق لن تتصورها فعليك باتقان تقنية الدوت نت و بل اخص انصحك للاتجاه ال C# لما لهاذه الغة من مستقبل ولا تنسا ال ASP.NET
مع تمنياتي لك بتوفيق والنجاح
#13
مرشح 0
تم الارسال 25/07/2007 - 01:37 AM
كل ما تنفتح سيرة السوق والجافا بيصير في مناورات عسكرية في منتدى الجافا من قبل جماعات الدوت نت
تم تعديل هذه المشاركة بواسطةnardien28: 25/07/2007 - 02:03 AM
#15
مرشح 0
تم الارسال 25/07/2007 - 01:43 AM
اللغات التى تعتمد على الدوت نت او الVM بشكل عام لا اعتبرها لغات برمجة لانها تضع حاجز بينك وبين العتاد, سبب اختيارى للغة الجافا لم يكن الهدف منه عمل برامج سطح مكتب وإنما الهدف الاساسي هو عمل برامج WEB واعتقد ان المستقبل للغة الجافا وليس للغات الدوت نت..
وانصح جميع الاخوة وخاصة خبراء الجافا ان يطلعو على ادوات تطوير الويب مثل THINWIRE و GWT وغيرها الكثير, فهذه الادوات او التقنيات ان صح التعبير هى المستقبل, قارن على سبيل المثال برامج سطح المكتب بشتى انواعها, سواً التى تعتمد على VM او التى تستخدم الطرق التقليدية ببرامج الويب سوف تجد ان برامج الويب اضعاف مضاعفه وفى ازدياد مستمر ..
قواعد بيانات MYSQL ولغات البرمجة مثل PHP و ASP اكتسحت الاسواق, لو اضفت لهذه التقنيات لغة الجافا تستطيع القيام بانظمة كامله..
ربما تتسائل لماذا لم اختر JAVASCRIPT بدل لغة الجافا؟ السبب بسيط هو لان الJAVASCRIPT لغة معقدة وعقيمة وغير منظمة, بالاضافة إلا انها غير متوافقة معى جميع انواع المتصفحات, فى حين ان لغة الجافا تغلبت على هذه المشكلة بادوات جديدة...
على كل حال سواً اتفقنا او اختلفنا فانا سعيد لوجودي بينكم ...
والسلام عليكم
#16
مرشح 0
تم الارسال 25/07/2007 - 02:08 AM
احمد غريب, on Jul 25 2007, 02:43 AM, said:
اللغات التى تعتمد على الدوت نت او الVM بشكل عام لا اعتبرها لغات برمجة لانها تضع حاجز بينك وبين العتاد, سبب اختيارى للغة الجافا لم يكن الهدف منه عمل برامج سطح مكتب وإنما الهدف الاساسي هو عمل برامج WEB واعتقد ان المستقبل للغة الجافا وليس للغات الدوت نت..
وانصح جميع الاخوة وخاصة خبراء الجافا ان يطلعو على ادوات تطوير الويب مثل THINWIRE و GWT وغيرها الكثير, فهذه الادوات او التقنيات ان صح التعبير هى المستقبل, قارن على سبيل المثال برامج سطح المكتب بشتى انواعها, سواً التى تعتمد على VM او التى تستخدم الطرق التقليدية ببرامج الويب سوف تجد ان برامج الويب اضعاف مضاعفه وفى ازدياد مستمر ..
قواعد بيانات MYSQL ولغات البرمجة مثل PHP و ASP اكتسحت الاسواق, لو اضفت لهذه التقنيات لغة الجافا تستطيع القيام بانظمة كامله..
ربما تتسائل لماذا لم اختر JAVASCRIPT بدل لغة الجافا؟ السبب بسيط هو لان الJAVASCRIPT لغة معقدة وعقيمة وغير منظمة, بالاضافة إلا انها غير متوافقة معى جميع انواع المتصفحات, فى حين ان لغة الجافا تغلبت على هذه المشكلة بادوات جديدة...
على كل حال سواً اتفقنا او اختلفنا فانا سعيد لوجودي بينكم ...
والسلام عليكم
اهلين يا اخوي في البداية هذا رايك وانا قدمت نصيحة فقط لا اكثر فان اصبت فمن الله وان اخطأت فمن نفسي
اما عن سيطرت السوق في لغات البرمجة انا اتفق معك
ولكن في التقارير الرسمية لغاية سنة 2006
شهدت منعطف كبير بنسبة للغة مايكروسفت
و قدرت الزيادة في المواقع التي تدعم لغاتهم بنسبة 60% عن ما كان سابقا اقصد لغة ال ASP
اما بنسبة لكلامك عن الدسك توب ابلكشن فانا لا اتكلم عنها انا قصدت ال ASP.NET وكما تعلم انك تبرمجها باكثر من لغة ومنها ال سي شارب
لان برامج الدسك توب في تنافص مستمر نقرا لتطور تقنيات كبيرة و اهمها تفنية الاجاكس في الدوت نت
اما في الجافا فلا يوجد حقل مستخدم بكثرة الى حقل ال j2me و هاذا ان صح التعبير هو شيء كبير من المستقبل و ليس المستقبل
اما عن كلامك في الجافا سكربت في هي لغة لاتحمل من الجافا الى اسمها فقط وهي ليست من شركة sun
و كل تقية مايكروسفت الجديدة تعدمد عليها و عل ال XMLبطريقة كبيرة جدا بل باالاصح هي سبب التطور الحاصل لمايكروسفت في هذه الايام
في النهاية الاختلاف في الاري لا يفسد للود قظية
والله يوفقنا جميعا ايش ما اشتغلنا
#17
مرشح 0
تم الارسال 25/07/2007 - 02:36 PM
انترفيس هي صفه ، أي اوبجكت يريد هذه الصفه عليه أن يكتب كيف يريدها
interface is 100% abstract class
#18
مرشح 0
تم الارسال 26/07/2007 - 07:41 PM
احمد غريب, on Jul 25 2007, 02:03 AM, said:
هلا أحمد , أنا قريت قبل فترة إنك ناوي تدخل حياة جديدة وتتعلم جافا
فقلت غريبه من أقصى الشمال إلى أقصى اليمين . يعني لو قلت تبي تتعلم ++C أو #C , كان قلنا ما عليه لكن على طول تطلع فوق فوق إلى الجافا صعبه شوي
أمزح معك , بالعكس الله يوفقك وأتمنى إنك تحترفها مثل ما إحترفت الإسمبلي . وبالتوفيق .
تم تعديل هذه المشاركة بواسطةb.m.s: 26/07/2007 - 07:41 PM
#19
مرشح 0
تم الارسال 27/07/2007 - 10:20 AM
#20
مرشح 0
تم الارسال 24/08/2007 - 10:57 AM
أنا لم أقرأ سوي سؤال الأخ أحمد غريب ،
أنصحك أخي إن لم تكن قرأت عن ال design patterns أن تقرأ عنها
و أنصحك بهذا الكتاب : Head First Design patterns


مساعدة
هذا الموضوع مغلق 


اذهب للاعلى
اقتباس متعدد












