Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "עיצוב תוכנה מבוסס עצמים סדנאות תשס"ח-תשס"ט"— Presentation transcript:

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


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

Similar presentations


Ads by Google