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

Preview:

DESCRIPTION

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

Citation preview

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

2008

1

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

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

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

קספו

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

2008

2

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

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

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

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

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

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

2008

3

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

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

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

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

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

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

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–

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

2008

5

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

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

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

2008

6

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

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

2008

7

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

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

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

.עצמים62

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

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

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

2008

8

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

.רשימה109

.עץ 1210בינארי

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

סה"כ90

מבחנים

מתכונות

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

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

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

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

המלצה

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

2008

10

חזרה והשלמה

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

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

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

2008

11

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

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

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

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

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

זו.

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

2008

12

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

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

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

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

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

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

2008

13

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

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

חזרה והשלמה

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

2008

14

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

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

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

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

2008

15

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

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

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

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

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

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

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

2008

16

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

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

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

מחרוזות

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

2008

17

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

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

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

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

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

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

2008

18

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

אתחולs=“Hello;”

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

הצהרה ויצירה

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

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

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

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

2008

20

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

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

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

מופיע: כאשר +

int count = …;

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

כל פלט הוא JAVAב-

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

אחת!

שרשור

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

2008

21

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

מטיפוס

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

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

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

String s=input.nextLine;()

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

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

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

2008

22

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

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

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

2008

23

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

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

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

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

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

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

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

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

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

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

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

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

2008

26

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

מחרוזות

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

2008

27

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

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

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

String s1 = “abcde;”

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

שם העצם

. שם הפעולה

( )רשימת

פרמטרים

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

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

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הפעולה

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

2008

29

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

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

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

int[] a = new int[10];

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

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

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

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)

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

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

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

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

פעולת מחלקה

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

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

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

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 מחזירה

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

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

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

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הבדל בין == ו-

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

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הבדל בין == ו-

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

2008

37

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

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

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

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

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

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

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

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

?

???

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

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

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האינדקס שלו הוא

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

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

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

2008

40

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

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

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

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

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

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

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

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

2008

41

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

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

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

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

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

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

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

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האינדקס שהחל ממנו

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

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

2008

43

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

האובייקט.

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

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

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

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

2008

44

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

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

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

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

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

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

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

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

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

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

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
לבדוק הרצה

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

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

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

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

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

מחיקה?

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

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

2008

48

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

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

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

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

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

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

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

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

2008

49

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

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

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

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

מה קורה באמת?

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

2008

50

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

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

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

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

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

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

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

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);

{ {

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

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

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

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

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,"");

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

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

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);

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

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

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

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

2008

56

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

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

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

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

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

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

2008

57

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

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

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

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

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

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

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

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

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

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

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

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

2008

58

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

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

מבוא1.

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

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

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

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

2008

59

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

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

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

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

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

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

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

2008

60

– מבוא1פרק

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

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

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

תגובה...

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

נכונות ...

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

2008

61

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

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

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

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

2008

62

2פרק

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

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

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

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

תכונות...

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

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

מצב עצם

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

2008

63

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

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

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

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

2008

64

2פרק

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

קודם ל:

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

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

2008

65

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

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

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(;

{

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

2008

67

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

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

2008

68

נעשה ונשמה..

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

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

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

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

המלצה

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

2008

69

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

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

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

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

2008

70

ממשק

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

2008

71

ממשק

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

2008

72

ממשק

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

2008

73

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

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

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

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

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

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

2008

74

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

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

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

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

של מי הפעולה?

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

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

2008

75

הפעולה הבונה

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

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

new Box(3, 2, 1.3);

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

2008

76

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

Box b1;

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

b1: Box

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

2008

77

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

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

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

b1.setLength(5);שם

העצם

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

נקודה פסיק

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

2008

78

אתחול משתנים

Box b1;

b1.setWidth(5);

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

Error: variable b1 might not have been initialized

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

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

2008

79

אתחול משתנים

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

Box b1;

b1.SetWidth(5);

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

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

2008

80

אתחול משתנים

Box b1=null;

b1.setWidth(5);

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

NullPointerException

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

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

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

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

2008

82

מערך של עצמים

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

:נכתוב

Box[] arr = new Box[5];

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

האם זה נכון?

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

2008

83

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

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

Box[] arr;

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

arr=new Box[5];

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

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

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

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

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

2008

84

מערך של עצמים

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

:נכתוב

Box[] arr = new Box[5];

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

האם זה לנכון?

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

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

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

2008

85

מערך של עצמים

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

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

2008

86

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

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

2008

87

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

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

2008

88

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

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

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);}

??

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

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

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

2008

90

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

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

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

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

דלי. 2

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

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

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

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

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

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

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

2008

91

תרגול

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

היחידה

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

2008

92

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

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

2008

93

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

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

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

2008

94

3פרק

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

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

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

2008

95

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

public class Bucket

{

private static int capacity = 5;

private double currentAmount;

}

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

5

capacity

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

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

2008

96

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

דוגמה: b1.toString()

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

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

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

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

2008

97

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

public static void main )String[] args(

{

….

}

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

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

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

2008

98

3פרק

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

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

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

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

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

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; // המים בדלי כמות ברגע זהש

:{

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

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

. זו ממחלקה

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

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

. זו ממחלקה

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

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

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;

{

{

בונה פעולה

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

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

בונה פעולה

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

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

הרשאת גישה

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

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

כשם המחלקה

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

התכונות

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

2008

101

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

}

this.capacity = 10;

this.currentAmount = 0;

{

public Bucket()

}

this.capacity = 10;

this.currentAmount = 0;

{

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

המחלקה

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

2008

102

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

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

(default constructorמחדל )

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

באמצעותה

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

השפה

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

(default constructorמחדל )

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

באמצעותה

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

השפה

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

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);

{

{

פעולה

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

פעולה

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

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

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;

{

{

פעולה

דלי הממלאת

פעולה

דלי הממלאת

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

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);{

{

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

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

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

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;

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

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;

{

{

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

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

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

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

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

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

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

2008

109

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

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

public Bucket )(;

public Bucket )int capacity(;

public Bucket )int capacity, double currentAmount(;

העמסת פעולות

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

2008

110

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

:החדש

public Bucket)Bucket b1(

{

this.capacity = b1.capacity;

this.currentAmount = b1.currentAmount;

}

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

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

2008

111

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

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

והתשובה...

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

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

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

2008

112

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

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

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

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

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

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

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

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

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();

{

{

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

2008

114

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

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

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

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

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

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

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

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

2008

115

איברי מחלקה

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

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

2008

116

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

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

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

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

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

Bucket.capacity

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

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

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

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

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

Bucket.capacity

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

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

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

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

2008

118

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

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

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

2008

119

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

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

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

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

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

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

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

2008

120

מחלקה איברי

פעולות מחלקה

תכונות מחלקה

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

2008

121

public static void setCapacity )int capacity(

{

Bucket.capacity = capacity;

}

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

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

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(;

}

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

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

2008

123

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

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

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

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

מחלקות שירות

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

2008

124

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

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

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

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

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

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

2008

125

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

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

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

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

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

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

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תיעוד אוטומטי )קיים רק ב-

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

2008

127

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

2008

128

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

2008

129

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

2008

130

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

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

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

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

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

2008

131

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

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

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

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

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

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

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

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

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

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

2008

132

תרשימי עצמים

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

= Bucket b1newBucket(4) ;

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

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

Bucket b1 = new Bucket(4);

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

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

2008

133

UMLתרשימי

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

2008

134

UMLתרשימי

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

2008

135

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

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

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

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

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

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

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

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

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

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

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

Recommended