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

طلب شرح موضوع Dynamic Method Dispatch

بدأه GoJava في 16 فبراير 2013 · 10 رد · 1,560 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كيف الحال جميعا 

في موضوع لم افهمه جيدا 

مثلا يوجد لدينا كلاس اسمه First وفي داخله ميثود تطبع First 

يوجد لدينا كلاس ثاني اسمه Second يرث من كلاس First ويوجد في داخله ميثود Overriding للميثود التي تطبع First لكن نحن نطبع محلها Second 

كما قرات سابقا انه كلاس الاب لايعرف شيئ عن كلاس الابن 

شاهد الكود التالي : 

 

class First{
int x,y;
void show(){
System.out.println("First ");
}
}

class Second extends First{
void show(){
System.out.println("Second ");
}
}

class ShowInfo{
public static void main(String [] args){
First f = new First();
Second s = new Second();
First b;
b = f;
b.show();
b=s;
b.show();
}

}

 

نلاحظ هنا في هذا الجزء 

 

b = f;b.show();

 

قمنا باسناد اوبجكت f الى b بعدين قلنا له في السطر التالي اظهر لنا ميثود show 

 

المشكله لدي بالسطر التالي :

 

 

b=s;b.show();

 

 

 

اسندنا اوبجكت من الكلاس الابن الى اوبجكت من كلاس الاب وطبع ميثود كلاس الابن Second 

كيف تم هذا الامر ياريت توضيحه بشكل مفصل 

 

جزاكم الله خير 

::::: لـــــكـــــي الله ياســـوريا :::::

#2

هذا يحدث لأن تنفيذ الدوال على الكائنات (إستدعاء الدوال التي بداخل الكائنات) يحدث وقت التنفيذ (at runtime).

و أثناء وقت التنفيذ تعرف ال JVM أن الكائن المعرف من نوع ال Parent يحتوي فعليا على كائن من نوع ال Child ...

و بالتالى عند إستداء أي دوال على ال child تقوم ال JVM بالبحث عن هذه الداله في الكائن ال Child ...

 

للمزيد:

http://en.wikipedia.org/wiki/Virtual_method_table

1
#3

كل دوال الــJava هي دوال ظاهريه Virtual methods يتم استدعاءها حسب نوع الكائن وليس حسب نوع الــ reference ، متى يكون هناك تاثير لنوع الــ Reference ؟؟ في حالة الــ overloading

 

القاعدة تقول :

 

Overriding -->Object

Overloading --> Reference

2

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#4

جزاكم الله خير يااحبه 

المشكله عند دراسه الوراثه اخذنا انه الاب لايعرف شيئ عن الكلاس الابن 

جزاكم الله خير على توضيح 

::::: لـــــكـــــي الله ياســـوريا :::::

#5
اقتباس

المشكله عند دراسه الوراثه اخذنا انه الاب لايعرف شيئ عن الكلاس الابن 

صحيح مئه بالمئه ... و غير ذلك يكون التصميم به شئ خطأ

#6
mhewedy كتب:

صحيح مئه بالمئه ... و غير ذلك يكون التصميم به شئ خطأ

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

وفي حال قمنا بحذف الوراثه لن يعمل البرنامج يعطينا خطأ 

نتمنى توضيح اكثر وكيف يتم الامر في الميموري حتى لو برسمه بسيطه 

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

راح يعطينا خطأ 

انا هنا اريد ان اوصل كيف سوبر استطاع الوصول لابنه وابنه اساسا مخبي اسراره عن ابوه  :lol:

شكرا لكم جميعا 

::::: لـــــكـــــي الله ياســـوريا :::::

#7
GoJava كتب:

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

وفي حال قمنا بحذف الوراثه لن يعمل البرنامج يعطينا خطأ 

نتمنى توضيح اكثر وكيف يتم الامر في الميموري حتى لو برسمه بسيطه 

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

راح يعطينا خطأ 

انا هنا اريد ان اوصل كيف سوبر استطاع الوصول لابنه وابنه اساسا مخبي اسراره عن ابوه  :lol:

شكرا لكم جميعا 

 

اعتقد ان هويدي يتكلم عن مبدأ الــ loose coupling !

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#8

السلام عليكم و رحمة الله  :-)

أخي العزيز...

هناك ثلاث حالات لاستدعاء الميثود في الوراثة باستخدام خاصية (substitutabiliy) و هي خاصية ان يكون نوع الاوجكت من نوع كلاس اب , بينما يكون التعريف من نوع كلاس ابن مثل :

 

 

First f = new First();
Second s = new Second();
First b;
b = f;
b.show();
b=s;
b.show();

 

كما قمت انت :

الحالة الاولي :

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

 

الحالة الثانبة :

ان تكون الدالة موجوده في الاب و الابن و في هذه الحالة سيتم تنفيذ الدالة الموجودة في الكلاس الابن

 

الحالة الثالثة :

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

 

( اعني بكلممة موجودة ان تكون مذكورة سواء حدثت لها عملية overide ام لم تحدث)

 

و شكرا

تم تعديل هذه المشاركة بواسطة Aseer Alsamt في 18 فبراير 2013 في 14:23

1

:)  --:" الهي و ربي اليك اعود مسلما ذليلا ... فتقبل توبتي و ردني اليك رداً جميلا ":--- :)

#9
Aseer Alsamt كتب:

السلام عليكم و رحمة الله  :-)

أخي العزيز...

هناك ثلاث حالات لاستدعاء الميثود في الوراثة باستخدام خاصية (substitutabiliy) و هي خاصية ان يكون نوع الاوجكت من نوع كلاس اب , بينما يكون التعريف من نوع كلاس ابن مثل :

 

 

First f = new First();

Second s = new Second();

First b;

b = f;

b.show();

b=s;

b.show();

 

كما قمت انت :

الحالة الاولي :

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

 

الحالة الثانبة :

ان تكون الدالة موجوده في الاب و الابن و في هذه الحالة سيتم تنفيذ الدالة الموجودة في الكلاس الابن

 

الحالة الثالثة :

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

 

( اعني بكلممة موجودة ان تكون مذكورة سواء حدثت لها عملية overide ام لم تحدث)

 

و شكرا

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

حياك الله اخي 

فهمان عليك يستدعي من خلال اوفر لودينج 

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

هذا هو سؤال 

لانه وقت دراسه انه الاب لايعرف شي عن الابن وحط تحت شي خط حمر 

كيف هنا فهم JVM انه يروح للكلاس الابن ويستدعي الميثود ليش ماعطانا خطأ 

هل لانه الميثود اوفر لودينج في الكلاسات الاثنين وJVM فهم هذا شي ؟ 

::::: لـــــكـــــي الله ياســـوريا :::::

#10

ايوة فهمتك اخي

 

طبعا !!
الjvm بعرف انها افر لودنج في الكلاسين و دي الحالة الثانية اللي ذكرتها في البداية اخي

و لو لاحظت انه نفذ الدالة الموجودة في الابن

 

شكرا

1

:)  --:" الهي و ربي اليك اعود مسلما ذليلا ... فتقبل توبتي و ردني اليك رداً جميلا ":--- :)

#11

جزاك الله خير 

وضحت الامور كويس الان 

بارك الله فيكم 

::::: لـــــكـــــي الله ياســـوريا :::::

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