Download presentation
Presentation is loading. Please wait.
1
עיצוב תוכנה מבוסס עצמים סדנאות תשס"ח-תשס"ט
עיצוב תוכנה מבוסס עצמים סדנאות תשס"ח-תשס"ט פתיחת חלק השני של השתלמות מרצים ד"ר יבגני קנל אניטה קספו עיצוב תוכנה מבוסס עצמים באר-שבע 2008
2
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
תכונית ההשתלמות חלק א' – 28 שעות מ עד חלק ב' – 28 שעות מ עד אתר מלווה קורס נא להיכנס להירשם באתר - הדיונים בפורום סגורים לאורחים סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
3
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
תכונית ההשתלמות ההשתלמות מוגדרת – ל-56 שעות עם ציון דרישות ההשתלמות: שיעורי בית , שיוכנסו לאתר המלווה לאחר כל מפגש – ישלחו אל יבגני במייל. בעיה מלווה יבוצעו בזוגות ויוצגו במחצית השנייה של ההשתלמות. כל משתלמם יכתוב שאלה חדשה לכל פרק. ובעזרת כל המשתתפים יבנה מאגר שאלות. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
4
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
לוח זמנים – חזרה לכיתה. מיסודות - לעיצוב. המלצות לתכנון. מבוא, פרקים 1,2,3. – רקורסיה (פרק 4), יעילות (פרק 5) – עץ בינארי (פרק 10) – מפה – סוג חדש של אוסף נתונים. – – – סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
5
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
לוח הזמנים של המפגשים 5:45 – 4:30 – הרצאה פרונטאלית תיאוריה 6:30 – 5:45 – תרגול ישוום התיאוריה 6:45 – 6:30 – הפסקה 7:45 – 6:45 – הרצאה ו/או דיון סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
6
מה לא לימדנו? (כלל או מספיק...)
סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
7
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
מה נצטרך ללמד? האם נספיק? 1.מבוא 2 5.יעילות 8 2.עצמים 6 6.הפניות ועצמים מורכבים 10 3. מחלקות 7.ייצוג הוספים 12 4.רקורסיה 8.מחסנית ותור סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
8
מה נצטרך ללמד? האם נספיק? (המשך)
9.רשימה 10 10.עץ בינארי 12 11. מפה – תרגיל מסכם 6 סה"כ 90 מבחנים מתכונות טיולים, פעילויות... מחלות, שביתות... סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
9
פרק 6 – הפניות ועצמים מורכבים
לוח זמנים שנתי תשס"ט המלצה חזרות, השלמות, פרק 1-מבוא פרק 2- עצמים פרק 3-מחלקות פרק 6 – הפניות ועצמים מורכבים פרק 9- רשימה פרק 7- ייצוג אוספים פרק 10- עץ בינארי פרק 4- רקורסיה פרק 8- מחסנית ותור פרק 11- מפה פרק 5- יעילות חזרות שאלות סיכום סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
10
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
חזרה והשלמה רענון אלגוריתמים וטכניקות שונות יישור קו ויצירת שפה משותפת דגש על לימוד עצמי – API/MSDN בניית מחלקות שרות – עבודה עם מספר קבצים בו-זמנית, הכנה לעצמים. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
11
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
מחלקות מוכנות JavaAPI – אוסף הממשקים של המחלקות המוכנות לשימוש דוגמה: המחלקה String לרוב יש צורך לייבא את המחלקות המוכנות באמצעות הפקודה import קיימת ספרייה unit4 המכילה מחלקות עזר לצורך יחידת לימוד זו. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
12
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
מחלקות מוכנות MSDN – אוסף הממשקים של המחלקות המוכנות לשימוש דוגמה: המחלקה string לרוב יש צורך לייבא את המחלקות המוכנות באמצעות הפקודה using קיימת ספרייה Unit4 המכילה מחלקות עזר לצורך יחידת לימוד זו סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
13
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
חזרה והשלמה מערך חד-מימדי מחרוזת צב גראפי דלי גראפי סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
14
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
חזרה והשלמה -מערך נושאים לחזרה: יצירה ומילוי מערך ספירת איברים לפי תנאי סיכם איברים לפי תנאי בעיות מקסימום ומינימום בעיות "האם קיים איבר שמקיים תנאי..." מול בעיות "האם מערך כולו מקיים תנאי..." חיפוש, מיון מיזוג, השוות מערכים מערך כפרמטר פעולות המחזירות מערך. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
15
יסודות 2 – תוכנית לימודים
חזרה והשלמה -מחרוזת יסודות 2 – תוכנית לימודים פרק 3: תווים ומחרוזות 6) שעות ( התאמה ל-C# וג`אווה מטרת הפרק להקנות כלים לפתרון בעיות לעיבוד טקסט. פירוט התכנים מחרוזות; יחס סדר מילוני; ייצוג מחרוזות כמערכי תווים; בניית אלגוריתמים עבור מחרוזות. שימוש בפעולות פשוטות של המחלקה : String אורך מחרוזת, השוואת מחרוזות, העתקת מחרוזות, מחיקת מחרוזות, שרשור מחרוזות, מציאת תת-מחרוזת. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
16
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
מחרוזות הטיפוס String הוא טיפוס בנוי בשפה. המחלקה מוגדרת כ-final זאת אומרת שאי-אפשר לבנות מחלקה ש"יורשת" מ-String סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
17
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
מה שזה לא !! הטיפוס String מוגדר מראש כטיפוס לכל דבר. עצם מטיפוס String אינו מערך של תווים!! (ניתן להמיר מן האחד לשני.) עצם מטיפוס String הוא קבוע שאי-אפשר לשנות על ידי פנייה לתווים בודדים!! עיבוד מחרוזות מתבצע ע"י פירוק לתת-מחרוזות והרכבה בשרשור. קיים טיפוס StringBuffer הדומה למחרוזות המוכרות מ-Pascal ו-C. לא נהוג להשתמש בו. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
18
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
הצהרה ויצירה הצהרה על משתנה מטיפוס String String s; אתחול s=“Hello”; הצהרה ואתחול String s=“Hello”; סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
19
מחרוזת – פעולות בסיסיות
כל פלט ב-JAVA הוא למעשה פלט של מחרוזת אחת! פלט System.out.println(s); הצבה String s1=“aa”; String s2=s1; שרשור String s3=s1+s2; s1+=s2; String s1="abc"; String s2=s1; String s3="ABC"; s1+=s3; System.out.println(s1); System.out.println(s2); System.out.println(s3); abcABC abc ABC סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
20
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
כל פלט ב-JAVA הוא למעשה פלט של מחרוזת אחת! שרשור פעולת השרשור מוגדרת על ידי האופרטור +. שרשור מייצר עצם חדש: s = s + “***” + t + “\n”; כל ערך עובר המרה אוטומטית למחרוזת כאשר + מופיע: int count = …; System.out.println(“Count is = “ + count); String s=“four=“+2+2; four=22 סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 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(); יצירת מחרוזת זהה למחרוזת אחרת s1 String 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"); yes yes no “aaa” 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"); s0 yes s1 “aaa” s2 yes s3 “aaa” no “aaa” s4 “aaa” no סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
26
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
מחרוזות על עצמים מן הטיפוס String ניתן להפעיל פעולות המוגדרות בטיפוס. למשל: indexOf, substring, length, replace… סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
27
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
מחרוזות ומה עם פעולות? מאחר ומחרוזות הן עצמים, כאשר מפעילים עליהן פעולות המוגדרות בטיפוס String, משתמשים בתחביר הפעלת פעולה על עצם. כלומר: על העצם ... הפעל את הפעולה ... רשימת פרמטרים ) ( שם העצם . שם הפעולה String s1 = “abcde”; int p = s1.indexOf(‘d’); סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
28
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
הפעולה int length() לכל מחרוזת קיימת פעולה length(), המחזירה את האורך של המחרוזת. String s=“ABCD”; System.out.println(s.length()); 4 String s=“”; System.out.println(s.length()); String s; System.out.println(s.length()); Error: variable s might not have been initialized String s=null; System.out.println(s.length()); NullPointerException סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
29
מחרוזת לעומת מערך (length)
שים לב!! מחרוזת היא עצם שעליה מוגדרת פעולה ללא פרמטרים length(). if (s.length() > 0) …. לכל מערך קיימת תכונה length. int[] a = new int[10]; for (int i = 0; i < a.length; i++) סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
30
char charAt(int index)
גישה לתווים בודדים char charAt(int index) ניתן לקרוא תווים בודדים לפי מיקומם for (int i = 0; i < s.length(); i++) if (s.charAt(i) == ‘*’) count++; מספור מתחיל מ-0! 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: variable found : value סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 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]); l o v e String s="We love Java"; char[] ch=s.toCharArray(); char[] toCharArray() s.length() == ch.length סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
32
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
ממערך תווים – למחרוזת public static String valueOf(char[] data, int start, int count) public static String valueOf(char[] data) 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
מחרוזת --> מערך --> מחרוזת
כתוב תוכנית אשר קולטת מחרוזת וממיינת את התווים שבה לפי סדר המילוני We love Java String s=in.nextLine(); System.out.println(s); char [] temp=s.toCharArray(); Arrays.sort(temp); s=String.valueOf(temp); We love Java JWaaeelovv סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
34
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
השוואות בין מחרוזות המחלקה String מספקת מספר מתודות לביצוע השוואה בין אובייקט מטיפוס String מסוים לאובייקט אחר מטיפוס String. public boolean equals(String otherString) מחזירה true אם המחרוזת שמיוצגת על ידי otherString זהה למחרוזת שמיוצגת על ידי האובייקט שממנו מתודה זו הופעלה. public boolean equalsIgnoreCase(String otherString) מחזירה true אם המחרוזת שמיוצגת על ידי otherString זהה למחרוזת שמיוצגת על ידי האובייקט שממנו מתודה זו הופעלה. בביצוע ההשוואה אין התחשבות בהבדלים שבין אותיות קטנות וגדולות. public int compareTo(String otherString) מחזירה 0 אם שתי המחרוזות זהות, משמע: ערכן זהה. (הערך מחושב על פי ערך התווים בחישוב עפ"י טבלת ה-Unicode). מחזירה ערך שלילי אם המחרוזת הנתונה בעלת ערך נמוך מהאחרת. מחזירה ערך חיובי אם המחרוזת הנתונה בעלת ערך גבוה מהאחרת סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
35
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
הבדל בין == ו-equal מאחר וערך של משתנה מטיפוס String הוא עצם, אזי למעשה הערך איננו העצם אלא הוא המצביע אל העצם. בהתאם לכך הפלט של קטע התכנית הבא יהיה No String s1 = “abcde”; String s2 = “abc”; s2 = s2 + “de”; if (s1 == s2) System.out.println(“Yes”); else System.out.println(“No”); s1 “abcde” “de” s2 “abc” “abcde” No סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
36
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
הבדל בין == ו-equal אם רוצים להתייחס אל השוואה לקסיקוגראפית כדי לקבל פלט Yes - יש להשתמש בפעולה equals המוגדרת בטיפוס String. String s1 = “abcde”; String s2 = “abc” + “de”; if (s1.equals(s2)) System.out.println(“Yes”); else System.out.println(“No”); סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
37
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
השוואות בין מחרוזות equals מחזיר boolean (true/false - זהות/לא זהות) compareTo משווה שתי מחרוזות לפי סדר מילוני lexicographic. הפונקציה מחזירה int: s1.compareTo(s2)>0 s1 אחרי s2 s1.compareTo(s2)<0 s1 לפני s2 s1.compareTo(s2)=0 s1 זהה ל-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) מחזירה true אם המחרוזת הנתונה מתחילה במחרוזת האחרת (prefix) public boolean endsWith(String suffix) מחזירה true אם המחרוזת שמיוצגת על ידי האובייקט מסתיימת במחרוזת האחרת (suffix). public boolean regionMatches(int thisBgn, String otherStr, int otherStr, int length) מחזירה true אם שתי המחרוזות זהות בטווח המצוין. ההשוואה נעשית החל ממספר האינדקס thisBgn במחרוזת שמייצג האובייקט לאורך length תווים. במחרוזת האחרת ההשוואה נעשית החל מהתו שמספר האינדקס שלו הוא otherStr. מתודה זו מתחשבת בהבדלים של אותיות קטנות/גדולות. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
40
מציאת תווים ותת-מחרוזות
כל אחת מהמתודות מחזירה את מיקום התו או תת המחרוזת המבוקשים במחרוזת עפ"י האינדקס המקובל: מ-0 עד length-1 אם התו או תת המחרוזת המבוקשת לא נמצאים במחרוזת שמייצג האובייקט אז מוחזר הערך .–1 public int indexOf(char ch) מתודה שמחזירה את מספר האינדקס אשר בו נמצא התו ch במחרוזת שמייצג האובייקט. החיפוש אחרי התו מתחיל מתחילתה של המחרוזת, ומספר האינדקס של התו הראשון, שנמצא זהה לתו ch, מוחזר. public int lastIndexOf(char ch) מתודה שמחזירה את מספר האינדקס אשר בו נמצא התו ch במחרוזת שמייצג האובייקט. החיפוש אחרי התו מתחיל מסופה של המחרוזת, והמיקום של התו הראשון שנמצא זהה לתו ch מוחזר. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
41
מציאת תווים ותת-מחרוזות
public int indexOf(char ch, int begin) מתודה שמחזירה את מספר האינדקס אשר בו נמצא התו ch במחרוזת שמייצג האובייקט. החיפוש אחריו מתחיל ממספר האינדקס שנשלח אל המתודה, מ- begin, ומספר האינדקס של התו הראשון שנמצא זהה לתו ch מוחזר. 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 אשר מייצג מחרוזת תווים שמתקבלת מהמחרוזת, שמייצג האובייקט שממנו המתודה הופעלה, לאחר שכל תו שזהה לתו oldChar מוחלף בתו newChar. 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(); s.toUpperCase(); s.replace(' ','*'); 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(); s=s.replace(' ','*'); We love Java we love java WE LOVE JAVA WE*LOVE*JAVA סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
47
החלפת רצף תווים בתוך מחרוזת
String s="We love Java"; System.out.println(s); We love Java s=s.replace("Java", in.nextLine()); System.out.println(s); We love C# C# s=s.replace(" ",""); System.out.println(s); מחיקה? WeloveC# Error: cannot find symbol symbol : method replace(char,java.lang.String) location: class java.lang.String s=s.replace('e',"ee"); System.out.println(s); סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 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=“abc” + “def” + “ghi”; האופן שבו השורה מטופלת הוא כדלקמן: String s=(((new StringBuffer(“abc”)) append(“def”)) append(“ghi”)) toString() סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
50
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
די דיינו? ואם לא? אבל מה קורה כאשר נרצה להגדיר פעולה משלנו שתפעל על מחרוזות? למשל: פעולה הפועלת על מחרוזת ומחזירה את מספר המופעים של תו מסוים בתוך מחרוזת. מאחר והטיפוס String הוא טיפוס בנוי בשפה, איננו יכולים להרחיב את אוסף הפעולות שלו. המשמעות היא: עלינו להגדיר את הפעולה כפעולה סטטית (static). הפעולה תקבל את המחרוזת כפרמטר. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 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 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; str=str.replace(subStr,""); String str=“I didn’t didn’t didn’t love JAVA”; String subStr= “didn’t “; str=deleteSubString(str,subStr); System.out.println(str); I love JAVA סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 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
סדנה בעיצוב תוכנה מבוסס עצמים תשס"ט
סדנה בעיצוב תוכנה מבוסס עצמים תשס"ט שלב א - מעבר על פרקי המבוא: מבוא עצמים – שימוש במחלקות מחלקות – הגדרה ובנייה חזרות והשלמות סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
59
סדנה בעיצוב תוכנה מבוסס עצמים תשס"ט
סדנה בעיצוב תוכנה מבוסס עצמים תשס"ט הנחה: תכני הפרקים הללו ידועים למורים ולתלמידים מטרה: יש צורך ל"יישר קו" ולוודא שהשפה והמושגים אחידים וברורים (גם בכיתות בוגרות יסודות מבוסס עצמים כדאי לוודא את השפה והמינוחים בתחילת השנה בוודאי אם זו לא כיתה ממשיכה) סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
60
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
פרק 1 – מבוא עקרונות בבסיס בניית מערכת תוכנה גדולה: חלוקה לתת משימות, שימוש חוזר בקוד דרישות ממערכות תוכנה: מפרט, נכונות, עמידות במצבים חריגים, ידידותיות, מהירות תגובה... קישור לתכנות מונחה עצמים: מחלקה, ממשק ומימוש, הכמסה, אוספי נתונים, תיעוד, נכונות ... סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
61
ניתן לחשוב על פרק זה כפרק סיכום וסיום להוראת היחידה כולה
פרק 1 – מבוא נותן תמונה כללית מסביר את המעבר בין היחידות (מערכות, אוספי נתונים) מציג את המושגים שילוו ויפותחו ביחידה ניתן לחשוב על פרק זה כפרק סיכום וסיום להוראת היחידה כולה סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
62
פרק 2 עצמים – שימוש במחלקות
קבלת התחושה של משמעות השימוש בעצמים מקדים את הנחלת המושגים הפורמאליים יש להשתדל בשפת הדיבור: ולא תכונות... כל ההגדרות הפורמליות ילמדו בפרק הבא (תרשים עצמים, UML, תכונות...) מצב עצם סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
63
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
ממה מורכב עצם? מצב: נקבע בעת יצירת העצם על ידי המשתמש, וניתן לשינוי על ידי פעולות העצם פעולות: מדווחות על מצב העצם ומשנות אותו לפי בקשת המשתמש סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
64
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
פרק 2 שימוש בעצמים ומחלקות קודם ל: הגדרה של עצמים ומחלקות כך גם בכל הפרקים הבאים סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
65
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
נעשה ונשמה... צב גראפי סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
66
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
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.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
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
פרק 2: שפת הדיבור של מי הפעולה? עצמאות (וירטואלית) לעצמים: לעצם יש תכונות ויש לו פעולות שהוא מפעיל מעבר מהגישה הפרוצדורלית לתכנות מבוסס עצמים חשוב למורים (התלמידים לא מכירים משהו אחר) צורת השיח היא: העצם מפעיל את b1.GetLength() העצם מחזיר את אורכו מחשב את שטחו סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
75
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
הפעולה הבונה מאתחלת את מצב העצם יצירת קופסה באורך 5, ברוחב 3.2 ובגובה 10 new Box(5, 3.2, 10); יצירת קופסה באורך 3, ברוחב 2 ובגובה 1.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);
משתנים שאינם מאותחלים גורמים לשגיאת הידור! 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 סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 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
מערך של עצמים האם זה נכון? Box[] arr = new Box[5];
על מנת ליצור מערך של קופסאות בגודל 5, נכתוב: Box[] arr = new Box[5]; מערך זה מכיל חמישה תאים ריקים, שבהם ניתן לאחסן קופסאות. האם זה נכון? סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
83
בעת יצירת מופע של עצם מתבצע אתחול שלו String[] s=new String[5]
מערך של עצמים Box[] arr; הכרזה על משתנה שבעתיד יחזיק הפניה למערך (ולא מערך!) arr=new Box[5]; יצירת עצם מערך והצבת הפניה לעצם בתוך המשתנה בעת יצירת מופע של עצם מתבצע אתחול שלו מערך שלמים – כל תא מאותחל ל-0 מערך בולאני – כל תא מאותחל ל-false String[] s=new String[5] במה מאותחלים תאים של המערך? סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
84
מערך של עצמים האם זה נכון? Box[] arr = new Box[5]; לא
על מנת ליצור מערך של קופסאות בגודל 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. דלי גרפי מעשי 4. המחלקה Point 5. המחלקה String מומלץ לביצוע בבית 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 */ 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; } פעולה בונה שם זהה לשם המחלקה. נקראת בזמן יצירת העצם. מאתחלת את ערכי התכונות הרשאת גישה סוגריים המסמנים פעולה ומכילים פרמטרים כשם המחלקה איתחול ראשוני של התכונות סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
101
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
פעולה בונה ללא פרמטרים public Bucket() { this.capacity = 10; this.currentAmount = 0; } אתחול התכונות על פי הבחירה של כותב המחלקה סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
102
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
פעולה בונה ברירת מחדל במקרה שהמתכנת לא הגדיר במחלקה אף פעולה בונה, מתווספת למחלקה פעולה בונה ברירת מחדל (default constructor) לא ניתן לראות את הפעולה הבונה ברירת מחדל בקוד המחלקה, אך ניתן לזמנה ולבנות עצמים באמצעותה הפעולה הבונה ברירת מחדל, משאירה את ערכי ברירת המחדל של תכונות העצם כפי שנקבעו על ידי השפה סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
103
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
פעולות נוספות public class Bucket { 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; } פעולה הממלאת דלי סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 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); } פעולה הבונה מחרוזת המתארת את העצם סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
106
bucketInto.currentAmount;
פעולה המקבלת עצם כפרמטר – למי פונים? 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; פעולה המעבירה מים מהדלי הנוכחי לדלי אחר סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 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); capacity 5 currentAmount b1 Bucket 5 3 capacity 4 currentAmount b2 Bucket 4 2 סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
109
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
העמסת פעולות ניתן לכתוב כמה פעולות בעלות אותו שם בתנאי שרשימת הפרמטרים שלהן שונה. השוֹנוּת יכולה להיות במספר הפרמטרים או בטיפוסיהם או בסדר שלהם. 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 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 סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
117
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
דוגמה לתכונת מחלקה public class Bucket { // תכונות פרטיות private static int capacity = 5; private double currentAmount; ... } 5 capacity סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
118
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
דוגמה נוספת: Shape Shape Color: red Shape Color: green 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
תיעוד אוטומטי (קיים רק ב-java)
/** * changes the x coordinate to the give value x the new value the x coordinate */ void setX(double x){…} /** * returns the y coordinate the y coordinate */ double getY (){…} סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
127
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
באר-שבע 2008
128
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
באר-שבע 2008
129
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
באר-שבע 2008
130
חשיבות השימוש בתרשימי עצמים בתרשימי UML ובדפי ממשקים
פרק 3: תרשימים חשיבות השימוש בתרשימי עצמים בתרשימי UML ובדפי ממשקים שפה אחידה קריאה וסטנדרטית ריכוז של הרבה מאד אינפורמציה (חסכון במלל) נוח לבחינות (הן כגוף השאלה והן כתשובה) יומחש בעזרת הפעלות כיתתיות של פתיחת דף ממשק מסודר במחשב וניתוח מה יש שם: ריכוז של הרבה מאד אינפורמציה סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
131
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
פרק 3: תרשימים אנו נציג שני סוגי תרשימים: תרשימי עצמים, העוזרים לנו להבין את המצב של העצם על ידי ההצגה הויזואלית שלו. תרשימי UML, המציגים בפנינו את התכונות והפעולות של המחלקה. סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
132
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
תרשימי עצמים עצם שנוצר על ידי הפקודה: Bucket b1 = new Bucket(4); מוצג באופן הבא: סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
133
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
תרשימי UML סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
134
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
תרשימי UML סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
135
סדנה ב-"עיצוב תוכנה מבוסס עצמים"
דפי העבודה של פרק 3 1. נקודת התחלה מעשי מומלץ לביצוע בכיתה 2. תיעוד javadoc 3(2). משחק בקוביות 4(3). תאריך מומלץ לביצוע בבית 5(4). מספר רציונלי 6(5). הרשאות גישה תיאורטי 7(6). מונה 8(7). פעולת מחלקה 9(8). כיתה מוזיקלית סדנה ב-"עיצוב תוכנה מבוסס עצמים" באר-שבע 2008
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.