الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما فائدة الinterface فى لغة الجافا

مغلق
بدأه احمد غريب في 24 يوليو 2007 · 21 رد · 10,388 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ااسف لطرح سؤال مبتداء جداً ويمكن الحصول على الكثير من الروابط من خلال جوجل, ولكن اريد معرفة الفائدة وليس كيفية الاستخدام..

اعرف مثلاُ ان كلاس abstact تستطيع ان تضع فيه بعض الدوال العادية بالاضافة لدوال abstract يتم تعريفها لاحقاً, ولكن إذا قمت بعمل كلاس interface فقط ولا يحتوى على اى دوال بشفرة ما الفائدة التى احصل عليها, هل هى فقط لعمل تنظيم واجبار المستخدم ان يلتزم بإستخدام اسماء دوال معينة ام ان هناك شيئ اخر لا اعرفه..

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#2

اهلين اخوي موضوع الانتر فيس

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

هذه مهمة في عدة حالات ساقول مثال بسيط يمكن ان تستفيد منه و تفهم ماذا يعني ال interface

اذا كانا نعم مشرو ع للجامعة مثلا وكان لدينا نوعين من الطلاب طلاب ماستر وطلاب بكلوريوس

جميع الطلاب لهم معلومات ثابتة وطريقة حساب العلامات بطريقة تابتة هذا على سبيل المثال

و لا كن طلاب الماجستير تكون علامة النجاح لديهم من 75 اما طلاب البكلوريوس فعلامة النجاح من 60

في هذه الحالة ال method التي تحدد هل الطالب ناجح او راسب هي مثود واحدة يمكن ان نعرفها في ال interface و ليكن اسمها S

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

هذا مثال بسيط يمكن ان نستفيد منه في فهم الفائدة لل interface

اتمني ان تكون الفكرة وصلت و وفقك الله

#3

كلام جميل يعنى الinterface هو فقط لاجبار المستخدم على اتباع تعريف موحد لاسماء الدوال, لانه على حسب المثال الذي ذكرته فإن المبرمج ليس مجبر على تعريف الدوال فى كـinterface بل يستطيع بكل سهولة ان يضع داله إسمها S فى كلاس طالب الماجستير , ويستطيع ان يضع داله اخرى وايضاً يسميها S او اي شيئ اخر فى كلاس طالب البكلوريوس, اليس كذلك؟

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#4

أوه الأستاذ أحمد :rolleyes: , كيفك إن شاء الله تكون بألف خير .

عندي كم معلومة بسيطة يمكن تفيدك في هذه المسألة , بالنسبة للفرق بين ال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 يوليو 2007 في 00:35

#5

صحيح يا اخي محمد .. تستطيع تسمية اسماء الدوال كما تريد وانجاز عملك مباشرة

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

كما يفيد في مواضيع اعادة الاستخدام Reuseabiliy ..

عندما تريد اتاحة فرصة لغيرك الاستفادة من عملك بدون طمس معالمه (توزيعات مختلفة لنفس الفكرة )

كما ان موضوع الواجهات Interface فتحت افاق واسعة ومرونة في مجال هندسة البرمجيات من خلال مايسمى النماذج التصميمية Design Patterns باعتبارها اعلى مستوى ممكن من التجريد ( تجريد التفاصيل ) والنظر من اعلى

وبهذه الطريقة .. توزيع العمل على مستويات .. يسهل الفهم والقراءة Readability

وتحقيق قراءة اسهل وفهم اسهل وخواص اعادة الاستخدام يفيد في زيادة معايير جودة المنتج البرمجي وفق المعايير العالمية لجودة البرمجيات التي تعتمدها IEEE والـ ISO

وهذه المعايير تؤخذ بعين الاعتبار في شركات البرمجيات الكبيرة ومسابقات البرمجيات العالمية بتخصيص فريق خاص لفحص تحقيق بنودها

تم تعديل هذه المشاركة بواسطة nardien28 في 25 يوليو 2007 في 00:51

سيمضي ركبنا العملاق لن يركع .. بإيمان لغير الحق لا يصدع

عزيزا شامخا كالمجد بل أروع .. فسجل أيها التاريخ ما تسمع :

فلسطين لنا الآمال والمطمع .. نعاهد أن نحررها وأن ترجع

ونقسم نستعيد الأرض أو نصرع .. ويبقى رمزنا الزيتون والمدفع

Palestine.gif

#6

السلام عليكم

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

فما الحل

الحل يكمن في الانترفيس حيث يقوم المستoخدم بالاستعاضة عن الفئة بفئتها الأصلية التي تشكل لها التأثير الأساسي

مثلاً عندما تحتاج إلى فئة ترث طابور وترث Frame في نفس الوقت فأنتا تقوم بوراثة Frame وعمل واجهة تحتوي على الطرق التي يقوم بها الطابور مثلاً الطريقة أول والطريقة التالي وهكذا

بهذا أنتا تملك طابور ونافذة في نفس الكائن

يوجد طريقة أخرى لحل عملية تعدد الأباء ألا وهي التداخل باستخدام أحد البترن المشهورة فيرث خصائص الكائن

بدون أن يسبب مشاكل التعددية

يمكنك مراجعة موضوع للأخ مبدئ جافا يتكلم عن كيفية الوراثة باستخدام التداخل composition

أرجو أن يكون كلامي واضحاً

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7

كلام صحيح و مو صحيح

المستخدم يستطيع عمل ال S في مل من الكلاسين

و لكن عن طريق الانتر فيس يكون S عبارة عن مثود واحدة و هاذا هو الاصل لانها لها نفس الوضيفة بغظ النضر عن النتيجة التي ترجعها هذه المثود

فعندما اريد معرفة الطلاب الناجحين استدعي S

اما على كلامك فيجب ان استدعي كل من المثودين المعرفات في كل من الكلاسين

و هذه هي فكرة الاوبجكت اورينتيد

في البرمجة

#8

السلام عليكم

انا ايضا تسئلت هذا السؤال عندما دراسة هذه الغة --السبب اني لم اكن اعرف هذا المصطلح الي عند دراستها-- ، ولعلي لم اجد اجابة شافيه

ولكن الملاحظ انها تظهر بشكل واضح مع الاحداث -- even -- لذلك قولت لنفس لعلا السبب هو توحيد استخدام اسم الميسود اللي المفروض المترجم يعرفها بمعني معين

شكرا

شكرا

#9

السلام عليكم

اشكركم جميعاً بعنف وحرارة على اثراء الموضوع..

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

والان بعد هذا الشرح استطيع ان اقول باني فهمت المغزى ولي عودة إن شاء الله تعالى..

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#10

انتهز الفرصة واسلم على اخوى وحبيبي b.m.s المخضرم, وين ايامك انا الحمد لله بخير ونعمه وبحاول اتعلم الجافا كما ترى, والغريب ان لغة الجافا فى الشرق ولغة الاسمبلي فى الغرب, ورغم انى ما زلت مدمن اسمبلي إلا ان لغة الاسمبلي ما عاد تاكل عيش والمعروف ان لغة الجافا بتاكل مش عيش وبس لا كمان فى لحمة إن شاء الله..

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#11
احمد غريب كتب:
انتهز الفرصة واسلم على اخوى وحبيبي b.m.s المخضرم, وين ايامك انا الحمد لله بخير ونعمه وبحاول اتعلم الجافا كما ترى, والغريب ان لغة الجافا فى الشرق ولغة الاسمبلي فى الغرب, ورغم انى ما زلت مدمن اسمبلي إلا ان لغة الاسمبلي ما عاد تاكل عيش والمعروف ان لغة الجافا بتاكل مش عيش وبس لا كمان فى لحمة إن شاء الله..

اهلين يا اخوي اردت ان اعلق على كلامك في اختيارك لتعلم لغة الجافا في البداية اود ان اسدي لك نصيحة من شخص عمل مبرمج في لغة الجافا لمدة سنتين وكنت اكبر عدو لشركة مايكروسفت

ولكن في النهايه وجدت ان السوق اليوم يتجه بكل دعمه وامكانياته و طلبه على تقنية الدوت نت

و الحمد الله بعد ان كنت لا اود معرفة الدوت نت اصبحت مبرمج في هذه الغة

اود ان اقول لك اذا اردت ان تتعلم البرمجة بصفة عصرية و قوية فعليك في الجافا اما اذا اردت ان تركب مع القطار الذي يسير بسرعة الزمن و تفتح لنفسك افاق لن تتصورها فعليك باتقان تقنية الدوت نت و بل اخص انصحك للاتجاه ال C# لما لهاذه الغة من مستقبل ولا تنسا ال ASP.NET

مع تمنياتي لك بتوفيق والنجاح

#13

لا لا لاااااا يا جماعة الدوت نت .. متغسلوش مخ الراجل

كل ما تنفتح سيرة السوق والجافا بيصير في مناورات عسكرية في منتدى الجافا من قبل جماعات الدوت نت

تم تعديل هذه المشاركة بواسطة nardien28 في 25 يوليو 2007 في 02:03

سيمضي ركبنا العملاق لن يركع .. بإيمان لغير الحق لا يصدع

عزيزا شامخا كالمجد بل أروع .. فسجل أيها التاريخ ما تسمع :

فلسطين لنا الآمال والمطمع .. نعاهد أن نحررها وأن ترجع

ونقسم نستعيد الأرض أو نصرع .. ويبقى رمزنا الزيتون والمدفع

Palestine.gif

#15

اخى جافا دوتنت ااسف على الكلام إلي راح اكتبه وكلن هذا رائي فى جميع اللغات التى تعتمد على الـFRAMEWORK..

اللغات التى تعتمد على الدوت نت او الVM بشكل عام لا اعتبرها لغات برمجة لانها تضع حاجز بينك وبين العتاد, سبب اختيارى للغة الجافا لم يكن الهدف منه عمل برامج سطح مكتب وإنما الهدف الاساسي هو عمل برامج WEB واعتقد ان المستقبل للغة الجافا وليس للغات الدوت نت..

وانصح جميع الاخوة وخاصة خبراء الجافا ان يطلعو على ادوات تطوير الويب مثل THINWIRE و GWT وغيرها الكثير, فهذه الادوات او التقنيات ان صح التعبير هى المستقبل, قارن على سبيل المثال برامج سطح المكتب بشتى انواعها, سواً التى تعتمد على VM او التى تستخدم الطرق التقليدية ببرامج الويب سوف تجد ان برامج الويب اضعاف مضاعفه وفى ازدياد مستمر ..

قواعد بيانات MYSQL ولغات البرمجة مثل PHP و ASP اكتسحت الاسواق, لو اضفت لهذه التقنيات لغة الجافا تستطيع القيام بانظمة كامله..

ربما تتسائل لماذا لم اختر JAVASCRIPT بدل لغة الجافا؟ السبب بسيط هو لان الJAVASCRIPT لغة معقدة وعقيمة وغير منظمة, بالاضافة إلا انها غير متوافقة معى جميع انواع المتصفحات, فى حين ان لغة الجافا تغلبت على هذه المشكلة بادوات جديدة...

على كل حال سواً اتفقنا او اختلفنا فانا سعيد لوجودي بينكم ...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#16
احمد غريب كتب:
اخى جافا دوتنت ااسف على الكلام إلي راح اكتبه وكلن هذا رائي فى جميع اللغات التى تعتمد على الـFRAMEWORK..

اللغات التى تعتمد على الدوت نت او الVM بشكل عام لا اعتبرها لغات برمجة لانها تضع حاجز بينك وبين العتاد, سبب اختيارى للغة الجافا لم يكن الهدف منه عمل برامج سطح مكتب وإنما الهدف الاساسي هو عمل برامج WEB واعتقد ان المستقبل للغة الجافا وليس للغات الدوت نت..

وانصح جميع الاخوة وخاصة خبراء الجافا ان يطلعو على ادوات تطوير الويب مثل THINWIRE و GWT وغيرها الكثير, فهذه الادوات او التقنيات ان صح التعبير هى المستقبل, قارن على سبيل المثال برامج سطح المكتب بشتى انواعها, سواً التى تعتمد على VM او التى تستخدم الطرق التقليدية ببرامج الويب سوف تجد ان برامج الويب اضعاف مضاعفه وفى ازدياد مستمر ..

قواعد بيانات MYSQL ولغات البرمجة مثل PHP و ASP اكتسحت الاسواق, لو اضفت لهذه التقنيات لغة الجافا تستطيع القيام بانظمة كامله..

ربما تتسائل لماذا لم اختر JAVASCRIPT بدل لغة الجافا؟ السبب بسيط هو لان الJAVASCRIPT لغة معقدة وعقيمة وغير منظمة, بالاضافة إلا انها غير متوافقة معى جميع انواع المتصفحات, فى حين ان لغة الجافا تغلبت على هذه المشكلة بادوات جديدة...

على كل حال سواً اتفقنا او اختلفنا فانا سعيد لوجودي بينكم ...

والسلام عليكم

اهلين يا اخوي في البداية هذا رايك وانا قدمت نصيحة فقط لا اكثر فان اصبت فمن الله وان اخطأت فمن نفسي

اما عن سيطرت السوق في لغات البرمجة انا اتفق معك

ولكن في التقارير الرسمية لغاية سنة 2006

شهدت منعطف كبير بنسبة للغة مايكروسفت

و قدرت الزيادة في المواقع التي تدعم لغاتهم بنسبة 60% عن ما كان سابقا اقصد لغة ال ASP

اما بنسبة لكلامك عن الدسك توب ابلكشن فانا لا اتكلم عنها انا قصدت ال ASP.NET وكما تعلم انك تبرمجها باكثر من لغة ومنها ال سي شارب

لان برامج الدسك توب في تنافص مستمر نقرا لتطور تقنيات كبيرة و اهمها تفنية الاجاكس في الدوت نت

اما في الجافا فلا يوجد حقل مستخدم بكثرة الى حقل ال j2me و هاذا ان صح التعبير هو شيء كبير من المستقبل و ليس المستقبل

اما عن كلامك في الجافا سكربت في هي لغة لاتحمل من الجافا الى اسمها فقط وهي ليست من شركة sun

و كل تقية مايكروسفت الجديدة تعدمد عليها و عل ال XMLبطريقة كبيرة جدا بل باالاصح هي سبب التطور الحاصل لمايكروسفت في هذه الايام

في النهاية الاختلاف في الاري لا يفسد للود قظية

والله يوفقنا جميعا ايش ما اشتغلنا

#17

السلام عليكم

انترفيس هي صفه ، أي اوبجكت يريد هذه الصفه عليه أن يكتب كيف يريدها

interface is 100% abstract class

#18
احمد غريب كتب:
انتهز الفرصة واسلم على اخوى وحبيبي b.m.s المخضرم, وين ايامك انا الحمد لله بخير ونعمه وبحاول اتعلم الجافا كما ترى, والغريب ان لغة الجافا فى الشرق ولغة الاسمبلي فى الغرب, ورغم انى ما زلت مدمن اسمبلي إلا ان لغة الاسمبلي ما عاد تاكل عيش والمعروف ان لغة الجافا بتاكل مش عيش وبس لا كمان فى لحمة إن شاء الله..

هلا أحمد , أنا قريت قبل فترة إنك ناوي تدخل حياة جديدة وتتعلم جافا :lol: .

فقلت غريبه من أقصى الشمال إلى أقصى اليمين . يعني لو قلت تبي تتعلم ++C أو #C , كان قلنا ما عليه لكن على طول تطلع فوق فوق إلى الجافا صعبه شوي :D قسم الأسمبلي راح يتبرؤون منك ويعتبرونك خاين :P

أمزح معك , بالعكس الله يوفقك وأتمنى إنك تحترفها مثل ما إحترفت الإسمبلي . وبالتوفيق .

تم تعديل هذه المشاركة بواسطة b.m.s في 26 يوليو 2007 في 19:41

#19

ال Interface يعادل ف السى++ ال abstract class كل الللى فية pure virtual function

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#20

السلام عليكم

أنا لم أقرأ سوي سؤال الأخ أحمد غريب ،

أنصحك أخي إن لم تكن قرأت عن ال design patterns أن تقرأ عنها

و أنصحك بهذا الكتاب : Head First Design patterns

#21

مرحبا

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

وشكراً

#22

مرحباً بك أختي معنا في المنتدىصحيح يا أختيالواجهات interrfaces تقدم حلول كثير أهمها تعدد الوراثةيوجد حل آخر لتعدد الوراثة لكنه مقدم من علم تصميم الأنماط design pattern ممثلاً في نمط مشهور اسمه singleton patternالله معك

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

هذا الموضوع مغلق.

مواضيع مشابهة