תרגיל 5

תכנות מתקדם תרגילי DesignPatterns

את התרגיל יש להגיש כקובץ doc או pdf במערכת ה submit

Creational Patterns

  1. א. הגדירו את המחלקות R2D2 , 3PO , WALLE הממשות את הממשק Robot , בתוך מחלקות אלו תממשו רק את המתודות הדרושות לכך שתוכלו ליצור Factory עבורן ע"י ה design של prototype
    ב. צרו מחלקה שתוכל להחזיר כל אחד מהרובוטים הללו בעת בקשה ב (O(1
    ג. מה חסכנו על פני ה design הרגיל של factory?
    ד.התבקשתם לתכנן מערכת ניסויים ממוחשבת עבור סטודנטים שיריצו בה ניסויים.
    מערכת זו מפעילה רובוטים בסימולציה בתנאים שונים. הניסוי בודק את הקשר שבין רובוט מסוג א' לרובוט מסוג ב'. החוק הוא שR2D2 ו 3PO הם זוג של סוג א' ו ב' ואילו WALLE ו RV הם זוג אחר של סוג א' ו ב'. כאשר סיפקתם factory רגיל הסטודנטים שכתבו את הניסויים ערבבו בטעות סוגים שהרסו את הניסוי… כתבו קוד java שיאכוף את החוק הזה במסגרת ה design המתאים,כך שסטודנטים שיכתבו קוד ניסוי – יהיו עקביים ולא יוכלו לערבב…
  2. א. כדי לבנות מחשב הלקוח צריך לבחור חלקים שונים כגון לוח אם, זיכרון, מעבד, מארז וכו' האלגוריתם להרכבת החלקים השונים הוא תמיד קבוע: הרכבת לוח האם על המארז, חיבור המעבד, הכרטיסים והזכרונות, חיבור הדיסקים השונים ולבסוף ספק הכוח.
    עבור כל רכיב הלקוח יכול לבחור מבין כמה אפשרויות (לפחות 3), אין הגבלה על האפשרויות השונות.
    האלגוריתם צריך להחזיר אובייקט מסוג Computer שמכיל references לכל הרכיבים השונים שמרכיבים אותו. סרטטו designמתאים לבעיה.
    ב. כתבו את שורת הקוד שדרכה ניצור מחשב כלשהו.
  3. תארו את ההבדל שבין builder ל abstract factory.

Structural Patterns

  1. רוני בנה מערכת GUI חדשה ל java שאמורה לחקות את הגרפיקה של מערכת ההפעלה בה התוכנית רצה מבלי שה client יהיה מודע לכך, יש לו מחלקה אבסטרקטית Window שמייצגת חלון, ולה שלושה מימושים קונקרטיים: חלונות, לינוקס ומאק.
    כעת רוני רצה לממש אבסטרקציה חדשה של message box שבאופן טבעי יורשת מ Window, וגם את מחלקה זו ממש בשלושת האופנים הקונקרטיים בהתאמה למערכות ההפעלה.
    א. מה לא בסדר ב design של רוני?
    ב. באיזה design pattern עליו להשתמש? תארו את המחלקות השונות והיחסים ביניהן.
  2. הראו דוגמא בה ל Decorator יש חשיבות לסדר העטיפות
  3. ממשו בקוד java מחלקה שמחזיקה עץ שבו לכל קודקוד יש לכל היותר 4 בנים. הראו מתי אתם אוכפים את המגבלה.
  4. במשחק אסטרטגיה נלחמים הגזעים הבאים: בני אדם, אלפים, אורקים וטורולים, כאשר בכל גזע כל יצור חי יכול להיות אוסף מזון או לוחם.
    במהלך המשחק יכולים להגיע למספר עצום של יצורים הממלאים את המפה, כל יצור נמצא במיקום אחר, ומבצע איזשהו actionאחר.
    כל גזע מחזיק knowledge משלו לדוגמא כל בני האדם מחזיקים את אותו ה HumanKnowledge שיש ברשות הגזע האנושי.

    סרטטו design המתאים למצב לעיל עם המחלקות השונות שלדעתכם יש להגדיר והסבירו את אופן פעולת המערכת שבניתם.

Behavioral Patterns

  1. המחלקה MyFile מגדירה מתודות שונות המטפלות בקבצים, לדוגמא המתודה save מגדירה את שמירת הקובץ.
    מערכת לניהול גרסאות MySVN עוברת בכל x שניות על כל האובייקטים מסוג MyFile בודקת ע"י המתודה isChanged אם היה שינוי, ואם כן מגבה את הקובץ תחת מספר גרסא.
    א. מה לא טוב ב design הנ"ל?
    ב. סרטטו ותארו design יותר מוצלח.
  2. לרובוט כלשהו ניתן להרכיב עד 6 התקנים, כל התקן בעל משקל אחר המאט את מהירות הרובוט, יהודה ממש את ה State Pattern כאשר לכל צירוף של התקנים יצר יהודה מחלקת ConcreteState ובמתודת ה handle שבה – החזיר את המהירות המתאימה למשקל המיוצג ב state הזה.
    א. מה לא בסדר ב design של יהודה?
    ב. תאר בפירוט כיצד ניתן לשפר את ה design שלו.
  3. ממשו בקוד java רשימה מקושרת (כל פריט ברשימה הוא מסוג node), וכן iterator קונקרטי המסופק עימה. תארו את ה iteratorשיצרתם ע"פ סוגיות המימוש השונות המופיעות במצגת.
  4. א. צרו ב java את המחלקה האבסטרקטית ExamBuilder שצריכה לקבל מופע של Questioner (גם היא אבסטרקטית) כדי שע"י המתודה getQuestions , היא תוכל לבנות מבחן. הרעיון הוא שע"י כל מופע אחר של Questioner יתקבל מבחן אחר.
    צרו את המחלקות MyExamBuilder ו QuestionerA ו QuestionerB כמחלקות קונקרטיות.
    ב. איזה design זה?
    ג. כתבו את קובץ ה XML ואת ה main שבאמצעות SPRING הם ייצרו מופע של MyExamBuilder עם QuestionerA

בהצלחה!