help in Ada please

benny kl

New member
help in Ada please

hi there! does anyone know a good source on Ada? hopefully in hebrew? i found (using google thank you) adahome, the ada distilled book, big online book of ada programming, and more. but hebrew is best and Ada is hard (for me). so any help is appreciated. especially if anyone knows a university course/tutorial/etc on that language, or related like realtime with ada. in hebrew or english. thanks benny​
 

gmorphus

New member
הספרים של האו"פ

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

benny kl

New member
thanks

thanks for answering. ill check for the books , is there an e-version? whats ada97, i found only 95 ? and a question: i wrote the following program to test simple inheritance. gnat shouts about: no selector "key" for type "tagged_rec'class" defined at line 3. the code: procedure objects1 is type tagged_rec is tagged record index: integer; -- says something missing here??? end record; type rec_with is new tagged_rec with record key: integer; end record; type record_tagged_pointer is access all tagged_rec'class; Rectagptr1: record_tagged_pointer; Rectagptr2: record_tagged_pointer; begin rectagptr1:= new tagged_rec; rectagptr1.index:=1; Rectagptr2:= new rec_with; Rectagptr2.index:=2; Rectagptr2.key:=9; --the problem is here end objects1; thanks benny.​
 

gmorphus

New member
צודק עדה-95

שנתיים פה, שנתיים שם, מה זה ביננו?
למה עשית is access all? אני לא חושב שצריך את הall שם. בכל מקרה, הוא לא מכיר בשורה הזאת את key. אתה יצרת מצביע לtagged_rec'class והוא לא מכיל את key. אתה יכול לנסות משהו כזה:
rec_with(Rectagptr2.all).key:=9;​
אין לי מושג אם זה מתקמפל... בכל מקרה, אתה לא אמור לנסות לעשות דברים כאלה. אתה לא אמור לנסות לגשת באמצעות מצביע למחלקת אב, למחלקות של הבנים.
 

benny kl

New member
yey, it compiles now.

why should i not do it? should i use a pointer to the children or parent ?​
 

gmorphus

New member
עכשיו אתה כבר מדבר על קונספט של OOP

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