הכלת אובייקטים קרן כליף.

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
קורס Java מתקדם Design Patterns
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
מבני בקרה לולאות. שאלה #1 שאלה ב' – תכתוב תוכנה הכותבת את תפריט הבאה Type 1 to find the area of a circle Type 2 to find the circumference of a circle.
תרגול 10: הכרות עם ++C ++C כ- C משופר
הפקולטה למדעי המחשב אוטומטים ושפות פורמליות (236353)
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
עקרון ההכלה וההדחה.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
1 Abstract Classes האם קיים אובייקט בשם רהיט? האם קיים אובייקט בשם כלי תחבורה? האם קיים אובייקט בשם כלי כתיבה? האם קיים אובייקט בשם אדם? האם קיים אובייקט.
המשך תכנות מונחה עצמים 1. היום בתרגול  הורשה  שיטות מיוחדות  פולימורפיזם 2.
ניתוח מערכות מידע ב נעים להכיר... תכנות ב C#.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
עקרונות תכנות מונחה עצמים תרגול 11: OOP in C++. Outline  Where do the objects live ?  Inheritance  Slicing  Overriding vs Shadowing.
Java Reflection הוכן על-ידי אחמד ג'בארה
תכנות מכוון עצמים ושפת JAVA מ- C++ ל- JAVA
שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Object Oriented Programming
Tirgul 12 Trees 1.
Object Oriented Programming
תכנות מכוון עצמים ו- C++ יחידה 11 תבניות - templates
Operators Overloading
Formal Specifications for Complex Systems (236368) Tutorial #1
Object Oriented Programming
Object Oriented Programming
מבוא למדעי המחשב סיבוכיות.
הקצאות דינאמיות בשילוב מבנים
מבוא לתכנות מונחה עצמים Object Oriented Programming
מצביעים קרן כליף.
תירגול 14: מבני נתונים דינאמיים
הרצאה 06 רשימות מקושרות קרן כליף.
תכנות מכוון עצמים ושפת JAVA
Static and enum קרן כליף.
תכנות מכוון עצמים ושפת JAVA
עבודה עם נתונים באמצעות ADO.NET
תכנות מכוון עצמים בשפת JAVA
ממשקים - interfaces איך לאפשר "הורשה מרובה".
© Keren Kalif Servlet קרן כליף.
אובייקטים ומחלקות קרן כליף.
ניתוח מערכות מידע תכנות ב C#
תכנות מכוון עצמים ושפת JAVA
תכנות מכוון עצמים ושפת JAVA
הכמסה – Encapsulation עקרון ההכמסה
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Presentation transcript:

הכלת אובייקטים קרן כליף

ביחידה זו נלמד: הכלת מחלקות מתי נחזיק העתק ומתי הפניה

הכלת מחלקות: מוטיבציה וכיצד זה עובד כאשר יש מחלקה שאחד השדות שלה הוא מחלקה אחרת דוגמא: נתוני המחלקה "עיגול" יהיו "נקודה" המיצגת את המרכז ואורך הרדיוס נתוני המחלקה "נקודה" הן קאורידנטת ה- x וקאורדינטת ה- y כאשר אובייקט מכיל אובייקט אחר, הוא למעשה מכיל הפניה לאובייקט המוכל (אלא אם המוכל נוצר ע"י new) תזכורת: העברת אובייקטים לשיטה היא by ref, כלומר מועברת הפניה לאובייקט ולא העתק שלו

הקוד 1 1 5 public class Point { private int x, y; public Point(int x, int y) { setX(x); setY(y); } public Point(Point other) { this(other.x, other.y); public String toString() { return "(" + x + ", " + y + ")"; public void setX(int x) {this.x = x;} public int getX() {return x;} public void setY(int y) {this.y = y;} public int getY() {return y;} } // class Point public class Circle { private Point center; private int radius; public Circle(Point center, int radius) { this.center = center; this.radius = radius; } public String toString() { return "center: " + center.toString() + ", radius: " + radius; public int getRadius() {return radius;} public Point getCenter() {return center;} } // class Circle 1 1 5 public class Program { public static void main(String[] args) { Point p = new Point(1, 1); Circle c = new Circle(p, 5); System.out.println("c is " + c.toString()); p.setX(0); c.getCenter() } x=0 y=0 x=0 y=1 x=1 y=1 x=0 y=20 Point: p Circle: c center = radius = 0 .setY(20); center = radius = 5

הבעיה: ראינו שהאובייקט Circle מכיל הפניה לאובייקט המוכל מטיפוס Point כלומר, שינוי באובייקט המוכל מה- main גורר שינוי באובייקט Circle לא בהכרח נרצה שינוי זה או נהייה מודעים לו (ככותבי המחלקה אנו לא יודעים כיצד ישתמשו במחלקה שלנו, ונרצה להגן עליה) הפתרון: במחלקה המכילה נחזיק העתק של האובייקט המוכל

הקוד 1 1 5 public class Point { private int x, y; public Point(int x, int y) { setX(x); setY(y); } public Point(Point other) { this(other.x, other.y); public String toString() { return "(" + x + ", " + y + ")"; public void setX(int x) {this.x = x;} public int getX() {return x;} public void setY(int y) {this.y = y;} public int getY() {return y;} } // class Point public class Circle { private Point center; private int radius; public Circle(Point center, int radius) { this.center = center; this.radius = radius; } public String toString() { return "center: " + center.toString() + ", radius: " + radius; public int getRadius() {return radius;} public Point getCenter() {return center;} } // class Circle 1 1 5 public class Program { public static void main(String[] args) { Point p = new Point(1, 1); Circle c = new Circle(p, 5); System.out.println("c is " + c.toString()); p.setX(0); c.getCenter() } x=0 y=1 x=1 y=1 x=1 y=20 x=1 y=1 x=0 y=0 Point: p Circle: c center = radius = 0 .setY(20); center = radius = 5

דוגמת הכתובת ובית הספר (1) דוגמת הכתובת ובית הספר (1)

דוגמת הכתובת ובית הספר (2) את כתובת הבית נשמור כהעתק ואת כתובת בית הספר כהפניה

ה- main public class Program { public static void main(String[] args) { Address school = new Address("Balfur", 10, "Tel-Aviv"); Address home = new Address("Geula", 20, "Tel-Aviv"); Student stud1 = new Student("gogo", home, school); home.setHouseNumber(8); Student stud2 = new Student("momo", home, school); school.setHouseNumber(90); stud2.getHomeAddress() } ה- main street=“Balfur” number=90 city=“Tel-Aviv” street=“Balfur” number=10 city=“Tel-Aviv” street=“Geula” number=8 city=“Tel-Aviv” street=“Geula” number=20 city=“Tel-Aviv” .setHouseNumber(30); street=“Geula” number=20 city=“Tel-Aviv” name=“gogo” homeAddress= schoolAddress= Address: school Address: home Student: stud1 Student: stud2 street=“Geula” number=30 city=“Tel-Aviv” street=“Geula” number=8 city=“Tel-Aviv” name=“momo” homeAddress= schoolAddress=

אובייקט מוכל: מתי נחזיק העתק ייחודי ומתי הפניה לאובייקט אחר ננתח את המערכת הבאה המנהלת את כוח-האדם בחברה: במחלקת ה- HR יש נתונים על כל העובדים בחברה בכל אגף יש נתונים על העובדים השייכים אליו ה- HR אינה מקושרת למשרד הפנים, ולכן יהיה צורך לעדכן אותה בכל שינוי בנתוניו של עובד כלשהו ה- HR באופן בלעדי אחראית על שינוי נתוני העובדים בחברה

אובייקט מוכל: מתי נחזיק העתק ייחודי ומתי הפניה לאובייקט אחר HR Employee[] allEmployees Employee[] allEmployees Employee[] allEmployees Employee[] allEmployees name: qa name: r&d name: finance Department[] allDepartments

אובייקט מוכל: מתי נחזיק העתק ייחודי ומתי הפניה לאובייקט אחר (2) מחלקת ה- HR מחזיקה את נתוני העובדים באופן ייחודי, כלומר אין אליהם הפניה ממקור חיצוני למערכת (למשל ה- main) שינוי נתוני העובד במשרד הפנים (main) ידרוש עדכון גם ב- HR כך גם ה- HR מגנה על הנתונים הספציפיים לה, כגון משכורת העובד. לא נרצה שב- main ניתן יהיה לשנות ערך זה ללא בקרה או ללא בקשה מפורשת מה- HR לעומת זאת, מאחר וכל נתוני העובדים נשמרים ב- HR, מספיק שכל אגף בחברה תחזיק הפניה לעובדים המשוייכים אליו, מתוך מאגר העובדים המוחזק ע"י ה- HR. שינוי בנתוני עובד ב- HR תעדכן מיידית בנתוניו באגף, ולהיפך.

הקוד

הקצאת מערך האובייקטים

הפניה לאובייקט שהתקבל

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

יש לשקול להחזיר int שונה בכל מקרה במקום boolean. העתק לאובייקט שהתקבל המתודה addEmployee מחזירה false במידה ולא הצליחה. ה- main שמקבל את ה- false אינו יכול לדעת האם המתודה נכשלה כי אין מקום או האם בגלל שהמחלקה אינה קיימת. יש לשקול להחזיר int שונה בכל מקרה במקום boolean.

ה- Program

ה- Program

ה- Program

ה- Program

ה- Program

דוגמת פלט

דוגמת פלט ניסיון הכנסת עובד למחלקה שאינה קיימת. היה עדיף שתוצג הודעה מתאימה האם אולי נכשל כי אין מקום.

דוגמת פלט

דוגמת פלט

דוגמת פלט

ביחידה זו למדנו: © Keren Kalif הכלת מחלקות מתי נחזיק העתק ומתי הפניה

תרגיל: מערכת ניהול הנסיעות בחברת אוטובוסים בחברת אוטובוסים לכל אוטובוס יש מספר לוחית רישוי ומספר מקומות ישיבה נתון כי בחברת אוטובוסים יכולים להיות עד 100 אוטובוסים וכן יש לשמור את שם החברה יש לתמוך בהוספת אוטובוס למאגר, והסרת אוטובוס מהמאגר (הסרה עפ"י מספר לוחית הרישוי) כתבו מתודת toString בכל אחת מהמחלקות כתבו main הבודק את המחלקות

תרגיל: מערכת ניהול הנסיעות בחברת אוטובוסים (המשך) המערכת מחזיקה את קווי הנסיעה (מספר הקו, מקור ויעד) ניתן להניח שבמערכת יש עד 50 קווים המערכת מנהלת את הנסיעות: נתוני נסיעה: תאריך, שעת יציאה, קו הנסיעה, האוטובוס המשובץ לנסיעה יש לאפשר עדכון נתוני הנסיעה יש לאפשר הוספה והסרה של נסיעות מלוח הזמנים ניתן להניח שהמערכת תומכת עד 1000 נסיעות כתבו main הבודק את המחלקות