135
םםםםם םםםםם םםםםם םםםםםםםם- םםם2008 1 םםםםם םםםםם םםםםם םםםםםםםם"ם- םםםםםם םםם"ם ללללל ללל לללל לל ללללללל10.09.08 םםםםם ם"ם םםםםם םםם םםםםם םםםם

עיצוב תוכנה מבוסס עצמים סדנאות תשס"ח-תשס"ט

  • Upload
    hue

  • View
    116

  • Download
    1

Embed Size (px)

DESCRIPTION

עיצוב תוכנה מבוסס עצמים סדנאות תשס"ח-תשס"ט. פתיחת חלק השני של השתלמות 10.09.08 מרצים ד"ר יבגני קנל אניטה קספו. תכונית ההשתלמות. חלק א' – 28 שעות מ- 06.02.2008 עד 30.04.2008 חלק ב' – 28 שעות מ- 10.09.08 עד 26.11.08 אתר מלווה קורס - PowerPoint PPT Presentation

Citation preview

Page 1: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

עיצוב תוכנה מבוסס עצמים באר-שבע

2008

1

עיצוב תוכנה מבוסס עצמים סדנאות תשס"ח-תשס"ט

פתיחת חלק השני של השתלמות10.09.08

מרציםד"ר יבגני קנל אניטה

קספו

Page 2: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

2

תכונית ההשתלמות

'שעות28 – חלק א -30.04.2008 עד 06.02.2008מ

'שעות28 – חלק ב -26.11.08 עד 10.09.08מ

אתר מלווה קורסhttp://www.orianit.edu-negev.gov.il/anitaksp

נא להיכנס להירשם באתר - הדיונים בפורום סגורים לאורחים

Page 3: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

3

תכונית ההשתלמות

שעות עם ציון 56ל- – ההשתלמות מוגדרת :דרישות ההשתלמות

שיוכנסו לאתר המלווה לאחר שיעורי בית , כל מפגש – ישלחו אל יבגני במייל.

יבוצעו בזוגות ויוצגו במחצית בעיה מלווה השנייה של ההשתלמות.

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

Page 4: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

4

לוח זמנים10.09.08 .חזרה לכיתה. מיסודות - לעיצוב –

.1,2,3המלצות לתכנון. מבוא, פרקים 17.09.08 (5(, יעילות )פרק 4 – רקורסיה )פרק24.09.08 (10 – עץ בינארי )פרק22.10.08.מפה – סוג חדש של אוסף נתונים – 29.10.08 – 12.11.08– 26.11.08–

Page 5: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

5

לוח הזמנים של המפגשים

5:45 – 4:30 תיאוריה – הרצאה פרונטאלית6:30 – 5:45 התיאוריהישוום – תרגול6:45 – 6:30 הפסקה – 7:45 – 6:45הרצאה ו/או דיון –

Page 6: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

6

מה לא לימדנו? )כלל או מספיק...(

Page 7: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

7

מה נצטרך ללמד? האם נספיק?

.מבוא21.יעילות85

.הפניות ועצמים 106מורכבים

.עצמים62

. מחלקות63.ייצוג הוספים127

.רקורסיה104.מחסנית ותור88

Page 8: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

8

מה נצטרך ללמד? האם נספיק? )המשך(

.רשימה109

.עץ 1210בינארי

. מפה – 611תרגיל מסכם

סה"כ90

מבחנים

מתכונות

טיולים, פעילויות...

מחלות, שביתות...

Page 9: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

9

לוח זמנים שנתי תשס"ט

- 9פרק רשימה

1.02-6.02

– 6פרק הפניות ועצמים מורכבים

23.11-28.11

חזרות, השלמות,

-1פרק מבוא

- 2פרק עצמים

-3פרק מחלקות

1.09-5.09

8.02-13.0230.11-5.127.09-12.09

15.02-20.027.12-12.1214.09-19.09

- 10פרק עץ

בינארי

- 7פרק 22.02-27.02ייצוג

אוספים

14.12-19.1221.09-26.09

1.03-6.0321.12-2.01

-4פרק

רקורסיה

28.09-10.10

8.03-20.034.01-9.0123.10-31.10

- 11פרק מפה

- 8פרק 22.03-30.03מחסנית

ותור

11.01-16.012.11-7.11

שאלות סיכום

-5פרק 19.04-24.0418.01-23.01

יעילות

חזרות

9.11-14.11

26.04-1.0525.01-30.0116.11-21.11

המלצה

Page 10: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

10

חזרה והשלמה

רענון אלגוריתמים וטכניקות שונותיישור קו ויצירת שפה משותפת – דגש על לימוד עצמיAPI/MSDN בניית מחלקות שרות – עבודה עם מספר

קבצים בו-זמנית, הכנה לעצמים.

Page 11: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

11

מחלקות מוכנות

• JavaAPI אוסף הממשקים של – המחלקות המוכנות לשימוש

Stringדוגמה: המחלקה •לרוב יש צורך לייבא את המחלקות •

המוכנות באמצעות הפקודה import

המכילה unit4קיימת ספרייה •מחלקות עזר לצורך יחידת לימוד

זו.

Page 12: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

12

מחלקות מוכנות

• MSDN אוסף הממשקים של – המחלקות המוכנות לשימוש

stringדוגמה: המחלקה •לרוב יש צורך לייבא את המחלקות •

usingהמוכנות באמצעות הפקודה

המכילה Unit4קיימת ספרייה •מחלקות עזר לצורך יחידת לימוד זו

Page 13: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

13

מערך חד-מימדימחרוזת

צב גראפידלי גראפי

חזרה והשלמה

Page 14: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

14

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

"האם מערך כולו מקיים תנאי..." חיפוש, מיוןמיזוג, השוות מערכיםמערך כפרמטר .פעולות המחזירות מערך

חזרה והשלמה -מערך

Page 15: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

15

– תוכנית לימודים2יסודות )שעות( 6 : תווים ומחרוזות3פרק וג`אווה# C-התאמה ל

מטרת הפרקלהקנות כלים לפתרון בעיות לעיבוד טקסט. •

פירוט התכניםמחרוזות; יחס סדר מילוני; ייצוג מחרוזות כמערכי תווים;

.עבור מחרוזות בניית אלגוריתמים String : שימוש בפעולות פשוטות של המחלקה אורך מחרוזת, השוואת מחרוזות, העתקת מחרוזות,

מחרוזות, שרשור מחרוזות, מציאת מחיקת .תת-מחרוזת

חזרה והשלמה -מחרוזת

Page 16: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

16

הטיפוסString.הוא טיפוס בנוי בשפה

finalהמחלקה מוגדרת כ-זאת אומרת שאי-אפשר לבנות

Stringמחלקה ש"יורשת" מ-

מחרוזות

Page 17: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

17

מה שזה לא !! הטיפוסString.מוגדר מראש כטיפוס לכל דבר עצם מטיפוסString !!אינו מערך של תווים

)ניתן להמיר מן האחד לשני.( עצם מטיפוסString הוא קבוע שאי-אפשר

לשנות על ידי פנייה לתווים בודדים!! עיבוד מחרוזות מתבצע ע"י פירוק

לתת-מחרוזות והרכבה בשרשור. קיים טיפוסStringBuffer הדומה למחרוזות

. לא נהוג להשתמש בו.C ו-Pascalהמוכרות מ-

Page 18: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

18

הצהרה על משתנה מטיפוסStringString s;

אתחולs=“Hello;”

הצהרה ואתחולString s=“Hello;”

הצהרה ויצירה

Page 19: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

19

פלטSystem.out.println(s);

הצבה

String s1=“aa”;

String s2=s1; שרשור

String s3=s1+s2;

s1+=s2;

כל פלט הוא JAVAב-

למעשה פלט של מחרוזת

;"String s1="abcאחת!String s2=s1;String s3="ABC";s1+=s3; System.out.println)s1(; System.out.println)s2(; System.out.println)s3(;

abcABCabcABC

מחרוזת – פעולות בסיסיות

Page 20: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

20

פעולת השרשור מוגדרת על ידי האופרטור.+

:שרשור מייצר עצם חדש

s = s + “***” + t + “\n”;עובר המרה אוטומטית למחרוזת כל ערך

מופיע: כאשר +

int count = …;

System.out.println(“Count is = “ + count);String s=“four=“+2+2; four=22

כל פלט הוא JAVAב-

למעשה פלט של מחרוזת

אחת!

שרשור

Page 21: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

21

הקלט הוראתקלט למשתנה

מטיפוס

int iNum=input.nextInt;)(שלם

String s=input.next;(): בקלט של מחרוזת לא נכתב שים

מחרוזתהטיפוס.

String s=input.nextLine;()

; char c=input.next().charAt(0)אין קלט מסוים לתווים!

שימוש בקלט/פלט סטנדרטי

Page 22: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

22

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

, למרות שלא חייבים להשתמש בהן.Stringהטיפוס

Page 23: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

23

יצירת מחרוזת ריקהString s=new String;)(

יצירת מחרוזת זהה למחרוזת אחרתs1String s=new String)s1(;

יצירת מחרוזת ממערך תוויםString s=new String)charArr(;

יצירת מחרוזת מחלק של מערך תוויםString s=new String)charArr, 3, 5(;

שיטות שימושיות ליצירת מחרוזת

Page 24: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

24

String s0; s0="aaa";String s1="aaa"; if(s1==s0)System.out.println("yes"); else System.out.println("no"); String s2="aaa"; if(s1==s2)System.out.println("yes"); else System.out.println("no"); String s3=new String(s1); if(s1==s3)System.out.println("yes"); else System.out.println("no"); String s4=in.nextLine(); if(s1==s4)System.out.println("yes"); else System.out.println("no");

“aaa”

yes

yes

no

no

ניהול הזיכרון עבור משתנים וקבועים

Page 25: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

25

String s0; s0="aaa";String s1="aaa"; if(s1==s0)System.out.println("yes"); else System.out.println("no"); String s2="aaa"; if(s1==s2)System.out.println("yes"); else System.out.println("no"); String s3=new String(s1); if(s1==s3)System.out.println("yes"); else System.out.println("no"); String s4=in.nextLine(); if(s1==s4)System.out.println("yes"); else System.out.println("no");

“aaa”

“aaa”

s0

s1yes

s2yes

s3 “aaa”

no

s4 “aaa”

no

ניהול הזיכרון עבור משתנים וקבועים

Page 26: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

26

ניתן להפעיל פעולות המוגדרות Stringעל עצמים מן הטיפוס … indexOf, substring, length, replaceלמשל: בטיפוס.

מחרוזות

Page 27: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

27

מאחר ומחרוזות הן עצמים, כאשר מפעילים, Stringעליהן פעולות המוגדרות בטיפוס

משתמשים בתחביר הפעלת פעולה על עצם.

כלומר:על העצם ... הפעל את הפעולה ...

String s1 = “abcde;”

int p = s1.indexOf(‘d’);

שם העצם

. שם הפעולה

( )רשימת

פרמטרים

מחרוזות ומה עם פעולות?

Page 28: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

28

לכל מחרוזת קיימת פעולהlength() ,המחזירה את האורך של המחרוזת.

String s=“ABCD”;String s=“ABCD”;System.out.println(s.length());System.out.println(s.length()); 4

String s=“”;String s=“”;System.out.println(s.length());System.out.println(s.length()); 0

String s;String s;System.out.println(s.length());System.out.println(s.length());

Error: variable s might not have been initialized

String s=null;String s=null;System.out.println(s.length());System.out.println(s.length());

NullPointerException

)(int lengthהפעולה

Page 29: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

29

!!שים לב שעליה מוגדרת עצםמחרוזת היא

.()lengthללא פרמטרים פעולה

if (s.length() > 0) …. תכונהלכל מערך קיימת length.

int[] a = new int[10];

for (int i = 0; i < a.length; i++)

(lengthמחרוזת לעומת מערך )

Page 30: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

30

ניתן לקרוא תווים בודדים לפי מיקומםfor (int i = 0; i < s.length(); i++)for (int i = 0; i < s.length(); i++)

if (s.charAt(i) == ‘*’) count++;if (s.charAt(i) == ‘*’) count++;

String s=“aaa”;System.out.println(s.charAt(s.length()((;StringIndexOutOfBoundsException: String index out of range: 3

String s="aaa"; s.charAt(1)='b';

לשנות לשנות אי-אפשראי-אפשראך אך Error: unexpected typeאותם:אותם:

required: variablefound : value

מספור !0מתחיל מ-

גישה לתווים בודדיםchar charAt(int index)

Page 31: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

31

שליפת קבוצת תוויםvoid getChars(int srcBegin, int srcEnd,

char[] dst, int dstBegin)

String s="We love Java"; int start=3, end=7; char[] dst=new char[end-start]; s.getChars(start,end,dst,0); for(int i=0;i<dst.length;i++) System.out.println(dst[i]);

love

char[] toCharArray()

String s="We love Java";

char[] ch=s.toCharArray();

s.length() == ch.length

Page 32: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

32

– למחרוזת ממערך תווים

public static String valueOf(char[] data)

public static String valueOf(char[] data, int start, int count)

char [] a={'W','e',' ','l','o','v','e',' ','J','a','v','a'}; String sd=String.valueOf(a); System.out.println(sd); We love Java

פעולת מחלקה

Page 33: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

33

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

המילוני String s=in.nextLine();

System.out.println(s);

char [] temp=s.toCharArray();

Arrays.sort(temp);

s=String.valueOf(temp);

System.out.println(s); JWaaeelovv

We love Java

We love Java

Page 34: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

34

public int compareTo(String otherString) אם שתי המחרוזות זהות, משמע: ערכן זהה.0מחזירה

(.Unicode)הערך מחושב על פי ערך התווים בחישוב עפ"י טבלת ה- אם המחרוזת הנתונה בעלת ערך נמוך מהאחרת.ערך שלילימחזירה אם המחרוזת הנתונה בעלת ערך גבוה מהאחרתערך חיובימחזירה

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

.Stringמטיפוס public boolean equals(String otherString)

זהה למחרוזת otherString אם המחרוזת שמיוצגת על ידי trueמחזירה שמיוצגת על ידי האובייקט שממנו מתודה זו הופעלה.

public boolean equalsIgnoreCase(String otherString) זהה למחרוזת otherString אם המחרוזת שמיוצגת על ידי true מחזירה

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

השוואות בין מחרוזות

Page 35: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

35

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

. בהתאם לכך הפלט של קטע התכנית הבא העצם Noיהיה

String s1 = “abcde;”

String s2 = “abc;”

s2 = s2 + “de;”

if (s1 == s2)

System.out.println(“Yes”);

else

System.out.println(“No”);

“abcde”s1

“abc”s2

“abcde”

“de”

No

equalהבדל בין == ו-

Page 36: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

36

אם רוצים להתייחס אל השוואה לקסיקוגראפית כדי equals - יש להשתמש בפעולה Yesלקבל פלט

.Stringהמוגדרת בטיפוס

String s1 = “abcde;”

String s2 = “abc” + “de;”

if (s1.equals(s2))

System.out.println(“Yes”);

else

System.out.println(“No”);

equalהבדל בין == ו-

Page 37: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

37

equals מחזיר boolean) true/false(זהות/לא זהות - compareTo משווה שתי מחרוזות לפי סדר מילוני

lexicographic .:intהפונקציה מחזירה

s1.compareTo(s2)>0s1 אחרי s2

s1.compareTo(s2)<0s1 לפני s2

s1.compareTo(s2)=0s1-זהה ל s2

השוואות בין מחרוזות

Page 38: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

38

import java.util.*;public class test42{static Scanner reader=new Scanner(System.in);

public static void main(String[] args){ String s1="abc"; String s2=reader.next(); System.out.println(s1.compareTo(s2));}}

-3

d… ae… abf… abcabc

abc123

abc

?

???

פלט ידוע. מהו הקלט?

Page 39: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

39

•public boolean startsWith(String prefix)( prefix ) אם המחרוזת הנתונה מתחילה במחרוזת האחרת trueמחזירה

 •public boolean endsWith(String suffix)

אם המחרוזת שמיוצגת על ידי האובייקט מסתיימת trueמחזירה (.suffixבמחרוזת האחרת )

 •public boolean regionMatches(int thisBgn, String otherStr, int otherStr, int length)

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

length תווים. במחרוזת האחרת ההשוואה נעשית החל מהתו שמספר . מתודה זו מתחשבת בהבדלים של אותיות otherStrהאינדקס שלו הוא

קטנות/גדולות.

השוואת מחרוזות - פעולות נוספות

Page 40: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

40

• public int indexOf(char ch) במחרוזת chמתודה שמחזירה את מספר האינדקס אשר בו נמצא התו

שמייצג האובייקט. החיפוש אחרי התו מתחיל מתחילתה של המחרוזת, , מוחזר.chומספר האינדקס של התו הראשון, שנמצא זהה לתו

• public int lastIndexOf(char ch) במחרוזת chמתודה שמחזירה את מספר האינדקס אשר בו נמצא התו

שמייצג האובייקט. החיפוש אחרי התו מתחיל מסופה של המחרוזת, מוחזר.chוהמיקום של התו הראשון שנמצא זהה לתו

כל אחת מהמתודות מחזירה את מיקום התו או תת המבוקשים במחרוזת עפ"י האינדקס המקובל: המחרוזת

אם התו או תת המחרוזת המבוקשת לא length-1 עד 0מ-1 .–נמצאים במחרוזת שמייצג האובייקט אז מוחזר הערך

מציאת תווים ותת-מחרוזות

Page 41: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

41

public int indexOf(char ch, int begin) במחרוזת chמתודה שמחזירה את מספר האינדקס אשר בו נמצא התו

שמייצג האובייקט. החיפוש אחריו מתחיל ממספר האינדקס שנשלח אל המתודה,

מוחזר.ch, ומספר האינדקס של התו הראשון שנמצא זהה לתו begin מ-

public int lastIndexOf(char ch, int fromIndex) במחרוזת שממנה היא מופעלת החל chמתודה זו מחפשת את התו

. התו הראשון שהמתודה מוצאת התחלתה לכיוון fromIndexמאינדקס מוחזר על ידה.chכזהה לתו

מציאת תווים ותת-מחרוזות

Page 42: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

42

• public int indexOf(String str)מתודה זו מחפשת מתחילתה של המחרוזת שהאובייקט מייצג את המחרוזת

str  .מספר האינדקס שבו היא נמצאת מוחזר על ידי המתודה .• public int indexOf(String str, int begin)

החל strמתודה זו מחפשת במחרוזת שהאובייקט מייצג את המחרוזת .  סופה לכיוון beginמהמקום שמספר האינדקס שלו הוא

• public int lastIndexOf(String str)מתודה זו מחפשת במחרוזת שמייצג האובייקט את המחרוזת שמיוצגת על ידי

str מספר האינדקס התחלתה. החיפוש מתחיל מסופה של המחרוזת לכיוון . נמצאת לראשונה מוחזר על ידי המתודה.strשהחל ממנו

 • public int lastIndexOf(String str, int fromIndex)

מתודה זו מחפשת במחרוזת שמייצג האובייקט את המחרוזת שמיוצגת על ידי str החיפוש מתחיל ממיקום .fromIndex לכיוון התחלתה של המחרוזת. מספר

נמצאת לראשונה מוחזר על ידי המתודה.strהאינדקס שהחל ממנו

מציאת תווים ותת-מחרוזות

Page 43: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

43

חשוב לזכור, כי אף אחת מהמתודות ששייכות למחלקה String ,שמיוצגת על ידי לא משנה את המחרוזת

האובייקט.

כל אחת מהמתודות שייסקרו בחלק זה מחזירה הפניה אשר מהווה תוצאה של String מטיפוס לאובייקט חדש

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

"שינוי במחרוזת"

Page 44: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

44

• public String replace (char oldChar, char newChar) אשר מייצג מחרוזת String מטיפוס חדשמתודה זו מחזירה הפנייה לאובייקט

תווים שמתקבלת מהמחרוזת, שמייצג האובייקט שממנו המתודה הופעלה, . newChar מוחלף בתו oldCharלאחר שכל תו שזהה לתו

• public String toLowerCase() אשר מתאר את String מטיפוס חדשלאובייקט מתודה זו מחזירה הפנייה

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

• public String toUpperCase() אשר מתאר את String מטיפוס חדשמתודה זו מחזירה הפנייה לאובייקט

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

• public String trim() שמתאר מחרוזת String מטיפוס חדשמתודה זו מחזירה הפנייה לאובייקט

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

"שינוי במחרוזת"

Page 45: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

45

String s = new String("We love Java");

System.out.println(s);

s.toLowerCase();

System.out.println(s);

s.toUpperCase();

System.out.println(s);

s.replace(' ','*');

System.out.println(s);

We love Java

We love Java

We love Java

We love Java

"שינוי במחרוזת"

cassapu
לבדוק הרצה
Page 46: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

46

String s="We love Java"; System.out.println(s); String s1=s.toLowerCase(); System.out.println(s1); s=s.toUpperCase(); System.out.println(s); s=s.replace(' ','*'); System.out.println(s);

We love Java

we love java

WE LOVE JAVA

WE*LOVE*JAVA

"שינוי במחרוזת"

Page 47: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

47

String s="We love Java"; System.out.println(s);

s=s.replace("Java", in.nextLine()); System.out.println(s);

s=s.replace(" ","");System.out.println(s);

We love Java

We love C#

WeloveC#

C#

s=s.replace('e',"ee");System.out.println(s);

Error: cannot find symbolsymbol : method replace(char,java.lang.String)location: class java.lang.String

מחיקה?

החלפת רצף תווים בתוך מחרוזת

Page 48: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

48

• public String substring(int begin) שמייצג תת String מטיפוס חדשמתודה זו מחזירה הפנייה לאובייקט

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

המחרוזת שמייצג האובייקט. 

• public String substring(int begin, int end) שמייצג תת String מטיפוס חדשמתודה זו מחזירה הפנייה לאובייקט

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

(.לא כולל )endשמספר האינדקס שלו

שליפה תת-מחרוזת

Page 49: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

49

כאשר הקומפיילר נתקל בשורה כדוגמת:

String s=“abc” + “def” + “ghi”;

האופן שבו השורה מטופלת הוא כדלקמן:

String s=(((new StringBuffer(“abc”)) . append(“def”)). append(“ghi”)). toString()

מה קורה באמת?

Page 50: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

50

אבל מה קורה כאשר נרצה להגדיר פעולה משלנושתפעל על מחרוזות?

למשל: פעולה הפועלת על מחרוזת ומחזירה את מספר המופעים של תו מסוים בתוך מחרוזת.

הוא טיפוס בנוי בשפה, איננו הוא טיפוס בנוי בשפה, איננו StringStringמאחר והטיפוס מאחר והטיפוס יכולים להרחיב את אוסף הפעולות שלו.יכולים להרחיב את אוסף הפעולות שלו.

המשמעות היא: המשמעות היא:).).staticstatic ( (כפעולה סטטיתכפעולה סטטיתעלינו להגדיר את הפעולה עלינו להגדיר את הפעולה

..המחרוזת כפרמטרהמחרוזת כפרמטרהפעולה תקבל את הפעולה תקבל את

די דיינו? ואם לא?

Page 51: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

51

public class ExString}

public static int numOfChar(String s, char c)}

int counter = 0; for (int i=0; i < s.length(); i++)

if ( s.charAt(i) == c ) counter;++

return counter;{

public static void main(String[] args)}

String s1 = "abcabcaasa;"

int m = numOfChar(s1, 'a'); System.out.println(m);

{ {

Page 52: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

52

static String delete(String s, int from, int to) }

String start = s.substring(0, from); String end = s.substring(to+1);

return start + end{ ; public static void main(String[] args)}String s=“I didn’t love JAVA;”

s = delete(s, 2, 8);System.out.println(s){; I love JAVAI love JAVA

דוגמה – מחיקת תת-מחרוזת

Page 53: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

53

static String deleteSubString(String s, String subS){ int len=subS.length(); while (s.indexOf(subS)!=-1){ s=s.substring(0,s.indexOf(subS))+ s.substring(s.indexOf(subS)+len); } return s; }

String str=“I didn’t didn’t=“I didn’t didn’t didn’tdidn’t love JAVA”;love JAVA”; String subStr= “didn’tdidn’t “; str=deleteSubString(str,subStr); System.out.println(str); I love JAVAI love JAVA

str=str.replace(subStr,"");

מחיקה כל מופעים של תת-מחרוזת

Page 54: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

54

static String insert(String s, String sub, int at)

}

String start = s.substring(0, at);

String end = s.substring(at);

return start + sub + end;

{

String s= "We love Java!";

s = insert(s, " the", 7);

דוגמה – הכנסת תת-מחרוזת

Page 55: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

55

class What} public static void main(String[] args) }

String s ="the quick brown fox jumped over the lazy dog";String t "" =;

int space = s.lastIndexOf)' '(; while (space != -1) }

t = t + s.substring(space+1)" " + ; s = s.substring(0, space); space = s.lastIndexOf)' '(;

{ t = t + s;

System.out.println(t);{ { dog lazy the over jumped fox brown quick the

Page 56: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

56

ומה עם ההוראה?- מחרוזות :פעולות בטיפוס המוגדר מראשבאשר ל

גם קודם היו לנו פעולות מוגדרות לא קרה כלום ,מראש עבור מחרוזות.

:השוואת מחרוזותבאשר ל יקפידו על שימוש ב לא נורא ,equals== במקום ב

:דרך הפעלת הפעולות על עצמיםבאשר ל עד עכשיו השתמשו בזימון פעולות קצת מבלבל ,

"רגיל" ועכשיו יצטרכו להתרגל לזימון פעולות "על העצם..."

Page 57: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

57

הקלדנית החרוצה

כתוב תוכנית אשר מדמה את התהליך ההקלדה בשלבים הבאים:

"בונה "מקלדת המקולקלת

מקבלת מחרוזת המורכבת האותיות קטנות של אנגלית ומחזירה את ה"טקסט השגוי"

מבצעת "שיטת הקלדנית" עד לקבלת המחרוזת הזהה ל"מחרוזת המקורית".

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

ולספור כמה הפעלות נדרשו.

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

הבעיות האלה גורמות לכך שאחרי לחיצה על המקש על המסך לא בהכרח מופיע תו מתאים. כתוצאה - בהקלדת טקסט התקבל מסמך "לא

מובן". על מנת לתקן את הטקסט קלדנית החליטה להשתמש בשיטה הבאה: היא מקלידה שוב ושוב בדיוק אותו טקסט שרואה על המסך – עד

המופיע טקסט נכון.

Page 58: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

58

סדנה בעיצוב תוכנה מבוסס עצמים תשס"ט

שלב א - מעבר על פרקי המבוא:

מבוא1.

עצמים – שימוש במחלקות2.

מחלקות – הגדרה ובנייה3.

חזרות והשלמות4.

Page 59: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

59

סדנה בעיצוב תוכנה מבוסס עצמים תשס"ט

:הנחהתכני הפרקים הללו ידועים למורים ולתלמידים

מטרה:יש צורך ל"יישר קו"

ולוודא שהשפה והמושגים אחידים וברורים

(גם בכיתות בוגרות יסודות מבוסס עצמים כדאי לוודא את השפה והמינוחים בתחילת השנה

בוודאי אם זו לא כיתה ממשיכה)

Page 60: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

60

– מבוא1פרק

עקרונות בבסיס בניית מערכת תוכנה גדולה:

חלוקה לתת משימות, שימוש חוזר בקוד

: דרישות ממערכות תוכנהמפרט, נכונות, עמידות במצבים חריגים, ידידותיות, מהירות

תגובה...

: קישור לתכנות מונחה עצמיםמחלקה, ממשק ומימוש, הכמסה, אוספי נתונים, תיעוד,

נכונות ...

Page 61: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

61

– מבוא1פרק נותן תמונה כללית (מערכות, אוספי נתונים) מסביר את המעבר בין היחידות

מציג את המושגים שילוו ויפותחו ביחידה

ניתן לחשוב על פרק זה כפרק סיכום וסיום להוראת היחידה כולה

Page 62: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

62

2פרק

עצמים – שימוש במחלקות

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

מקדים את הנחלת המושגים הפורמאליים

יש להשתדל בשפת הדיבור: ולא

תכונות...

כל ההגדרות הפורמליות ילמדו בפרק הבא

, תכונות...(UML )תרשים עצמים,

מצב עצם

Page 63: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

63

ממה מורכב עצם?

, מצב: המשתמש ידי על העצם יצירת בעת נקבעהעצם פעולות ידי על לשינוי וניתן

המשתמש פעולות: בקשת לפי אותו ומשנות העצם מצב על מדווחות

Page 64: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

64

2פרק

בעצמים ומחלקות שימוש

קודם ל:

של עצמים ומחלקותהגדרה כך גם בכל הפרקים הבאים

Page 65: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

65

צב גראפי נעשה ונשמה...

Page 66: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

66

http://sites.huji.ac.il/science/stc/center/groups/OOP2006/Java/EclipseInstall4Unit4/Unit4Doc/index.htm

import unit4.turtleLib.Turtle; public class TurtleDrawRectangle { public static void main)String[] args( {

Turtle t1 = new Turtle)(; t1.tailDown)(; t1.moveForward)100(; t1.turnRight)90(; t1.moveForward)100(; t1.turnRight)90(; t1.moveForward)100(; t1.turnRight)90(; t1.moveForward)100(; t1.tailUp)(; }

}

public static void draw) int a({Turtle t = new Turtle)(;t.tailDown)(; for)int i=0;i>4;i++( { t.moveForward)a(; t.turnRight)90(; }t.tailUp)(;

}

public static void draw) Turtle t, int a({t.tailDown)(; for)int i=0;i>4;i++( { t.moveForward)a(; t.turnRight)90(; }t.tailUp)(;

}

public static void main)String[] args( } draw)100(;

Turtle t1 = new Turtle ;)( draw)t1,50(;

{

Page 67: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

67

דלי גראפי נעשה ונשמה...

Page 68: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

68

נעשה ונשמה..

,להתחיל מצב גראפי – ציורים פשוטים )ריבועמרובה, משולש, משושה(. להתעקש על

כתיבת פעולות עם פרמטרים! חשוב להקפיד על שפה נכונה: "צב זז קדימה",

"צב פונה ימינה" וכו'. '7דלי גראפי : להתחיל מדף עבודה מס –

סיפור על שוליית הקוסם – לקצר את הסיפור

המלצה

Page 69: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

69

: הדוגמה המלווה 2פרק Bucket & Box

איורים ושימושים בקופסאות

בתרגיל כבר מכירים את הדלי

Page 70: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

70

ממשק

Page 71: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

71

ממשק

Page 72: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

72

ממשק

Page 73: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

73

: חזרה מול חידוש 2פרק

:ממשק, מימוש, מושגים שהופיעו בפרק המבואהפרדה...

:מושגים חדשים נאמרים בטבעיות ללא פירוט (3פעולה בונה )תנותח ותעובד בפרק

( 6הפניות )פרק העמקה שלם – API או MSDN דפי התיעוד הפורמליים ומה הם מכילים

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

Page 74: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

74

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

חשוב למורים )התלמידים לא מכירים משהו אחר(

צורת השיח היא: )(b1.GetLengthהעצם מפעיל את......

העצם מחזיר את אורכומחשב את שטחו

של מי הפעולה?

: שפת הדיבור2פרק

Page 75: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

75

הפעולה הבונה

מאתחלת את מצב העצם•10 ובגובה 3.2ברוחב ,5יצירת קופסה באורך •

new Box(5, 3.2, 10);1.3 ובגובה 2ברוחב ,3יצירת קופסה באורך •

new Box(3, 2, 1.3);

Page 76: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

76

משתנה המכיל הפניה

Box b1;

b1 = new Box (5.1, 3.2, 1);b1: Box

b1: Box

Page 77: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

77

פעולות נוספות

פעולות המחזירות את מצב העצם•פעולות המשנות את מצב העצם• dotזימון פעולה ע"י סימון-הנקודה )•

notation)Box b1 = new Box(2,2,2);

b1.setLength(5);שם

העצם

נקודה הפעולהפרמטר

נקודה פסיק

Page 78: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

78

אתחול משתנים

Box b1;

b1.setWidth(5);

משנה מצב לעצם שאינו קיים

Error: variable b1 might not have been initialized

משתנים שאינם מאותחלים גורמים לשגיאת הידור!

Page 79: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

79

אתחול משתנים

!משתנים שאינם מאותחלים גורמים לשגיאת הידור

Box b1;

b1.SetWidth(5);

משנה מצב לעצם שאינו קיים

Page 80: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

80

אתחול משתנים

Box b1=null;

b1.setWidth(5);

משנה מצב לעצם שאינו קיים

NullPointerException

גורמת nullהפעלת פעולה על משתנה שערכו לשגיאת זמן ריצה!

Page 81: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

81

הפעלת פעולה על עצם

Box b1= new Box (3, 2, 1);

b1.setWidth(5);

Box b2=b1;b2.setWidth(8);

b1: Box

b1: Box

b1: Box

b2: Box

8

Page 82: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

82

מערך של עצמים

, 5על מנת ליצור מערך של קופסאות בגודל

:נכתוב

Box[] arr = new Box[5];

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

האם זה נכון?

Page 83: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

83

מערך של עצמים הכרזה על משתנה שבעתיד

(ולא יחזיק הפניה למערך מערך!)

Box[] arr;

יצירת עצם מערך והצבת הפניה לעצם בתוך המשתנה

arr=new Box[5];

בעת יצירת מופע של עצם מתבצע אתחול

שלו 0מערך שלמים – כל תא מאותחל ל- מערך בולאני – כל תא מאותחל

false String[] s=new String[5]ל-

במה מאותחלים תאים של המערך?

Page 84: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

84

מערך של עצמים

, 5על מנת ליצור מערך של קופסאות בגודל

:נכתוב

Box[] arr = new Box[5];

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

האם זה לנכון?

אמערך זה מכיל חמישה תאים שבהן

Boxמאוחזקים הפניות ל-null שכרגע מאותחלים ב-

Page 85: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

85

מערך של עצמים

:אתחול תאי המערךarr[0] = new Box)1, 2, 5(;arr[1] = new Box)3, 2, 1(;arr[2] = new Box)2, 2.5, 2(;

Page 86: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

86

המלצה אחרי הסבר תיאורטי

Page 87: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

87

unit4.bucketLib.Bucketמחלקה דלי

Page 88: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

88

unit4.bucketLib.Bucketמחלקה דלי

Page 89: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

89

unit4.bucketLib.Bucketמחלקה דלי

import unit4.bucketLib;*..…

static void what(Bucket b1, Bucket b2)} if(b1.getCurrentAmount()>b2.getCapacity())}

b1.pourInto(b2); b2.empty;()

what(b1, b2){ ; {

public static void main(String[] args){ Bucket b1=new Bucket(70,"first"); b1.fill(50); Bucket b2=new Bucket(13,"second"); what(b1,b2);}

??

מה יישאר בדלים אחרי

ביצוע התוכנית

Page 90: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

90

2דפי העבודה של פרק

תיאורטמומלץ לביצוע בכיתה י

קופסה צבעונית. 1

תיאורטמומלץ לביצוע בכיתה י

דלי. 2

דלי גרפי. 3מעשימומלץ לביצוע בכיתה

Pointהמחלקה . 4 מעשימומלץ לביצוע בכיתה

Stringהמחלקה . 5מעשימומלץ לביצוע בבית

לרקוד עם צבים. 6מעשימומלץ לביצוע בבית

מומלץ לתת דף עבודה זה לביצוע בבית

שוליית הקוסם. 7מעשי

Page 91: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

עיצוב תוכנה מבוסס עצמים באר-שבע

2008

91

תרגול

שימוש במחלקות גראפיות שפותחו ע"י צוות הפיתוח של

היחידה

Page 92: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

92

כתוב תוכנית המשתמשת במחלקה צב ומציירת ציור זה

Page 93: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

93

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

. בנה מערך דליים ומיין אותו

Page 94: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

94

3פרק

מחלקות – הגדרה ובנייה

:)שפת הדיבור משתנה(מושגים מדויקים תכונות תרשימי עצמים UML העמסת פעולות הרשאות גישה

Page 95: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

95

מופע. תכונותמחלקה: תכונות

public class Bucket

{

private static int capacity = 5;

private double currentAmount;

}

ו מופעאאיברי מחלקה

5

capacity

המחלקה = של סטטי

Page 96: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

96

מופע. פעולות>object>.>method-name)(>

דוגמה: b1.toString()

מחלקה. פעולות>class-name>.>method-name>)(

דוגמה:Math.sqrt(x)IO.println(“hello”)

ו מופעאאיברי מחלקה

Page 97: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

97

הראשית - mainהפעולה פעולת מחלקה

public static void main )String[] args(

{

….

}

תכונות קבועות של המחלקהpublic static final int CAPACITY = 5;

ו מופעאאיברי מחלקה

Page 98: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

98

3פרק

המשךמחלקות – הגדרה ובנייה

( איברי מחלקה static) מושג מאד חשוב להמשך( פעולות חיצוניות(

:מושגים חדשים מוחלקים בשקט

פעולות מקבלות עצמים כפרמטרים6 המשמעויות הנלוות יילמדו רק בפרק

Page 99: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

99

מצב של עצם/** המחלקה מגדירה דלי שהוא בעל קיבולת * הדלי יכול להכיל כמות מים כלשהי עד קיבולת זו* author@ *צוות מדעי המחשב, המרכז להוראת... version@ * 13.8.2007/* public classBucket {

private attributes//private int ;capacity //קיבולת הדלי בליטרים

private double;currentAmount // המים בדלי כמות ברגע זהש

:}

**/ המחלקה מגדירה דלי שהוא בעל קיבולת* הדלי יכול להכיל כמות מים כלשהי עד קיבולת זו * * @author צוות מדעי המחשב, המרכז להוראת... * @version 13.8.2007 */public class Bucket}

//private attributes private int capacity; // קיבולת הדלי בליטרים

private double currentAmount; // המים בדלי כמות ברגע זהש

:{

הן תכונות המשתנים

של הפנימייםשיווצר העצם

. זו ממחלקה

הן תכונות המשתנים

של הפנימייםשיווצר העצם

. זו ממחלקה

הרשאת פרטית גישה התכונה טיפוס התכונה שם

Page 100: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

100

פעולות – פעולה בונהpublic class Bucket

}private int capacity; private double currentAmount;

public Bucket (int capacity)

}

this.capacity = capacity;

this.currentAmount = 0;

{

{

public class Bucket

}private int capacity; private double currentAmount;

public Bucket (int capacity)

}

this.capacity = capacity;

this.currentAmount = 0;

{

{

בונה פעולה

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

התכונות ערכי את

בונה פעולה

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

התכונות ערכי את

הרשאת גישה

סוגריים המסמנים פעולה

ומכילים פרמטרים

כשם המחלקה

איתחול ראשוני של

התכונות

Page 101: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

101

פעולה בונה ללא פרמטריםpublic Bucket()

}

this.capacity = 10;

this.currentAmount = 0;

{

public Bucket()

}

this.capacity = 10;

this.currentAmount = 0;

{

אתחול התכונות על פי הבחירה של כותב

המחלקה

Page 102: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

102

פעולה בונה ברירת מחדל

במקרה שהמתכנת לא הגדיר במחלקה אף פעולה •בונה, מתווספת למחלקה פעולה בונה ברירת

(default constructorמחדל )

לא ניתן לראות את הפעולה הבונה ברירת מחדל•בקוד המחלקה, אך ניתן לזמנה ולבנות עצמים

באמצעותה

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

השפה

במקרה שהמתכנת לא הגדיר במחלקה אף פעולה •בונה, מתווספת למחלקה פעולה בונה ברירת

(default constructorמחדל )

לא ניתן לראות את הפעולה הבונה ברירת מחדל•בקוד המחלקה, אך ניתן לזמנה ולבנות עצמים

באמצעותה

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

השפה

Page 103: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

103

פעולות נוספותpublic class Bucket

}private int capacity; private double currentAmount;

...פעולות נוספות //

public boolean ()isEmpty

{

return )this ;(currentAmount == 0.

}

}

public classBucket

{private int ;capacity private double;currentAmount

...פעולות נוספות //

public boolean isEmpty()

}

return (this.currentAmount == 0);

{

{

פעולה

הדלי האם הבודקת ריק

פעולה

הדלי האם הבודקת ריק

Page 104: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

104

פעולות נוספותpublic class Bucket

}

...תכונות //

public void) fill double(amountToFill

{אם הקיבולת של הדלי קטנה מהכמות החדשה שאמורה להתקבל //

בדלי

if)this < capacity.this(currentAmount + amountToFill.

this = currentAmount.this ;capacity. מלא את הדלי עד // הסוף

else

this;currentAmount += amountToFill.

}

}

public classBucket

{

...תכונות//

public void fill (double amountToFill)

}אם הקיבולת של הדלי קטנה מהכמות החדשה שאמורה להתקבל //

בדלי

if (this.capacity < this.currentAmount + amountToFill)

this.currentAmount = this.capacity; // מלא את הדלי עדהסוף

else

this.currentAmount += amountToFill;

{

{

פעולה

דלי הממלאת

פעולה

דלי הממלאת

Page 105: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

105

פעולות נוספותpublic class Bucket

}

private int capacity; private double currentAmount; :public String toString()}

return("The capacity: " + this.capacity + "\n" + "The current amount of water: " +

this.currentAmount);{

{

public class Bucket

}

private int capacity; private double currentAmount; :public String toString()}

return("The capacity: " + this.capacity + "\n" + "The current amount of water: " +

this.currentAmount);{

{

מחרוזת הבונה פעולההעצם את המתארת

מחרוזת הבונה פעולההעצם את המתארת

Page 106: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

106

פעולה המקבלת עצם כפרמטר – למי פונים?

public class Bucket{

public void example (Bucket bucketInto)

}

int capacity1 = this.capacity;

int capacity2 = bucketInto.getCapacity();

int currentAmount1 = this.currentAmount;

int currentAmount2 = bucketInto.getCurrentAmount();

bucketInto.fill (5);

this.fill (3);

{

{

public class Bucket{

public void example (Bucket bucketInto)

}

int capacity1 = this.capacity;

int capacity2 = bucketInto.getCapacity();

int currentAmount1 = this.currentAmount;

int currentAmount2 = bucketInto.getCurrentAmount();

bucketInto.fill (5);

this.fill (3);

{

{

bucketInto.capacity;

bucketInto.currentAmount;

Page 107: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

107

פעולות נוספות-פעולה המקבלת עצם כפרמטר

public void pourInto (Bucket bucketInto)

}

double freeSpace = bucketInto.getCapacity() – bucketInto.getCurrentAmount();

if (this.currentAmount < freeSpace)

}

bucketInto.fill (this.currentAmount);

this.currentAmount = 0;

{

else

}

bucketInto.fill (freeSpace);

this.currentAmount – = freeSpace;

{

{

public void pourInto (Bucket bucketInto)

}

double freeSpace = bucketInto.getCapacity() – bucketInto.getCurrentAmount();

if (this.currentAmount < freeSpace)

}

bucketInto.fill (this.currentAmount);

this.currentAmount = 0;

{

else

}

bucketInto.fill (freeSpace);

this.currentAmount – = freeSpace;

{

{

מים המעבירה פעולה

לדלי הנוכחי מהדליאחר

מים המעבירה פעולה

לדלי הנוכחי מהדליאחר

Page 108: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

108

public static void main)String[] args(

{

Bucket b1 = new Bucket )5(;

Bucket b2 = new Bucket )4(;

b1.fill )3(;

b2.fill )4(;

b2.pourInto )b1(;

{

שימוש בפעולות

capacity5

currentAmount

b1

Bucket

0

capacity4

currentAmount

b2Bucke

t0

3

4

5

2

Page 109: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

109

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

2ת יכולה להיות במספר הפרמטרים או השו3נובטיפוסיהם או בסדר שלהם.

public Bucket )(;

public Bucket )int capacity(;

public Bucket )int capacity, double currentAmount(;

העמסת פעולות

Page 110: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

110

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

:החדש

public Bucket)Bucket b1(

{

this.capacity = b1.capacity;

this.currentAmount = b1.currentAmount;

}

פעולה בונה מעתיקה

Page 111: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

111

עיקרון ההכמסה

? פומביות והשיטות פרטיות התכונות מדוע

והתשובה...

בממשק (1 לגעת בלי המימוש את לשנות אפשר כך

לתכונות (2 מבוקרת גישה מתאפשרת כך

Page 112: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

112

פומבי לעומת פרטיבאיבר פרטי של עצם ניתן להשתמש רק מתוך •

המחלקה המגדירה את הטיפוס של העצם.

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

המחלקה המגדירה את הטיפוס של העצם.

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

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

המחלקה המגדירה את הטיפוס של העצם.

Page 113: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

113

( פומביpublic)( פרטיprivate)

הרשאות גישהpublic class Bucket

}

private int capacity; private double currentAmount;

public Bucket (int capacity)

}

this.capacity = capacity;

this.currentAmount = 0;

{

:

public boolean isEmpty()

}

return (this.currentAmount == 0);

{

{

public class Bucket

}

private int capacity; private double currentAmount;

public Bucket (int capacity)

}

this.capacity = capacity;

this.currentAmount = 0;

{

:

public boolean isEmpty()

}

return (this.currentAmount == 0);

{

{

public class TestBucket

}

public static void main (String[] args)

}

Bucket b1 = new Bucket(4);

int cap = b1.capacity;

boolean check = b1.isEmpty();

{

{

public class TestBucket

}

public static void main (String[] args)

}

Bucket b1 = new Bucket(4);

int cap = b1.capacity;

boolean check = b1.isEmpty();

{

{

Page 114: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

114

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

הוא:Abstract Data Type טיפוס נתונים מופשט

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

הממומשת באופן שמסתיר לגמרי את דרךמחלקה

ייצוגה ואת המימוש שלה, וחושף רק את הפעולות

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

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

Page 115: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

115

איברי מחלקה

תכונות מחלקה פעולות מחלקה

Page 116: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

116

class variablesמחלקה - תכונות

של • מסוים למופע ולא למחלקה השייכות תכונות המחלקה.

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

עצם זה או אחר של המחלקהדרכים• בשתי נעשית מחלקה לתכונת )בהנחה פנייה

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

Bucket.capacity

ב. דרך המופעb1.capacity

של • מסוים למופע ולא למחלקה השייכות תכונות המחלקה.

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

עצם זה או אחר של המחלקהדרכים• בשתי נעשית מחלקה לתכונת )בהנחה פנייה

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

Bucket.capacity

ב. דרך המופעb1.capacity

Page 117: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

117

מחלקה לתכונת דוגמה

public class Bucket

}

תכונות פרטיות //

private static int;capacity = 5

private double;currentAmount

...

}

public classBucket

{

תכונות פרטיות//

private static int capacity = 5;

private double currentAmount;

...

{

5

capacity

Page 118: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

118

Shapeדוגמה נוספת:

Shape Color: green Shape Color: red Shape Color: blue

Page 119: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

119

public static final int CAPACITY = 5 הגדרה זו פירושה ש:

יתקבל עותק אחד ויחיד בלתי ניתן לשינוי שלהתכונה קיבולת, שלו ערך קבוע, גלוי ומשותף

לכל המופעים של המחלקה. ( ההגדרה הזו קובעת שזהו קבועfinal פומבי ,)

(public( של המחלקה ,)static והוא מטיפוס ,).intהנתונים הבסיסי

הצירוף שלfinal-ו static הוא צירוף נפוץ מאוד בג'אווה.

תכונות מחלקה קבועות

Page 120: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

120

מחלקה איברי

פעולות מחלקה

תכונות מחלקה

Page 121: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

121

public static void setCapacity )int capacity(

{

Bucket.capacity = capacity;

}

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

Page 122: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

122

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

public static void pourAverageAmount )Bucket b1, Bucket b2(

{

double averageAmount = )b1.getCurrentAmount)( +

b2.getCurrentAmount)((/2;

b1.empty)(;

b2.empty)(;

b1.fill )averageAmount(;

b2.fill )averageAmount(;

}

פעולה חיצונית

Page 123: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

123

.פעולות מחלקה נפוצות במחלקות שירות מחלקות שרות מכילות אוסף של פעולות בנושא

מסוים, כולן פעולות מחלקה. כזו היא המחלקה השימושיתMath המכילה פעולות ,

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

כדי לבצע חישובים מתמטיים שונים.

מחלקות שירות

Page 124: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

124

: חשיבות השימוש בתיעוד3פרק

אחרי עבודה עם הממשקים של דלי – ברור מאד למה צריך תיעוד מדויק

מי שטרח – יקצור וייהנה מהפירות

–#Cבעיית דוברי

המסקנה אינה להתעלם מנושא התיעוד!!!

Page 125: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

125

(javaתיעוד אוטומטי )קיים רק ב-

משמעות התגית התגית

@authorשם מחבר המחלקה@paramפרמטר המועבר לפעולה

@returnהערך שמחזירה הפעולה@see הפניה למחלקה אחרת הקשורה

למחלקה זו@versionגרסת המחלקה

Page 126: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

126

/*** changes the x coordinate to the give value* @param x the new value the x coordinate*/void setX(double x){…}

/*** returns the y coordinate* @return the y coordinate*/double getY (){…}

(javaתיעוד אוטומטי )קיים רק ב-

Page 127: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

127

Page 128: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

128

Page 129: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

129

Page 130: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

130

: תרשימים 3פרק

חשיבות השימוש בתרשימי עצמים ובדפי ממשקים UMLבתרשימי

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

ממשק מסודר במחשב וניתוח מה יש שם: ריכוז של הרבה מאד אינפורמציה

Page 131: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

131

אנו נציג שני סוגי תרשימים:

תרשימי עצמים, העוזרים לנו להבין את 1.המצב של העצם על ידי ההצגה

הויזואלית שלו.

, המציגים בפנינו את UMLתרשימי 2.התכונות והפעולות של המחלקה.

אנו נציג שני סוגי תרשימים:

תרשימי עצמים, העוזרים לנו להבין את 1.המצב של העצם על ידי ההצגה

הויזואלית שלו.

, המציגים בפנינו את UMLתרשימי 2.התכונות והפעולות של המחלקה.

: תרשימים 3פרק

Page 132: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

132

תרשימי עצמים

עצם שנוצר על ידי הפקודה:

= Bucket b1newBucket(4) ;

מוצג באופן הבא:

עצם שנוצר על ידי הפקודה:

Bucket b1 = new Bucket(4);

מוצג באופן הבא:

Page 133: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

133

UMLתרשימי

Page 134: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

134

UMLתרשימי

Page 135: עיצוב תוכנה מבוסס עצמים  סדנאות תשס"ח-תשס"ט

"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע

2008

135

3דפי העבודה של פרק נקודת התחלה. 1 מעשימומלץ לביצוע בכיתה

javadocתיעוד . 2מעשימומלץ לביצוע בכיתה

משחק בקוביות(. 2)3מעשימומלץ לביצוע בכיתה

תאריך(. 3)4 מעשימומלץ לביצוע בבית

מספר רציונלי(. 4)5מעשימומלץ לביצוע בבית

תיאורטמומלץ לביצוע בכיתהי

הרשאות גישה(. 5)6

מונה(. 6)7מעשימומלץ לביצוע בכיתה

פעולת מחלקה(. 7)8מעשימומלץ לביצוע בכיתה

תיאורטמומלץ לביצוע בביתי

כיתה מוזיקלית(. 8)9