Successfully reported this slideshow.
Your SlideShare is downloading.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

1

Share

Download Now Download

Download to read offline

ג'אווה - תכנות מונחה עצמים - משתנים מטיפוס מחלקה והמרת טיפוסים למעלה/למטה

Download Now Download

Download to read offline

חלק מסדרת הרצאות בנושא "תכנות מונחה עצמים בסביבת ג'אווה", והפעם: משתנים מטיפוס מחלקה והמרת טיפוסים.

  • Be the first to comment

ג'אווה - תכנות מונחה עצמים - משתנים מטיפוס מחלקה והמרת טיפוסים למעלה/למטה

  1. 1. ‫משתנ‬‫ים‬‫מחלקה‬ ‫מטיפוס‬-Class type Variables:‫הבאות‬ ‫ההגדרות‬ ‫וקיימות‬ ‫בהנחה‬public interface InterfaceName {}public class ClassNameA {}public class ClassNameB extends ClassNameA implements InterfaceName {}:‫בלבד‬ ‫טיפוסים‬ ‫משלושה‬ ‫מאחד‬ ‫להיות‬ ‫יכול‬ ‫לאובייקט‬ ‫הרפרנס‬ ‫את‬ ‫להכיל‬ ‫שמיועד‬ ‫המשתנה‬‫הראשון‬,‫המחלקה‬ ‫מטיפוס‬:‫הטריוויאלי‬ ‫הטיפוס‬ ‫זהו‬ ,‫האובייקט‬ ‫את‬ ‫יוצרים‬ ‫אנו‬ ‫ממנה‬ClassNameB cnb=new ClassNameB();‫השני‬,‫למחלקה‬ ‫שמורישה‬ ‫מחלקה‬ ‫מטיפוס‬‫מטיפ‬ ‫כלומר‬ ,‫האובייקט‬ ‫את‬ ‫יוצרים‬ ‫אנו‬ ‫ממנה‬‫ממנה‬ ‫שהמחלקה‬ ‫מחלקה‬ ‫וס‬.‫הגדרתה‬ ‫את‬ ‫מרחיבה‬ ‫האובייקט‬ ‫את‬ ‫יוצרים‬ClassNameA cna=new ClassNameB();‫השלישי‬,‫המחלקה‬ ‫אותו‬ ‫ממשק‬ ‫מטיפוס‬‫האובייקט‬ ‫את‬ ‫יוצרים‬ ‫ממנה‬‫מיישמת‬.InterfaceName in=new ClassNameB();‫(הרפרנס‬ ‫החזרה‬ ‫ערך‬ ‫את‬ ‫שנציב‬ ‫לאחר‬‫(בהתאם‬ ‫שלו‬ ‫למאפיינים‬ ‫לגשת‬ ‫יהיה‬ ‫ניתן‬ ,‫לכך‬ ‫המיועד‬ ‫במשתנה‬ )‫לאובייקט‬:‫כך‬ ‫לדוגמה‬ ,)‫מתודה‬ ‫או‬ ‫(משתנה‬ ‫המאפיין‬ ‫ושם‬ ‫מפרידה‬ ‫נקודה‬ ,‫המשתנה‬ ‫שם‬ ‫ציון‬ ‫ע"י‬ )‫גישה‬ ‫להרשאות‬objectName.methodName();‫ה‬ ‫ממנו‬ ‫בטיפוס‬ ‫שהוגדרו‬ ‫למאפיינים‬ ‫ורק‬ ‫אך‬ ‫לגשת‬ ‫יכול‬ ‫משתנה‬ ‫של‬ ‫סוג‬ ‫שכל‬ ‫לב‬ ‫לשים‬ ‫יש‬‫אובייקט‬ ‫לאיזה‬ ‫קשר‬ ‫מבלי‬ ‫נוצר‬ ‫וא‬.‫מחזיק‬ ‫הוא‬
  2. 2. .‫האחרונה‬ ‫הדוגמה‬ ‫את‬ ‫מעט‬ ‫נעבה‬ ‫יותר‬ ‫טוב‬ ‫הנושא‬ ‫את‬ ‫להבין‬ ‫מנת‬ ‫על‬‫תרשים‬ ‫מתוך‬UML:‫נתון‬:‫הבאות‬ ‫ההגדרות‬ ‫שקיימות‬ ‫להבין‬ ‫נוכל‬public interface InterfaceName {public abstract void interfaceMethod();}public class ClassNameA {int classNameAVar;}public class ClassNameB extends ClassNameA implements InterfaceName {int classNameBVar;public void interfaceMethod () {}}‫ב‬ ‫וכי‬-Runner.)‫וכד‬ ‫אובייקטים‬ ‫(יצירת‬ ‫והממשק‬ ‫למחלקות‬ ‫תלות‬ ‫קשרי‬ ‫על‬ ‫המעידים‬ ‫שימושים‬ ‫נעשים‬‫לכל‬ ‫גישה‬ ‫שתהיה‬ ‫כך‬ ,‫נוצר‬ ‫הוא‬ ‫ממנה‬ ‫המחלקה‬ ‫מסוג‬ ‫במשתנה‬ ‫נציב‬ ‫אליו‬ ‫הרפרנס‬ ‫שאת‬ ‫אובייקט‬ ‫ויצרנו‬ ‫נניח‬ ,‫כעת‬:‫במחלקה‬ ‫שהוגדרו‬ ‫המאפיינים‬ClassNameB cnb=new ClassNameB();‫אובייקטים‬ ‫ניצור‬ ‫לא‬ ,‫מכאן‬:‫קודם‬ ‫שהוצגו‬ ‫האפשריים‬ ‫מהסוגים‬ ‫במשתנים‬ ‫שיצרנו‬ ‫לאובייקט‬ ‫הרפרנס‬ ‫את‬ ‫נפיץ‬ ‫אלא‬ ,‫חדשים‬ClassNameA cna = cnb;InterfaceName in = cnb;
  3. 3. ‫מחלקה‬ ‫מסוג‬ ‫אובייקט‬ ‫בידנו‬ ‫יש‬ ,‫זאת‬ ‫משעשינו‬ClassNameB‫שהרפרנס‬‫שהצגנו‬ ‫המשתנים‬ ‫טיפוסי‬ ‫בשלושת‬ ‫מוכל‬ ‫אליו‬‫המשתנים‬ ‫שלושת‬ ,‫כלומר‬ ,‫הקודמת‬ ‫בדוגמה‬in, cna, cnb‫מהם‬ ‫אחד‬ ‫כל‬ ‫של‬ ‫הגישה‬ ‫אך‬ ,‫האובייקט‬ ‫לאותו‬ ‫מתייחסים‬:‫נוצרו‬ ‫הם‬ ‫מהם‬ ‫הטיפוסים‬ ‫מהגדרות‬ ‫אחת‬ ‫בכל‬ ‫הוגדרו‬ ‫מאפיינים‬ ‫לאילו‬ ‫בהתאם‬ ‫תהיה‬ ‫האובייקט‬ ‫של‬ ‫למאפיינים‬‫המשתנה‬in‫המתודה‬ ‫את‬ ‫רק‬ "‫"לראות‬ ‫יכול‬interfaceMethod()‫מהטיפוס‬ ‫שמגיעה‬ ‫היחידה‬ ‫והיא‬ ‫היות‬InterfaceName:‫נוצר‬ ‫הוא‬ ‫ממנו‬in.interfaceMethod();‫המשתנה‬cna‫המשתנה‬ ‫את‬ ‫רק‬ "‫"לראות‬ ‫יכול‬classNameAVar‫מהטיפוס‬ ‫שמגיע‬ ‫היחיד‬ ‫והוא‬ ‫היות‬ClassNameA‫הוא‬ ‫ממנו‬:‫נוצר‬cna.classNameAVar=0;‫המשתנה‬cnb‫המשתנה‬ ‫את‬ "‫"לראות‬ ‫יכול‬classNameBVar‫במחלקה‬ ‫מוגדר‬ ‫והוא‬ ‫היות‬ClassNameB,‫נוצר‬ ‫הוא‬ ‫ממנה‬‫המשתנה‬ ‫את‬ "‫"לראות‬ ‫יכול‬ ‫הוא‬ ,‫כן‬ ‫כמו‬classNameAVar‫מהמחלקה‬ ‫יורש‬ ‫והוא‬ ‫היות‬ClassNameA,‫המתודה‬ ‫את‬ "‫"לראות‬ ‫יכול‬ ‫והוא‬interfaceMethod()‫הממשק‬ ‫את‬ ‫מממש‬ ‫והוא‬ ‫היות‬InterfaceName:cnb.interfaceMethod();cnb.classNameAVar=0;cnb.classNameBVar=0;‫האפשריים‬ ‫המשתנים‬ ‫מטיפוסי‬ ‫אחד‬ ‫בכל‬ ‫לאובייקט‬ ‫הרפרנס‬ ‫להצבת‬ ‫סיבות‬ ‫מעט‬ ‫לא‬ ‫יש‬‫שעומדת‬ ‫ללוגיקה‬ ‫בהתאם‬ ‫המשתנות‬‫לחלק‬ ‫הגישה‬ ‫את‬ "‫"להסתיר‬ ‫היכולת‬ ‫הוא‬ ‫המתקבלים‬ ‫המידיים‬ ‫היתרונות‬ ‫אחד‬ ,‫לראות‬ ‫שניתן‬ ‫כפי‬ ‫אך‬ ,‫התכנית‬ ‫כתיבת‬ ‫מאחורי‬.‫אליו‬ ‫הרפרנס‬ ‫את‬ ‫המכיל‬ ‫המשתנה‬ ‫לסוג‬ ‫בהתאם‬ ,‫אובייקט‬ ‫של‬ ‫מהמאפיינים‬‫בתפ‬ ‫גרסה‬ ‫להפיץ‬ ‫ומעוניינת‬ ‫תוכנה‬ ‫המפתחת‬ ‫לחברה‬ ‫זאת‬ ‫לדמות‬ ‫ניתן‬‫הקהל‬ ‫בקרב‬ ‫מודעות‬ ‫לעורר‬ ‫ע"מ‬ ,‫בחינם‬ ,‫רחבה‬ ‫וצה‬‫וכבר‬ ‫היות‬ ‫המוצר‬ ‫את‬ ‫לקנות‬ ‫יחליטו‬ ‫אנשים‬ ‫מאוד‬ ‫שמעט‬ ‫הרי‬ ,‫מלאה‬ ‫גרסה‬ ‫תהה‬ ‫שתופץ‬ ‫הגרסה‬ ‫אם‬ .‫שפיתחה‬ ‫המוצר‬ ‫לגבי‬‫ממנה‬ ‫שהוסרו‬ ,‫שלה‬ ‫הביצועים‬ ‫מבחינת‬ ‫שמוגבלת‬ ‫גרסה‬ ‫החברה‬ ‫מפיצה‬ ,‫כן‬ ‫ועל‬ ‫מלאה‬ ‫בצורה‬ ‫מתפקד‬ ,‫ביד‬ ‫אותו‬ ‫להם‬ ‫יש‬‫מסו‬ ‫פיצרים‬‫לראות‬ ‫ניתן‬ ‫שדרכה‬ ‫גרסה‬ ‫מקבל‬ ,‫הניסיון‬ ‫לגרסת‬ ‫שנחשף‬ ‫אדם‬ ‫אותו‬ .‫בה‬ ‫השימוש‬ ‫זמן‬ ‫שהוגבל‬ ‫או‬ ‫ימים‬‫את‬ ‫ורק‬ ‫אך‬ ‫חושף‬ ‫ממשק‬ ‫מסוג‬ ‫משתנה‬ ‫שאותו‬ ‫כשם‬ ‫בדיוק‬ ,‫המפתחים‬ ‫בידי‬ ‫שנחשפו‬ ‫פיצרים‬ ‫באותם‬ ‫ורק‬ ‫אך‬ ‫ולהשתמש‬‫וירשה‬ ‫אותו‬ ‫שמימשה‬ ‫זו‬ ,‫המשוכללת‬ ‫המחלקה‬ ‫של‬ ‫אלו‬ ‫את‬ ‫ולא‬ ‫בו‬ ‫שמוגדרים‬ ‫הפיצרים‬‫שלנו‬ ‫בדוגמה‬ ‫אחרת‬ ‫ממחלקה‬.)‫המלאה‬ ‫התוכנה‬ ‫גרסת‬ :‫(ובהקבלה‬‫העוסק‬ ‫בפרק‬ ‫הנושא‬ ‫על‬ ‫נדבר‬ ‫אנו‬ ,‫ובנוסף‬ )‫(קיבוץ‬ ‫הדרך‬ ‫באותה‬ ‫שונים‬ ‫מסוגים‬ ‫לאובייקטים‬ ‫לפנות‬ ‫היכולת‬ ‫הוא‬ ‫נוסף‬ ‫יתרון‬.‫בפולימורפיזם‬.‫אוטומטית‬ ‫טיפוסים‬ ‫בהמרת‬ ‫מודע‬ ‫לא‬ ‫שימוש‬ ‫נעשה‬ ‫שראינו‬ ‫בדוגמאות‬
  4. 4. ‫למעלה/למטה‬ ‫טיפוסים‬ ‫המרת‬-Up/Down Type Casting‫תוך‬ ‫מורכבות‬ ‫משימות‬ ‫לביצוע‬ ‫ישיר‬ ‫תרגום‬ ‫מקבלת‬ ‫זו‬ ‫יכולת‬ .‫גאווה‬ ‫בשפת‬ ‫מאוד‬ ‫חשוב‬ ‫נדבך‬ ‫היא‬ ‫קאסטינג‬ ‫לבצע‬ ‫היכולת‬.‫כה‬ ‫עד‬ ‫שהכרנו‬ ‫פרימיטיביים‬ ‫טיפוסים‬ ‫בין‬ ‫ההמרות‬ ‫מאותן‬ ‫במהותו‬ ‫נבדל‬ ‫זה‬ ‫קאסטינג‬ .‫פשוט‬ ‫בתחביר‬ ‫שימוש‬‫טיפוסי‬ ‫בהמרת‬‫המרה‬ .‫מורישה‬ ‫ממחלקה‬ ‫אובייקט‬ ‫כאל‬ ‫יורשת‬ ‫ממחלקה‬ ‫לאובייקט‬ ‫להתייחס‬ ‫היכולת‬ ‫על‬ ‫מדובר‬ ,‫למעלה‬ ‫ם‬‫בכל‬ ‫מתבצעת‬ ‫והיא‬ ‫היות‬ ‫ממשי‬ ‫טכני‬ ‫צורך‬ ‫בכך‬ ‫אין‬ ,‫הבהירות‬ ‫לשם‬ ‫רק‬ ‫זאת‬ ‫אך‬ ,‫מפורשת‬ ‫בצורה‬ ‫להתבצע‬ ‫יכולה‬ ‫זה‬ ‫מסוג‬‫אוטומטי‬ ‫באופן‬ ‫מקרה‬–‫תמיד‬ ‫ומצליחה‬ ‫כבטוחה‬ ‫נחשבת‬ ‫זו‬ ‫שהמרה‬ ‫כך‬ ‫מתוך‬ ‫זאת‬.‫בעיות‬ ‫מבלי‬‫היות‬ ‫שמבצעים‬ ‫ההמרה‬ ‫לסוג‬ ‫לב‬ ‫תשומת‬ ‫מתן‬ ‫תוך‬ ,‫אז‬ ‫וגם‬ ‫מפורש‬ ‫ידני‬ ‫באופן‬ ‫להתבצע‬ ‫צריכה‬ ,‫זאת‬ ‫לעומת‬ ‫למטה‬ ‫המרה‬.‫מבוקר‬ ‫לא‬ ‫באופן‬ ‫בוצעה‬ ‫באם‬ ‫ריצה‬ ‫ושגיאות‬ ‫קומפילציה‬ ‫שגיאות‬ ‫לגרור‬ ‫ועלולה‬ ‫טריוויאלית‬ ‫פחות‬ ‫זו‬ ‫והמרה‬‫בתרש‬ ‫ראשית‬ ‫נביט‬ ,‫הנושא‬ ‫את‬ ‫יותר‬ ‫טוב‬ ‫להבין‬ ‫מנת‬ ‫על‬‫ה‬ ‫ים‬-UML:‫הנתון‬:‫הבאות‬ ‫ההגדרות‬ ‫שקיימות‬ ‫להבין‬ ‫נוכל‬ ‫מתוכו‬public class Human {String type="Human";}public class Person extends Human {}public class Student extends Person {}public class Soldier extends Person {}‫וכי‬‫ב‬-Runner‫נעשים‬‫שימושים‬‫המעידים‬‫על‬‫קשרי‬‫תלות‬‫למחלקות‬(‫יצירת‬‫אובייקטים‬‫וכד‬.)
  5. 5. ‫אדם‬ ‫מבן‬ ‫יורשים‬ ‫וחייל‬ ‫שסטודנט‬ ‫לראות‬ ‫בקלות‬ ‫ניתן‬ .‫אנוש‬ ‫בן‬ ‫של‬ ‫המחלקות‬ ‫היררכיית‬ ‫של‬ ‫מצומצמת‬ ‫גרסה‬ ‫מתאר‬ ‫התרשים‬‫מלבד‬ ,‫בגאווה‬ ‫שהרי‬ ,‫מאובייקט‬ ‫יורש‬ ‫אנוש‬ ‫בן‬ ‫כי‬ ‫נציין‬ ,‫כן‬ ‫כמו‬ .‫אנוש‬ ‫מבן‬ ‫יורש‬ ‫אדם‬ ‫בן‬ ‫וכי‬‫כל‬ ,‫פרימיטיביים‬ ‫טיפוסים‬.‫אוטומטי‬ ‫באופן‬ ‫מאובייקט‬ ‫יורשים‬ ‫הטיפוסים‬‫בהגדרת‬ ‫נביט‬Runner:public class Runner {public static void main(String[] args) {Student student = new Student();System.out.println(student.type);Soldier soldier = new Soldier();System.out.println(soldier.type);}}‫בהרצת‬ ‫שיתקבל‬ ‫הפלט‬Runner‫את‬ ‫יורשים‬ ‫ושניהם‬ ‫היות‬ ,‫האובייקטים‬ ‫שני‬ ‫עבור‬ ‫זהה‬ ‫כמובן‬ ‫יהיה‬type‫מ‬-Human.‫למעלה‬ ‫המרה‬)‫אוטומטי‬ ‫באופן‬ ‫מתבצעת‬ ,‫(כאמור‬public class Runner {public static void main(String[] args) {Student student = new Student();System.out.println(student.type);Soldier soldier = new Soldier();System.out.println(soldier.type);Student s = new Student();System.out.println(s);Person p = s; // Person p = (Person)s; - ‫אוטומטית‬ ‫למעלה‬ ‫המרה‬–‫ל‬ ‫שקולה‬System.out.println(p);/*‫מה‬‫שיודפס‬HumanHumanStudent@32e0c07cStudent@32e0c07c*/}}‫שסטודנט‬ ‫היא‬ ‫בעיות‬ ‫בלי‬ ‫תמיד‬ ‫תתבצע‬ ‫כזו‬ ‫שהמרה‬ ‫הסיבה‬ ,‫אדם‬ ‫לבן‬ ‫מסטודנט‬ ‫בוצעה‬ ‫למעלה‬ ‫שהמרה‬ ‫לראות‬ ‫ניתן‬ ‫בדוגמה‬,‫כן‬ ‫כמו‬ ,‫אדם‬ ‫בן‬ ‫אכן‬ ‫הוא‬‫ה‬ ‫מדיאגרמת‬ ‫ללמוד‬ ‫ניתן‬ ‫זאת‬ ‫כל‬ ,‫אובייקט‬ ‫הוא‬ ‫סטודנט‬ ‫כן‬ ‫וכמו‬ ‫אנוש‬ ‫בן‬ ‫הוא‬ ‫סטודנט‬-UML.‫הירושה‬ ‫היררכיית‬ ‫את‬ ‫המתארת‬‫משתנה‬ ‫ע"י‬ ‫שמוחזק‬ ‫וסטודנט‬ ‫סטודנט‬ ‫מסוג‬ ‫משתנה‬ ‫ע"י‬ ‫שמוחזק‬ ‫שסטודנט‬ ‫הוא‬ ,‫בדוגמה‬ ‫אליו‬ ‫לב‬ ‫לשים‬ ‫שחשוב‬ ‫נוסף‬ ‫דבר‬‫הד‬ ‫כך‬ ‫במקרה‬ ‫לא‬ .‫האופן‬ ‫באותו‬ ‫מודפסים‬ ‫אדם‬ ‫בן‬ ‫מסוג‬‫בר‬-.‫עצמו‬ ‫האובייקט‬ ‫על‬ ‫השפעה‬ ‫אין‬ ‫באובייקט‬ ‫שמחזיק‬ ‫למשתנה‬‫המשתנה‬ ‫דרך‬ ,‫ובדוגמה‬ ,‫שונה‬ ‫בצורה‬ ‫לאובייקט‬ ‫להתייחס‬ ‫ניתן‬ ‫יהיה‬ ‫לפיה‬ ‫תווית‬ ‫כמעיין‬ ‫משמש‬ ‫המשתנה‬p,‫אדם‬ ‫בן‬ ‫מסוג‬‫לאובייקט‬ ‫ברפרנס‬ ‫המחזיק‬s‫שבנאד‬ ‫או‬ ‫אדם‬ ‫בבן‬ ‫שהוגדרו‬ ‫ומתודות‬ ‫למשתנים‬ ‫ורק‬ ‫אך‬ ‫לפנות‬ ‫נוכל‬ ,‫סטודנט‬ ‫מסוג‬‫ירש‬ ‫ם‬‫שהפנייה‬ ‫עוד‬ ‫כל‬ ‫יוסתרו‬ ,‫לסטודנט‬ ,‫בנאדם‬ ‫של‬ ‫ובמקרה‬ ‫הירושה‬ ‫בהיררכיית‬ ‫שמתחת‬ ‫למה‬ ‫ששייכים‬ ‫השדות‬ ,‫מלמעלה‬‫למטה‬ ‫ידנית‬ ‫המרה‬ ‫שתיעשה‬ ‫שברגע‬ ‫לציין‬ ‫חשוב‬ .‫שמומש‬ ‫מממשק‬ ‫או‬ ‫מורישה‬ ‫ממחלקה‬ ,"‫"מלמעלה‬ ‫תיעשה‬ ‫לאובייקט‬‫חסו‬ ‫שהיו‬ ‫המאפיינים‬ ‫כל‬ ‫גם‬ ‫יחזרו‬ ,‫סטודנט‬ ‫מטיפוס‬ ‫למשתנה‬ ‫בחזרה‬.‫כה‬ ‫כד‬ ‫מים‬
  6. 6. ‫למטה‬ ‫המרה‬)‫ידני‬ ‫באופן‬ ‫מתבצעת‬ ,‫(כאמור‬‫אנחנו‬ ‫האם‬ ‫עצמנו‬ ‫את‬ ‫לשאול‬ ‫עלינו‬ ‫למטה‬ ‫קאסטינג‬ ‫עושים‬ ‫כשאנחנו‬ .‫מבוקרת‬ ‫בצורה‬ ‫להיעשות‬ ‫צריכה‬ ‫למטה‬ ‫ההמרה‬.‫האובייקט‬ ‫של‬ ‫המהות‬ ‫למקור‬ ‫בהתאם‬ ‫לא‬ ‫או‬ ‫חוקית‬ ‫המרה‬ ‫מבצעים‬,‫שהבאנו‬ ‫בדוגמה‬p‫ברפרנס‬ ‫החזיק‬.‫וחוקית‬ ‫אפשרית‬ ‫סטודנט‬ ‫לטיפוס‬ ‫בחזרה‬ ‫למטה‬ ‫המרה‬ ‫ולכן‬ ‫סטודנט‬ ‫מסוג‬ ‫לאובייקט‬Student s1 = new Student();System.out.println(s1);Person p = s1; // Person p = (Person)s1; - ‫אוטומטית‬ ‫למעלה‬ ‫המרה‬–‫ל‬ ‫שקולה‬System.out.println(p);Student s2=(Student)p; // ‫המרה‬‫מלכתחילה‬ ‫שלו‬ ‫שהיו‬ ‫התכונות‬ ‫את‬ ‫לסטודנט‬ ‫ומחזירים‬ ‫היות‬ ‫תקינה‬ ‫למטה‬ ‫ידנית‬( ‫ריצה‬ ‫שגיאת‬ ‫תניב‬ ,‫חייל‬ ‫מסוג‬ ‫לטיפוס‬ ‫למטה‬ ‫להמיר‬ ‫ניסיון‬ClassCastException‫זאת‬ ,‫קומפילציה‬ ‫מבחינת‬ ‫תתאפשר‬ ‫אך‬ ,)‫ומ‬ ‫היות‬-p‫מבחינת‬ ‫שמתחתיו‬ ‫לאובייקט‬ ‫ברפרנס‬ ‫שהחזיק‬ ‫משתנה‬ ‫רק‬ ‫היה‬ ‫זה‬ ,‫אובייקט‬ ‫נוצר‬ ‫לא‬,‫מחלקתית‬ ‫היררכיה‬‫המתכנת‬ ,‫המתכנת‬ ‫בידי‬ ‫היא‬ ‫לחוקיות‬ ‫האחריות‬ ,‫כן‬ ‫ועל‬ ,)‫אדם‬ ‫בבן‬ ‫(או‬ ‫בחייל‬ ‫או‬ ‫בסטודנט‬ ‫או‬ ‫להחזיק‬ ‫יכול‬ ‫הוא‬ ‫תיאורטית‬:‫מדובר‬ ‫בפועל‬ ‫אובייקט‬ ‫באיזה‬ ‫לדעת‬ ‫שצריך‬ ‫זה‬ ‫הוא‬Soldier sol=new Soldier();sol=(Soldier)p;‫במי‬ ‫להשתמש‬ ‫ניתן‬ ,‫האובייקט‬ ‫מקור‬ ‫מה‬ ‫לדעת‬ ‫ע"מ‬‫האופרטור‬ ,‫השמורה‬ ‫לה‬instanceof:‫הבא‬ ‫באופן‬Student s3 = new Student();Human h = s3; //‫למעלה‬ ‫המרה‬if(h instanceof Student) { //‫בדיקה‬Student s4 = (Student)h; //‫תקינה‬ ‫למטה‬ ‫המרה‬}‫אם‬‫מאיזה‬ ‫בוודאות‬ ‫שידוע‬ ,‫אובייקט‬ ‫ממנו‬ ‫נוצר‬ ‫שכן‬ ‫טיפוס‬ ‫של‬ ‫למטה‬ ‫בהמרה‬ ‫מדובר‬‫לטיפוס‬ ‫ממנו‬ ‫להמיר‬ ‫וננסה‬ ‫הוא‬ ‫טיפוס‬( ‫ריצה‬ ‫שגיאת‬ ‫נקבל‬ ,‫אחר‬ClassCastException:)‫אדם‬ ‫בן‬ ‫הוא‬ ‫(סטודנט‬ ‫סטודנט‬ ‫לא‬ ‫הוא‬ ‫אדם‬ ‫שבן‬ ‫ברור‬ ‫הבאה‬ ‫בדוגמה‬ ,)Person per=new Person();Student s5=(Student)per;,‫וממי‬ ‫למי‬ ‫להמיר‬ ‫ניתן‬ ‫מי‬ ‫את‬ ‫ההחלטה‬ ‫את‬ ‫לפשט‬ ‫מנת‬ ‫על‬‫היא‬ ‫להישאל‬ ‫שצריכה‬ ‫השאלה‬"?‫האובייקט‬ ‫מקור‬ ‫"מה‬.‫אנוש‬ ‫לבן‬ ‫אותו‬ ‫להמיר‬ ‫ניתן‬ ,‫אנוש‬ ‫בן‬ ‫הוא‬ ‫סטודנט‬ ‫אם‬ .‫אדם‬ ‫לבן‬ ‫אותו‬ ‫להמיר‬ ‫ניתן‬ ,‫אדם‬ ‫בן‬ ‫הוא‬ ‫סטודנט‬ ‫אם‬.‫אותם‬ ‫להמיר‬ ‫ניתן‬ ‫לא‬ ‫ולכן‬ ‫לא‬ ?‫אדם‬ ‫בן‬ ‫הוא‬ ‫אנוש‬ ‫בן‬ ‫האם‬ ?‫חייל‬ ‫הוא‬ ‫אנוש‬ ‫בן‬ ‫האם‬,‫משמע‬ ?‫אדם‬ ‫כבן‬ ‫הזה‬ ‫לסטודנט‬ ‫מתייחס‬ ‫אני‬ ‫האם‬‫מה‬ ‫כל‬ ‫על‬ ‫איתו‬ "‫"לדבר‬ ‫ואז‬ ‫סטודנט‬ ‫כאל‬ ‫גם‬ ‫אליו‬ ‫להתייחס‬ ‫יכול‬ ‫אני‬‫על‬ ‫רק‬ ‫אלא‬ ,‫סטודנט‬ ‫כאל‬ ‫אליו‬ ‫לדבר‬ ‫יכול‬ ‫לא‬ ‫אני‬ ,‫אדם‬ ‫בן‬ ‫כאל‬ ‫אליו‬ ‫מתייחס‬ ‫שאני‬ ‫עוד‬ ‫כל‬ ‫אך‬ ,‫סטודנט‬ ‫עם‬ ‫לדבר‬ ‫שאפשר‬.‫אדם‬ ‫לבני‬ ‫שכלליים‬ ‫דברים‬
  7. 7. ‫היכו‬ ‫הוא‬ ,‫גאווה‬ ‫בשפת‬ ‫הטיפוסים‬ ‫המרת‬ ‫של‬ ‫הבולטים‬ ‫היתרונות‬ ‫אחד‬‫שונים‬ ‫סוגים‬ ‫לקבל‬ ‫שיכולות‬ ‫כלליות‬ ‫מתודות‬ ‫לייצר‬ ‫לת‬‫אנוש‬ ‫בני‬ ‫וגם‬ ‫אדם‬ ‫בני‬ ‫גם‬ ,‫סטודנטים‬ ‫גם‬ ,‫חיילים‬ ‫גם‬ ‫לקבל‬ ‫שתדע‬ ‫מתודה‬ ‫לייצר‬ ‫וברצוננו‬ ‫נניח‬ .‫כארגומנט‬ ‫אובייקטים‬ ‫של‬:‫הבאה‬ ‫בהגדרה‬ ‫נביט‬ .‫גנרית‬ ‫בצורה‬public void whois(Human h) {System.out.println("This is a "+h);}‫של‬ ‫ההיררכיה‬ ‫במורד‬ ‫או‬ ‫שברמת‬ ‫מהמחלקות‬ ‫אחד‬ ‫לכל‬ ‫רפרנסים‬ ‫זו‬ ‫למתודה‬ ‫לשלוח‬ ‫נוכל‬ ,‫זה‬ ‫באופן‬Human:whois(new Student());whois(new Person());whois(new Human());:‫כזה‬ ‫פלט‬ ‫ונקבל‬This is a Student@603a3e21This is a Person@fc519e2This is a Human@55264c84‫את‬ ‫להציב‬ ‫ניתן‬ ‫בהם‬ ‫המשתנים‬ ‫סוגי‬ ‫על‬ ‫דיברנו‬ ,‫כה‬ ‫עד‬ .‫אליו‬ ‫הרפרנס‬ ‫אלא‬ ,‫עצמו‬ ‫האובייקט‬ ‫לא‬ ‫זה‬ ‫המרה‬ ‫שעובר‬ ‫מה‬ ,‫כן‬ ‫אם‬.‫אחד‬ ‫ממשתנה‬ ‫ביותר‬ ‫להציב‬ ‫ניתן‬ ‫הרפרנס‬ ‫אותו‬ ‫שאת‬ ‫העובדה‬ ‫את‬ ‫נציין‬ ,‫כעת‬ .‫הרפרנס‬ ‫אותו‬‫יפנו‬ ,‫כך‬ ‫ובשל‬ ‫הרפרנס‬ ‫אותו‬ ‫את‬ ‫יכילו‬ ,‫זה‬ ‫ערך‬ ‫שיכילו‬ ‫המשתנים‬ ‫כל‬ ,‫זה‬ ‫במקרה‬)=( ‫להשמה‬ ‫בנוגע‬ ‫גם‬ ‫כך‬ ,‫האובייקט‬ ‫לאותו‬.‫החדש‬ ‫במשתנה‬ ‫כמתבקש‬ ‫יושם‬ ‫הרפרנס‬ ‫רק‬ ,‫שינוי‬ ‫ללא‬ ‫יישאר‬ ‫עצמו‬ ‫האובייקט‬ ,‫שונים‬ ‫מחלקה‬ ‫משתני‬ ‫בין‬‫ערך‬ ‫תחזיר‬ ‫השוואה‬ .‫אובייקטים‬ ‫בין‬ )==( ‫השוואה‬ ‫על‬ ‫לדבר‬ ‫כן‬ ‫אם‬ ‫ניתן‬ ,‫האופן‬ ‫באותו‬‫אמת‬‫המושווים‬ ‫הרפרנסים‬ ‫אם‬ ‫ורק‬ ‫אך‬ ,‫התייחסו‬ ‫מבלי‬ ,‫זהים‬‫ערך‬ ‫תחזיר‬ ‫השוואה‬ ,‫כלומר‬ ,‫עצמו‬ ‫לתוכן‬ ‫ת‬‫שקר‬‫בעלי‬ ‫אך‬ ,‫התוכן‬ ‫מבחינת‬ ‫זהים‬ ‫האובייקטים‬ ‫אם‬ ‫גם‬.‫שונה‬ ‫רפרנס‬‫מהמחלקה‬ ‫אוטומטי‬ ‫באופן‬ ‫יורשות‬ ‫המחלקות‬ ‫וכל‬ ‫היות‬Object‫ב‬ ‫להשתמש‬ ‫ניתן‬ ,-equals‫בין‬ ‫ההשוואה‬ ‫ביצוע‬ ‫לצורך‬‫המתודה‬ ‫של‬ ‫הדפולטיבי‬ ‫פעולתה‬ ‫אופן‬ ‫בין‬ ‫הבדל‬ ‫אין‬ .‫אובייקטים‬equals‫בין‬ ‫הבדל‬ ‫יש‬ ‫אך‬ ,== ‫האופרטור‬ ‫של‬ ‫פעולתו‬ ‫לאופי‬( ‫בגאווה‬ ‫אופרטורים‬ ‫העמסת‬ ‫לבצע‬ ‫ניתן‬ ‫שלא‬ ‫בכך‬ ‫השניים‬‫ב‬ ‫אופרטורים‬ ‫העמסת‬ ‫לבצע‬ ‫ניתן‬ :‫טיפ‬-Groovy‫שפה‬ ‫שזו‬ ,‫מבוססת‬JVM‫לגאווה‬ ‫דומה‬‫של‬ ‫פעולתה‬ ‫אופן‬ ‫את‬ ‫לשנות‬ ‫שניתן‬ ,‫ומכאן‬ ‫מתודות‬ ‫דריסת‬ ‫לבצע‬ ‫ניתן‬ ‫כן‬ ‫אך‬ ,)equals‫כך‬ ,:‫המחדל‬ ‫ברירת‬ ‫בדרך‬ ‫עושה‬ ‫שהיא‬ ‫כפי‬ ,‫הרפרנס‬ ‫לפי‬ ‫ולא‬ ‫התוכן‬ ‫לפי‬ ‫ההשוואה‬ ‫את‬ ‫שתבצע‬public boolean equals(Object obj) { /*New logic goes here*/ }‫ה‬ ‫ברירת‬ ‫ערך‬ ‫את‬ ‫יקבל‬ ‫מחלקה‬ ‫מטיפוס‬ ‫משתנה‬‫מחדל‬null‫בוצע‬ ‫לא‬ ‫באם‬ ,instantiation‫לגבי‬ ‫אינדיקציה‬ ‫זוהי‬ ,‫כלומר‬ ,‫של‬ ‫הצבה‬ ‫לבצע‬ ‫גם‬ ‫(ניתן‬ ‫אובייקט‬ ‫לאף‬ ‫ברפרנס‬ ‫מחזיק‬ ‫לא‬ ‫זה‬ ‫שמשתנה‬ ‫העובדה‬null‫במשתנה‬ ‫לשימוש‬ ‫ניסיון‬ .)‫יזום‬ ‫באופן‬‫המכיל‬ ‫מחלקה‬ ‫מסוג‬null.‫ריצה‬ ‫לשגיאת‬ ‫יגרום‬ ,‫ר‬ ‫מכיל‬ ‫מחלקה‬ ‫מסוג‬ ‫משתנה‬ ‫האם‬ ‫בדיקה‬ ‫לבצע‬ ‫ניתן‬‫הוא‬ ‫האם‬ ‫בדיקה‬ ‫ע"י‬ ‫לא‬ ‫או‬ ‫לאובייקט‬ ‫פרנס‬==null‫או‬!=null

    Be the first to comment

    Login to see the comments

  • AsafRaz3

    Jan. 13, 2018

חלק מסדרת הרצאות בנושא "תכנות מונחה עצמים בסביבת ג'אווה", והפעם: משתנים מטיפוס מחלקה והמרת טיפוסים.

Views

Total views

1,840

On Slideshare

0

From embeds

0

Number of embeds

117

Actions

Downloads

23

Shares

0

Comments

0

Likes

1

×