[ruby-it] aiuto programmazione OO

Alessandro Barracco bomastudio a gmail.com
Sab 6 Feb 2010 19:59:57 CET


Grazie Andrea.

> - wrappare le componenti x,y,z di posizione e costanti elastiche.
> Qualcosa di questo tipo:
> 
> class Vector
> 
>   def initialize(x,y,z)
>     @x, @y, @z = x, y,z
>   end
> 
> end
> 
> puoi ereditare da Vector nel caso (probabile) in cui ci sia della logica
> associata alla posizione/costante elastica.

Cosa vuol dire "wrappare"?

> - quel @@numero_nodi mi piace pochino :-) perch� lo usi? Non vedo niente
> nella classe Nodo stessa che ne faccia uso. Se la necessit� del counter
> � dovuta a qualche altra classe � il caso che sia la classe che ne ha
> bisogno ad assumersi la 
> responsabilit�.

OK

- nel costruttore della classe asta: tipo e opzioni nascondono in realt�
classi, non passare stringhe in giro e comparare ma crea una classe per
> ogni tipo. Qui la logica di dominio non la conosco ma un' idea potrebbe
> essere qualcosa del genere:
> 
> class Trave
>   #logica per le travi
> end
> 
> class DeSaint < Trave
>   #logica per le travi desaint
> end
> 
> class Winkler < Trave
>   #logica per le travi winkler
> end
> 
> e via cos�. Se la logica per le travi rigide � comune per tutte le travi
> puoi anche creare un modulo (esempio)
> 
> module TraveRigida
>  #logica per le travi rigide
> end
> 
> ed includerlo dove serve:
> 
> class WinklerRigida < Trave
>   include TraveRigida
> 
> end

Mi sembra decisamente più razionale :-)


> - non passare in giro l'ID per identificare i nodi: se non ti serve per
> altre esigenze (tipo persistenza in DB) eliminalo, e passa in giro
> direttamente le istanze.


Dato che dovrò gestire centinaia di nodi e di aste (ma non di sezioni e 
materiali) pensavo ad un DB. Non so, cosa consigli?

> - stessa cosa per nmat e nsez: fai delle classi e passa in giro le
> istanze, tipo:
> 
> class Materiale
>   #logica comune a tutti i materiali
> end
> 
> class MaterialeFoo < Materiale
>   #logica
> end
> 
> in questo caso dipende per� da quanti materiali hai e da quanto varia la
> logica fra uno e l'altro: se sono tanti e tutti uguali allora usa solo
> una classe materiale, se ne hai logiche diverse per materiali diversi
> fai classi diverse. Stesso discorso per le sezioni

Scusa la (ennesima) domanda da 'negozio degli orrori':::
Come faccio a passare una istanza al posto dell'id?

> - il costruttore di asta diventerebbe
> 
> def TraveCippaLippa < Trave
> 
>   #usa nomi significativi per le variabili... li paghi te i
> caratteri? :-)
>   def initialize(nodo_iniziale, nodo_finale, materiale, sezione)
> 
>     @nodo_iniziale = nodo_iniziale
>     @nodo_finale   = nodo_finale
>     @materiale     = materiale
>     @sezione       = sezione
>     # niente @@numero_aste += 1, stesso discorso che per i nodi
> 
>   end

Già detto a Pietro.

Grazie davvero per gli utilissimi consigli.


-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list