230 likes | 419 Views
טיפוס המייצג ישות, טיפוס ראשי, פעולות בונות. ד"ר נוע רגוניס המכללה האקדמית בית-ברל. מבנה טיפוס. class < שם הטיפוס > { תכונות פעולה בונה פעולות מאחזרות וקובעות פעולות חישוביות }. פעולה בונה. < שם הפעולה כשם הטיפוס > ( < פרמטרים > ) {
E N D
טיפוס המייצג ישות, טיפוס ראשי,פעולות בונות ד"ר נוע רגוניס המכללה האקדמית בית-ברל ד"ר נוע רגוניס
מבנה טיפוס class <שם הטיפוס > { תכונות פעולה בונה פעולות מאחזרות וקובעות פעולות חישוביות } ד"ר נוע רגוניס
פעולה בונה <שם הפעולה כשם הטיפוס> ( <פרמטרים> ) { ….. } • לא רשום טיפוס הערך מוחזר (למעשה מוחזר באופן סמוי המצביע לעצם שנוצר). • שם זהה לטיפוס. • מופעלת רק פעם אחת עבור עצם אחד. • הפעלתה מביאה לבניית העצם וגם לביצוע גוף הפעולה. ד"ר נוע רגוניס
פעולה בונה הרחבה • לא חייבים להגדיר אותה, אם אינה מוגדרת תמיד ניתן להפעיל את הפעולה הבונה המוגדרת כברירת מחדל, ללא פרמטרים ועם גוף ריק. • אם מוגדרת פעולה בונה, אך רוצים שתהיה אפשרות לשימוש גם בפעולה הבונה "הריקה" יש להגדיר אותה במפורש בנוסף. ד"ר נוע רגוניס
טיפוס ראשי • בתמ"ע אנחנו מדברים על פרויקט הכולל מספר טיפוסים. • כל טיפוס מתאר ישות מסוימת ומהווה תבנית ליצירת עצמים. • כל טיפוס כולל פעולות שניתן להפעיל על עצם מן הטיפוס. • אבל מה באמת קורה? מה מתבצע? מתי מתבצע? מי מביא לביצוע? ד"ר נוע רגוניס
טיפוס ראשי – מטרות 1 • כאשר אנחנו ניגשים לפתרון בעיה בתמ"ע, אנו מזהים את הישויות הפועלות, את התכונות של כל אחת מהן, את הפעולות שעליהן לבצע, ואת הקשרים בין הישויות, ובהתאם לכך מוגדרים הטיפוסים. • ביצוע המשימה עצמה – פתרון הבעיה – האלגוריתם – יתבצע בטיפוס הראשי. ד"ר נוע רגוניס
טיפוס ראשי – מטרות 2 • הטיפוס הראשי לא מייצג ישות – הוא האלגוריתם הראשי – הוא המנצח על תהליך הפתרון. • לפיכך לא נגדיר בו תכונות ולא נגדיר בו פעולות המתאימות לטיפוס המייצג ישות, אלא נגדיר בו פעולה ראשית בלבד. • מאחר וטיפוס זה לא מייצג ישות גם אין מקום להגדיר על פיו עצמים. ד"ר נוע רגוניס
class MainPepper { ללא תכונות // public static void main(String[] args) { יצירת עצמים מטיפוסים אחרים // } } ד"ר נוע רגוניס
הפעולההראשית בטיפוס הראשי • בפעולה הראשית יוגדרו העצמים המשתתפים בפתרון הבעיה ויופעלו עליהם פעולות. • בטיפוס המייצג ישות יש אוסף של פעולות, הפעלת הפעולות תהיה בהתאם לצורך של משימה. • צרכי המשימה יבואו לידי ביטוי בפעולה הראשית, היא תקבע את סדר ביצוע הפעולות בהתאם לנדרש. ד"ר נוע רגוניס
class MainPepper { static final String DEFAULT = “red”; public static void main(String[] args) { Pepper pep = new Pepper(1, 100, DEFAULT); pep.setColor(“green”); pep.cutIntoNumPieces(10); System.out.println (“Pieces = “ + pep.getPieces()); } } ד"ר נוע רגוניס
ומה עם ה- static ? • פעולה שתופעל על עצמים, לא תוגדר כ static. כלומר, הפעולות המוגדרות בטיפוס המייצג ישות לא יוגדרו כסטטיות. • פעולה שלא תופעל על עצמים, כן תוגדר כ static. (כמו כל הפעולות שהגדרנו עד כה...) • הרחבה על static ומשמעויותיו גם באשר לתכונות, בהמשך הקורס. ד"ר נוע רגוניס
פעולה ראשית - מה מותר / מה נהוג • אין מניעה שלכל טיפוס תהיה פעולה ראשית, אך כפי שנאמר מקובל לבנות טיפוס מיוחד לצורך הפעלת התכנית – ורק בו תוגדר הפעולה הראשית. • מבחינת השפה ניתן גם לייצר עצמים מן הטיפוס הראשי, שהוא טיפוס לכל דבר, וניתן גם להגדיר בו פעולה יוצרת – אך אין לכך הקשר הגיוני במסגרת תמ"ע. ד"ר נוע רגוניס
הפעלת הפעולה ראשית • ניתן "לזמן"טיפוס ממערכת ההפעלה. הזימון גורם לביצוע פעולת main של אותו טיפוס. java MainPepper • ב-BlueJ הפעולה הראשית מופיעה (ככל פעולה static) בתפריט של הטיפוס. • בכל סביבת פיתוח יש את הדרך שלה להפעיל את ה- main, או שהוא מופעל באופן אוטומטי. ד"ר נוע רגוניס
הרחבה עלהפעולה הבונה ד"ר נוע רגוניס
סדר פעולות בבנייה • הקצאת תא זיכרון "בודד"למשתנה pep עם ערך תחילי null – מצביע אל העצם. • הקצאת תאי זיכרון לתכונות העצם, ואתחול תכונותיו (לערכי ברירת מחדל). • ביצוע גוף הפעולה הבונה המשנה את ערכי תכונות העצם ו/או מבצעת פעולות נוספות. • השמת המצביע לעצם לתוך המשתנה pep. ד"ר נוע רגוניס
class MainPepperSalad { public static void main() { Pepper pepr = new Pepper(1,100,"red"); Pepper pepg = new Pepper(1,100,"green"); Pepper pepy = new Pepper(1,100,"yellow"); PepperSalad salad = new PepperSalad(pepr, pepg, pepy); } } ד"ר נוע רגוניס
ומה קורה פה? class MainPepperSalad { public static void main() { Pepper pepr = new Pepper(1,100,"red"); PepperSalad salad = new PepperSalad(pepr, pepr, pepr); } } ד"ר נוע רגוניס
ריבוי פעולות בונות • ניתן להגדיר מספר רב של פעולות יוצרות, ובלבד שהחתימות יהיו שונות. • למשל פעולה יוצרת לפלפלים ירוקים ושלמים: public Pepper (int w) { weight = w; pieces = 1; color = “green”; } ד"ר נוע רגוניס
ריבוי פעולות בונות • בחירת הפעולה הנכונה היא בהתאם לפרמטרים בזימון. Pepper p1 = new Pepper(1, 200, “red”); Pepper p2 = new Pepper(140); ד"ר נוע רגוניס
ריבוי פעולות בונות • כאשר אין הגדרה של פ.י., מוגדרת מראש פ.י. ללא פרמטרים ועם גוף פעולה ריק. • אם הוגדרה בטיפוס פ.י., ה פ.י. המוגדרת מראש ללא פרמטרים לא קיימת, אלא אם תוגדר במפורש. publicPepper() { pieces = 1; weight = 100; color = green; } Pepper p3 = new Pepper(); ד"ר נוע רגוניס
ריבוי פעולות בונות • או אפילו הגדרה בנוסף של פעולה יוצרת בדיוק כמו זו של ברירת המחדל: public Pepper (int w) { weight = w; pieces = 1; color = “green”; } public Pepper () { } ד"ר נוע רגוניס