JavaRush /בלוג Java /Random-HE /תרגול של שימוש בפולימורפיזם

תרגול של שימוש בפולימורפיזם

פורסם בקבוצה
שלום! היום אנחנו מסיימים סדרת הרצאות על עקרונות OOP . בשיעור זה נדבר על פולימורפיזם. תרגול של שימוש בפולימורפיזם - 1פולימורפיזם הוא היכולת להתייחס למספר סוגים כאילו היו אותו סוג. במקרה זה, ההתנהגות של אובייקטים תהיה שונה בהתאם לאיזה סוג הם שייכים. בואו נסתכל על הצהרה זו ביתר פירוט. נתחיל בחלק הראשון: "היכולת לעבוד עם מספר סוגים כאילו הם אותו סוג". איך סוגים שונים יכולים להיות זהים? נשמע קצת מוזר :/ זה בעצם פשוט. לדוגמה, מצב זה נוצר עם שימוש רגיל בירושה. בואו נראה איך זה עובד. נניח שיש לנו כיתת אב פשוטה Catעם שיטה אחת run()- "הפעלה":
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
עכשיו בואו ניצור שלוש מחלקות שיורשות מ- Cat, ו- , מציינים Lionאריה , נמר וברדלס. TigerCheetah
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Лев бежит со speedю 80 км/ч");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Тигр бежит со speedю 60 км/ч");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Гепард бежит со speedю до 120 км/ч");
   }
}
אז יש לנו 3 כיתות. בואו נדמה מצב שבו נוכל לעבוד איתם כאילו הם אותה כיתה. בואו נדמיין שאחד החתולים שלנו חולה וזקוק לעזרתו של ד"ר איבולית. בואו ננסה ליצור חוג Aibolitשיוכל לטפל באריות, נמרים וברדלסים.
public class Aibolit {

   public void healLion(Lion lion) {

       System.out.println("Лев здоров!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Тигр здоров!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Гепард здоров!");
   }
}
נראה שהבעיה נפתרה - הכיתה כתובה ומוכנה לשימוש. אבל מה נעשה אם נרצה להרחיב את התוכנית שלנו? עכשיו יש לנו רק 3 מינים: אריות, נמרים וברדלסים. אבל יש יותר מ-40 מינים של חתולים בעולם. תארו לעצמכם מה יקרה אם נוסיף לתכנית כיתות נפרדות לחתולים של פאלאס, יגוארים, קון מיין, חתולי בית וכל השאר. תרגול של שימוש בפולימורפיזם - 2התוכנית עצמה, כמובן, תתפקד, אבל הכיתה Aibolitתצטרך להוסיף כל הזמן שיטות חדשות לטיפול בכל סוג של חתול, וכתוצאה מכך הוא יגדל לגדלים חסרי תקדים. כאן נכנסת לתמונה התכונה של פולימורפיזם - "היכולת לעבוד עם כמה סוגים כאילו הם אותו סוג." אנחנו לא צריכים ליצור אינספור שיטות שיעשו את אותו הדבר – לטפל בחתול. שיטה אחת תספיק לכל המקרים בבת אחת:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
   }
}
healCat()אנו יכולים להעביר גם אובייקטים Lionוגם Tigerאובייקטים לשיטה Cheetah- כולם Cat:
public class Main {

   public static void main(String[] args) {

       Aibolit aibolit = new Aibolit();

       Lion simba = new Lion();
       Tiger sherekhan = new Tiger();
       Cheetah chester = new Cheetah();

       aibolit.healCat(simba);
       aibolit.healCat(sherekhan);
       aibolit.healCat(chester);
   }
}
פלט מסוף:

Пациент здоров!
Пациент здоров!
Пациент здоров!
כך הכיתה שלנו Айболитיכולה לעבוד עם טיפוסים שונים כאילו הם אותו טיפוס. כעת נעסוק בחלק השני: "במקרה זה, ההתנהגות של אובייקטים תהיה שונה בהתאם לאיזה סוג הם שייכים". גם כאן הכל פשוט. בטבע, כל החתולים רצים אחרת. לכל הפחות, מהירות הריצה שלהם שונה. מבין שלושת חיות המחמד שלנו, הצ'יטה היא המהירה ביותר, בעוד הנמר והאריה רצים לאט יותר. כלומר, ההתנהגות שלהם שונה. פולימורפיזם לא רק נותן לנו את היכולת להשתמש בסוגים שונים כאחד. יחד עם זאת, הוא מאפשר לנו לא לשכוח את השונות ביניהם ומשמר את ההתנהגות הספציפית לכל אחד מהם. ניתן להבין זאת בדוגמה זו. בואו נגיד שאחרי החלמה מוצלחת, החתולים שלנו החליטו להתרוצץ קצת כדי לחגוג. בואו נוסיף את זה לכיתה שלנו Aibolit:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
       cat.run();
   }
}
בואו ננסה להפעיל את אותו קוד לטיפול בשלוש חיות:
public static void main(String[] args) {

   Aibolit aibolit = new Aibolit();

   Lion simba = new Lion();
   Tiger sherekhan = new Tiger();
   Cheetah chester = new Cheetah();

   aibolit.healCat(simba);
   aibolit.healCat(sherekhan);
   aibolit.healCat(chester);
}
וכך תיראה התוצאה:

Пациент здоров!
Лев бежит со speedю 80 км/ч
Пациент здоров!
Тигр бежит со speedю 60 км/ч
Пациент здоров!
Гепард бежит со speedю до 120 км/ч
כאן אנו רואים בבירור שההתנהגות הספציפית של החפצים שלנו נשמרה, למרות שהעברנו את כל שלושת החיות לשיטה, "הכללה" כל אחת מהן ל Cat. הודות לפולימורפיזם, ג'אווה זוכרת היטב שלא מדובר רק בשלושה חתולים, אלא באריה, בנמר ובצ'יטה, שרצים אחרת. זהו היתרון העיקרי של שימוש בפולימורפיזם-גמישות . כאשר אנו צריכים ליצור פונקציונליות מסוימת המשותפת לסוגים רבים, אריות, נמרים וברדלסים פשוט הופכים ל"חתולים". כל החיות שונות, אבל במצבים מסוימים - חתול הוא חתול, לא משנה לאיזה מין הוא שייך :) הנה אישור וידאו עבורכם.
כאשר ה"הכללה" הזו אינה נדרשת, ולהיפך אנו צריכים שהתנהגות המינים תהיה שונה, כל סוג מתנהג אחרת. הודות לפולימורפיזם, אתה יוצר ממשק אחד (סט של שיטות) עבור מגוון רחב של מחלקות. בשל כך, המורכבות של תוכניות מצטמצמת. גם אם נרחיב את התוכנית ל-40 סוגי חתולים, עדיין יהיה לנו את הממשק הפשוט ביותר האפשרי - שיטה אחת run()לכל 40 החתולים.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION