Static and enum קרן כליף.

Slides:



Advertisements
Similar presentations
Object Oriented 33 MCSD DORON AMIR
Advertisements

ממיבחניםC שאלות ++.
מבוא למדעי המחשב לתעשייה וניהול
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
האוניברסיטה העברית בירושלים
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
מתמטיקה בדידה תרגול 3.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
משטר סטטי שערים לוגיים Wired Drives – © Dima Elenbogen 2009, Moshe Malka :29.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מתמטיקה בדידה תרגול 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
ניתוח מערכות מידע ב נעים להכיר... תכנות ב C#.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8 Control (Part II)
1 תרגול 11: Design Patterns ומחלקות פנימיות 1 תוכנה 1.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים פולימורפיזם מתקדם ממשקים בג ' אווה 1.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
מחרוזות – הטיפוס String
תכנות מכוון עצמים ושפת JAVA מ- C++ ל- JAVA
האוניברסיטה העברית בירושלים
תרגול 7: מנשקים, פולימורפיזם ועוד
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
תכנות מכוון עצמים ו- C++ יחידה 05 init line, this, contained class, friend, static קרן כליף.
Tirgul 12 Trees 1.
תכנות מכוון עצמים ו- C++ יחידה 11 תבניות - templates
Operators Overloading
הרצאה 10 פונקציות עם מספר משתנה של פרמטרים
תרגול 7: מנשקים, פולימורפיזם ועוד
מחלקות classes.
מבוא למדעי המחשב סיבוכיות.
הקצאות דינאמיות בשילוב מבנים
מבוא לתכנות מונחה עצמים Object Oriented Programming
ניתוח זמן ריצה (על קצה המזלג)
מצביעים קרן כליף.
SQL בסיסי – הגדרה אינדוקטיבית
תכנות מכוון עצמים ושפת JAVA
תכנות מכוון עצמים ו- C++ יחידה 04 constructors, destructor
תכנות מכוון עצמים ושפת JAVA
תכנות מכוון עצמים בשפת JAVA
ניתוח זמן ריצה (על קצה המזלג)
ממשקים - interfaces איך לאפשר "הורשה מרובה".
© Keren Kalif Servlet קרן כליף.
ניתוח זמן ריצה (על קצה המזלג)
מערכים ומטריצות קרן כליף.
אובייקטים ומחלקות קרן כליף.
ניתוח מערכות מידע תכנות ב C#
תרגול 8 תחומי הכרה פונקציות
תכנות מכוון עצמים ושפת JAVA
תכנות מכוון עצמים ושפת JAVA
סוגי משתנים קרן כליף.
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
תכנות מכוון עצמים ו- C++ יחידה 02 העמסת פונקציות, ערכי ברירת מחדל, enum, קימפול מותנה קרן כליף.
תוכנה 1 תרגול 13 – סיכום.
הכלת אובייקטים קרן כליף.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Presentation transcript:

Static and enum קרן כליף

ביחידה זו נלמד: תכונות סטטיות שיטות סטטיות שימוש בתכונות סטטיות כקבועים המחלקה java.lang.Math המחלקה java.util.Random המחלקה Arrays enum

תכונות סטטיות תכונת מופע (Instance Attribute) עד כה ראינו שתכונה במחלקה משוכפלת עבור כל אובייקט הנוצר מהמחלקה תכונת מחלקה (תכונה סטטית) תכונה שיש עותק אחד שלה עבור כל האובייקטים מהמחלקה כל האובייקטים מאותה מחלקה יכולים לקרוא ולשנות תכונה זו למשל עבור תכונות שערכיהן זהים לכל האובייקטים מהמחלקה דוגמאות: מספר האובייקטים שנוצרו ממחלקה מסויימת כל הסטודנטים שנוצרים רוצים לדעת מי הסטודנט המצטיין (זהה לכולם) תכונה סטטית קיימת עוד לפני שנוצר אפילו אובייקט אחד מהמחלקה

דוגמא: Person משתנה סטטי, מאותחל ל- 0 שימוש במשתנה הסטטי Person.licenseAge=0 Person.licenseAge=21 Person.licenseAge=18 licenseAge = name=“Yoyo” age=19 licenseAge = name=“Momo” age=23 licenseAge = name=“Gogo” age=14 public class Person { private static int licenseAge; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void setLicenseAge(int licenseAge) { this.licenseAge = licenseAge; public String toString() { return ("Name: " + name + "\tAge: " + age + " (can" + (age < licenseAge ? " NOT" : "") + " drive)"); } // class Person משתנה סטטי, מאותחל ל- 0 public static void main(String[] args) { Person p1 = new Person("Gogo", 14); Person p2 = new Person("Momo", 23); Person p3 = new Person("Yoyo", 19); p1.setLicenseAge(18); // same as: p2.setLicenseAge(18); System.out.println(p1.toString()); System.out.println(p2.toString()); System.out.println(p3.toString()); p2.setLicenseAge(21); // same as: p3.setLicenseAge(21); } // main שימוש במשתנה הסטטי

משתנה סטטי כקבוע במחלקה יתכן ונרצה שהמשתנה יהיה קבוע, משמע שלא ניתן לשנותו קבוע זה יהיה משותף לכל האובייקטים מטיפוס המחלקה ולכן נרצה שהוא יהיה חלק מהמחלקה (למשל ADULT_AGE) מאחר וקבוע זה משותף לכל האובייקטים עליו להיות static מאחר והוא קבוע ולא נרצה שישנו אותו נגדיר אותו כ- final מאחר ולא ניתן לשנות את ערכו ניתן להגדיר קבוע זה כ- public מאחר ומשתנה סטטי נוצר לפני יצירת אפילו אובייקט אחד, והוא public ניתן אפילו לגשת אליו ישירות עם שם המחלקה מקובל להגדיר קבועים באותיות גדולות (ראו המלצה זו כמחייבת!)

דוגמא למשתנה סטטי כקבוע במחלקה public static void main(String[] args) { System.out.println("Adult age is " + Person.ADULT_AGE); Person p1 = new Person("Gogo", 14); Person p2 = new Person("Momo", 23); Person p3 = new Person("Yoyo", 19); System.out.println(p1.toString()); System.out.println(p2.toString()); System.out.println(p3.toString()); } // main public class Person { public final static int ADULT_AGE = 18; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return ("Name: " + name + "\tAge: " + age + " (" + (age < ADULT_AGE ? "child" : "adult") + ")"); } // class Person

יצירת ID אוטומטי Person.counter=2 Person.counter=1 Person.counter=0 static void main(String[] args) { Person p1 = new Person("Gogo", 14); System.out.println( + " persons have been created"); Person p2 = new Person("Momo", 23); + " persons have been created"); } // main p1.getNumOfPersons() p1.getNumOfPersons() public class Person { private static int counter; private String name; private int age; private int id; public Person(String name, int age) { this.name = name; this.age = age; id = } public int getNumOfPersons() { return counter; public String toString() { return "Id: " + id + "\tName: " + name +"\tAge: " + age; } // class Person Person.counter=2 Person.counter=1 Person.counter=0 “Gogo” 14 “Momo” 23 counter = name = ? age = ? id = ? counter = name = “Momo” age = 23 id = ? counter = name = “Momo” age = 23 id = 2 counter = name = ? age = ? id = ? counter = name =“Gogo” age =14 id =? counter = name =“Gogo” age =14 id =1 ++counter;

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

דוגמא: החזרת מספר האנשים שנוצרו public static void main(String[] args) { System.out.println(Person.getNumOfPersons() + " persons have been created"); Person p1 = new Person("Gogo", 14); Person p2 = new Person("Momo", 23); System.out.println(p1.getNumOfPersons() + " persons have been created"); System.out.println(p2.getNumOfPersons() + " persons have been created"); } קריאה לשיטה הסטטית בעזרת שם המחלקה public class Person { private static int counter; private String name; private int age; private int id; public Person(String name, int age) { this.name = name; this.age = age; id = ++counter; } public static int getNumOfPersons() { return counter; public String toString() { return "Id: " + id + "\tName: " + name +"\tAge: " + age; } // class Person קריאה לשיטה הסטטית בעזרת אובייקט שיטה סטטית

מחלקות הנותנות שירותים ישנן מחלקות שרק נותנות שירותים, כלומר יש להן אוסף שיטות ללא תכונות במחלקה כזו כל השיטות הן סטטיות, שכן אם אין תכונות, אין משמעות לאובייקט יתכן ומחלקה זו גם תכיל אוסף של קבועים למשל, המחלקה Math

המחלקה Math המחלקה Math מכילה שיטות מתמטיות, שכולן סטטיות וכן משתנים סטטיים דוגמאות: הקבועים E ו- PI השיטות: Abs Cos Pow Sqrt ועוד רבות, מומלץ להסתכל!

המחלקה Math – דוגמת שימוש

תזכורת: קבלת מספרים אקראיים השיטה random מחזירה מספר עשרוני בטווח 1-0

תזכורת: קבלת מספרים אקראיים בטווח מסויים נכפיל את הערך המוחזר במספר המספרים שנרצה בטווח, ונעשה casting ל- int

אובייקט מהמחלקה Random מגריל ערכים בהתפלגות נורמלית מדוע במחלקה Math מתודת ההגרלה הינה סטטית ובמחלקה Random יש צורך לייצר אובייקט על מנת להפעילה? המחלקה Random אובייקט מהמחלקה Random מגריל ערכים בהתפלגות נורמלית

המחלקה Arrays Arrays.copyOf היא שיטה סטטית המקבלת כפרמטר מערך להעתקה ואת הגודל של המערך החדש. השיטה מבצעת השמה בין איבר לאיבר. אם גודל המערך החדש יותר גדול, שאר איבריו יאופסו. Arrays.equals היא שיטה סטטית המקבלת 2 מערכים ובודקת האם הם שווים: האם אורכם זהה והאם האיברים במקומות המתאימים זהים Arrays.toString היא שיטה סטטית המקבלת כפרמטר מערך ומחזירה מחרוזת כך שאיברי המערך מופרדים ע"י פסיק

אבחנה בין העתקת מערך לבין העתקת הפניה 1 2 5 4 1 2 3 4 1 2 3 4 1 2 3 6 כלומר, העתקת מערך יוצרת מופע נוסף בלתי תלוי של האובייקט, בעוד שהשמה רק משנה את ההפניה.

כיצד עובדת השיטה Arrays כיצד עובדת השיטה Arrays.copyOf עבור אובייקטים )מייצרת העתקים או הפניות לאובייקטים) ? מאחר ושינוי במערך אחד גרר שינוי במערך השני, משמע השיטה אינה מייצרת העתקים לאובייקטים, אלא רק מבצעת השמה. public static void main(String[] args) { Point[] arr = new Point[3]; for (int i=0 ; i < arr.length ; i++) arr[i] = new Point(i, i); Point[] copyArr = Arrays.copyOf(arr, arr.length); arr[0].setX(77); System.out.println(Arrays.toString(arr)); System.out.println(Arrays.toString(copyArr)); } . X=0 Y=0 X=77 Y=0 X=1 Y=1 X=2 Y=2 ??? . X=0 Y=0 X=1 Y=1 X=2 Y=2 .

Arrays ואובייקטים – דוגמא נוספת . X=77 Y=0 X=0 Y=0 X=88 Y=1 X=1 Y=1 X=2 Y=2 X=3 Y=3 . X=5 Y=5 X=6 Y=6 עכשיו: ל- arr1 ו- arr3 יש הפניה יחודית לאיבר באינדקס 2 ל- arr2 יש הפניה יחודית לאיבר באינדקס 3

מהו enum enum הינו טיפוס חדש שהוא תת-קבוצה של מספרים שלמים: כל איבר בקבוצה מכיל ערך סידורי קבוע (החל מ- 0) ושם האיברים בקבוצה בעלי קשר לוגי ניתן להגדיר משתנה מטיפוס הקבוצה וערכו יהיה רק מקבוצת הערכים שהוגדרו עבורו

דוגמת שימוש הגדרת קבוצת קבועים ע"י enum מתן ערך למשתנה מטיפוס הקבוצה קבלת הערך המספרי של הקבוע קבלת השם של הקבוע קבלת מערך עם כל איברי הקבוצה

דוגמה – קליטה מהמשתמש לתוך משתנה מטיפוס enum קליטת ערך למשתנה באמצעות קבלת שם הקבוע. אם יוכנס ערך שאינו בקבוצה תיזרק חריגה. פניה בהדפסה למשתנה מטיפוס enum באופן אוטומטי מחזירה את הפעולה name

הגדרת enum בתוך מחלקה הגדרת טיפוסים חדשים הגדרת משתנים מטיפוסי ה- enum

דוגמה – enum עבור החזרת הצלחה/כשלון ממתודה

דוגמה – enum עבור החזרת הצלחה/כשלון ממתודה

דוגמה – enum עבור החזרת הצלחה/כשלון ממתודה

דוגמה – enum עבור החזרת הצלחה/כשלון ממתודה

דוגמה – enum עבור החזרת הצלחה/כשלון ממתודה

דוגמה – enum עבור החזרת הצלחה/כשלון ממתודה

ביחידה זו למדנו: תכונות סטטיות שיטות סטטיות © Keren Kalif תכונות סטטיות שיטות סטטיות שימוש בתכונות סטטיות כקבועים המחלקה java.lang.Math המחלקה java.util.Random המחלקה Arrays enum

תרגיל 1: המחלקה Employee © Keren Kalif כתוב את המחלקה Employee ששדותיה הם: מספר העובד (מספר אוטומטי החל מ 1000) שם העובד המחלקה אליה הוא שייך (ערך אחד מתוך: QA, RnD, Finance) מספר שנות הניסיון המינימלי לעובד בחברה (ערך זה יכול להשתנות מעת לעת) כתבו בנאי, מתודות set ו- get וכן מתודת toString כתבו main הבודק את המחלקה

תרגיל 2: המחלקה Clock כתבו את המחלקה Clock שנתוניה הם שעה ודקות © Keren Kalif כתבו את המחלקה Clock שנתוניה הם שעה ודקות הגדירו במחלקה את הקבועים 24 ו- 60 עבור הערך המקסימלי לשעות ודקות בהתאמה הוסיפו את התכונה format מטיפוס enum אשר תעיד האם יש להציג את השעון בפורמט של 12 או 24 שעות. נתון זה יהיה משותף לכל האובייקטים מהמחלקה כתבו בנאי המקבל את כל הנתונים הרלוונטים לאובייקט ספציפי (חישבו אילו תכונות עליו לקבל) ובנאי העתקה כתבו שיטות set ו- get (אילו מהן יהיו static?). שיטות ה- set יחזירו ערך הצלחה או כשלון באמצעות enum שיעיד האם הערך שהתקבל תקין, נמוך או גבוה מדיי לטווח כתבו את המתודה toString שתחזיר מחרוזת עם נתוני האובייקט בפורמט המתאים בהתאם לערך התכונה format כתבו main הבודק את המחלקה