Scheduler Design Pattern

Friday, May 17, 2013

האם ניתן לתזמן פעילויות? לנהל תור במצבי מחסור משאבים? קדימויות ? לרשום משימות ל"מרכזייה" ומתישהו לשחרר את כולם? Scheduler הוא מנגנון שקיים במגוון תחומים. ניתן לתזמן פעילות של אפליקציות או משימות (זה השימוש הנפוץ,) ניתן גם לקחת את הרעיון לתזמון אסינכרוני של פעולות וזה כבר נכנס לעולם של ריבוי תהליכים – multi threaded application.   אבל אני רוצה להציג את המימד הקטן יותר של תזמון. לדוגמא: אם יש לי מערכת שמריצה פקודות, פקודה 1 מעלה את הנתונים מהשרת, ופקודה 2 מחפשת הזמנות של לקוחות, לא נרצה שפקודה 2 תתחיל לרוץ לפני שמתאים לנו שהוא תרוץ....
אין תגובות

Iterator design Pattern

Wednesday, May 1, 2013

  ה"איטרטור" נשמע לנו קצת כמו "איטרציות" וזה מזכיר לנו סיבובים בלולאה.. עפ"י המילון העברי איטרציה בשפה תקינה ניתן לומר "חזרור".. וואלה !! בכל מקרה מטרת התבנית כפי שהוצגה בתקופה הפרהיסטורית, היא לאפשר גישה לאוספים (רשימות, מערכים, עצים)  של אובייקטים מבלי לחשוף את המבנה הפנימי או את כל מה שהאובייקט מכיל, למעשה שימוש ב"איטרטור" הוא חלק מתהליך האינקפסולציה. ממשק איטרציות אינו תלוי במימוש כזה או אחר, אלא מהווה דרך משותפת למעבר על רשימות בצורה "מוגנת"בדוט נט לרוב ניתן  לומר שIteraror Pattern == IEnumerable  וזה קיים גם בסביבות פיתוח מקבילות בJava, C++. כשאני מגדיר על אובייקט מסויים שהוא מימוש של IEnumerable זה נותן לי את היכולת לעבור עליו באיטרציות של ForEach. היחודיות של ForEach...

State Pattern

Monday, November 12, 2012

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

(real World Sample) ‘ חלק ב Decorator

Thursday, November 1, 2012

*הערה: הפוסט מיועד בעיקר למתכנתי WPF  עקב הדוגמא הנכללת בו. פיתוח בסביבת MVVM  כולל המון מעלות ויכולות, (נרחיב על תבניות כאלה בעתיד.) אבל גם חסרונות, את חלקם הייתי מגדיר כ"באגים" של השפה\Microsoft מאחר שעבודה עם Binding היא חלק מרכזי בWPF  היינו מצפים לקבל את היכולות הבסיסיות מוטמעות בפקדים השונים. מבחינת מפתחי UI החוסר לעיתים הוא קריטי. דוגמא טובה היא Multiple Selection ListBox . ונסביר, לפעמים נרצה לבחור מתוך אוסף איברים ברשימה יותר מאחד, זה תרחיש נפוץ ומקובל אולם ListBox  (ולא רק הוא) לא תומך  במצב של Binding לSelected Items אלא אך ורק לאייטם בודד. ולמה אני קורא לזה באג של השפה? כי יש ל"נאשם" שלנו (להלן ListBox) יש פרופרטי של selection...

Facade

Wednesday, October 31, 2012

  תבנית הFacade מגדירה ממשק חיצוני שמאגד בתוכו כמה תתי אובייקטים שאני לא רוצה להסתבך ולעבוד מול כל אחד בנפרד אלא יותר נוח לי לעבוד  מול מעטפת חיצונית . התבנית מזכירה מעט את מבנה הפרוקסי , אולם בפרוקסי אני בעיקר משיקולי אבטחה עוטף יישות  במעטפת חיצונית כדי לא לאפשר גישה ישירה , ואילו Facade נועד להקל על גישה לאובייקטים מרובים דרך ממשק אחיד. הFacade מחזיק אצלו את כל האובייקטים שאליהם הוא אמור לפנות, וכשאני יכתוב Façade f = new Façade(); אני למעשה מרים את כל האובייקטים שלו לאוויר. למה זה טוב? ובכן ,  נניח שיש לי שישה אובייקטים שתלויים זה בזה,  וכל מה שאני רוצה זה להפעיל את האחרון בשרשרת , משיקולי תכנון הם לא מכירים...

בתכנות מונחה עצמים(Design Patterns) מבוא לתבניות עיצוב

Monday, September 3, 2012

  מבוא לDesign Patterns (תבניות עיצוב) בתכנות מונחה עצמים  סטודנטים ואנשי תוכנה מתחילים נתקלים פעמים רבות במושג:  Design patterns ולא ממש יודעים איך לאכול אותו.סביר להניח שכולנו שמענו על סינגל טון (singleton pattern) אבל משם ואילך העסק נהיה יותר ויותר קודר. אז מה זה בדיוק?תבנית עיצוב כהגדרה זה פתרון מוכח לבעיה ידועה שכנראה חוזרת על עצמה והפתרון שנמצא ניתן לשימוש חוזר בבעיות דומות.בוא נניח שהבעיה היא חציית נהר בעזרת סירה במהירות מקסימלית. עכשיו בוא נניח  שאדון  X מהעיר דלהי פיתח שיטה לחציית נהר הגנגס בהינף משוט אחד, האם לא יוכל אדון Y מלונדון לחצות את התמזה באותה שיטה?ומה לגבי Z על נהר הירקון ?? אם נמצא דרך שבה...