דרושה תוכנה עבור חנות בגדים. על התוכנה להכיל את הפריטים השונים הנמכרים בחנות. לכל פריט ישנם מספר מאפיינים שיפורטו בהמשך. עליכם לבנות את המחלקות השונות כולל מחלקות בסיס מתאימות לפי האפיון וכמובן לחשוב אלו מהן צריכות להיות אבסטרקטיות, אלו פונקציות צריכות להיות אבסטרקטיות וכדומה.
לכל מחלקה יש לבנות בנוסף למאפיינים שיפורטו בהמשך, גם את הפונקציות הבאות:
· פונקציות Getter/Setter בכל מקום בו לדעתכם יכול להיות מידע לא חוקי. לדוגמה, מחיר לא יכול להיות שלילי. לדוגמה, אורך לא יכול להיות קטן או שווה ל-0 ולא יכול להיות ארוך מידי (3 מטר עבור אורך בגד זה כנראה ארוך מידי) וכדומה. במידה ומתקבל ערך שגוי לפונקציית Setter, עליכם לזרוק חריגה המכילה תיאור של השגיאה. במידה והערך חוקי – אפשר להכניסו למשתנה המחלקה המתאים.
· constructor המקבל את כל המידע הדרוש למחלקה ומאתחל את משתני המחלקה.
· פונקציה בשם displayDetails המציגה את משתני המחלקה בצורה ברורה על הדף (ע"י document.write).
· פונקציה בשם displayImage המציגה תמונה של הפריט הנמכר בחנות. יש לשים לב שלכל סוג שונה של פריט הנמכר בחנות יש את אותה התמונה. לדוגמה, לכל הג'ינסים יש את אותה תמונת ג'ינס, לכל המעילים יש את אותה תמונת מעיל וכו' אולם אין להגדיר פונקציה זו כסטטית אלא יש לבנות אותה כפונקציית Instance רגילה ברמת האובייקט. הצגת תמונה: document.write(“<img src=’image-file.jpg’>”)
· פונקציה בשם getPriceWithoutVat המחזירה את המחיר ללא המע"מ, כאשר המחיר שקיים בכל מחלקה נחשב מחיר כולל מע"מ.
· פונקציית Getter בלבד בשם brand המחזירה מחרוזת המשורשרת מהיצרן ומהדגם של הפריט הנמכר בחנות.
מחלקה נוספת שיש לבנות נקראת Generator המכילה פונקציה בעלת הרשאת גישה public בשם getRandomItem המחזירה פריט רנדומלי מבין הפריטים השונים הנמכרים בחנות, בעל ערכים רנדומליים אך הגיוניים. לדוגמה, אם על הפריט להכיל צבע, יש לייצר צבע רנדומלי מבין סדרת צבעים. לדוגמה, אם על הפריט להכיל enum המתאר סוג חומר, יש לייצר את אחד מקבועי ה-enum הללו בצורה רנדומלית. לדוגמה, אם על הפריט להכיל מחיר, יש לייצר מחיר רנדומלי אך הגיוני, כך שפונקציית ה-Setter של המחיר לא תזרוק חריגה על המחיר הזה עקב אי חוקיות. חשוב כמובן לחלק את קוד המחלקה הזו לפונקציות עזר נוספות, אך כולן צריכות להיות בעלות הרשאת גישה private. רק הפונקציה getRandomItem צריכה להיות public.
מחלקה נוספת שיש לבנות נקראת Tester ומכילה פונקציה בשם test שעליה לבצע את הפעולות הבאות:
א. לבקש מהמשתמש ע"י תיבת prompt גודל של מערך. אם המשתמש הכניס גודל מערך שאינו חוקי (מספר שלילי, מחרוזת וכו') עליכם לבקש מהמשתמש להכניס שוב גודל של מערך, עד שהמשתמש מכניס ערך חוקי.
ב. ליצור מערך אחד בגודל שנקלט, המסוגל להכיל את כל הפריטים השונים הנמכרים בחנות.
ג. למלא את המערך הזה בפריטים רנדומליים, ע"י שימוש במחלקה Generator שכתבתם.
אתגר: אם המערך קטן או שווה ל-20 – לא לחזור יותר מפעם אחת על כל סוג פריט במערך. לדוגמה, שלא יהיה יותר מג'ינס אחד, שלא יהיה יותר ממעיל אחד וכו'.
ד. לרוץ על המערך בלולאה ולבצע:
o הצגת המידע של הפריט
o הצגת התמונה של הפריט
o הצגת המחיר ללא המע"מ של הפריט
o הצגת ה-brand של הפריט
o אם הפריט הינו חגורה, יש להציג את צבע האבזם (למרות שהוצג כבר ב-displayDetails)
o הצגת קו הפרדה ("<hr>") כך שתהיה הפרדה ברורה בין הפריטים השונים
בסקריפט הראשי עליכם רק לקרוא לפונקציה test של המחלקה Tester.
להלן הפרטים השונים הנמכרים בחנות, המאפיינים הדרושים עבורם והתמונה של כל פריט:
1. חולצת T-Shirt
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), אורך שרוולים (number), הכיתוב על החולצה (string, כאשר אם לא כתוב דבר על החולצה, מאפיין זה יכיל null)
2. חולצה מכופתרת
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), אורך שרוולים (number), מספר כפתורים (number)
3. חולצת נשים
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), אורך שרוולים (number), סוג בד (string)
4. מכנסי ג'ינס
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), אורך המכנסיים (number), האם מכיל קרעים (boolean)
5. מכנסי בד
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), אורך המכנסיים (number), מספר כיסים (number)
6. מכנסיים קצרים
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), אורך המכנסיים (number), סוג הבד (string)
7. חצאית
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), היקף (number), סוג חצאית (enum – חצאית קצרה / חצאית ארוכה)
8. שמלה
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), היקף (number), אורך (number), האם שמלה עם גב חשוף (boolean)
9. שמלת ערב
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), היקף (number), אורך (number), האם שמלה עם גב חשוף (boolean), סוג בד (string)
10. נעלים אלגנטיות
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), ארץ ייצור (string), האם יש שרוכים (boolean), סוג חומר enum – בד / עור / זמש
11. נעלי ספורט
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), ארץ ייצור (string), האם יש שרוכים (boolean), תאריך ייצור (Date)
12. נעלי נוחות
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), ארץ ייצור (string), האם יש שרוכים (boolean), האם מכילות מדרס בתוך הנעל (boolean)
13. נעלי עקב
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), ארץ ייצור (string), סוג העקב (enum – עקב נמוך / עקב בינוני / עקב גבוה)
14. ג'קט
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), עובי בד (number), מספר כיסים (number)
15. מעיל
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), עובי בד (number), האם מעיל גשם (boolean)
16. כובע קסקט
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), קוטר (number), האם מכיל הדפס פרסומת (boolean)
17. מגבעת
יצרן (string), דגם (string), מידה (number), מחיר (number), צבע (string), קוטר (number), גובה (number)
18. חגורה
יצרן (string), דגם (string), מחיר (number), צבע החגורה (string), צבע האבזם (string), חומר האבזם (enum – מתכת / עור / בד / פלסטיק ...), מידות החגורה (אובייקט מסוג Dimensions שזו מחלקה נפרדת שיש לבנות המכילה אורך, רוחב וגובה)
19. משקפיי שמש
יצרן (string), דגם (string), מחיר (number), צבע המסגרת (string), צבע הזכוכית (string)
20. משקפי קריאה
יצרן (string), דגם (string), מחיר (number), צבע המסגרת (string), המרחק המומלץ לקריאה (number)
תרשים עץ ההורשה:
· יש לבנות מסמך המכיל תרשים של עץ ההורשה הכולל את כל המחלקות ואת קשרי ההורשה/הכלה ביניהן.
· רצוי ליצור את התרשים הזה לפני שמתחילים לכתוב שורת קוד אחת.
· יש להגיש את המסמך הזה יחד עם הפרויקט.
דגשים:
· יש לבנות את הפרויקט בצורה נכונה על פי חוקי OOP (Encapsulation, Inheritance, Polymorphism וכו').
· על הפרויקט לעבוד ללא שגיאות קומפילציה וללא קריסות.
· יש לבצע ולידציה כמו שצריך על קלט המשתמש ולהציג הודעות שגיאה מתאימות.
· כל הצגות הפרטים על הדף צריכות להיות אסתטיות וברורות.
· יש לתעד את הקוד.