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

ماهو ال abstract و ال interface

مغلق
بدأه القايد في 9 أكتوبر 2005 · 9 رد · 12,226 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

ياخوان بغيت اعرف ماهو الـ abstract والـ interface

ومتى يستخدمان وماهي الفائدة منهما

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

#2

بسم الله الرحمن الرحيم

سوف اتكلم بايجاز عن المفهومين والفرق بينهما

abstract

هذه الكلمة هي عبارة عن keyword في الجافا تستخدم في أحد موضعين

1- abstract with methods

as this declear

abstract void function();

وهي تقتضى ان هذه الفانكشن ليس لديها implementation خاص بها , وانما تقتضى انه في حالة ال inhertance فإن كل subclass بينهرت من الكلاس الحاوي للهذه الابستراكت فانكش لابد ان يعمل implementation لهذه الفانكشن. (مع ملاحظة ان الجافا لاتسمح بغير هذا).

2- abstract classes

as this declear

abstract class MyClass{}

وهذا النوع من الكلاسات لايصح نهائيا ان نعرف object منه. وغالبا (إن لم يكن دائما) يكون هذا النوع من الكلاسات عبارة عن superClass (parent ) لكلاسات اخرى

ومما ينبغى التنبة له ان اي كلاس فية على الاقلsingle abstract function أو اكثر فهو abstract class مباشرة (نستطيع ان نجعلة ابستركت حتى لو لم يوجد هذا النوع من الفانكشن ).

Interface

شبية بالكلاس ولكن بخصائص معينه

1- كل الفانكشنس بداخلة عبارة عن public abstract function مباشرة.

2- لايصح ان نعرف منه object

3- عندما نريد ان نعرف كلاسات اخرى عادية تكون children لهذا الانترفيس نستخدم implement keyword

as this declear

class LineDrwing implements shapeDrawing

بحيث ان shapeDrawing عبارة عن interface

ويجب ان نعمل implementatin في الكلاس الجديد لكل الفانكشنس اللي بداخل الانترفيس.

- أما بالنسبة للمتغيرات المختلفة التي تعرف بداخل الانترفيس مباشرة بتكون public static final

وعلى فكرة إذا اردنا ان نعمل extends لكلاس من كلاس اخر, فلايصح لنا ان نعمل كلاس بينهرت من اكثر من كلاس. بينما عندما نعمل implements لانترفيس فيمكننا ان نعمل implements لاكثر من انترفيس في نفس الوقت بحيث نفصل بيهما بفاصله ،

as this declear

class MyClass implements Inter1, Inter2

واخيرا اقول انه بالامكان ان نعرف كلاس بيعمل inhertance من كلاس (سوى كان ابستركت او لا) وفي نفس الوقت بيعمل implements من انترفيس في نفس الوقت

as this declear

class MyClass extends ShapeClass implements ShapeInterface

تم تعديل هذه المشاركة بواسطة Mohammed Mansoor في 10 أكتوبر 2005 في 01:55

#3

انا شكر لك اخوي محمد على هذا الرد والله يجزاك خير

ولكن عندي بعض التساؤلات

انت قلت :

(وهي تقتضى ان هذه الفانكشن ليس لديها implementation خاص بها , وانما تقتضى انه في حالة ال inhertance فإن كل subclass بينهرت من الكلاس الحاوي للهذه الابستراكت فانكش لابد ان يعمل implementation لهذه الفانكشن. (مع ملاحظة ان الجافا لاتسمح بغير هذا).)

ماذا تقصد بان الفانكشن ليس لديها implementation خاص بها؟؟؟؟؟؟ وارجو التوضيح بمثال صغير

هل ال النترفيس يعمل عمل الوراثة المتعددة كما في بعض لغات البرمجة يعني هل اخترعوه عوضا عن ان الجافا ما يمكن ان نسوي وراثة متعددة؟؟؟؟؟؟؟؟ظ

وعلى طاري الاختراع لماذا سوو حاجة اسمها abstract يعني وش اللي دفعهم لهذا؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#4

الله يعطيك العافية

#5

السلام عليكم و رحمة الله و بركاته

ببســاطة إخوانى ال interface هى عبارة عن pure abstract class

اعنى بذلك أن ال interface تم عملها حتى تحل مشكلة ال multiple inheritance

والفروق هى

:D abstract class must contain abstract method but interface can onlly

:D u can inherite only one abstract class but u can implement more than one interface

,إن شاء الله أبحث لك عن فروق أكثر

و بارك الله لنا فى القران الكريم

اقترب للناس حســــابهم و هم فى غفلة معرضون

#6

أخي الكريم

بالنسبة للتسأول الاول انظر الى المثال التالي

abstract class Person
{
String name;
int ID;

public int getID()
{
return ID;
}

public abstract String getName();   /* we can not implement this abstract function for this abstract class */
}





class Employee extends Person
{
/* inside this class we can define and implement the getID method that inhereted from superclass or not,.... But we "must" implement getName method since it is an abstract method */

public String getName()
{
return name;
}
}

لحظنا ان getName method عبارة عن abstract method في الكلاس Person وبالتالي ماينفعش نعملها كود {...implemetation...} ولكن عندما عرفنا كلاس Employee وكان بياكستند الكلاس Person يجب علينا ان نعمل ال implementatin لهذه الفانكشن , واذا لم نعمله ال compiler حيطلع error

طيب لما بيكون معانا كلاس abstract يعني فيه abstract methods غالباً وهذه ال methods مالهاش وظيفة في هذا الكلاس اذا ليس هناك اي معنى لتعريف object من نوع هذا الكلاس وعليه تم عمل مايسمى ب abstract class بحيث لايستطيع المبرمج عمل object من نوعة. ولعل هذا يجاوب على التسأول الثالث

خذ المثال التالي لمزيد من التوضيح

abstract class Shape
{
public abstract void draw();
}

//----------------------------------------------

class Line extends Shape
{
public void draw()
{
......
}
}

//---------------------------------------------------

class Circle extends Shape
{
public void draw()
{
.........
}
}

لو لاحظنا ان draw method في الكلاس Shape مالهاش اي معنى خاص ينفع يكون ليه implementatin بس لما عملنا اكستند للكلاس Line و Circle عملنا تعريف لهذه الفانكشن لان معناها اصبح واضحاً.

#7

السلام عليكم

لا يوجد لدي ما أزيده على كلام الأخوان الأفاضل

لكن هذه وصلة لمقالة كنت كتبتها عن abstract أضعها من باب الزيادة

http://modonat-alaa.freehostia.com/?p=25

بالتوفيق أخي الكريم

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

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

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

728x90.png

#8

أخي عبد الرحمن

تلاحظ أني لا أكتب مقالات تعتمد على لغة معينة

وذلك لأن المهم في الموضوع هو المفهوم الكائني

أعني أن ما تطلبه يتعلق بلغة الجافا تحديداً

هذا متوفر بشكل كبير على صفحات الإنترنت

أظن حتى أنه متوفر في المنتدى هنا

سأختصر في ذلك على شكل نقاط

1- في الفئات ناقصة الأهلية (المجردة) تستطيع عمل كل شيء ما عادا أن تستخدم عملية تصنيع للكائنات بمعنى آخر استخدام new

2 - يتطلب منك أن تحتوي فئتك على طريقة واحدة على الأقل ناقصة أهلية (ليس لها جسم body)

3 - بالنسبة للواجهات interface هي عبارة عن فئة ناقصة الأهلية بشرط أن جميع الطرق method فيها تكون ناقصة الأهلية

4 - في الواجهات تقوم بتعريف توقيع الدالة فقط دون إضافة كلمة abstract لكنها تكون مفهومة ضمنياً بمجرد كون الفئة واجهة

5 - يسمح لك بتعريف متغيرات بشرط أن تكون لها التوقيع public static final حتى وإن لم يكن لها فضمنياً ستكون كذلك

6 - بالطبع لا يسمح لك بوضع صانع كائنات constructor

7 - تقوم باشتقاقها عن طريق كلمة implements بمعنى أصح تبنيها أو تبني على معاييرها

أتمنى أن أكون لم أنسى شيئاً

الله معكم

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

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

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

728x90.png

#9

اعذرني أخ عبد الرحمن فلم انتبه لكون الموضوع قديم

وذلك لكوني انقطعت يوماً عن المنتدى فظننت أنه موضوع تولد في فترة غيابي

فلا تؤاخذني بعجلتي أخي الكريم

أعتذرة مرة أخرى

فلك والله في قلبي معزة خاصة لا يعلمها إلا الله

الله معك

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

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

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

728x90.png

#10

اخي عبدالرحمن اذا كنت تريد فرق تقني يقال والعهده على الراوي بأن abstract class أسرع من interface

لكني لاأملك دليل محسوس على هذا !

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

مثلاً استخدام abstract بدلاً من interface

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

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