Creazione di oggetti

3

Ho una domanda standard di codifica generale. È una cattiva pratica inizializzare e creare un oggetto in più metodi a seconda del risultato di una scelta dell'utente. Quindi, ad esempio, se l'utente lascia un gioco di poker, crea la mano di poker con le carte che l'utente ha ricevuto, anche se < 5, e se l'utente ha giocato fino alla fine crea un oggetto per mostrare la mano completata per mostrare il risultato del gioco. La chiave è che l'oggetto verrà creato una sola volta in realtà, ci sono solo percorsi e parametri diversi che riceveranno a seconda se l'utente ha piegato o giocato allo showdown.

    
posta user1424667 03.06.2012 - 20:32
fonte

2 risposte

4

Hai ragione, cercando di eliminare il controllo del ciclo di vita non necessario dal tuo modello. Hai individuato l'entità in questione e controllato che è giusto avere un ciclo di vita indipendente. Quindi hai quasi risposto alla tua domanda e hai solo bisogno di una conferma sul fatto che sia una buona pratica. È un buon miglioramento del tuo modello. Sì.

Se il giocatore di poker ha mano, significa che la mano è un oggetto ?

Consente di controllarlo: Può esistere la mano senza giocatore? Il giocatore può avere più di una mano? Il giocatore può avere una serie di mani nel tempo, ma non più di una mano alla volta? La non-esistenza della mano può essere trattata come una "mano vuota" che consente ancora l'esistenza dell'oggetto mano?

Se capisco il gioco correttamente, la mano è un attributo, non un oggetto. Player è l'unica entità, che ha un ciclo di vita. Hand è uno slot con capacità fissa, un attributo, quindi nessuna creazione o distruzione individuale è necessaria per mano, quando il giocatore è un oggetto.

Tratta il ciclo di vita degli oggetti come parte significativa del modello. L'oggetto dovrebbe essere in grado di esprimere l'esistenza di una particolare cosa X, così come null al posto dell'oggetto esprime la non esistenza di X

L'oggetto deve essere creato non prima e non oltre il particolare evento / transizione nel modello richiesto. L'oggetto deve essere distrutto esattamente con le stesse considerazioni. Se il modello contiene 2 classi correlate, in cui gli oggetti hanno cicli di vita annidati, annidano le classi, quindi si dovrebbe essere un contaner dell'altro. Se i cicli di vita di queste 2 classi corrispondono esattamente, quindi elimina i duplicati, abbassa una delle classi per essere un attributo.

    
risposta data 03.06.2012 - 21:17
fonte
1

Una visione leggermente diversa del problema - no, non è sempre una cattiva pratica inizializzare e creare un oggetto più volte. Esiste persino un modello denominato Oggetto valore che sfrutta pesantemente la ricreazione degli oggetti, se necessario.

Una mano potrebbe essere perfettamente un oggetto, e una scelta piuttosto buona per un oggetto valore per quella materia.

Quando ci pensi, il dominio del poker riguarda in gran parte le mani: confrontare le mani dei giocatori, aggiungere carte a una mano, calcolare le probabilità da una mano, ecc. Quindi perché non fare di Hand un oggetto di dominio di prima classe? Eppure una mano è abbastanza anonima, se c'è un'identità, piuttosto appartiene al giocatore che la mano delle carte stesse. Come ha sottolineato Rocket Surgeon, è probabile che Player sia l'unica entità (con un'identità), ma non necessariamente l'unico oggetto.

Vedo numerosi vantaggi nel rendere Hand un oggetto (valore):

  • Ottieni molta leggibilità dal rendere esplicito il concetto - passare una mano in giro come parametro, o comparare 2 mani, è molto più significativo e immediatamente rivelatore dell'intento di passare o confrontare giocatori o matrici di carte.

  • Puoi riutilizzare la mano ovunque tu voglia, anche al di fuori di un giocatore.

  • Se passi alla rotta dell'oggetto valore, puoi rendere immutabile una mano. Quindi non devi preoccuparti dei cambiamenti nel suo stato, chiedendoti quando e da chi è stata modificata la tua mano. I thread che devono accedere alla tua mano in parallelo possono farlo senza paura di problemi di modifica simultanea.

Ora dalla tua domanda iniziale, non sono sicuro che tu stia parlando di un oggetto Business business o di un oggetto grafico ("crea oggetto per mostra completato mano per mostrare l'esito del gioco "). L'istanziazione e il riutilizzo di oggetti grafici è tutta un'altra storia.

    
risposta data 08.06.2012 - 17:12
fonte

Leggi altre domande sui tag