Perché abbiamo bisogno di una variabile di istanza nella programmazione orientata agli oggetti?

-1

Mi sono insegnato Programmazione orientata agli oggetti (Ruby) per un po '. Tuttavia, non riesco ancora a capire alcuni dei suoi principi fondamentali, in particolare la variabile di istanza. Qualcuno potrebbe spiegarmi perché abbiamo bisogno di una variabile di istanza? Qual è il problema che sta cercando di risolvere nella programmazione orientata agli oggetti? Quando devo crearne uno e quando no? Lo apprezzo.

    
posta Đỗ Tiến 25.01.2017 - 12:07
fonte

4 risposte

11
  • Le variabili di istanza sono variabili dichiarate all'interno di una classe ma al di fuori di qualsiasi metodo.
  • Sono accessibili a tutti i metodi dinamici di una classe.
  • Come opossed a una variabile di classe che si verifica solo una per tutte le istanze di una classe, con le variabili di istanza ogni istanza ne ha una propria copia.
  • Le variabili di istanza rappresentano lo "stato" di un oggetto, ovvero i valori o le proprietà che l'oggetto contiene in un dato momento.
  • Con le variabili di istanza è possibile avere più istanze della classe Person , ognuna con un attributo name diverso, ovvero l'attributo di nome instance1 può avere il valore "Joe" mentre instance2 's il nome può essere "Mary" e instance3 può essere "Peter", perché ognuna delle tre istanze ha una copia della variabile di istanza name .
  • Quando modifichi il valore, tale valore viene modificato solo per un'istanza. Tutte le altre istanze non sono interessate.
  • A questo punto puoi capire che avere valori diversi per istanze diverse è molto utile in molti programmi.
risposta data 25.01.2017 - 12:25
fonte
3

Ci sono diversi scopi delle classi in OOP, ma uno dei più comuni è quello di fungere da progetto per la creazione di oggetti . Una variabile d'istanza fa parte del progetto per la creazione di un oggetto. Definisce un dato che inizialmente non esiste, ma ogni volta che crei un oggetto del tipo (o sottoclasse) di quella classe, quell'oggetto avrà la sua variabile (di solito privata) con quel nome al suo interno.

Questo è davvero l'intero punto dietro OOP. Invece di lavorare direttamente con i dati, impacchettiamo i dati con metodi che sanno come manipolare i dati. Questo rende molto, molto più facile per il programmatore interfacciarsi ai dati:

  • hai solo bisogno di capire l'interfaccia / le specifiche per usare correttamente i dati, e l'interfaccia è molto, molto più semplice del codice
  • se il codice cambia ma obbedisce alle specifiche, allora qualsiasi cosa usi il codice funzionerà ancora (a condizione che il codice del client non faccia supposizioni al di fuori di ciò che dice la specifica)
  • ti consente di lavorare sugli oggetti dipendenti contemporaneamente (il che rende possibile la scrittura di sistemi di grandi dimensioni)
  • ti permette di cambiare un componente con un altro con le stesse specifiche, anche dinamicamente (mentre il programma è in esecuzione), e il codice dipende dall'interfaccia che supporta quelle specifiche funzionerà per entrambi i casi (questo è il luogo in cui il polimorfismo viene )

Tutti questi sono praticamente essenziali per scrivere software di grandi dimensioni. Ecco perché facciamo questi progetti chiamati classi.

    
risposta data 25.01.2017 - 13:22
fonte
3

In un linguaggio orientato agli oggetti, hai oggetti. Spesso molti oggetti. E questi oggetti hanno uno stato, ognuno di essi ha il suo stato, diverso da qualsiasi altro stato dell'oggetto.

Problema: come memorizzeresti lo stato di ogni oggetto? Dovresti usare le variabili di istanza, ovviamente.

Se non hai oggetti con stato, ad esempio se tutte le tue stringhe non contengono effettivamente alcun testo, tutte le tue coordinate 3D non hanno coordinate e così via, quindi non hai bisogno di variabili di istanza .

    
risposta data 25.01.2017 - 20:14
fonte
0

Ecco un esempio di come legare i lacci per le scarpe in OO:

Esiste una classe PairOfShoelaces . È responsabile del collegamento di se stesso, quindi ha bisogno di un riferimento a una classe PairOfHands che può essere utilizzata per aiutarlo a farlo.

Ora potresti avere una funzione in PairOfShoeLaces chiamata tieABowInYourself e potrebbe prendere un'istanza di PairOfHands come parametro:

function tieABowInYourself(PairOfHands hands) ...

Ma ciò significa che la cosa che chiama tieABowInYourself deve avere un paio di mani attorno alle quali può fornire come parametro. Invece, una variabile di istanza può essere utilizzata per salvare quelle mani all'interno di un'istanza di PairOfShoeLaces . In questo modo la funzione può essere:

constructor(PairOfHands hands)
{
    this.hands = hands;
}

function tieABowInYourself()
{
    // use this.hands to help tie that bow
}

In questo modo, solo la cosa che crea PairOfShoelaces ha bisogno di sapere delle mani.

E questo è ciò per cui sono usate le variabili di istanza.

    
risposta data 25.01.2017 - 12:44
fonte

Leggi altre domande sui tag