2.8.2 ADT ב-Ada
מבנה
נתונים ואלגוריתמים
שפת Ada תוכננה בסוף שנות
השבעים - מעט לפני ש"התגלה" תכנות מונחה עצמים. בכל אופן באותו זמן הערך
של טיפוס מידע מופשט היה כבר מובן ו-Ada סיפקה תמיכה טובה בקונספט זה.
היה צורך בשני
מבני Ada
על מנת להגדיר ADT:
טיפוס המידע והמתודה שלו היו ממוקמים בחבילה
(package).
עבור הביטחון והסתרת המידע,
טיפוס הזיכרון היה private. למרות
ש"הלקוח" של החבילה היה
יכול לראות את המבנה של טיפוס המידע, המהדר מנע ממנו את הגישה לתכונות ספציפיות של
הטיפוס. כך יושם באופן יעיל עקרון הסתרת המידע: הלקוח יכל לראות את המידע, אך לא
יכל לעשות עמו דבר! (נראה כי הסיבה לחשיפת מבנה של טיפוס פרטי היתה מעשית: מהדרים
ומקשרים יודעים כמה מקום דורש
עבור ADT
בחבילה שעברה הידור בנפרד - ואשר עבורה ידועות רק ההגדרות).
חבילה ב-Ada עבור מספרים מורכבים
תיושם באופן הבא:
PACKAGE complex_numbers IS
TYPE complex IS PRIVATE;
I : CONSTANT complex; -- 'i'
FUNCTION "-"( complex a ) RETURNS complex; -- Unary minus
FUNCTION "+"( complex a; complex b ) RETURNS complex;
FUNCTION "-"( complex a; complex b ) RETURNS complex;
FUNCTION "*"( complex a; complex b ) RETURNS complex;
FUNCTION "="( complex a; complex b ) RETURNS boolean;
PRIVATE
TYPE complex IS RECORD
real, imag : FLOAT;
END RECORD;
I : CONSTANT complex := (0.0, 1.0);
END complex_numbers;
הגוף (body) או היישום ימוקם לרוב בקובץ נפרד ויעבור הידור בנפרד:
PACKAGE BODY complex_numbers IS
FUNCTION "-"( complex a ) RETURNS complex IS -- Unary minus
RETURN complex'(-a.real,-a.imag);
END "-";
FUNCTION "+"( complex a; complex b ) RETURNS complex IS
RETURN complex'(a.real+b.real,a.imag+c.imag);
END "+";
FUNCTION "-"( complex a; complex b ) RETURNS complex IS
RETURN complex'(a.real-b.real,a.imag-c.imag);
END "-";
FUNCTION "*"( complex a; complex b ) RETURNS complex IS
RETURN complex'(a.real*b.real - a.imag*b.imag,
a.real*b.imag + a.imag*b.real );
END "*";
FUNCTION "="( complex a; complex b ) RETURNS boolean IS
RETURN (a.real = b.real) AND (a.imag = b.imag);
END "=";
END complex_numbers;
שים לב כי Ada מספקת יכולת מעולה בהעמסת אופרטורים (operator
overloading), דבר המאפשר לנו
לרשום באופן
מתמטי קוד
"טבעי", כגון:
complex a, b, c, z;
IF a = b THEN
c := z - a;
z := -z;
END IF;
המשך ל: מיון חזור
ל: תוכן עניינים