Qual è la differenza tra attributi a livello di classe, costanti di classe e metodi singleton?

-1

Quale è la differenza dato che esistono tutti "una volta per classe".
Quando dovrei usare uno su un altro, cioè per quale scopo?
Io uso Ruby.

    
posta Michael Durrant 17.06.2012 - 04:55
fonte

1 risposta

2

Le differenze sono ben definite e puoi cercarle facilmente. Ecco un breve riassunto (indipendente dalla lingua):

  • Le costanti di classe sono costanti, non è possibile cambiarle in fase di esecuzione. Sono parte della classe perché appartengono a essa, concettualmente, e spesso (ma non sempre) per limitare il loro ambito e / o evitare conflitti di denominazione.
  • Gli attributi a livello di classe (campi statici) sono solo variabili globali sotto mentite spoglie: sono inclusi all'interno della classe, ma a parte questo, sono globali. In contrasto con le costanti di classe, sono in lettura / scrittura, quindi il loro valore può cambiare in fase di esecuzione.
  • I metodi Singleton sono, di fatto, metodi regolari, ma l'istanza a cui appartengono (il singleton) è stata applicata per essere l'unica del suo tipo all'interno di un particolare contesto (quale sia il contesto che differisce tra lingue, piattaforme e implementazioni).

A quale scegliere: il mio consiglio è di evitare il più possibile gli attributi di classe e i singleton. Entrambi sono globalmente mascherati e, anche se potrebbero esserci usi appropriati per loro, la maggior parte delle applicazioni del mondo reale sono in realtà inappropriate, introdotte per "convenienza" a un certo punto e una fonte di importanti mal di testa in seguito. Nella maggior parte delle situazioni, un'alternativa migliore consiste nel creare un tipo regolare per descrivere lo stato che altrimenti inseriresti in un attributo di classe o singleton, e semplicemente passarlo in giro. In questo modo, puoi controllare esattamente chi può modificare lo stato (e chi no), e se dovessi decidere che hai bisogno di più di un'istanza, puoi semplicemente crearne uno. Il problema di trasportare l'oggetto stato attorno è minimo in confronto.

Le costanti di classe, al contrario, vanno bene: sono costanti, quindi non vi è alcun rischio di modifiche inaspettate. Sono solo valori a cui puoi accedere da qualsiasi luogo e non c'è nulla di sbagliato in questo (purché il codice che li usa non si interrompa se cambi il valore).

    
risposta data 17.06.2012 - 13:49
fonte

Leggi altre domande sui tag