[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