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

Slides:



Advertisements
מצגות קשורות
תוכנה 1 בשפת Java שיעור מספר 5: עצמים
Advertisements

© Keren Kalif JPA קרן כליף.
הרצאה 02 סוגי משתנים קרן כליף.
יצירת מקרו הפעלת מקרו יצירת לחצן / פקד דוגמה מסכמת
תוכנה 1 בשפת Java שיעור מספר 9: "יוצא מן הכלל"
מבוא לתכנות ב-JAVA מעבדה 1
תוכנה 1 תרגול 13 – סיכום.
תרגול 1: סביבת העבודה ומבוא ל-Java
תוכנה 1 בשפת Java שיעור מספר 4: מחלקות
עקרונות WEB2.0 ועולם ניהול הידע הארגוני
פינוק מסביב לעולם מחזות זמר הסבר הזמנה ומימוש.
נערך ע"י אריק הוד, הגימנסיה העברית הרצליה
תוכנה 1 תרגול 12 – סיכום.
תרגול מס' 8 משתנים מיוחסים מבוא ל-C++ קלט/פלט ב-C++
כל הזכויות שמורות לגבריאל אנקרי © 2017
תוכנה 1 בשפת Java שיעור מספר 10: "ירושה נכונה" (הורשה II)
תכנות בשפת C תרגול 11 רשימות מקושרות מבנים
תרגול Introduction to C - Fall Amir Menczel.
פעולות אריתמטיות קרן כליף.
תירגול 11: מיונים וחיפוש בינארי
תוכנה 1 בשפת Java שיעור מספר 13: "אל תסתכל בקנקן"
נערך ע"י אריק הוד הגימנסיה העברית הרצליה
תזרים מזומנים.
Entity Relationship Diagram – ERD
חשבון זה הוא חלק ממוצרי 365 ומקושר לתיבת המייל
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
תרגול 6: פונקציות, סוגי משתנים, top-down design
פינוק מסביב לעולם הסבר הזמנה ומימוש.
תוכנה 1 בשפת Java שיעור מספר 5: מנשקים תחילה
© האוניברסיטה העברית בירושלים, 2008
כל הזכויות שמורות לגבריאל אנקרי © 2017
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
Web Services Delegates and Events ליווי מקצועי : ארז קלר
מבוא לתכנות מונחה עצמים Object Oriented Programming
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
תורת הקומפילציה תרגול 9: תרגום לקוד ביניים
פרופ' מוטי בן-ארי המחלקה להוראת המדעים מכון ויצמן למדע
מבוא לתכנות למערכות מידע
Computer Architecture and System Programming Laboratory
אלגוריתמי מיון רקורסיביים
המשך תכנות מונחה עצמים תרגול מס' 9.
כל הזכויות שמורות לגבריאל אנקרי © 2017
תרגול 13 : חזרה נכתב על-ידי לימור ליבוביץ נערך ע"י ישראל גוטר
תוכנה 1 בשפת Java שיעור מספר 8: "ירושה נכונה" (הורשה II)
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
תוכנה 1 תרגול - Generics.
תוכנה 1 תשס"ח סמסטר ב' אוהד ברזילי ליאור שפירא
מבוא לתכנות ב- JAVA מעבדה 4
מבוא לתכנות בWINDOWS ד"ר אבי רוזנפלד.
מבוא למדעי המחשב סמסטר ב' – 2008 מרצה: יעל סיגל מתרגל: ענבל בודובסקי.
Introduction to Programming in C
עקרונות תכנות מונחה עצמים תרגול 8: OOP in C++
מצביעים Pointers – המשך...
תוכנה 1 - תרגול תרגיל – חברת הייטק בית הספר למדעי המחשב
איך להפוך נחושת לזהב? כנס מורי כימיה דצמבר 2015.
(או כיצד ללמוד בצורה נכונה מתחילת הסמסטר)
(או כיצד ללמוד בצורה נכונה מתחילת הסמסטר)
מעבדה 2- עיצוב (עבור חלק ג)
תוכנה 1 בשפת Java שיעור חזרה
מבנה מחשבים ספרתיים תרגול מס' 4: זכרון מטמון 2.
עקרונות תכנות מונחה עצמים תרגול 9:C++ - תרגילים
תוכנה 1 בשפת Java שיעור מספר 10: "ירושה נכונה" (הורשה II)
תוכנה 1 בשפת Java שיעור מספר 11: חידושים ב Java 8
Engineering Programming A
תמליל מצגת:

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

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

קשר הכלה כקשר 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;} }

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

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

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

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

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

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

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

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

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

מה יקרה כאן? 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); }

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

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

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

לפניך דוגמא: 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 יכול להמשיך להתקיים גם ללא

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

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

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