» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
מערכים של אובייקטים
דף ראשי  מתחילים  מערכים ומחרוזות  מערכים של אובייקטים גרסה להדפסה

 

מערכים של אובייקטים

 

 

מערך של אובייקטים ב‑Java איננו למעשה מערך של אובייקטים

 

נותר עוד נושא חמקמק שעליך לתפוס, לפני שנסיים את הדיון במערכים.
כאשר אתה יוצר מערך של אובייקטים, אין זה למעשה מערך של אובייקטים.

 

למעשה, זהו מערך של משתני הצבעה על טיפוסים של אובייקטים, כך שכל איבר במערך עשוי להצביע על אובייקט ממשי מאותו טיפוס.

 

האובייקטים הממשיים אינם מאוחסנים למעשה במערך. הם מאוחסנים במקומות כלשהם בזיכרון, ואיברי המערך פשוט מצביעים עליהם.

 

מערך של אובייקטים ב‑ ++C

 

ב‑ ++C המצב הוא שונה. אם הצהרת על מערך של אובייקטים ב‑ ++C, האובייקטים אכן מאוחסנים בתוך מערך, וניתן להשתמש באופרטור sizeof בצירוף מחוון על מנת לחצות את המערך ולבחון את התוכן של כל אובייקט.

 

האיברים של מערך אובייקטים ב‑Java אינם חייבים להיות כולם מטיפוס ממשי זהה

 

לעובדה שמערך כזה הוא פשוט מערך של משתני הצבעה, יש כמה השלכות מעניינות.

 

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

 

אם הצהרת על מערך שיכיל הצבעות מטיפוס Object, אותן הצבעות עשויות להצביע על כל טיפוס שהוא, משום שב‑Java הצבעה מטיפוס Object מסוגלת להצביע על כל אובייקט.

 

ניתן לעשות דבר דומה תוך שימוש בטיפוסי interface. טיפוסי interface ידונו באחד השיעורים הבאים.

 

לרוב יהיה צורך להמיר טיפוס כדי להשתמש בהצבעת Object

 

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

 

אין זה אתגר גדול, כל עוד אתה מסוגל להחליט לאיזה טיפוס להמיר אותן.

 

מחלקת Vector

 

ב‑Java קיימת מחלקה בשם Vector העושה שימוש ביכולת כזו. אובייקט מטיפוס Vector הוא מערך מתרחב-מעצמו של משתני הצבעה מטיפוס Object.
ניתן להשתמש באובייקט מטיפוס
Vector על מנת לנהל קבוצת אובייקטים מכל טיפוס שהוא,
גם אובייקטים מטיפוס זהה וגם אובייקטים מעורבים.

 

תוכנית לדוגמה שמשתמשת במחלקת Date

 

התוכנית הבאה איננה כה מסובכת. היא מתנהגת באופן הבא:

 

·       הצהרה על משתנה-הצבעה על מערך מטיפוס Date.

·       יצירת מערך בן 3 איברים של משתני הצבעה מטיפוס Date.

·       הצגת התוכן של איברי המערך ואישור העובדה שהם null, כפי שהם אמורים להיות.

·       יצירת 3 אובייקטים מטיפוס Date ואחסון ההצבעות על אותם אובייקטים בשלושת האיברים של המערך.

·       גישה להצבעות מתוך המערך ובצורה זו הצגת התוכן של כל אובייקט Date אינדיבידואלי.

 

כפי שניתן לשער מעצם שמה של המחלקה, כל אובייקט מכיל מידע בנוגע לתאריך.

 

כאמור בשיעורים הקודמים, להיות מתכנת Java מוכשר ידרוש ממך להתמודד עם הרבה מצבים בדרכי עקיפין.

 

ממחיש את השימוש במערכים עם אובייקטים.

 

התוכנית ממחישה ש"מערך של אובייקטים" איננו למעשה מערך של אובייקטים, אלא מערך של הצבעות על אובייקטים. האובייקטים אינם מאוחסנים במערך,
אלא אי-שם בזיכרון, וההצבעות שבאיברי המערך פשוט מצביעות עליהם.

 

/*File array03.java Copyright 1997, R.G.Baldwin

Illustrates use of arrays with objects.

Illustrates that "an array of objects" is not really an
array of objects, but rather is an array of references
to objects.  The objects are not stored in the array,
but rather are stored somewhere else in memory and the
references in the array elements refer to them.

The output from running this program is:

myArrayOfRefs contains
null
null
null

myArrayOfRefs contains
Sat Dec 20 16:56:34 CST 1997
Sat Dec 20 16:56:34 CST 1997
Sat Dec 20 16:56:34 CST 1997
**********************************************************/
import java.util.*;

class array03 { //define the controlling class
  Date[] myArrayOfRefs; //Declare reference to the array

  array03() {//constructor
    //Instantiate the array of three reference variables
    // of type Date.  They will be initialized to null.
    myArrayOfRefs = new Date[3];

    //Display the contents of the array.
    System.out.println( "myArrayOfRefs contains" );    
    for(int cnt = 0; cnt < 3; cnt++)
      System.out.println(this.myArrayOfRefs[cnt]);
    System.out.println();    
    
    //Instantiate three objects and assign references to
    // those three objects to the three reference 
    // variables in the array.
    for(int cnt = 0; cnt < 3; cnt++)
      myArrayOfRefs[cnt] = new Date();

  }//end constructor
  //-----------------------------------------------------//
  
  public static void main(String[] args){//main method
    array03 obj = new array03();
    System.out.println( "myArrayOfRefs contains" );
    for(int cnt = 0; cnt < 3; cnt++)
      System.out.println(obj.myArrayOfRefs[cnt]);
    System.out.println();
  }//end main
}//End array03 class.  
 05-01-04 / 18:33  נוצר ע"י רונית רייכמן  בתאריך 
 מערכים ומחרוזות - הקודםהבא - מחרוזות 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 6