ראשי > הקדמה
הקדמה

המטרה:
תכנון תוכנה מונחית עצמים אינו קל, כל שכן תכנות תוכנה מונחית עצמים שהיא באמת reusable. עלינו למצוא אובייקטים מתאימים, לחלק אותם ל classes בצורה מתאימה, להגדיר ממשקים ל class -ים והיררכיות הורשה ולהגדיר יחסים ביניהם. העיצוב צריך להיות ספציפי לבעיה ועם זאת מספיק כללי כדי לטפל בהרחבות עתידיות, דרישות שיתווספו ובעיות אפשריות שיצוצו במצבים שונים. בעוד ששוב ושוב מתכנתים מתחילים נתקלים בבעיות ופותרים אותן בסופו של דבר בעזרת יישום של שיטות שאינן מונחות עצמים (אך מוכרות להם מן העבר...מקורס ב C למשל...נשמע מוכר?) המתכנת המומחה, לעומת זאת, עובד קצת אחרת: הוא אינו מגלה כל פעם מחדש פתרונות לבעיות שלו, אלא ממחזר פתרונות מונחי עצמים שהשתמש בהם בעבר (patterns) או מוכרים לו, וחוסך לעצמו את הצורך לגלות את אותם הפתרונות שוב ושוב.

מטרת ה design patterns - תבניות התכנון - היא לתאר פתרונות אלגנטיים ופשוטים לבעיות ספציפיות בתכנון של תוכנה מונחת עצמים. הן מציגות פתרונות שהתפתחו ושופרו עם הזמן ולכן אלו אינם הפתרונות הראשונים שנוטים "לקפוץ" מול העיניים. אלו פתרונות שנתגלו כתוצאה מעבודה קשה וכתיבה מחדש שוב ושוב של קוד ע"י מתכנתים במטרה להגדיל את הגמישות והתאימות של התוכנה.
תבניות התכנון מביעות את הפתרונות האלו בתמציתיות, ביעילות ובבהירות. הן אינן דורשות מאפיינים בלתי רגילים של שפות ולא טריקים מדהימים בתכנות. המימוש שלהן אינו מסובך, למרות שקרוב לוודאי שהן קצת יותר מתוחכמות מהפתרון הראשון שיעלה לכם בראש לבעיה מסוימת שאתם נתקלים בה. אך המאמץ הנוסף ישתלם גם ישתלם בסופו של דבר, ב flexibility and reusability גבוהות יותר.
ברגע שתבינו את תבניות התכנון ותרגישו את הקליק, אתם תסתכלו על תכנות מונחה עצמים באופן שונה לגמרי... העיצובים שלכם יהיו יותר modular, reusable, flexible, understandable and robust כל אותם מלים שרב הסיכוי ששמעתם לא פעם ולא פעמיים בהקשר של תכנות מונחה עצמים, וזו הסיבה שהתעניינתם בתכנות מונחה עצמים מלכתחילה, לא? (אלא אם כן לקחתם קורס זה מחוסר ברירה באוניברסיטה..)

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

למעלה
למה זה טוב???
  • תבניות התכנון עוזרות להשתמש שוב ושוב בעיצובים מוצלחים.
  • ביטוי של טכניקות בדוקות כתבניות תכנון הופך אותן לנגישות יותר למתכנתים של מערכות חדשות.
  • הן עוזרות לך למצוא אלטרנטיבות שהופכות את המערכת ליותר reusable ולהימנע מכאלה שמתפשרות על זה.
  • הן אפילו משפרות את התיעוד והתחזוקה של מערכת קיימת ע"י הגדרה מדויקת של היחסים והאינטרקציות בין האובייקטים השונים.
  • בפשטות, הן פשוט עוזרות להגיע לעיצוב הנכון מהר יותר.
למעלה
מהי בכלל design pattern?
בגדול לתבנית התכנון יש 4 חלקים:
  • השם הוא כינוי שאנחנו יכולים להשתמש בו לתיאור של הבעיה, הפתרון וההשלכות במילה או שתיים. הוא נותן לנו לחשוב ברמה נוספת של אבסטרקציה, כמו גם לשוחח על כך עם עמיתנו, לכתוב בתיעוד שלנו וכו'.
  • הבעיה מתארת מתי ליישם את התבנית. היא מסבירה את הבעיה וההקשר שלה. לפעמים היא תכלול רשימת תנאים שחייבים להתקיים לפני שנוכל ליישם את התבנית .
  • הפתרון מתאר את האלמנטים שבונים את העיצוב, היחסים ביניהם, תחומי אחריות שלהם,וכיצד הם משתפים פעולה, כמובן באופן ג'נרי ולא ספציפי לבעיה מסוימת.
  • ההשלכות הן התוצאות, היתרונות והחסרונות שבשימוש בתבנית הספציפית. הן הכרחיות להערכת אלטרנטיבות ולהבנת העלויות והרווחים שביישום התבנית. הן מתבטאות לעתים קרובות בטרייד אוף בין זמן למקום, ואולי גם בבעיות שפה ומימוש. מכיוון ש reuse הוא גורם שנלקח בחשבון גורמים כמו flexibility, extensibility and portability נלקחים בחשבון.
כאן תבניות התכנון אינן מתארות עיצוב של מבני נתונים בסיסיים וכלליים, ומצד שני אינן מתארות פתרונות תוכנה מורכבים וספציפיים. הן תיאור של אובייקטים ו class -ים שמתקשרים ביניהם ומותאמים כדי לפתור בעיית עיצוב כללית בהקשר מסוים.

למעלה
למי האתר מיועד?
האתר מניח ידע בסיסי בתכנות מונחה עצמים והכרות של לפחות שפת תכנות מונחית עצמים אחת. וזה הכל. דוגמאות הקוד נתונות,אמנם, ב ++C אך זהו אינו קוד מסובך וגם על מי שלא יצא להכיר את ++C לא יקשה להתמודד איתו. מכל מקום, האתר אינו מסמך מתקדם למתכנתים מקצועיים ורבי ניסיון בתחום, אלא בדיוק לכאלו אשר סיימו קורס בסיסי בהכרות עם שפה מונחית עצמים ורוצים ללמוד את הכלים הנכונים שמנצלים את מלוא הכוח של התכנות מונחה העצמים.
באתר מובאות 8 תבניות תכנון בסיסיות אשר מהוות בסיס טוב להכרות עם התחום. לאחר ששולטים בהן ניתן להמשיך ולהתעמק בתחום, למשל על ידי המשך קריאה של הספר Design Patterns בהוצאת Addison-Wesley אשר מקיף עוד patterns בנוסף על אלו.

אני מקווה ומאמין שתפיקו תועלת מאתר זה, אשר ייתן לכם פתח להיכרות עם הנושא המעניין והחשוב שנקרא Design Patterns. ואחרי כל הבירבורים וההקדמות מה שנותר לי לומר הוא: קדימה לעבודה!!!

בהצלחה ובכיף!!

למעלה







 
מה בעמוד:
 
המטרה
למה זה טוב???
ממה מורכבת?
למי מיועד?