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

 

השלבים בחייו של אובייקט

 

מהם השלבים?

 

כאמור, השלבים בחייו של אובייקט מורכבים מ:

 

·       יצירה

·       שימוש

·       ניקוי

 

יצירת אובייקטים

 

כאמור למעלה, אנו נצא מתוך הנחה, שיש בידינו גישה למחלקות קיימות, או שאנו מסוגלים ליצור מחלקות משל עצמנו (דבר שנלמד לעשות בהמשך).

 

מהו אובייקט?

 

אובייקט הוא מופע  של מחלקה.

 

מהם השלבים הכרוכים ביצירת אובייקט?

 

ב‑Java וגם ב‑++C התהליך של יצירת אובייקט כרוך בשלושה שלבים:
(שלעתים קרובות יופיעו במשולב)

 

·       הצהרה (מתן שם לאובייקט)

·       יצירה (הקצאת זיכרון עבור האובייקט)

·       אתחול אופציונלי (מתן ערכים תחיליים למשתני המופע של האובייקט)

 

אובייקטים לעומת טיפוסים פרימיטיביים

 

במסגרת הדיון ב‑Java חשוב להכיר בהבדל שבין אובייקטים למשתנים מטיפוס פרימיטיביים.

ההבדל בין אובייקטים לטיפוסים פרימיטיביים אינו כה בולט ב‑++C, כיוון שבשפה זו מטפלים בשניהם בדרך דומה.

 

טיפוסים פרימיטיביים

 

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

 

int myVar;

 

שילוב שלושת השלבים לגבי טיפוסים פרימיטיביים

 

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

 

int myVar = 6;

 

מה ידוע למהדר?

 

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

 

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

 

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

 

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

 

/*File dynamic1.cpp  Copyright 1997, R.G.Baldwin
Illustrates static and dynamic instantiation of both
primitive variables and objects.  Also illustrates
instantiation of dynamic arrays of both primitive
variables and objects.

The output from this program is as follows:

myIntVar contains 6
myIntPtr points to 7
myIntArrayPtr points to 8 9 10
myStaticObj contains 11
myObjPtr points to 12
myObjArrayPtr points to 13 14 15

********************************************************/

#include<iostream.h

class dynamic1 {
  int objData; //single instance variable of the class

public:
  dynamic1(){}//default constructor

  //parameterized constructor
  dynamic1(int inData){objData = inData;}

  int getData(){return objData;} //get method

  void putData(int inData){objData = inData;}//put method

  static void classMain(){ //class method named classMain
    //Instantiate and initialize static primitive
    // variable
    int myIntVar = 6;
    cout << "myIntVar contains " << myIntVar << endl;

    //Instantiate and initialize dynamic primitive
    // variable
    int *myIntPtr = new int(7);
    cout << "myIntPtr points to " << *myIntPtr << endl;

    //Instantiate dynamic array of primitive variables.
    // Initialization is not supported for dynamic
    // arrays.
    int *myIntArrayPtr = new int[3];

    //Put some data in the dynamic array.
    for(int i = 0; i < 3; i++) *(myIntPtr+i) = i+8;

    //Display the data in the dynamic array.
    cout << "myIntArrayPtr points to ";
    for(i = 0; i < 3; i++) cout << *(myIntPtr+i)
                                                 << " ";
    cout << endl;

///Now work with objects instead of primitive variables.

    //Instantiate and initialize static object
    dynamic1 myStaticObj(11);
    cout << "myStaticObj contains "
                       << myStaticObj.getData() << endl;

    //Instantiate and initialize dynamic object
    dynamic1 *myObjPtr = new dynamic1(12);
    cout << "myObjPtr points to "
                       << myObjPtr - getData() << endl;

    //Instantiate dynamic array of objects.
    // Initialization of dynamic arrays is not supported.
    dynamic1 *myObjArrayPtr = new dynamic1[3];

    //Put some data in the dynamic array of objects
    for(i = 0; i < 3; i++)
      (myObjArrayPtr+i)-putData(i+13);

    //Display the data in the dynamic array of objects
    cout << "myObjArrayPtr points to ";
    for(i = 0; i < 3; i++)
      cout << (myObjArrayPtr+i)-getData() << " ";

  }//end classMain
};//End dynamic1 class definition.
//=====================================================//

void main()
{
  //call the class method named classMain
  dynamic1::classMain();
}//end main

 

זיכרון סטטי לעומת זיכרון דינמי ב‑Java

 

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

 

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

 

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

 

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

 

כאשר Java יוצרת "מערך של אובייקטים" (שיימצא תמיד בזיכרון הדינמי), היא יוצרת למעשה מערך של הצבעות על אובייקטים.

 

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

 

אפליקציית Java לדוגמה

 

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

 

הצגת הערכים של אובייקטים ושל הצבעות על אובייקטים

 

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

 

סיכום קצר

 

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

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

 

ב‑Java נחוץ שימוש מרובה באופרטור new

 

ב‑Java נחוץ שימוש מרובה באופרטור new על מנת ליצור "מערך של אובייקטים",
משום שהמערך אינו מכיל באמת את האובייקטים, אלא הצבעות על אובייקטים.

 

ב‑ ++C נחוץ רק שימוש בודד באופרטור new

 

ב‑ ++C, שימוש בודד באופרטור new יצור מערך (חד-מימדי) של אובייקטים.

 

יצירת מערך של אובייקטים ב‑Java דומה מאוד ליצירת מערך של מחוונים ב‑++C, שלרוב ישמש לצורך הצבעה על קבוצה של מחרוזות. אולם מבחינת התחביר, מערך של הצבעות ב‑Java הוא נוח הרבה יותר לשימוש מאשר מערך של מחוונים ב‑++C .

 

ברירת המחדל עבור פורמט תצוגה של הצבעה ב‑Java

 

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

 

()main יוצרת אובייקטים של המחלקה שבה היא חברה

 

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

 

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

 

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

 

/*File Dynamic1.java Copyright 1997, R.G.Baldwin
Illustrates allocation of primitive variables to static
memory at compile time.

Also illustrates instantiation of dynamic objects and 
dynamic arrays of objects at runtime.

The output from this program is as follows:

myPrimitiveVariable contains 6
myObjRef contains Dynamic1@1cc748
Object referred to by myObjRef contains 12
myArrayOfRefs contains 
Dynamic1@1cc766 
Dynamic1@1cc767 
Dynamic1@1cc768 

Objects referred to by myArrayOfRefs contain 
13 
14 
15 
********************************************************/

class Dynamic1 {
  //single instance variable of the class of type int
  private int objData; 

  //parameterized constructor
  public Dynamic1(int inData){
    objData = inData;
  }//end constructor

  //get method
  public int getData(){
    return objData;
  }//end getData()

  public static void main(String[] args){//main method
    //Declare and initialize primitive variable of type 
    // int in static memory at compile time. Display it.
    int myPrimitiveVariable = 6;
    System.out.println("myPrimitiveVariable contains " 
                                  + myPrimitiveVariable);

    //Instantiate and initialize object in dynamic memory
    // at runtime.  Display the contents of the reference
    // variable and the contents of the object it refers
    // to.
    Dynamic1 myObjRef = new Dynamic1(12);
    System.out.println("myObjRef contains " + myObjRef);
    System.out.println(
              "Object referred to by myObjRef contains " 
                                 + myObjRef.getData() );

    //Instantiate array of references to objects in 
    // dynamic memory at runtime.
    Dynamic1[] myArrayOfRefs = new Dynamic1[3];

    //Instantiate some objects in dynamic memory and
    // store references to those objects in the array
    // of references.
    for(int i = 0; i < 3; i++)
      myArrayOfRefs[i] = new Dynamic1(i+13);

    //Display the values contained in the array of 
    // references to objects
    System.out.println("myArrayOfRefs contains ");
    for(int i = 0; i < 3; i++)
      System.out.println(myArrayOfRefs[i]);
    System.out.println();

    //Display the values in the objects referenced by
    // the array of references
    System.out.println(
        "Objects referred to by myArrayOfRefs contain ");
    for(int i = 0; i < 3; i++)
      System.out.println(myArrayOfRefs[i].getData());

  }//end Main
}//End Dynamic1 class definition.

 

הַשָׂמָה למשתנה הצבעה מטיפוס של מחלקת-על

 

התוכנית הבאה היא גירסה אחרת של התוכנית הקודמת, ונועדה להמחיש מושג חשוב בתכנות מונחה-עצמים ב‑Java.

ב‑Java ניתן לערוך הַשָׂמָה של הצבעה על אובייקט לכל משתנה הצבעה מאותו טיפוס כמו האובייקט, או מטיפוס של מחלקת-על שלו.

 

שימוש במחלקת Object

 

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

 

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

 

הצגת הערכים של משתני הצבעה

 

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

 

נחוצה המרת טיפוס כלפי מטה

 

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

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

 

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

 

התחביר של המרת הטיפוס עשוי להיות מסובך

 

התחביר של המרת טיפוס עשוי להיות מעט מסובך וידרוש מספר רב של סוגריים.

 

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

 

/*File Dynamic2.java Copyright 1997, R.G.Baldwin
Illustrates instantiation of array of references of type
Object and the use of that array to refer to objects
of an inherited class.

The output from this program is as follows:

myArrayOfRefs contains 
Dynamic2@1cc738 
Dynamic2@1cc739 
Dynamic2@1cc73a 

Objects referred to by myArrayOfRefs contain 
13
14
15
********************************************************/

class Dynamic2 {
  //single instance variable of the class of type int
  private int objData; 

  //parameterized constructor
  public Dynamic2(int inData){
    objData = inData;
  }//end constructor

  //get method
  public int getData(){
    return objData;
  }//end getData()

  public static void main(String[] args){//main method
    //Instantiate array of references to objects of type
    // Object in dynamic memory at runtime.
    Object[] myArrayOfRefs = new Object[3];

    //Instantiate some objects of type Dynamic2 in 
    // dynamic memory and store references to those 
    // objects in the array of references of type Object.
    for(int i = 0; i < 3; i++)
      myArrayOfRefs[i] = new Dynamic2(i+13);

    //Display the values contained in the array of 
    // references to objects. Note that the values
    // identify the actual type of object referred to.
    System.out.println("myArrayOfRefs contains ");
    for(int i = 0; i < 3; i++)
      System.out.println(myArrayOfRefs[i]);
    System.out.println();

    //Display the values in the objects referenced by
    // the array of references.  Note the requirement
    // to downcast the references to the actual type
    // of object referred to by the references in
    // order to access the instance variables of the
    // objects.
    System.out.println(
        "Objects referred to by myArrayOfRefs contain ");
    for(int i = 0; i < 3; i++)
      System.out.println(
        ((Dynamic2)(myArrayOfRefs[i])).getData());
  }//end Main
}//End Dynamic2 class definition.

 

אובייקטים אנונימיים

 

ב‑Java אין זה הכרח תמיד להצהיר על אובייקט (לתת לו שם).

אובייקטים שנוצרו ללא הצהרה מכונים אובייקטים אנונימיים.

 

מתי תרצה להשתמש באובייקט אנונימי?

 

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

 

יצירת אובייקט אנונימי בקריאה למתודה

 

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

 

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

 

/*File date1.java Copyright 1997, R.G.Baldwin
Illustrates instantiation of an object without the 
declaration of a name.  A Date object is instantiated 
and passed to the I/O system for display.  The Date 
class is contained in java.util, thus the requirement 
for the import statement.

The output for one particular run was:

Thu Oct 24 16:44:35  1996

********************************************************/
import java.util.*;
class date1 { //define the controlling class
  public static void main(String[] args){ //main method
    System.out.println( new Date() );
  }//end main
}//End date1 class.  

 

האם האובייקט הוא באמת אנונימי?

 

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

 

יצירת אובייקט אנונימי בתוך ביטוי

 

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

 

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

 

ממחיש יצירת אובייקט אנונימי ושימוש בו בתוך משתנה מקומי.

 

/*File Anonymous1.java Copyright 1997, R.G.Baldwin
Illustrates instantiation and use of an anonymous
object in a local expression.

The output from this program is as follows:
13

********************************************************/

class Anonymous1 {
  private int objData; //instance variable

  public Anonymous1(int inData){//constructor
    objData = inData;
  }//end constructor

  public int getData(){//get method
    return objData;
  }//end getData()

public static void main(String[] args){//main method
    System.out.println("" 
                    + (new Anonymous1(10).getData()+3));
  }//end Main
}//End Anonymous1 class definition.

 

לשם המחשה בלבד

 

התוכנית הקודמת אינה שימושית במיוחד, אך היא ממחישה את המושג של אובייקט אנונימי.

 

אובייקט אנונימי שימושי יותר

 

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

 

על מנת לעשות זאת, היא יוצרת אובייקט אנונימי מטיפוס integer שמעביר ערך-דמה של 0 לבנאי. המטרה היא לאפשר גישה למתודת toHexString() של מחלקת integer ולהשתמש באותה מתודה כדי להמיר 128 ל‑hex .

 

ממחיש יצירה ושימוש באובייקט אנונימי לשם הצגת ערך ה‑integer 128 ב‑hex .

 

/*File Anonymous2.java Copyright 1997, R.G.Baldwin
Illustrates instantiation and use of an anonymous
object to display the integer value 128 in hex.

The output from this program is as follows:
80
80

********************************************************/

class Anonymous2 {

public static void main(String[] args){//main method
    //Note that the value of zero being passed to the
    // Integer class constructor is a dummy value 
    // provided to make it possible to instantiate
    // the object of type Integer.  The object of 
    // type Integer is needed so that its instance
    // method named toHexString() can be invoked.
    System.out.println("" 
                    + new Integer(0).toHexString(128));

    //Access the toHexString() method as a class method
    // without the requirement for an object of the 
    // Integer type.
    System.out.println(Integer.toHexString(128));      
  }//end Main
}//End Anonymous2 class definition.

 

האמת תצא לאור

 

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

 

גישה דומה ב‑++C

 

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

 

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

 

/*File date1.cpp  Copyright 1997 R.G.Baldwin
Illustrates instantiating an object without an "obvious"
declaration of the object.  An object is instantiated and
passed to a function where it is used to initialize one
of the parameters in the function.

The output from the program is:

The date is 10/24/96

*****************************************************/

#include<iostream.h
#include<string.h

class dateContainer{ //class to instantiate a date object
public:
  char dataArray[20];
  dateContainer(char* inString){
    strcpy(dataArray,inString);
  }
};//end class

class date1 { //simulates Java controlling class
public:
  //Function to receive an object containing a date
  // and display it.
  void displayDate(dateContainer objIn){
    cout << "The date is "<< objIn.dataArray << endl;
  }//end displayDate()

  static void classMain(){
    //object is required to call displayDate()
    date1 thisObject;

    //Put a call to the constructor as a parameter in
    // the function call.
    thisObject.displayDate(dateContainer("10/24/96") );
  }//end classMain
};//End date1 class definition.
//=====================================================//

void main()
{
  //call the class method named classMain
  date1::classMain();
}//end main

 

 

בנאים מועמסים

 

השתמשנו בבנאי עבור המחלקה על מנת ליצור אובייקט חדש בשתי התוכניות הקודמות
(תוכנית
Java ותוכנית ++C). היות ובנאים ניתנים להעמסה, ניתן לאתחל אובייקטים חדשים במיגוון דרכים שונות. אנו נדון בכך בהרחבה בדיון על המתודות השונות של מחלקה.

 

שימוש באובייקטים

 

משתנים חברים במחלקה ומתודות חברות במחלקה עשויים להיות מוסתרים

 

 14-01-04 / 19:04  נוצר ע"י רונית רייכמן  בתאריך 
 אובייקטים - הקודםהבא - שאלות סיכום 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 4