בתכנות מונחה עצמים, אחד המושגים הבסיסיים הוא ירושה. ב-Java, הורשה מאפשרת לנו ליצור מחלקות חדשות המבוססות על מחלקות קיימות, תוך בירושה של המאפיינים וההתנהגויות שלהן. מערכת היחסים בין כיתות מכונה לעתים קרובות מערכת יחסים 'הוא-הוא'. בחלק זה, נחקור מהי מערכת יחסים ואיך היא מיושמת ב-Java.
הבנת הירושה:
לפני שמתעמקים במערכת היחסים היא חיונית להבין את מושג הירושה. ירושה היא מנגנון המאפשר למחלקה לרכוש את המאפיינים והשיטות של מחלקה אחרת. המחלקה שממנה עוברת בירושה ידועה כ- superclass או מחלקת בסיס, והמחלקה שיורשת נקראת תת-מחלקה או מחלקה נגזרת.
מערכת היחסים של Is-A:
הקשר is-a, הידוע גם כקשר הירושה, מייצג סוג של קשר בין שתי מחלקות כאשר מחלקה אחת היא גרסה מיוחדת של אחרת. זה מרמז שתת-מחלקה היא סוג מסוים של מחלקת העל שלה. לדוגמה, שקול היררכיית כיתה עם מעמד-על בשם 'חיה' ותת-מחלקה בשם 'כלב'. אנו יכולים לומר שכלב הוא חיה, מה שמשקף את מערכת היחסים של זה.
היתרונות של מערכת יחסים ב-Is-A:
הקשר is-a מספק מספר יתרונות בתכנות Java:
יישום ה-Is-A Relationship ב-Java:
כדי ליצור קשר בין מחלקות ב-Java, משתמשים במילת המפתח 'מתרחבת'. תת-המחלקה מרחיבה את מחלקת העל, מה שמציין שהיא יורשת את כל האיברים (שדות ושיטות) של מחלקת העל. התחביר ליצירת תת מחלקה הוא כדלקמן:
class SubclassName extends SuperclassName { // Subclass members }
לדוגמה, הבה נבחן את מערכת היחסים בין בעלי חיים לכלב שהוזכרו קודם לכן:
class Animal { // Superclass members } class Dog extends Animal { // Subclass members }
במקרה זה, הכיתה 'כלב' מרחיבה את המעמד 'חיה', מה שמסמל את מערכת היחסים היא. מחלקת הכלב יורשת את המאפיינים של מחלקת החיות, כגון תחומיה ושיטותיה. בנוסף, הכיתה Dog יכולה להגדיר שדות ושיטות ייחודיים משלה.
הנה תוכנית לדוגמה שמדגימה את הקשר הוא-א ב-Java, במיוחד את ההיררכיה של Animal-Dog:
IsARelationshipExample.java
// Superclass class Animal { protected String name; public Animal(String name) { this.name = name; } public void makeSound() { System.out.println('The animal makes a sound.'); } } // Subclass class Dog extends Animal { private String breed; public Dog(String name, String breed) { super(name); this.breed = breed; } @Override public void makeSound() { System.out.println('The dog barks.'); } public void fetch() { System.out.println('The dog fetches a ball.'); } } // Main class public class IsARelationshipExample { public static void main(String[] args) { // Create an Animal object Animal animal = new Animal('Generic Animal'); // Create a Dog object Dog dog = new Dog('Buddy', 'Labrador Retriever'); // Polymorphism - Dog is treated as an Animal Animal anotherDog = new Dog('Max', 'German Shepherd'); // Call methods on the Animal object System.out.println('Animal Name: ' + animal.name); animal.makeSound(); System.out.println(); // Call methods on the Dog object System.out.println('Dog Name: ' + dog.name); System.out.println('Dog Breed: ' + dog.breed); dog.makeSound(); dog.fetch(); System.out.println(); // Polymorphism - Dog is treated as an Animal System.out.println('Another Dog Name: ' + anotherDog.name); // The makeSound() method in the Dog class is invoked anotherDog.makeSound(); // Casting to access the fetch() method specific to the Dog class ((Dog) anotherDog).fetch(); } }
תְפוּקָה:
Animal Name: Generic Animal The animal makes a sound. Dog Name: Buddy Dog Breed: Labrador Retriever The dog barks. The dog fetches a ball. Another Dog Name: Max The dog barks. The dog fetches a ball.
בדוגמה זו, יש לנו כיתת חיות בתור מחלקת העל וכיתה כלב כתת המחלקה. כיתת הכלב מרחיבה את כיתת החיות, ומבססת את מערכת היחסים של זה. למחלקה Animal יש שדה שם ושיטת makeSound() ואילו למחלקה Dog יש שדה גזע נוסף והיא עוקפת את שיטת makeSound(). המחלקה Dog מציגה גם שיטה חדשה, fetch(). בשיטה הראשית, אנו יוצרים מופעים של כיתות בעלי חיים וכלב. אנו מדגימים פולימורפיזם על ידי הקצאת אובייקט של כלב להפניה לבעלי חיים. לאחר מכן אנו מפעילים שיטות על אובייקטים אלה, מראים כיצד תת-המחלקה יורשת את השדות והשיטות של מחלקת העל. לבסוף, אנו מדגימים את הליהוק של ההפניה Animal בחזרה להפניה Dog כדי לגשת לשיטת fetch() הספציפית למחלקה Dog
סנטוס נגד rhel
הקשר is-a ב-Java הוא היבט בסיסי של תכנות מונחה עצמים המאפשר יצירת היררכיות מחלקות. הוא מאפשר שימוש חוזר בקוד, פולימורפיזם ועקיפה של שיטות, ומקדם ארגון והרחבה טובים יותר של תוכנה. על ידי הבנה ומינוף של מערכת היחסים של זה, מפתחים יכולים לעצב יישומי Java חזקים וגמישים יותר.