[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