מבוא לתכנון מונחה עצמים חלק ב

Monday, April 15, 2013

  הפעם נציג את היתרונות של תכנון מונחה עצמים, אשתדל לתמצת ולסקור את הדברים החשובים באמת. כאמור בפוסט הקודם בנושא , הצגתי את הגישה  המרכזית שבה אני מנסה להציג מערכת בדומה לחשיבה האנושית, זה נותן לי את  קלות התכנון וזהו היתרון המרכזי והוא עצמו מתחלק לכמה חלקים: שהם קלות התכנון, קלות ההבנה של קוד זר, וסידור לקטלוגים כמו שאנו אוהבים להחזיק עצמים מסויימים בארון מסויים (חומרי ניקוי, תבלינים) כך התוכנה שלנו תהיה מופרדת לחלקים שכל אחד אחראי על נושא משלו. קריאות . יתרון נוסף (שהוא קשור ולא קשור) זה קוד קריא. והבנת ההקשרים בדומה לשפה המדוברת , למשל אם נראה פרוצדורה(פונקציה, מתודה, סברוטינה, כל אחד בשפתו..) שנקראת Start זה יכול להיות...

State Pattern

Monday, November 12, 2012

  תבנית בסיסית שאומרת דבר כזה "אם הסטייט (מצב) של האובייקט השתנה בזמן ריצה נתנהג בהתאם". בשביל הדוגמא נחשוב על מנגנון לניהול מיכל הדלק ברכב שלנו. נניח שלמיכל ישנם שלשה מצבים: ריק, מלא, ומצב ביניים. מאחר שמצב המיכל לא ידוע מראש ומשתנה "בזמן ריצה" נדרש מאתנו להגדיר אותו שיגיב בהתאם אכן, אם אנחנו יודעים מראש את כמות המצבים (כמו בדוגמא שלנו) הרי לא תהיה בעיה לטפל בהם. אבל אם נחשוב על אובייקט רחב, לדוגמא בזמן תכנון תשתית ונרצה לשמור על הרחבת היכולות שלו נבין טיפה יותר טוב את הרעיון. ונחזור לדוגמא: נרצה לקבל התנהגות שונה על כל מצב. לדוגמא , אם המיכל מלא לא יתאפשר תדלוק נוסף. אם הוא במצב ביניים...

Decorator

Tuesday, October 16, 2012

  Dacorator  תבנית הDecorator  מספקת "דקורציה" לאובייקט. ז"א נרצה להוסיף לאובייקט קיים התנהגות שאין לו. להרחיב את הממשק שלו. לשנות את ההתנהגות המקורית שלו. התבנית מוכרת גם בשם Wrapper . זאת למעשה אחת התבניות הפשוטות והנפוצות מאוד בשימוש. סביבה מונחית עצמים היא פלטפורמה שבה התבנית מיושמת בכל פינה. וניתן ליישם הרחבה כזאת בהרבה צורות. כשלב ראשון נציג תרחיש בסיסי על שימוש בתבנית: הדרך הפשוטה ביותר היא לרשת מהאובייקט המבוקש , להוסיף יכולות משלי, והנה מימשנו את התבנית.  //base class to decorate     class OriginalClass    {        public void Func1()        {            Console.WriteLine("original class operation");        }    }       //the simple decorator     class Decorator1 : OriginalClass    {        public void Func2()        {            Console.WriteLine("Decorator class operation");        }    }   אלא ש.. כמו שברור לא תמיד ירושה זה נוח או נכון (אם ישנם הרבה ורסיות של שינויים וניצור המון תתי קלאסים לצורך כך נקבל קוד ספגטי...)  לעיתים קרובות גם לא אפשרי לרשת מסיבות שונות. שימוש בDelegate, כחתימה, והגדרת מימוש...