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
עיצוב תוכנה מבוסס עצמים באר-שבע
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
"שינוי במחרוזת"
"סדנה ב-"עיצוב תוכנה מבוסס עצמיםבאר-שבע
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