Concetti di istanziazione di oggetti e variabili di istanza

7

Sono un ingegnere di rete e sto imparando a sviluppare software nel mio tempo libero. Ho dei dubbi su alcuni concetti di OOP. Sto cercando di capire qual è la differenza quando vengono utilizzati questi termini e frasi.

  • Quando viene chiesto di creare un'istanza di una classe, è un altro modo per dire di creare un oggetto per quella classe? Se sbaglio, ti prego di spiegare che cos'è realmente l'istinto.

  • Gli oggetti creati mediante l'istanziazione vengono chiamati "variabile d'istanza"?

posta Nava Moore 06.07.2017 - 22:35
fonte

2 risposte

9
  • L'istanziazione di una classe sta creando un oggetto dal vivo del tipo di quella classe. La classe stessa è dormiente. Devi "generare" oggetti usando quella classe come modello.
  • "In questo caso significa che l'oggetto creato viene anche chiamato la variabile di istanza?" . No. Una variabile di istanza è una cosa completamente diversa. L'oggetto è un oggetto. Di solito hai una variabile del tipo della classe che è un riferimento all'oggetto. Una variabile di istanza è una variabile che vive all'interno dell'oggetto e che può avere valori diversi per oggetti diversi (istanze), al contrario di una variabile di classe che ha lo stesso valore per tutte le istanze.

Esempio (in Java):

public class Thing { public static String hairColor="blue"; public static String suitColor="red"; private String name; public Thing(String s){ name=s; } public String getName(){ return name; } public String getHairColor(){ return hairColor; } public String getSuitColor(){ return suitColor; } public void causeTrouble(){ // this is a method, this is what Things DO } }

Come è noto, tutti i Thing s hanno capelli blu e semi rossi. Quindi quelle sono variabili di classe. Sono statici. Hanno lo stesso valore per tutte le istanze. Se il valore di tali variabili dovesse essere modificato durante il runtime, cambierà per tutti Thing s. Forse dovremmo anche rendere queste variabili di classe "definitive", per essere sicuri che i capelli saranno sempre blu e i semi saranno sempre rossi.

Ma Thing s ha nomi diversi. Il nome è una variabile di istanza, possono avere valori diversi per istanze diverse. Se un nome cambia, lo fa solo per una particolare istanza di Thing .

Vediamo un test:

public class Test {

    public static void main(String[] args) {

    Thing t1,t2; //declare two variables that can point to Things.
    // right now they are not pointing to anything, they are null.

    t1= new Thing("Thing One");  // spawn a new Thing object and make t1 point to it
    t2= new Thing("Thing Two"); // spawn a new Thing object and make t2 point to it

    // Now let's print info about each object
    System.out.println(t1.getName());
    System.out.println(t1.getHairColor());
    System.out.println(t1.getSuitColor());
    System.out.println(t1);
    System.out.println();
    System.out.println(t2.getName());
    System.out.println(t2.getHairColor());
    System.out.println(t2.getSuitColor());
    System.out.println(t2);

}

t1 e t2 sono variabili di tipo Thing . Non sono Thing s, puntano solo a Thing s. Una volta istanziato, è possibile accedere alla percentuale di vita reale Thing s con tali variabili. (Quelle non sono variabili d'istanza, sono solo variabili).

Output:

Thing One
blue
red

Thing Two
blue
red
    
risposta data 07.07.2017 - 02:40
fonte
6

When one is asked to instantiate a class, is this another way of saying create an object for that class?

Si sta dicendo di creare un oggetto di quel tipo di classe. Nella maggior parte dei linguaggi orientati agli oggetti, le classi sono tipi . "Istanziare una classe" non è abbastanza preciso, ma probabilmente significa "istanziare un oggetto del tipo definito dalla classe". Ad esempio, la stringa è una classe comune in lingue OO. Istanziare una stringa significa "istanziare un oggetto di tipo stringa".

If so does that mean the object created is also called the instance variable?

Il termine "variabile di istanza" in genere significa "stato interno a un oggetto". Utilizzando l'esempio di stringa, un oggetto di tipo stringa non è una variabile di istanza appartenente alla classe stringa. Un oggetto stringa potrebbe avere un array di caratteri che è una variabile di istanza contenente i dati di stringa effettivi. L'array di caratteri appartiene a un'istanza specifica di stringa: non alla classe stessa, non alle altre stringhe.

    
risposta data 06.07.2017 - 22:52
fonte

Leggi altre domande sui tag