كيف نفكر بطريقة Object Oriented مع مبدأ SRP ؟
لنقل مثلاً اننا نرغب بتصميم لعبة Game بسيطة , عبارة عن سيارة Car قد تصطدم Collide بجدار Wall ثم تختفي.
الObject Oriented Programming مناسبة جداً للالعاب لأنها غالباً "محاكاة" و "تمثيل" و "تبسيط" لأشياء تحدث في الواقع .
( سلسلة )
لنقل مثلاً اننا نرغب بتصميم لعبة Game بسيطة , عبارة عن سيارة Car قد تصطدم Collide بجدار Wall ثم تختفي.
الObject Oriented Programming مناسبة جداً للالعاب لأنها غالباً "محاكاة" و "تمثيل" و "تبسيط" لأشياء تحدث في الواقع .
( سلسلة )
لنتخيل هذا في الحقيقة , سيارة تصطدم بجدار و تتحطم.
السيارة و الجدار عبارة عن Objects و السؤال الاول هو : هل الإصطدام فعل Method أم حدث Event ؟ .
السيارة و الجدار عبارة عن Objects و السؤال الاول هو : هل الإصطدام فعل Method أم حدث Event ؟ .
من وجهة نظر المرور هو "فعل" السائق و السائق Object اخر و ايضاً حدث. لكن الAbstraction يقول لنا تجاهل السائق و المرور.
لاننا نصمم لعبة و ليس نظام لإدارة المرور. هذا مهم. ركز على الContext ( السياق ) و نهتم بما يهمنا في حل المشكلة فقط.
لاننا نصمم لعبة و ليس نظام لإدارة المرور. هذا مهم. ركز على الContext ( السياق ) و نهتم بما يهمنا في حل المشكلة فقط.
لو كنت تشاهد هذا المشهد في فيديو , عندما ترى سيارة مسرعة ( بدون وعي ) متجه نحو جدار ستتنبأ فورا بأنها ستصدمه.
هذا التنبؤ اتى من دراية المراقب "انت" بالقوانين الطبيعية. فيزياء و رياضيات .. الفيزياء تقول انه سيصطدم و الرياضيات تقول لك متى سيصطدم اي متى تكون المسافة بينهم صفر.
هذا التنبؤ اتى من دراية المراقب "انت" بالقوانين الطبيعية. فيزياء و رياضيات .. الفيزياء تقول انه سيصطدم و الرياضيات تقول لك متى سيصطدم اي متى تكون المسافة بينهم صفر.
حساب الCollision يكون بحساب موقع السيارة و موقع الجدار , رياضيات متوسط , المسافة بين نقطتين على المستوى. نظرية فيثاغورس. لكن هذه Implementation details. لاحقاً لاحقاً .
السؤال الحقيقي هو : على مبدأ SRP او الSingle Responsibility Principle , ماهو الكلاس المسؤول حقيقة عن مراقبة الإصطدام و اطلاق الحدث ؟ إذا قلنا انها السيارة , فهل وظيفة السيارة ان تعرف بكل ماحولها و تقيس المسافة إليهم ؟ ام ان الجدار عليه ان يعرف ماحوله و يقيس المسافه بينه و بينهم ؟
ربما كان الحل في المعطيات او خلال ماظهر لنا عندما حللنا الموضوع , المراقب الذي كان يشاهد الفيديو او الDetector هو الذي قال انه سيحدث "حادث" ثم وقع الحادث و اخبرنا به.
و لنحاكي هذا المراقب قد نحتاج لإنشاء كلاس جديد اسمه مثلا CollisionDetector وظيفته المراقبة و احتساب المسافات بين الObjects و الابلاغ بحدث Event لتغير السيارة و الجدار حالتهما او الstate إلى "مصدوم" و تنهي اللعبة.
جاري تحميل الاقتراحات...