פרטי המסמך:

הועלה: סוג מסמך: מסמך אונליין מסמך אונליין
עמודים: 5 הורדות: 7488
במסמך זה מוצגים מספר רעיונות ועקרונות הנוגעים לנושא - כיצד יש לגשת אל כתיבת התוכניות שלנו, ואילו קריטריונים אנו צריכים לבדוק, על מנת להחליט האם התוכנית שלנו עומדת בדרישות או לא. המסמך עודכן ב-27.07.2010

תכנון תוכנה

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

אם מתחילים לממש את התוכנית כבר בשלב זה, "ניתקע" בטיפול בבאגים ובבעיות שיצוצו במהלך הכתיבה, שעלולים לגרום לנו לשכתב חלקים גדולים מהתוכנית.

השקעה של זמן נוסף בתכנון תקצר את תהליך המימוש של התוכנית.

הצורך בתכנון קיים גם עבור מתכנתים מתחילים, וגם עבור מתכנתים מתקדמים יותר.

למשל, נביט בבעיה הבעיה:

צריך לממש פונקציה ב-C, המקבלת מערך ואת גודלו, ומחזירה את האיבר השני בגודלו במערך, תוך כדי סריקה אחת בלבד של המערך.

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

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

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

לפיכך – קיים צורך לתכנן את התוכנות שאנו כותבים, ללא קשר אם אנו מתכנתים מתחילים או מנוסים. תמיד ימצאו האתגרים שנאלץ לתכנן אותם מראש.

אופי התכנון תלוי כבר באישיותו של כל מתכנת, אולם מומלץ תמיד שתהיה למתכנת תמונה כללית בראש של כל שלבי כתיבת התוכנית עד לסיומה, לפני התחלת כתיבתה.

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

עלינו ליצור תוכנית שתנהל מכירת כרטיסים לבית קולנוע.

בבית הקולנוע יש NxN מקומות.

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

במבט ראשוני, משימה זו עלולה להראות מסובכת קמעה, אולם כאשר נחלק משימה זו לשלבים ניווכח כי הפתרון טריוואלי:

  1. צור מערך בגודל NxN ואפס אותו.
  2. כל עוד לא נגמר הקלט מהמשתמש:

    א. סרוק את המערך לחיפוש תאים פנויים כפי שהמשתמש ביקש.

    ב. אם לא נמצאו תאים, הדפס שגיאה והמתן לקלט הבא, להתחלת התהליך

        מחדש.

    ג. אם נמצאו תאים, סמן אותם כתפוסים והדפס את מיקומם.

כעת רואים כי מימוש כל אחד מהשלבים פשוט ביותר.

על ידי תכנון התוכנית הגדולה וחלוקתה למשימות קטנות, נקל את עבודת התכנות שלנו, ונוכל לזהות בעיות ביתר קלות.



מאת: אוריה

מסמך טוב

אהבתי את ה-WhiteBox
שיתוף:
| עוד