Newsgroup: it.comp.lang.c++
Titolo: Prestazioni delle classi contro le funzioni...

Salve a tutti,
tutti sappiamo che usare classi, sopratutto con metodi virtuali, hanno
un certo overhead nel richiamo di determinati metodi mentre le
classiche funzioni sono un pelino più veloce per la mancanza della
vtable dei metodi virtuali... ok
Tutto ciò va bene quando tali funzioni non devono gestire del codice
specifico per diversi casi... per esempio ora sto cercando di
sviluppare in modo decente un sistema particellare per un "mio" gioco
e credo che ci sarà la necessità di avere una certa varietà di
particelle... se si usassero le funzioni si avrebbe una forma del
genere (o almeno io usere tale forma) :
//Particle è una struttura che mantiene le informazioni
//di ogni particella
BOOL UpdateParticle(Particle *p){
	//Codice generico per tutte le particelle
	.
	.
	.
	//Controllo il tipo di particella per eseguire il codice
	//specifico
	switch(p->Type){
	case FIREPARTICLE:
		return UpdateFireParticle(p);
		break;
	case SMOKEPARTICLE:
		return UpdateSmokeParticle(p);
		break;
	}
}
In questo caso credo che sarebbe meglio usare le classi in questo modo
//Classe base che descrive una particella e che fornisce i metodi
//di base per la sua gestione
class Particle{
//Variabili che descrivono una particella
.
.
.
public:
	Particle();
	~Particle();
	//Controlla se è ancora viva o se èe da eliminare
	BOOL Upadate(){...};
};
//Una particella specializzata
class Fire: public Particle{
//Eventuali variabili specifiche di questa particella
public:
//Costruttore e distruttore
	//Metodo di Update specifiche della particella
	BOOL Update(void){
	//Operazioni specifiche della particella
	.
	.
	.
	 //Codice comune a tutte le particelle
	return Particle::Update();
	};
};
Inquesto modo poi si sarebbe liberi di creare tutti i tipi di
particelle specializziati che si vogliono e, come faccio io, inserirli
in un "contenitore" che si preoccupa di aggiornare e disegnare tutte
le particelle in esso contenute.
In questo caso l'overhead credo che si eguagli e in più si ha un
codice MOLTO più pulito e leggibile...
RIFLESSIONE :
E' ovvio che sia conveniente usare le classi senza preoccuparsi troppo
del lieve sovraccarico di codice che queste comportano in favore di un
codice più pulito, leggibile, e di facile manutenzione... o mi
sbaglio?
Francesco Pischedda
Coder - Siderion

sbaglio?
Dipende... nel tuo caso potrebbe darsi che l'overhead di virtual sia 
inaccettabile... Bisogna valutare caso per caso facendo anche delle 
prove. Magari su un pc nuovo l'overhead e` accettabile, ma su uno
piu` vecchio puo` non esserlo.
Niente e` assoluto, ogni software e` un compromesso tra piu` requisiti
aventi diverse priorita`. Quando posso scelgo sempre la manutenibilita`,
al piu` annoto quali possono essere i punti soggetti a miglioria.
E` questa la strada che sto attualmente seguendo per la realizzazione
di un primo prototipo per uno studio di fattibilita`. Se funziona bene,
se funziona ed e` lento come studio di fattibilita` potrebbe ancora
andare o al limite si interviene nei (solitamente pochi) punti critici.
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------