O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

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

  • Seja o primeiro a comentar

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

  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

×