Le classi statiche con metodi statici sono considerate SOLID?

27

SOLID include Principio di sostituzione di Liskov che ha la nozione che "gli oggetti in un programma dovrebbero essere sostituibili con istanze dei loro sottotipi senza alterare la correttezza di quel programma".

Poiché le classi statiche con metodi statici (un po 'come la classe Math ) non hanno istanze, il mio sistema è considerato SOLID se ho classi statiche con metodi statici?

    
posta Pacerier 15.08.2011 - 06:35
fonte

3 risposte

26

LSP si applica al passaggio di un'istanza di una classe in un metodo, in cui il metodo esegue alcune operazioni con quell'istanza e spesso produce una sorta di risultato. Questo non ha importanza per le classi statiche dato che in C # non puoi creare un'istanza di una classe statica.

Ancora più importante, le classi statiche sono sigillate e quindi non può essere ereditato. Ciò rende la tua domanda molto lontana dal C #.

Si potrebbe dire che le classi statiche sono sempre conformi a LSP poiché non si può mai produrre una sottoclasse che violerebbe tale principio. Si potrebbe anche dire che le classi statiche non sono mai conformi allo standard LSP per lo stesso motivo.

In Java, le classi statiche sono leggermente diverse. Non puoi contrassegnare una classe di primo livello come "statica", quindi se vuoi creare una classe di utilità simile alle classi statiche di C # devi dichiararla come final e nascondere il suo costruttore. Una volta che lo fai, però, si comportano in modo simile a C # - non puoi istanziarli o sottoclassarli. Puoi dichiarare una classe interna come static , ma ciò non significa la stessa cosa che fa in C #: denota semplicemente un classe di livello superiore annidata .

VB.NET si comporta esattamente allo stesso modo di C # in questo caso, per quanto ne so.

Non hai menzionato se sei interessato agli altri principi, ma li includerò comunque per completezza.

S principio di responsabilità ingles : una classe statica segue facilmente questo principio.
O penna / principio chiuso : poiché le classi statiche sono sigillate, non possono mai seguirlo principio.
L principio di sostituzione di iskov : come sopra.
I principio di segregazione nterface : non si applica a una singola classe, ma divide una grande classe statica in una più piccola , quelli più specializzati potrebbero essere un passo avanti verso il rispetto di questo principio. D principio di inversione della ependenza : le classi statiche non possono implementare interfacce, quindi qualsiasi classe che lo utilizza dipenderà sempre da qualsiasi implementazione la mentalità esiste al momento. Le classi statiche violano pertanto questo principio.

Poiché le classi statiche non soddisfano tutti i 5 criteri, non sono SOLIDI.

    
risposta data 15.08.2011 - 07:29
fonte
4

Non classificherei una classe di questo tipo come orientata agli oggetti e quindi direi che non può (e non dovrebbe provare) soddisfare i principi del design orientato agli oggetti.

Queste classi rappresentano una soluzione alternativa all'incapacità di fornire codice al di fuori di una classe in linguaggi come Java e C #. Se possono essere, dovrebbero essere definiti come funzioni indipendenti in quanto non ottengono alcun beneficio dall'orientamento agli oggetti.

    
risposta data 15.08.2011 - 09:17
fonte
2

Vale la pena ricordare, dal momento che non hai specificato nessuna lingua, che in C ++ puoi poter passare classi attorno a cui hanno solo membri statici e accedere a quei membri tramite template, e quindi è possibile sostituire una classe con solo membri statici e, discutibilmente, i metodi chiamati formano la sua "interfaccia".

    
risposta data 15.08.2011 - 12:18
fonte

Leggi altre domande sui tag