Содержание

Слайд 2

עד עתה – תכונות שייכות לעצם public class Student { private

עד עתה – תכונות שייכות לעצם

public class Student {
private String name;
private

double grade;
public Student(String name, double grade) {
this.name = name;
this.grade = grade;
}
}
Слайд 3

תלמידי בית הספר public class Student { private String name; private

תלמידי בית הספר

public class Student {
private String name;
private double grade;
public Student(String

name, double grade) {
this.name = name;
this.grade = grade;
}

סוס טרויאני ?!?!?!?
אין שיטה בונה !!!

Слайд 4

יצירת עצמים Student avi = new Student(…); Student dani = new Student(…);

יצירת עצמים

Student avi = new Student(…);

Student dani = new Student(…);

Слайд 5

יצירת עצמים Student avi = new Student(…); Student dani = new

יצירת עצמים

Student avi = new Student(…);

Student dani = new Student(…);

התכונות שייכות

לעצמים avi ו-dani
גישה פרטית מתוך העצם לערכים.
אין קשר בין הערכים בשני העצמים.
שניהם לפי תבנית המחלקה
Слайд 6

מספר סידורי לתלמידים בית הספר מבקש לתת לכל תלמיד מספר סידורי

מספר סידורי לתלמידים

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

רצוף.
ניצור לכל תלמיד תכונה חדשה 'מספר סידורי'.
אבל !!! זו דרישה לקשר בין עצמים שונים מאותה מחלקה: ‹ צריך לדעת מי היה התלמיד הקודם שנוצר. ‹ צריך לדעת מה היה מספרו הסידורי. ‹ צריך לספור באופן רצוף.
Слайд 7

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

איבר של מחלקה

מספר סידורי הוא אכן תכונה ייחודית לכל תלמיד.
אבל מונה

המספרים הסידוריים הינו משתנה המשרת את כל העצמים במחלקה. ‹ הוא מאותחל ל-0 לפני שנוצר עצם כלשהו. ‹ ערכו עולה ב-1 בזמן יצירת העצם. ‹ ערכו מועתק למספר הסידורי של התלמיד.
מונה המספרים אינו משוייך לתלמיד ספציפי.
Слайд 8

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

איבר של מחלקה

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

כלשהו, קרוי
איבר של מחלקה
Слайд 9

איבר של מחלקה הצהרה ב-Java: public class Student { private static

איבר של מחלקה

הצהרה ב-Java:

public class Student {
private static int counter

= 0;
private int id;
private String name;
private double grade;

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

Слайд 10

public static int counter = 0; private – מאפשר גישה מהמחלקה

public static int counter = 0;

private – מאפשר גישה מהמחלקה

בלבד
static – מגדיר את המשתנה כמשתנה מחלקה
אתחול – כבר בשלב ההגדרה
Слайд 11

public static int counter = 1; private – מאפשר גישה מהמחלקה

public static int counter = 1;

private – מאפשר גישה מהמחלקה

בלבד
static – מגדיר את המשתנה כמשתנה מחלקה
אתחול – כבר בשלב ההגדרה

Java יוצרת משתנה אחד עבור כל העצמים
לכל עצם יש גישה אליו.
כל עצם יכול לשנות את ערכו

Слайд 12

שימוש במשתנה מחלקה public Student(String name, double grade) { this.name =

שימוש במשתנה מחלקה

public Student(String name, double grade) {
this.name = name;
this.grade =

grade;
this.counter++;
this.id = this.counter;
}
Слайд 13

יצירת עצמים Student avi = new Student(…); Counter = 1 Student

יצירת עצמים

Student avi = new Student(…);
Counter = 1

Student dani = new

Student(…);

Counter = 2

Counter = 3

Слайд 14

התמונה המדוייקת counter יש עותק אחד בלבד של המשתנה counter

התמונה המדוייקת

counter

יש עותק אחד בלבד של המשתנה counter

Слайд 15

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

שיטות מחלקה

בג'אווה, הגישה לתכונות הינה באמצעות שיטות המשוייכות לעצם ספציפי.
איך ניגש

לתכונות מחלקה, שאינן משוייכות לעצם?
באמצעות שיטות מחלקה.
Слайд 16

getCounter() public static int getCounter() { return this.counter; } שיטות סטטיות נגישות לתכונות סטטיות בלבד !!!

getCounter()

public static int getCounter() {
return this.counter;
}

שיטות סטטיות נגישות לתכונות סטטיות בלבד

!!!
Слайд 17

getCounter() public static int getCounter() { return this.counter; } שיטות סטטיות

getCounter()

public static int getCounter() {
return this.counter;
}

שיטות סטטיות נגישות לתכונות סטטיות בלבד

!!!

אבל... איך משתמשים בשיטה ????

Слайд 18

שימוש בשיטות מחלקה כמה תלמידים נוצרו ? public static void main(String[]

שימוש בשיטות מחלקה

כמה תלמידים נוצרו ?
public static void main(String[] args) {

int num = Student.getCoutner();
System.out.printtln(num);
}
Слайд 19

שימוש בשיטות מחלקה כמה תלמידים נוצרו ? public static void main(String[]

שימוש בשיטות מחלקה

כמה תלמידים נוצרו ?
public static void main(String[] args) {

int num = Student.getCoutner();
System.out.printtln(num);
}

פנייה אל המחלקה,
אליה שייכת השיטה

Слайд 20

Pro’s and Con’s המשתנה הסטטי חוסך זכרון מאפשר קשר בין עצמים

Pro’s and Con’s

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

המחלקה
מבצע בפשטות פעולה שהן מסובכות בלעדיו.
שובר את ההגיון של עצם ומחלקה סגורים.
פתח להשפעות הדדיות של עצמים זה על זה.
פתח לטעויות.
Слайд 21

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

קבועים בשימוש המחלקה

אין טעם ליצור משתנה קבוע עבור כל עצם.
כמו כן,

בגלל שהוא קבוע, אין חשש שישונה.
לכן, נהוג ליצור קבועים של מחלקה באופן הבא:
public static double GRAVITY = 9.81;
לקבועים אלה ניתן לגשת גם מחוץ למחלקה:
double newton =
avi.getMass() * Student.GRAVITY;
זאת בהנחה שהגדרנו את הקבוע במחלקה Student
Слайд 22

פעולות שאינן קשורות לעצם יש לא מעט פעולות שאינן קשורות לעצם:

פעולות שאינן קשורות לעצם

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

כך יוצרים 'מחלקות שירות' שכל תפקידן לספק את השירותים האלה.
Слайд 23

למשל – המחלקה MATH http://java.sun.com/j2se/1.3/docs/api כל התכונות קבועים סטטים (E, PI)

למשל – המחלקה MATH

http://java.sun.com/j2se/1.3/docs/api
כל התכונות קבועים סטטים (E, PI)
כל השיטות

סטטיות, למשל
public static int abs(double d)
חוסך יצירת עצם חסר משמעות.
Слайд 24

סטטי – JAVA – C למעשה, שיטות סטטיות זהות לפונקציות ב-C,

סטטי – JAVA – C

למעשה, שיטות סטטיות זהות לפונקציות ב-C, כי

אינו משוייכות לעצם.
כך גם יוצרים ריקורסיה ב-java: שיטה סטטית, הקוראת לעצמה.