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;
המשך ל: מיון חזור
ל: תוכן עניינים