2. אסטרטגיות תכנות

מבנה נתונים ואלגוריתמים

 

 

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

 

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

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

 

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

 

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

 

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

 

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

 

"המשאית, כאשר היא טעונה ב10- טון, אמורה לצרוך לא יותר מאשר 20 ליטר דלק ל100- ק"מ, כאשר היא נוסעת במהירות של 100 קמ"ש".

 

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

 

ישנם שתי צורות חשובות של הפשטה: הפשטה פונקציונלית והפשטה מבנית.

 

בהפשטה פונקציונלית אנו מגדירים תפקיד של תת-תוכנית באופן שכזה:

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

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

 

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

 

if ( pedal_pos > 50.0 ) {
        set_air_intake( 0.78*pedal_pos);
        set_fuel_valve( 0.12 + 0.32*pedal_pos);
        }

 

 

לחילופין, מודל של היצרן יכול לשלב פרטים של המחשב ושל תוכנית המחשב.

 

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

 

 

מושגים

 

 HACKING

        הכנת תוכנית מחשב במהירות, ללא מחשבה וללא כל שיטת תכנון.                                    

 

המשך ל: אובייקטים ו-ADT                     חזור ל: תוכן עניינים