המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית

מצגות קשורות


מצגת בנושא: "שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית"— תמליל מצגת:

1 שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית
הכלה שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית

2 Reuse אחד מהיתרונות של כתיבה נכונה בשפות מונחות עצמים זה היכולת שלנו לעשות שימוש חוזר בקוד שנכתב. הדוגמא הפשוטה ביותר של זה הוא שימוש במחלקה שכבר נכתב ושילובו בתוך המחלקה החדשה לדוגמא:

3 קשר הכלה כקשר has A כפי שראינו בדוגמא הקודמת – A car has A engine
אם הגדרת מחלקה : class Engine {…} כאשר אני בא לבנות מכונית אני אשתמש במחלקה שהגדרתי קודם . class Engine{ private bool state; public void SwitchOn ( ){state = true;} public void SwitchOff () {state = false;} public bool IsOn( ) { return state;} }

4 כעת נגדיר מחלקת מכונית: class Car} private Engine engine; private int noOfPlaces; public void SwitchOn( ){ engine.SwitchOn(); } כלומר למרות שבניתי מחלקת מכונית, אני לא חייב לדעת את המבנה הפנימי של מחלקת מנוע אלא אני יכולה לעשות שימוש בו

5 סוגי הכלות שונות יש גישות שונות בהכלה ונדגים את זה באופן הבא: נגדיר מחלקה עובד. המאפיינים של העובד הם מס' עובד, שם עובד, תאריך לידה ומחלקה בה הוא עובד. חלק מהמאפיינים הם מסוג פרימיטיבי וחלק הם מחלקות איזה לדעתך מסוג פרימיטיבי ואיזה מסוג מחלקה?

6 מאפיינים מאפיין סוג מאפיין מס' עובד Integer שם עובד
String (מחלקה – ספריית #C) תאריך לידה Date (מחלקה - מחלקה שהגדרנו) מחלקה Department (מחלקה - מחלקה שנגדיר)

7 הגדרת מחלקה : מחלקה המחלקה שלנו מכילה את המאפיינים הבאים: קוד מחלקה, שם מחלקה (ולאלו שאוהבים להסתבך) מנהל מחלקה הפעולות האפשריות הם אחזר שם מחלקה, שנה שם מחלקה, אחזר מספר מחלקה

8 מה אנחנו עושים? הגדרנו עובד ויש לו את המאפיינים הבאים: ת"ז עובד
שם עובד תאריך לידה. נגדיר את זה כך ב-C# class Worker{ private int Id; private string name; private Date dob; הכלה

9 המאפיין תאריך לידה הוא מסוג מחלקה קיימת
המאפיין תאריך לידה הוא מסוג מחלקה קיימת. לדבר זה יש יתרונות ויש גם חסרונות. יתרונות: יחידה מוכנה שמפשטת את הכתיבה. מתפקידה של תאריך לטפל בכל מה שקושר לתאריך ולכן כאשר אנחנו מגדירים Worker, אנחנו פתורים מלדאוג ל- Date קיצור כתיבת הקוד – אנחנו יכולים לבצע פעולות על ידי זימון פעולות מוכנות ביחידה המוכלת.

10 לדוגמא: אני מעונין לדעת מי הם העובדים שנולדו באותו יום. כיצד ניתן לעשות ? אפשרות 1 return (worker1.getDOB( ).getYear( ) == worker2.getDOB( ).getYear( ) && worker1.getDOB( ).getMonth( ) == worker2.getDOB( ).getMonth( ) && worker1.getDOB( ).getDay( ) == worker2.getDOB( ).getDay( ) ) מימוש זה מחייב שלמשתמש יהיה היכרות חלקי עם מבנה התאריך ויכנס ללוגיקה.

11 return worker1.getDOB( ).equals (worker2.getDOB( ));
אפשרות 2: return worker1.getDOB( ).equals (worker2.getDOB( )); כאן אנחנו פטורים מלהבין כיצד מאורגן התאריך ואנחנו יכולים להיעזר בפעולה שכתובה במחלקת תאריך דוגמא שניה: איך כותבים ToString( ) עבור Worker? return “Worker name: “ + name + “dob : “ + dob.ToString ( ) ….

12 איפה הבעיה? בנאי Worker: public Worker (int id; string name, Date dob){ this.id = id; this.name = name; this.dob = dob; } this.dob מכיל הפניה תאריך שנשלח עליו.

13 מה יקרה כאן? public static void Main (string[] args){ Date date = new Date (1,1,1987); Worker w = new Worker (1,”Ami”,date); Console.WriteLine (w); date.set (1,2,1990); }

14 מה שיודפס: Id : 1 Name: Ami DOB : 1/1/1987 Id : 1 Name : Ami DOB : 1/2/1990 כלומר – ברגע ששינו את האובייקט date שינו את תאריך יום ההולדת של העובד. איך date 1| 1 | 1987 | Ami | 1 w

15 יצירת תאריך חדשה ושמירת ההפניה במאפיין DOB
תיקון הבעיה במקום לשמור הפניה לתאריך נשמור עותק של התאריך. public Worker (int id; String name, Date dob){ this.id = id; this.name = name; this.dob = dob.copy( ); } יצירת תאריך חדשה ושמירת ההפניה במאפיין DOB

16 הכלה - aggregation מאפיין נוסף של העובד הוא המחלקה בו הוא עובד. לצורך כך נבנה מחלקה נוספת – Department האם ההתנהגות של department הוא דומה להתנהגות של date? המאפיין מסוג Date הוא ייחודי בעצם לכל אובייקט של worker (יתכן שחלק מהעובדים יוולדו באותו יום אבל זה במקרה) המאפיין מסוג Department הוא יכול להיות משותף לכמה עובדים.

17 לפניך דוגמא: Department d1 = new Department ( 1, “R&D”); Worker w = new Worker (2, “Rachel”, new Date (2,3,1978), d1); System.out.println (w); d1.setName (“Research & Development”); גם כאן תחילה נדפיס ששם המחלקה הוא R&D אבל אח"כ הוא ישתנה והוא ישתנה אצל כל העובדים. סוג הקשר הוא "רופף" יותר והאובייקט d1 יכול להמשיך להתקיים גם ללא

18 תרגיל נגדיר את המחלקות הבאות:
כתובת: כתובת היא מחלקה המכילה את המאפיינים הבאים שם רחוב מספר בית שם העיר מיקוד השיטות למימוש: אחזר רחוב, אחזר מס' בית, אחזר עיר ואחזר מיקוד. שנה רחוב, שנה מס' בית, שנה עיר, שנה מיקוד toString( ), equals( ) , copy( )

19 המחלקה מכילה את הנתונים של בעל חשבון בבנק.
מחלקת בעל חשבון: המחלקה מכילה את הנתונים של בעל חשבון בבנק. המחלקה תכיל את המאפיינים הבאים: מס' לקוח שם לקוח כתובת לקוח השיטות למימוש: אחזר מס' לקוח, אחזר שם לקוח, אחזר כתובת לקוח שנה שם לקוח, שנה כתובת toString( ) , equals( )

20 המחלקה מכילה את הנתונים של בעל חשבון בבנק.
מחלקת חשבון: המחלקה מכילה את הנתונים של בעל חשבון בבנק. המחלקה תכיל את המאפיינים הבאים: לקוח יתרה השיטות למימוש: אחזר לקוח, אחזר יתרה הפקד כסף, משוך כסף, שנה לקוח toString( ) , equals( )


הורד את "ppt "שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית

מצגות קשורות


מודעות Google