במשטרת ירושלים שוטרים ממגוון התמחויות: חוקרים, חוקרי נוער, מפקדי התחנות. מעוניינים למחשב את פרטי השוטרים ולשמור את פרטיהם באופן מסודר. לשם כך פותח פרויקט לניהול צוות השוטרים. הפרויקט כולל ארבע מחלקות:
- Policeman (שוטר)
- Investigator (חוקר)
- SpecInvestigator (חוקר נוער)
- Commander (מפקד התחנה)
לחוקר (Investigator) יש את התכונות:
- name – שם, מטיפוס מחרוזת String
- id – מספר תעודת זהות, מטיפוס מחרוזת String
- seniority – ותק, מטיפוס שלם int
- eduLevel – רמת ההשכלה, מטיפוס מחרוזת String
לחוקר נוער (SpecInvestigator) יש את התכונות:
- name – שם, מטיפוס מחרוזת String
- id – מספר תעודת זהות, מטיפוס מחרוזת String
- seniority – ותק, מטיפוס שלם int
- eduLevel – רמת ההשכלה, מטיפוס מחרוזת String
- extensionStudy – עבר השתלמות מיוחדת, מטיפוס boolean (true – אם עבר, false – אם לא עבר)
מפקד התחנה (Commander) הוא חוקר שאחראי על צוות של עד 30 שוטרים. למפקד תחנה יש את התכונות:
- name – שם, מטיפוס מחרוזת String
- id – מספר תעודת זהות, מטיפוס מחרוזת String
- seniority – ותק, מטיפוס שלם int
- eduLevel – רמת ההשכלה, מטיפוס מחרוזת String
- arr – מערך של שוטרים הכפופים למפקד התחנה
- current – מספר אנשי הצוות בפועל, מטיפוס שלם int
שרטטו תרשים UML המתאר את הקשר בין המחלקות Policeman, Investigator, SpecInvestigator, Commander באופן המתאים ביותר לעקרונות של תכנות מונחה עצמים. יש לציין יחסי ירושה והכלה.
לכל אחת מהמחלקות Policeman, Investigator, SpecInvestigator, Commander כתבו: • כותרת המחלקה. • תכונות. • פעולה בונה – הפעולה הבונה של כל מחלקה מקבלת את כל הפרמטרים הנדרשים.
כתבו פעולה חיצונית המקבלת מערך שוטרים ומדפיסה את שמות מפקדי התחנות שבין השוטרים שבפיקודם יש חוקרי נוער אשר לא עברו השתלמות מיוחדת. הערה: הניחו שהפעולות get ו-set מוגדרות בעבור כל תכונה בכל אחת ממחלקות הפרויקט.
public static void printCommandersWithUntrainedSpecs(Policeman[] officers)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.