חריגות ב- 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++ חזור
ל: תוכן עניינים