لا يمكن العثور على رمز الرمز:عملية الطريقة (WorkerAnt)
سؤال
أنا أقوم بمشروع AntFarm هذا لفصل Java الخاص بي.يتكون هذا المشروع من فئات مختلفة (Food، WorkerAnt، Queen) ويتفاعلون مع بعضهم البعض باستخدام واجهة (بطريقة تسمى العملية).
http://ljhs.sandi.net/faculty/volger/apajava/GridWorld/Assignments/AntFarm/ - مشروع
أنا عالقة حاليا على processActors()
طريقة في WorkerAnt
.(يوجد في أسفل الصفحة تقريبًا).
الكود الحالي هو التالي:
public void processActors(ArrayList<Actor> actors) {
for (Actor nextActor : actors) {
nextActor.process(this);
}
}
الخطأ الذي أحصل عليه هو ما يلي.
لا يمكن العثور على رمز الرمز:عملية الطريقة (WorkerAnt)
المحلول
من خلال المهمة المرتبطة ، Actor
لا يملك process(WorkerAnt)
طريقة.
بدلا من ذلك، هذا جزء من Processable
واجهة (وبالتالي Food
).
على هذا النحو، تأكد من الخاص بك Actor
هو Actor
تنفيذ Processable
(على سبيل المثال أ Food
).
من الناحية المثالية، يمكنك تغيير الخاص بك processActors(ArrayList<Actor> actors)
طريقة لتكون شيئا من هذا القبيل processProcessables(ArrayList<Processable> processables)
.
ومع ذلك، أرى في المهمة أنه مطلوب منك تنفيذ ملف processActors(ArrayList<Actor> actors)
لذلك لا يمكنك فعل هذا حقًا (على الرغم من أنني سأصف هذا بأنه تصميم سيء - فهو يشبه وجود طريقة divide(object, object)
بدلاً من divide(double, double)
).
تقول المهمة: لمعرفة سبب سوء التصميم
الجهات الفاعلة في العملية:يحتاج كل ممثل في الجهات الفاعلة إلى استدعاء طريقة عمليته.
يستثني Actor
ليس لديك process
طُرق - Processable
افعل و Actor
ليست كذلك Processable
.
في أي حال، سيتعين عليك قبول حقيقة أنك تتوقع بعض الشيء Actor
ليكون Processable
ق وافعل شيئًا مثل هذا:
for(Actor nextActor : actors)
{
if (nextActor instanceof Processable)
((Processable)nextActor).process(this);
}
ومع ذلك، كان يجب أن تدرك هذا من خلال المهمة:
يمكن أن يكون الممثل ملكًا أو كعكة أو ملف تعريف ارتباط أو عامل.بدون الواجهة القابلة للمعالجة ، ستحتاج عمليات العمليات إلى تحديد نوع الممثل ثم إيقاف مرجع الممثل قبل إجراء مكالمة للمعالجة.ولكن نظرًا لأن كل فئة من هذه الفئات تنفذ قابلاً للمعالجة ، فإن العمليات تحتاج فقط إلى إلقاء الممثل على معالجته قبل المكالمة.يُسمح بهذه المعالجة المتعددة الأشكال لأن المعالجة تحتوي على طريقة تجريدية العملية.تحدد بيئة وقت تشغيل Java (JRE) النوع الفعلي للكائن في وقت التشغيل ويستدعي طريقة العملية المناسبة.