[ruby-it] aiuto programmazione OO
Andrea Dallera
andrea a andreadallera.com
Sab 6 Feb 2010 18:04:17 CET
Ciao Alessandro,
alcune note sparse:
- 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.
- 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à.
- 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
- 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.
- 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
- 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
HTH!
--
Andrea Dallera
http://usingimho.wordpress.com
On Sat, 2010-02-06 at 17:27 +0100, Pietro Giorgianni wrote:
> Il 06 febbraio 2010 15.55, Alessandro Barracco <bomastudio a gmail.com>
> ha scritto:
> > Ho creato due classi:
> >
> > [...]
> >
> > Nella classe Asta mi serve un metodo che restituisce i tutti i dati dei
> > nodi di estrmità: come faccio a "linkare" le due classi?
>
> Ciao,
>
> Non ho capito, cosa intendi per linkare? Non puoi fare una cosa tipo questa?
>
> class Asta
> def dati_dei_nodi_di_estremita
> [@ni.id, @ni.x, @ni.y, ..., @nf.id, @nf.x, @nf.y, ...]
> end
> end
>
> O, meglio ancora:
>
> class Nodo
> def dati_del_nodo
> {:x => @x, :y => @y, :z => @z, ...}
> end
> end
>
> class Asta
> def dati_dei_nodi_di_estremita
> [@ni.dati_del_nodo, @nf.dati_del_nodo]
> end
> end
>
>
> Spiega meglio cosa intendi.
>
> Ah, una supplica: i byte costano poco, usali! non chiamare le
> variabili l1, l2, lb, zi, non ci si capisce niente! Se usi nomi più
> lunghi, risparmi sui commenti.
>
>
> pietro
> _______________________________________________
> Ml mailing list
> Ml a lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>
More information about the Ml
mailing list