03-07-16, 06:52 AM
(آخر تعديل لهذه المشاركة : 25-09-16, 11:50 AM {2} بواسطة الشاكي لله.)
بما ان الموضوع انقلب الى نقاش تبادل خبرات ..
دعوني اعرض لكم احدى استخداماتي للـ Interface وايضا الـ Base Class
المشروع الذي اعمل عليه حاليا يحتوي على الكثير من الانظمة .. وهذا شيئ طبيعي لان المشروع عبارة عن لعبة ، ودائما الالعاب تحتوي على الكثير من الانظمة التي عليك مزامنتها مع الاحداث التي تحصل باللعبة
مثلا عند انفجار قنبلة في اللعبة ، الكثير من الانظمة يجب ان تعمل في وقت واحد ، منهم
Damage System
VisualEffect System
SoundEffect System
Score System
هنا نرى ان هذه الانظمة يجب ان تعمل في وقت واحد عند انفجار القنبلة ، وبالطبع يجب ان تتفاعل هذه الانظمة بشكل متزامن وصحيح بين بعضها البعض لذلك -في بعض الاحيان- تحتاج الى ارسال Message بينها ، وايضا تحتاج الى جهة او جهات تستقبل هذه الرسالة وتعالجها ..
لهذا الغرض ـ نقوم بتعريف Interface لنستعمله لاحقا في التنصت على الرسائل ، ونقوم بتعريف Base Class لاستخدامها في تكوين الرسائل (كما بالصورة)
اذن ، الانظمة التي بحاجة الى التنصت على الرسائل تقوم بوراثة الـ Interface ، كما هو الحال في الـ Damage System :
وفي احدى سكربتات اللعبة ، توجد الدالة التالية التي تتنفذ عند حصول اي انفجار في اللعبة ، يقوم هذا الكود بارسال رسالة الى جميع الانظمة التي تقوم بالتنصت (التي تشتق من الانترفيس IGameListener) :
وبالتالي ، جميع انظمة الصوت وانظمة المؤثرات البصرية وغيرها من الانظمة ستستلم هذه الرسالة وتقوم بالتفاعل مع الانفجار
وان سالتني كيف شكل الدالة SendMessageToAll ، تفضل
الدالة فقط من سطرين :
ووظيفتها هي الدوران وجلب جميع الـ classes التي تشتق من الـ Interface المسمى IGameListener واستدعاء الدالة Listener وتمرير الرسالة لها
لماذا تم عمل IGameListiner كـ Interface ؟؟
لانها تحقق علاقة can-do مع الsystem
Damage System can Listen
بينما تم عمل MessageBase كـ Class بسبب ان العلاقة هي Is-A
BombMessage is a message
--
هذا كان احد الامثلة التطبيقية للـ Interface والوراثة
ايضا اذا كان عند الاخوان اي مثال تطبيقي اخر يمكنه المشاركة به لنستفيد
دعوني اعرض لكم احدى استخداماتي للـ Interface وايضا الـ Base Class
المشروع الذي اعمل عليه حاليا يحتوي على الكثير من الانظمة .. وهذا شيئ طبيعي لان المشروع عبارة عن لعبة ، ودائما الالعاب تحتوي على الكثير من الانظمة التي عليك مزامنتها مع الاحداث التي تحصل باللعبة
مثلا عند انفجار قنبلة في اللعبة ، الكثير من الانظمة يجب ان تعمل في وقت واحد ، منهم
Damage System
VisualEffect System
SoundEffect System
Score System
هنا نرى ان هذه الانظمة يجب ان تعمل في وقت واحد عند انفجار القنبلة ، وبالطبع يجب ان تتفاعل هذه الانظمة بشكل متزامن وصحيح بين بعضها البعض لذلك -في بعض الاحيان- تحتاج الى ارسال Message بينها ، وايضا تحتاج الى جهة او جهات تستقبل هذه الرسالة وتعالجها ..
لهذا الغرض ـ نقوم بتعريف Interface لنستعمله لاحقا في التنصت على الرسائل ، ونقوم بتعريف Base Class لاستخدامها في تكوين الرسائل (كما بالصورة)
اذن ، الانظمة التي بحاجة الى التنصت على الرسائل تقوم بوراثة الـ Interface ، كما هو الحال في الـ Damage System :
وفي احدى سكربتات اللعبة ، توجد الدالة التالية التي تتنفذ عند حصول اي انفجار في اللعبة ، يقوم هذا الكود بارسال رسالة الى جميع الانظمة التي تقوم بالتنصت (التي تشتق من الانترفيس IGameListener) :
وبالتالي ، جميع انظمة الصوت وانظمة المؤثرات البصرية وغيرها من الانظمة ستستلم هذه الرسالة وتقوم بالتفاعل مع الانفجار

وان سالتني كيف شكل الدالة SendMessageToAll ، تفضل

الدالة فقط من سطرين :
ووظيفتها هي الدوران وجلب جميع الـ classes التي تشتق من الـ Interface المسمى IGameListener واستدعاء الدالة Listener وتمرير الرسالة لها

لماذا تم عمل IGameListiner كـ Interface ؟؟
لانها تحقق علاقة can-do مع الsystem
Damage System can Listen
بينما تم عمل MessageBase كـ Class بسبب ان العلاقة هي Is-A
BombMessage is a message
--
هذا كان احد الامثلة التطبيقية للـ Interface والوراثة
ايضا اذا كان عند الاخوان اي مثال تطبيقي اخر يمكنه المشاركة به لنستفيد

