Una classe senza variabili di istanza dovrebbe essere considerata una classe?

7

Supponiamo che sia necessario implementare alcune funzioni strettamente correlate che forniscono funzionalità, ma non è necessario tenere traccia di nessuno stato tra queste funzioni, ma a volte passano alcuni parametri tra di loro. Quale sarebbe la migliore decisione dal punto di vista del design? Rendilo un corso o solo un file sorgente separato che contiene queste funzioni?

UPD: Objective-C, no namespace

    
posta tux91 16.05.2012 - 01:09
fonte

7 risposte

8

Se sei in una lingua che richiede che tutte le funzioni facciano parte di una classe (Java, C #, ecc.), non hai molta scelta, ma renderle parte di una classe. Altrimenti, basta metterli nel proprio file con il proprio spazio dei nomi. Ciò semplifica le cose.

    
risposta data 16.05.2012 - 01:41
fonte
8

È possibile raggruppare tali funzioni in classi di utilità. Math in Java è un buon esempio di questo. Non ha uno stato e consente solo di effettuare chiamate statiche per fare cose. Mettere questi metodi correlati in una classe rende chiaro che essi sono, in effetti, correlati.

    
risposta data 16.05.2012 - 01:10
fonte
2

Certo! Incapsulare i dati non è certamente la cosa più importante di OO!

struct thingy;

void fun(thingy & t) { t.do_stuff(); }

struct thingy {
   virtual ~thingy() {}
   virtual void do_stuff() = 0;
}

struct thingy_d1 : thingy {
  void do_stuff() { std::cout << "Doing stuff.\n"; }
};
struct thingy_d2 : thingy {
  void do_stuff() { std::cout << "Doing other stuff.\n"; }
};

Molto spesso il modello di comando assume questo formato.

    
risposta data 16.05.2012 - 01:31
fonte
1

Beh, sicuramente è un class , ma in genere non mi riferisco ad esso come a una "classe" nel senso delle cose OO, dato che vengono solitamente utilizzati in modi diversi.

Ad esempio, in lingue che non dispongono di funzioni gratuite come Java, questa è la soluzione per fornirle.

In C ++ questo è comunemente usato per oggetti funzione.

Nel tuo caso, sembra che class non offra vantaggi e quindi è meglio farli essere funzioni libere eventualmente in un namespace.

    
risposta data 16.05.2012 - 01:18
fonte
0

Una classe definisce come vengono creati gli oggetti. Se l'oggetto non richiede uno stato interno, la classe non avrà alcuna variabile di istanza. Ci sono molte ragioni per cui questo potrebbe essere utile - cose come gli oggetti che implementano il modello della Strategia vengono in mente.

    
risposta data 16.05.2012 - 01:38
fonte
0

C'è una grande differenza che sembra essere dimenticata rispetto a classes vs namespace.

Le classi possono essere estese, laddove i nomi non possono. Anche nello scenario che descrivi, è improbabile che possa essere del tutto escluso che in futuro non ci sarà un motivo per estendere il gruppo di funzioni per fornire un gruppo leggermente modificato di funzioni. E in questo scenario l'istanziazione della classe ha una proprietà, che è il tipo di classe.

In alcune lingue in cui i metodi statici non possono essere sovraccaricati nelle classi ereditanti, una classe con solo metodi statici potrebbe essere considerata nient'altro che uno spazio dei nomi.

    
risposta data 16.05.2012 - 01:53
fonte
-1

No. Questo è un namespace . Chiamarlo a class è semplicemente sciocco. Perché dovresti inutilmente sbrogliare una caratteristica per diventare ... una funzionalità che la lingua fornisce già come prima classe?

    
risposta data 16.05.2012 - 01:43
fonte

Leggi altre domande sui tag