Originariamente inviato da abcd1000
Ecco le domande:
1) Secondo voi tutti e due i modi sono corretti da un punto di vista di programmazione ad oggetti?
A mio avviso, i due metodi che hai presentato sono uguali, a livello logico, poichè si "gioca" sempre con una classe che, in un metodo o in un altro, si occupa di creare i pulsanti di cui ha bisogno.
La programmazione ad oggetti influenza maggiormente l'area concettuale del codice: per esemplificare, la scelta di utilizzare una classe complessa dipende da quanti discendenti, cioè varianti, pensi di farne. Nel tuo caso, se il menu è sempre identico e viene creato quando richiesto, aggiungere i pulsanti nel costruttore o richiamando un metodo appropriato è la stessa identica cosa.
E' diverso invece il caso in cui vuoi creare "varianti" del tuo menu, ad esempio accodando nuove voci a quelle esistenti: in quella situazione, ti conviene rendere "virtuale" o comunque "overridable" il metodo makeMenu in modo da poterlo richiamare da una classe discendente ed estendere aggiungendo le voci necessarie.

2) Qual'è il migliore? Io penso il secondo modo perchè non si istanzia nessun oggetto e quindi occupo meno risorse. O sbaglio?
I metodi che hai presentato sono identici: l'unica differenza è nella posizione del codice che in un caso si trova nel costruttore, nell'altro caso si trova in un metodo a parte, ma in entrambi i casi deve essere caricato in memoria quando crei un'istanza della classe (oggetto).

3) Usare metodi statici è una cosa da fare nella programmazione oppure è sconsigliato per qualche motivo?
In che senso? Ciascuna tipologia di metodo è creata per essere utilizzata...
Il fatto che possa essere "sconsigliata", dipende dall'uso che se ne fa.

4) I metodi statici occupano più risorse dei metodi non statici?
No, ma io mi limiterei a valutare la loro effettiva utilità in base alle esigenze di progettazione ad oggetti.

5) I metodi statici sono più lenti dei metodi non statici?
No, sono più rapidi perchè il loro indirizzo in memoria è già noto, mentre i metodi che possono essere posti in "override" devono essere ricercati dal codice in base all'oggetto con cui si ha a che fare.


Non hai specificato il linguaggio che utilizzi, ad ogni modo io mi riferisco a Delphi. I principi della programmazione ad oggetti non cambiano, al massimo si modificano leggermente le nomenclature degli elementi.

Ciao!