16.7.2019

Polymorphism - הורשה - ניהול חריגים


Polymorphism - רב-צורתיות

מימוש פונקציה בהתאם לטיפוס האובייקט – באמצעות הורשה ניתן לממש פונקציה אחת עבור אובייקטים שונים
כשיש פונקציה שעושה פעולה מסוימת שמתאימה לכל המחלקות אולם עבור כל מחלקה המימוש שונה – במידה ונכתוב את הפונקציה עבור כל אחד מהמחלקות כשיש מערך של אובייקטים שונים לא נוכל להריץ את הפונקציה בהרצה אחת על כולם 
שימוש ב Polymorphism מאפשר להגדיר פעם אחת ולבצע הורשה והתאמה לכל מחלקה
במחלקת הביס נגדיר את הפונקציה כווירטואלית virtual   ובמחלקה היורשת נגדיר את הפונקציה override
ונגדיר לה מימוש שונה - בהרצת התוכנית באובייקטים (דוג') A-B-C יתבצע מימוש כפי שהוגדר במחלקת האב ואילו בD יתבצע מימוש שונה

שים לב !!  לא ניתן לבצע Polymorphism ללא הורשה

הורשה  - abstract
במידה ויש לנו 2 סוגי עובדים בשביל למנוע קוד כפול ניצור מחלקה של עובד ושם השדות הבסיס כמו שם פרטי\ משפחה ו2 מחלקות אחרות שיורשות את השדות בתוספת השדות הייחודים
מה שיוצא זה שיש לנו 3 מחלקות שונות  - בפועל המחלקה הראשונה היא מחלקת בסיס ולא מחלקה שמממשים אותה בקוד  - לכן נגדיר את הקלאס הראשון abstract

  •  לא ניתן ליצור אובייקט ממחלקה אבסרקטית
  •  מחלקה אבסטרקטית יכולה (אבל לא חייבת) להכיל פונקציות אבסטרקטיות
  • לא ניתן לכתוב פונקציה אבסטרקטית במחלקה שהיא לא אבסטרקטית
  • פונקציה אבסרקטית היא פונקציה ללא מימוש ולכן  נכתבת כהצהרה ללא בלוק {} !!
  •  בהורשה של מחלקה אבסטרקטית במידה ויש פונקציה אבסרקטית חובה לממש את הפונקציה



כשעושים הורשה של מחלקה A לB ניתן להכניס אובייקט של B לתוך A
לדוג' יש לנו מחלקת בסיס של אנשים שתחתה  יש בהורשה עובדים\ תלמידים
ואנחנו רוצים ליצור תלמיד אבל שיקבל רק את נתוני בסיס של אנשים 
Person s1 = new student ();
 כעת נוצר לנו סטודנט אבל עם גישה לנתונים של אנשים בלבד !!
ע"מ לגשת למשתנים של סטודנט נצטרך לבצע יחוס
((Student) s1).course = 10;



Protract משתנה מוגן – בין ציבורי לפרטי – רק מחלקות שיורשות מהמחלקה יוכלו לגשת 


Exception Handling ניהול חריגים

בכתיבת תוכנה למשתמש חשוב לתפוס את השגיאות לפני שהן מגיעות לקוד והמערכת עפה

 לדוג' במידה ואני מבקש מהמשתמש להזין מספר בין 1ל 10 נוכל לבצע בדיקות האם הערך שהזין אכן בכללים אך אם יזין טקסט המערכת תעוף כי לא ניתן להכניס מחרוזת לתוך משתנה מסוג מספר
לכן נגיד לתוכנה לנסות לעשות את ההשמה ובמידה ולא מצליח תדלג לקטע הבא שיציג הודעת שגיאה ללא השמה

int x = 0;
            do
            {
                Console.WriteLine("enter number");
                try
                {
                    x = int.Parse(Console.ReadLine());
                }
                catch
                {
                    Console.WriteLine("error");            
   }

            } while (x < 0);

הסבר

  •   יצרנו לולאת DO ע"מ שהמערכת תחזור על הצמה שוב ושוב עד שיוזן ערך תקין
  • השתמשנו בלולאת DO ולא בWHILE רגיל ע"מ שתתבצע הרצה ראשונה לפני הבדיקה
  •  Try = תנסה לבצע – אם הצליח המערכת מדלגת על הקטע הבא ותגיע לתנאי שיגרום ללולאה לרוץ
  •  Catch= תפיסה של השגיאה – מה לבצע במידה ולא הצליחה הקטע הקודם


-        ניתן לבצע את הקוד ללא לולאה ואז הוא ירוץ פעם אחת בלבד

אין תגובות:

הוסף רשומת תגובה

MVC

Web api Front end (צד משתמש) שולח http request     כל אתר מכל מכשיר יכול להתחבר ולקבל נתונים (אין אפליקציה) ולא משנה באיזו שפה ה...