חריגות ב- ADA

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

 

 

שפת ADA מגדירה חריגה (EXCEPTION), שאמורה להיות מעובדת על ידי מטפל בשגיאות בכל רמה בתוכנית מעל הרמה שבה החריגה הועלתה (RAISED).

 

PACKAGE adtX IS

    TYPE X IS PRIVATE;

    EXCEPTION out_of_range;

 

    PROCEDURE f( a: INOUT X; b: INTEGER );

END adtX;

 

PACKAGE BODY adtX IS

 

    PROCEDURE f( a: INOUT X; b: INTEGER ) IS

        BEGIN

        ......

        IF b < some_limit THEN

            -- Normal processing

        ELSE

            RAISE out_of_range;

        END IF;

END adtX;

 

 

 

חבילה זו מייצאת את החריגהout_of_range  שאמורה להיתפס בכל שגרה שעושה שימוש בפונקציה f.

 

 

WITH adtX; USE adtX;  -- Import adtX

 

PROCEDURE g( ... ) IS

   

    BEGIN

    ...

    f( a, n );   -- Invoke method f

    ...          -- Continue here if exception not raised

 

    ....         -- Return from here if no errors

    EXCEPTION

        WHEN out_of_range =

            ...  -- process the exception

    END g;

 

 

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

 

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

 

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

 

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

 

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

        ·          שימוש בערכים מוחזרים של פונקציות

        ·          הוספת פרמטר שגיאה ב- call-by-reference לפונקציות

        ·          קביעת משתנה גלובלי

        ·          קריאה ליחידת טיפול בשגיאות

        ·          התרעה על תהליך נפרד

 

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

 

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

 

 

מושגים  

 

חריגה

חריגה מדווחת על ידי תוכנית או על ידי יחידת תוכנית כאשר מתרחש אירוע שצריך להיות מטופל על ידי תוכנית או יחידת תוכנית אחרת.

 

 

המשך ל: חריגות ב- C++                        חזור ל: תוכן עניינים