210 likes | 455 Views
תכנות פרוצדורלי - I. נושאי הקורס. פרדיגמות תכנותיות: תכנות פונקציונלי תכנות מונחה עצמים תכנות פרוצדורלי תכנות מקבילי פרדיגמות תכנותיות ככלי לפתרון בעיות אלגוריתמיות: דומה: פרוק בעייה לתת-בעיות ע"י הגדרת אבני בניין וקשרים ביניהן. שונה: אבני הבניין והקשרים ביניהם. פרדיגמות תיכנותיות.
E N D
נושאי הקורס • פרדיגמות תכנותיות: • תכנות פונקציונלי • תכנות מונחה עצמים • תכנות פרוצדורלי • תכנות מקבילי • פרדיגמות תכנותיות ככלי לפתרון בעיות אלגוריתמיות: • דומה: פרוק בעייה לתת-בעיות ע"י הגדרת אבני בנייןוקשרים ביניהן. • שונה: אבני הבניין והקשרים ביניהם.
פרדיגמות תיכנותיות • תכנות פונקציונאלי: • פונקציות מהוות את אבני הבניין של תוכניות מחשב. • ניתן לבנות אותן, להרכיבן, להעבירן כפרמטרים, להחזירן כפרמטרים לפונקציות אחרות. • התייחסות לפונקציות היא כאל המושג המתמטי פונקציה. • תכנות פרוצדורלי: • תוכניות מפורקות לצעדים חישוביים (אלגוריתמים). • פרוצדורות מהוות את יחידות הארגון של צעדים חישוביים אלה. • הפרוצדורות מסודרות בהיררכיה.
מושגים • אלגוריתם הוא מתכון לביצוע משימה. אלגוריתם מורכב מסדרת הוראות חד-משמעיות ואפשריות לביצוע אשר סדר ביצוען מוגדר היטב. • בעיה אלגוריתמית היא בעיה שבה מתוארת נקודת מוצא ומטרה, ונדרש אלגוריתם להשגת המטרה. • אבני בניין בפתרון בעיות בפרדיגמה הפרוצדורלית:פרוצדורות (המייצגות אלגוריתמים)המסודרות בהיררכיה.
תכנות פרוצדורלימתוך ויקיפדיה, האנציקלופדיה החופשית. • תכנות פרוצדורלי הוא מתודולוגיה לפיתוח תוכנה. • במתודולוגיה זו מחולקת תוכנית מחשב גדולה לתת תוכניות רבות, שכל אחת מהן קרויה פרוצדורה, שגרה או פונקציה (תכנות), וכל שגרה קוראת לשגרות האחרות. לכל פרוצדורה בתוכנית פרוצדורלית ישנה המשימה שאותה היא מבצעת, כחלק ממכלול המשימות המרכיב את התוכנית השלמה.
רקע • היסטוריה של פיתוח תוכנה • סיבוכיות הולכת וגדלה של פיתוח תוכניות מחשב • משבר התוכנה, כינוס נאטו ב- 1968 • פתוח מערכת תוכנה היא פעילות בעלת סיבוכיות גבוהה: • סיבוכיות המתייחסת לתוכנה עצמה • סיבוכיות המתייחסת לאנשים המעורבים פיתוח התוכנה • סיבוכיות זו גורמת לכך שפתרונות הם איטרטיבים:לא ניתן להגיע לפתרון "בסיבוב ראשון" • תכנות פרוצדורלי היא בין הפרדיגמות הראשונות שפותחו על מנת להתגבר על סיבוכיות זו
נושא מרכזי: מתודולוגיות/היוריסטיקות העוזרות להתגבר על סיבוכיות קוגניטיבית • הפשטה (abstraction) • פיתוח מלמעלה למטה (top-down development) • עידון הדרגתי (successive refinement)
הפשטה • דרך חשיבה והסתכלות על "דברים". • התעלמות מפרטים שאינם רלוונטיים בשלבים מסוימים של פתרון בעיות. • חשיבותה של הפשטה בפיתוח תוכנה. • שקיעה בפרטי התכנות, מורידה את רמת ההפשטה. • חשיבה ברמת הפשטה נמוכה מדי עלולה להפריע להבחין בעובדות חשובות שניתן להבחין בהן כאשר בוחנים בעיה ברמת הפשטה גבוהה יותר. • דיון ברמת הפשטה מתאימה מאפשר ביצוע רפלקציה: • אי-שקיעה בפרטים מאפשרת להקדיש חלק מהמקורות המנטליים (ה"חשיבתיים") שלנו לרפלקציה.
מספר הקסם 7 The Magical Number Seven • Miller, G. A. (1956). The magical number seven plus or minus two: Some limits on our capacity for processing information. Psychological Review 63, pp. 81-97. • מגבלות הזיכרון לטווח קצר (short-term memory). • אדם ממוצע יכול "להחזיק במוח" בכל רגע 7 יחידות מידע (+- 2). • מגבלה זו עשויה להשפיע על דרך פתרון בעיות מורכבות (כמו למשל פיתוח מערכות תוכנה). • יחידות מידע אלו יכולות להיות מכל גודל ("צפופות"). • עבור החשיבה יחידת מידע היא יחידה אחת ללא קשר לגודלה ומורכבותה. • אנו נוטים לארגן מידע מורכב בהיררכיות או ליצור "גושי מידע" (chunking).
מספר הקסם 7 (דוגמאות) • Bell Labs :התחשבו ב"מספר הקסם 7" בתכנון user’s interface כך שאדם ממוצע יוכל להשתמש בה. • Xerox PARC: השתמשו בידע על "מספר הקסם 7" לתכנון המושג context menus. תפריט המכיל שבעה פריטים עדיף על תפריט המכיל 10 פריטים(מעל ליכולתו של אדם ממוצע).
הפשטה - I • התעלמות מפרטים שאינם רלוונטיים בשלבים מסוימים של פתרון בעיות. • ניתן להסתכל על הפשטה כעל העתקה מהרבה לאחד. • הפשטה מאפשרת לנו ל”שכוח” מידע ולטפל בדברים שונים כאילו היו זהים. • באופן כללי: משמרים את המשותף לקבוצת עצמים ומתעלמים מההבדלים ביניהם עד כמה שניתן. התכונות המשותפות “נתפסות” במושג אחד.
הפשטה - I • היררכית היונקים: ברמות גבוהות של הפשטה אנו מתעלמים מההבדלים; ברמות נמוכות של הפשטה אנו מבחינים בין סוגי יונקים. • מהו ריבוע? • הוכחת משפט על משולשים, חבורות, פונקציות רציפות.
הפשטה - II • התעלמות מפרטים שאינם רלוונטיים בשלבים מסוימים של פתרון בעיות. • התמקדות במהותה של יישות (על-פי תכונותיה) ולא כיצד מהות זו באה ממומשת. • בהקשר של פיתוח מערכות תוכנה: • בשלבים מסוימים של פיתוח תוכנה התמקדות ב"מה" ולא ב"איך".
הפשטה – יישום • כתיבת הוראות שניתן להפעיל אותן על יותר מסוג אחד של עצמים. • אופן ההפעלה המפורש לגבי כל אחד מהעצמים מפורט ברמות נמוכות יותר של הפשטה.
Abstraction Example: (Abelson and Sussman, 1986, p. 73) The linear-combination function gets four inputs: a, b, x, y, and outputs the expression value a*x+b*y. (define (linear-combination a b x y) (add (multiply a x) (multiply b y)))
הפשטה • התעלמות מפרטים שאינם רלוונטיים בשלבים מסוימים של פתרון בעיות. • הפשטה מגשרת בין שפת המחשב לשפתנו. • בהמשך – קשרים בין הפשטה ל: • פיתוח מלמעלה למטה • קשר לעידון הדרגתי
משימה ראשונה - בקבוצות • חברת התוכנה שלכם קבלה פרויקט בשם"תקשוב שדה תעופה". • עליכם להעלות שאלות שיש להתייחס אליהן בשלב ההערכות לפרויקט.
משימה שנייה - בקבוצות • חברת התוכנה שלכם קבלה פרויקט בשם"תקשוב שדה תעופה". • רשמו את דרישות מערכת התוכנה. • החליטו על מבנה מערכת התוכנה. • תארו את מרכיבי התוכנה העיקריים.
משימה שלישית - בקבוצות • חברת התוכנה שלכם קבלה פרויקט בשם"תקשוב שדה תעופה". • כל קבוצה בוחרת מודול (רכיב) אחד ומעדנת את תיאורו.
מתודולוגיות העוזרות להתגבר על סיבוכיות קוגניטיבית • הפשטה (abstraction) • פיתוח מלמעלה למטה (top-down development) • עידון הדרגתי (successive refinement) הסבירו במשפט אחד או שניים כל אחת מהמתודולוגיות.
מתודולוגיות מרכזיות • סיבוכיות הולכת וגדלה של פיתוח תוכניות מחשב. • במדעי המחשב: • אסטרטגיות פיתוח, העוזרות להתגבר על סיבוכיות זו, הן חלק מהדיספלינה של מדעי המחשב.