שיעור שני – Object Oriented ABAP
Object Oriented ABAP
הגדרת קלאס מקומית
ישנם שני סוגים של קלאסים (Classes):
- קלאס גלובלי (Global Class): אפשר להשתמש בו בתוכנות ופונקציות שונות שנמצאים באותה מערכת
- קלאס מקומי(Local Class): אפשר להשתמש בו רק בתוכנה\פונקציה בה היא הוגדרה
בשיעור זה נלמד איך ליצור קלאס מקומי.
דרך ההגדרה של קלאס מקומי :
עכשיו יצרנו קלאס שנקרא LCL_MY_CLASS
עכשיו נרצה להוסיף תכונות(Attribute) לקלאס אבל לפני זה עולה השאלה מה זה תכונות, תכונות אלו המשתנים של הקלאס אך בשימוש בקלאסים נהוג לומר תכונות.
לקלאס יכולים להיות שני סוגים של תכונות :
- תכונות instance
- תכונות static
לפני שנעבור על ההבדלים ביניהם נלמד על איך מגדירים תוכנות בכללי ואיך ניגשים אליהם.
אם ננסה להגדיר תכונה בצורה הבאה נקבל שגיאה
הסיבה לכך היא שכדי להגדיר תכונה צריך להגדיר את הסוג נראות שלה לפני
ישנם שלושה סוגי נראות
- PUBLIC:אפשר לעשות בו שימוש בתוך הקלאס ,אפשר לעשות בו שימוש בתוך קלאס בן(Sub Class) ואפשר לעשות בו שימוש מחוץ לקלאס
- PROTECTED: אפשר לעשות בו שימוש בתוך הקלאס ,אפשר לעשות בו שימוש בתוך קלאס בן אבל אי אפשר לעשות בו שימוש מחוץ לקלאס
- PRIVATE: אפשר לעשות בו שימוש בתוך הקלאס אבל אי אפשר לעשות בו שימוש בתוך קלאס בן ואי אפשר לעשות בו שימוש מחוץ לקלאס
כאן נכנס לתמונה ההפשטת נתונים שדיברנו עליה בפרק הקודם,כאשר אנחנו מסדרים את התכונות שלנו כך אנחנו יכולים להחליט איפה אפשר לגעת בתכונות שלנו
אז כדי להגדיר משתנים נרשום :
(לא חייב שבכל קלאס יהיו את שלושת המקטעים)
למדנו איך להגדיר תכונה, עכשיו נלמד איך ניגשים לתכונה
בגלל שההגדרה של התכונה זהה להגדרה של משתנה אפשר לחשוב שההגדרה תהיה כך:
אך זה יביא לנו שגיאה
כדי לגשת לגשת לתכונה צריך ליצור אובייקט שיהיה מהסוג של הקלאס וכך משתמשים בתכונות והדרך לעשות זאת היא כך:
ותמיד עולה השאלה למה משתמשים בשתי שורות, למה לא מספיק השורה הראשונה.
השורה הראשונה מגדירה את האובייקט OB_MY_CLASS ואומרת שהוא יכול להיות מסוג LCL_MY_CLASS
והשורה השנייה יוצרת את האובייקט עצמו.
אני אביא אנלוגיה כדי להבין את הנושא יותר טוב
תחשבו על הקלאס כמו שרטוט של בית ועל האובייקט עצמו בתור בית שמוכן לפי הסרטוט
השורה הראשונה בעצם שומרת שטח אדמה כדי לבנות את הבית והשורה השנייה בעצם בונה את הבית בשטח.
עכשיו אחרי שיצרנו את האובייקט הדרך לגשת לתכונות שלו היא כך:
מה יהיה הפלט של הקטע קוד הבאה ?
הפלט של הקטע קוד הוא :
אם שינינו את את התכונה A באובייקט למה היא לא השתנתה באובייקט B?
הסיבה לכך היא שכל אובייקט הוא עצמי אז אם משנים את התכונות של אובייקט אחד אובייקט אחר לא ישתנה.
“אבל מה אם אני רוצה לעשות תכונה שמשתנה בכל האובייקטים שלי”
כאן נכנס לתמונה הסוג השני של התכונות שיכולים להיות למחלקה תכונה סטטית (static attribute).
כאשר משתמשים בתכונה סטטית ומשנים אותה באובייקט אחד היא תשתנה גם באובייקט אחר.
כדי להבין את הנושא נסתכל על קטע קוד הבאה:
יש לנו בקטע קוד קלאס עם תכונה instance בשם A ותכונה static בשם B
יצרנו שני אובייקטים מהסוג של המחלקה ושינינו באובייקט הראשון את A ל10 ואת B ל 10 גם.
והדפסנו את A וB משני האובייקטים .
נציין שוב שלא נגענו במשתנים של האובייקט השני
הפלט:
התכונה הסטטית באובייקט השני השתנתה בהתאם לאובייקט הראשון.
אז למדנו בשיעור איך ליצור קלאס לוקלי, תכונות של קלאס ויצירת אובייקט,לסיכום נעבור על כמה שאלות תרגול.
אני רשמתי קטעי קוד ותצטרכו להבין מה יהיה הפלט של התוכנית
תשובה: תקלת זמן ריצה
סיבה: לא יצרנו את האובייקטים OB_MY_CLASS1 וOB_MY_CLASS2
פתרון:
2.
תשובה:
סיבה:
התכונה B היא תכונה סטטית וכאשר שינינו אותה בשורה הזאת
התכונה השתנתה גם באובייקט OB_MY_CLASS1
תרגיל 3.
תשובה: שגיאת סינטקס
סיבה : התכונות מגודרות בתור PRIVATE
פתרון:
שיעור ראשון – Object Oriented ABAP – SAP BASIS – ABAP – HANA (scmlevi.com)
שיעור שני – Object Oriented ABAP – SAP BASIS – ABAP – HANA (scmlevi.com)
שיעור שלישי – Object Oriented ABAP Methods – SAP BASIS – ABAP – HANA (scmlevi.com)
שיעור רביעי – object oriented ABAP – Global class – SAP BASIS – ABAP – HANA (scmlevi.com)