منظمة التحرير: من أخذ إسماعيل؟ ملكية الكائن للأساليب

هذه المقالة مخصصة لتحليل السؤال الذي يجب أن يمتلك كائن OOP طريقة تتفاعل بين عدة كيانات.



هذا موضوع شائع للهوليفارس. على سبيل المثال:

لا تستخدم OOP. أبدا. هذا خطأ.



هناك العديد من المواد حول هذا الموضوع ، على سبيل المثال: www.youtube.com/watch؟v=QM1iUe6IofM



إذا كان OOP لا يزال يبدو فكرة جيدة بالنسبة لك ، فقم بحل مشكلة بسيطة.



هناك ثلاثة أشياء: قطة ومغذي وشخص. تحتاج إلى كتابة طريقة تسمح لأي شخص بإطعام قطة باستخدام وحدة تغذية.



سؤال: ما هي طريقة الفئة التي ستكون طريقة .feed ()؟



يرجى تقديم إجابة منطقية وفقًا للتسلسل الهرمي للفئة وأفضل ممارسات OOP الأخرى.



قارن الآن هذا بتطبيق وظيفي: لديك وظيفة feedCat () تأخذ إشارة إلى قطة ومغذي كوسيطة.
اقتبس من Holivar



كيف تجيب على هذا السؤال؟



أولاً ، لنلق نظرة على مثال من الفيزياء.



الحالة 1 (من الفيزياء): قانون أوم



قانون أوم: I = U / R ، حيث أنا القوة الحالية ، U هي الجهد ، R هي المقاومة.



من السهل ملاحظة أن قانون أوم ، مثل أي معادلة أخرى لثلاثة متغيرات ، يمكن كتابته بثلاث طرق: I = U / R ، R = U / I ، U = IR. كيف تطور قاعدة تسمح لك بتعريف شكل واحد للتسجيل بشكل فريد؟ الأمر بسيط للغاية: تحتاج إلى تدوين الكمية المشتقة على الجانب الأيسر ، أي الذي يصبح ذا قيمة معينة ، اعتمادًا على باقي الكميات.



I = U / R "القوة الحالية تصبح مساوية لنسبة الجهد في نهايات الموصل إلى مقاومة الموصل" - صحيح.



U = IR "الجهد في نهايات الموصل يصبح مساويًا لمقاومته مضروبًا في التيار عبر الموصل" - ليس صحيحًا.



R = U / I "مقاومة الموصل تصبح مساوية لنسبة الجهد في النهايات إلى التيار" - ليست صحيحة.



كما ترى - بمجرد أن اتفقنا على أن القيمة المشتقة على اليسار ، لم يتبق سوى خيار واحد.



سنفعل نفس الشيء في OOP. دعنا نتفق على أن الطريقة تنتمي إلى الشخص الذي يتصرف:



Who_Acts . Method (Action_Object)؛




الحالة الثانية: من أخذ إسماعيل؟



لذلك عند الإجابة على سؤال "من أخذ إسماعيل؟" من وجهة نظر البرمجة الشيئية ، ومن وجهة نظر "من يؤثر؟" ، الإجابة الصحيحة ستكون سوفوروف. خذ الحصن (إسماعيل ، الأتراك): منطقي. جميع الخيارات الأخرى ، مثل: Turks.Pro *** tKrepost (Izmail ، Suvorov) ، Izmail ، تغيير المالك (الأتراك ، Suvorov) ، القلعة المجردة ، ليتم القبض عليها (إسماعيل ، سوفوروف ، أتراك) ، إلخ. - كل هذه الخيارات غير صحيحة.



الحالة 3: رجل ، مغذي وقط





"إطعام القط!" من موقع corchaosis.ru



رجل سكب الطعام في الحوض الصغير. هذا الأسلوب:

.(,). عند تنفيذ الطريقة ، تقل كمية الطعام في المتغير العام لحزمة الغذاء ، وتظهر في المتغير العام لوحدة التغذية.



ماذا عن القطة؟ والقط موجود قبل استدعاء طريقة PourFoodCat ، كشرط لاستدعائه. إذا كانت القطة في البلد ، فلن يتم استدعاء طريقة Pour Food إلى القطة.



الحالة 4: DOOM Player و Shotgun و Monster



لنفترض أن مسألة ضرب وحش ليس لها تدرج: إما أن تضرب أو لا تضرب.

التنفيذ الصحيح. كل شيء يبدأ بطريقة اللاعب:



(, _1 ).(_1)

داخل تطبيق طريقة Shot ، نرى أن سلاح اللاعب الحالي هو بندقية.

لذلك نطلق على طريقة الكائن المتداخل:



_1.[_1.__].(_1)



Player_1 السلاح هو فئة TWeapon.



في هذه الحالة ، يتم استدعاء طريقة فئة TShotgun ، وهي تابعة لـ TWeapon.

لذلك ، لدينا: .(_1)



البندقية ، عند القيام بهذا الإجراء ، تغير الحالة الداخلية: بالنسبة للبندقية ، هذا هو عدد الخراطيش (وبالنسبة لنوع آخر من الأسلحة ، يمكن أن يكون ، على سبيل المثال ، درجة الحرارة). نحدد أيضًا قوة الضرر - على سبيل المثال ، تطلق البندقية جولتين في المرة الواحدة ، ولكن يمكنها أيضًا إطلاق واحدة إذا بقيت جولة واحدة فقط في الشحنة.



إذا أطلقنا قاذفة صواريخ ، سيظهر جسم جديد - صاروخ. باستخدام طريقة Tick الخاصة بها ، والتي تعالج الإجراءات في علامة واحدة من وقت اللعبة (يتغير وقت اللعبة ، عادةً في شكل علامات). لكننا أطلقنا سلاحًا يمكنه الضرب دون تأخير ، لذلك نعرف عدد الطلقات التي تم إطلاقها (1 أو 2) ، ونعرف المسافة (مقارنة Player.Position و Monster_1.Position) ، وداخل طريقة Shotgun class ، نحسب الضرر.



وأخيرا _1.(_:Float). الآن ، كما كان من قبل ، غيرت البندقية حالتها الداخلية (عدد الخراطيش) ، والآن تغير Monster_1 حالتها الداخلية _1.وسيناريو سلوكها (خاصة إذا كانت Health أقل من الصفر).



لذلك ، نرى أنه بفضل OOP ، يمكننا بسهولة إضافة أسلحة جديدة: ما عليك سوى وصفها على أنها فئة فرعية من TWeapon ، وتحديد اللقطة ووضعها على الخريطة. تعرف فئة المشغل بالفعل كيفية تحديد كائنات TWeapon وإضافتها إلى مجموعة التشغيل الخاصة بها. الكل. رغم أن لا ، ليس كل شيء. إذا كان السلاح سيعطي الزهور للوحوش ، مما يجبرهم على الوقوع في حب اللاعب ، فيجب أيضًا وصف الوحوش بطريقة :boolean، بالإضافة إلى مجموعة من الأساليب الأخرى - اعتمادًا على درجة التفصيل ، في هذه الحالة قد تحتاج إلى عدد من كائنات OOP الجديدة وطرقها.



الحالة 5: التسليم هو وظيفة أو طريقة



ليس فقط الإجابة على هذا السؤال ، ولكن من الواضح أن واجهة التفاعل نفسها تعتمد على الكائن الذي يتم لمسه.



_::هي وظيفة.



Handpick :: laptop هي طريقة كائن الكمبيوتر المحمول. يجب عليك استخدام الواجهة لاستدعاء أساليب الكمبيوتر المحمول "KeyDown ، و KeyUp ، و KeyPressed" لتمرير البيانات الصحيحة إلى هذه الطرق: أي زر تم الضغط عليه ، وفي أي وقت ، وما إلى ذلك.



_::هي طريقة من وجوه الكائن. أنت بحاجة إلى كائن ذاتي سيصف تغيير حالته حرق اليد بشكل صحيح. النار لن تغير الدولة.



أعتقد أنه يمكنك أنت نفسك متابعة قائمة واجهات الكائنات التي يمكنك لمسها بيديك من أجل ممارسة استخدام البرمجة الشيئية.



All Articles