Molteplici classi che lavorano su un oggetto

-1

Questa potrebbe essere una domanda un po 'ampia, ma voglio capire se è il modo corretto di farlo. Supponiamo che io abbia un paio di classi che fanno tutte le operazioni su un oggetto. La prima classe prende l'oggetto, fa alcune operazioni su di esso; dopo questa seconda lezione lo prende e fa le sue operazioni e così via.

Ciascuna di queste classi dovrebbe avere una variabile di tipo oggetto? E ognuno di questi oggetti dovrebbe avere le sue variabili inizializzate usando un setter?

Qualcosa come

private Object b;
public void set_obj(Object a){
        b = a;
    }
    
posta Shury 31.10.2018 - 10:39
fonte

3 risposte

1

Non esiste un modo "corretto" per gestirlo. Ciò dipende dalle esigenze del progetto. Possiamo comunque commentare la complessità, che avrà un effetto su quanto sia facile gestire il codice in futuro.

Se l'oggetto è stateless o singleton, sarà facile da gestire. Tutti i riferimenti ad esso si comportano in modo prevedibile allo stesso modo. Ad esempio:

someclass.set_obj(Math)
anotherclass.set_obj(Math)
latestMath = someclass.getMathAfterAdd(1, 2)
// It doesn't matter which Math obj you have since it doesn't store state
// latestMath.add() will do the same as Math.add() with no side effects

Se l'oggetto ha lo stato la complessità aumenta poiché b.name = 'changed' cambierà a.name negli altri oggetti che fanno riferimento allo stesso oggetto. È possibile mitigare un po 'questo aumento rendendo lo stato trasparente. Come aumenta la complessità:

someclass.set_obj(person)
anotherclass.set_obj(person)
updatedPerson = someclass.changePersonName('joe') 
// is updatedPerson.name == 'joe'? I'd assume so
// is person.name == 'joe'? hmmm
// is anotherclass.person.name == 'joe'? hmmm

Se la complessità aumentata vale la pena è situazionale.

    
risposta data 31.10.2018 - 16:24
fonte
0

Una classe non esegue alcuna operazione sulle loro istanze di oggetti. Una classe definisce semplicemente quali sono le operazioni, tra le altre cose.

L'unico modo per passare lo stesso oggetto a due funzioni di classi diverse è se una classe eredita dall'altra e l'oggetto è un'istanza della classe ereditata.

L'altro modo sarebbe di digitare debolmente l'oggetto sulla definizione di variabile e sulla definizione della funzione. Lo svantaggio di questo è che sarai in grado di eseguire operazioni solo quando è previsto un oggetto, forse fare qualcosa come creare una copia.

    
risposta data 22.11.2018 - 08:49
fonte
0

In generale, non tieni istanze di oggetti a meno che tu non ti sia importato di che tipo sia l'istanza o devi usare l'oggetto a causa di limitazioni, come una libreria che richiede l'invio di un oggetto .

Ovviamente potresti , ma per fare qualsiasi cosa, devi lanciarlo su una classe derivata e downcasting è generalmente disapprovato. Cerca le tendenze con queste istanze e prova a creare un'interfaccia di base che queste istanze possano estendere. In questo modo, piuttosto che passare oggetti e abbatterli, puoi semplicemente utilizzare la sua interfaccia senza preoccuparti di come è implementata.

Inoltre, passare un'istanza dai suoni di classe in classe a me come catena di responsabilità o decoratore modello per me. Potresti prendere in considerazione l'idea di usarli per questo.

    
risposta data 22.11.2018 - 08:59
fonte

Leggi altre domande sui tag