Pietro G. wrote:
Il 15 gennaio 2010 10.59, Alessandro B. [email protected] ha
scritto:
Salve sono nuovo del forum e un programmatore ‘newbie’ (si dice cosi?).
ciao e benvenuto!
Secondo voi la classe Asta deve ereditare da Nodo oppure � inutile?
in genere, quello che pi� conta non sono i dati, ma il comportamento;
che accettino parametri simili non � importante, la domanda � cosa
fanno esattamente queste classi; se vedi che hanno molti metodi in
comune, puoi optare per l’ereditariet� - ma magari, se l’asta non � un
caso particolare di nodo (e mi sembra di capire che non lo �), la cosa
pi� giusta � che entrambi ereditino da un capostipite comune.
pietro
Ancora dubbi…
Ho creato due classi:
La classe Nodo crea un oggetto nodo.
Ogni istanza della classe e’ identificata da un numero univoco (id)
La classe necessita di 5 parametri + 1 opzionale: id, x, y, z,
vincolo, [costante elastica]
class Nodo
Numero identificativo del nodo
attr_accessor :id
Coordinata x
attr_accessor :x
Coordinata y
attr_accessor :y
Coordinata z
attr_accessor :z
Codice di vincolo. E’ costituito da tre strighe
che si riferiscono alle tre componenti di movimento del nodo
(nell’ordine: traslazione lungo x, lungo y e rotazione attorno z).
0 = movimento consentito 48
1 = movimento impedito 49
C = movimento limitato da un vincolo cedevole 67
attr_accessor :sx
attr_accessor :sy
attr_accessor :rz
costante elastica del vincolo alla traslazione lungo x
attr_accessor :csx
costante elastica del vincolo alla traslazione lungo y
attr_accessor :csy
costante elastica del vincolo alla traslazione lungo z
attr_accessor :csz
costante elastica del vincolo alla rotazione attorno x
attr_accessor :crx
costante elastica del vincolo alla rotazione attorno y
attr_accessor :cry
costante elastica del vincolo alla rotazione attorno z
attr_accessor :crz
numero totale di nodi creati
@@numero_nodi = 0
Inizializzazione della classe
def
initialize(id,x,y,z,sx,sy,sz,rx,ry,rz,csx=0,csy=0,csz=0,crx=0,cry=0,crz=0)
@id = id
@x = x
@y = y
@z = z
@sx = sx
@sy = sy
@sz = sz
@rx = rx
@ry = ry
@rz = rz
# Per i gradi di libertà per i quali si è usato C come codice di
# vincolo, bisogna fornire anche la costante elastica di vincoli
# cedevoli (kN/m per vincoli allo spostamento kNm per vincoli alla
rotazione)
@csx = csx
@csy = csy
@csz = csz
@crx = crx
@cry = cry
@crz = crz
@@numero_nodi +=1
end
Il metodo to_s stampa una tabella con i dati caratteristici
del nodo.
def to_s
puts “\n”
puts “NODO n. #{@id}”
puts “=”*30
puts “x= #{@x} [#{$umlungh}]”
puts “y= #{@y} [#{$umlungh}]”
puts “z= #{@z} [#{$umlungh}]”
puts “sx= #{@sx}”
puts “sy= #{@sy}”
puts “sz= #{@sz}”
puts “rx= #{@rx}”
puts “ry= #{@ry}”
puts “rz= #{@rz}”
if not nodo.csx==0
puts “csx= #{@csx} [#{$umcedevol}]”
end
if not nodo.csy==0
puts “csy= #{@csy} [#{$umcedevol}]”
end
if not nodo.csz==0
puts “csz= #{@csz} [#{$umcedevol}]”
end
if not nodo.crx==0
puts “crx= #{@crx} [#{$umcedevolrot}]”
end
if not nodo.cry==0
puts “cry= #{@cry} [#{$umcedevolrot}]”
end
if not nodo.crz==0
puts “crz= #{@crz} [#{$umcedevolrot}]”
end
end
end
La classe Asta crea una asta tra due nodi.
I parametri accettati sono:
id = numero identificativo asta [intero]
ni = nodo iniziale [intero]
nf = nodo finale [intero]
nmat = indice del materiale dell’asta [intero]
nsez = indice della sezione dell’asta [intero]
tipo = codice indentificativo del tipo di asta:
T = trave alla DeSaint Venant
TR = trave alla De saint Venant con tratti rigidi
W = trave di fonazione alla Winkler
WR = trave di fondazione alla Winkler con tratti rigidi
*opz = lista di 2 o 4 valori numerici che possono essere:
se tipo = TR oppure WR:
l1 = lunghezza tratto rigido al nodo ni
l2 = lunghezza tratto rigido al nodo nf
se tipo = W oppure WR:
lb = larghezza sottobase [cm]
kw = costante sottofondo [N/cm3]
class Asta
attr_accessor :id, :ni, :nf, :nmat, :nsez, :tipo, :l1, :l2, :lb, :kw
@@numero_aste = 0
def initialize(id,ni,nf,nmat,nsez,tipo,*opz)
@id=id
@ni=ni
@nf=nf
@nmat=nmat
@nsez=nsez
@tipo=tipo
if @tipo == “TR”
@l1=opz[0]
@l2=opz[1]
elsif @tipo == “W”
@lb=opz[0]
@kw=opz[1]
elsif @tipo == “WR”
@l1=opz[0]
@l2=opz[1]
@lb=opz[2]
@kw=opz[3]
end
@@numero_aste +=1
end
Il metodo to_s/em> stampa una tabella con i dati caratteristici
dell’asta.
def to_s
puts “\n”
#puts “=”*40
puts “ASTA n. #{@id}”
puts “=”*50
puts “nodo i= #{@ni}”
puts “nodo f= #{@nf}”
puts “materiale n° #{@nmat}”
puts “sezione n° #{@nsez}”
puts “tipo= #{@tipo}”
if @tipo == ‘TR’ or @tipo == “WR”
puts “lunghezza tratto rigido al nodo #{@ni} #{@l1}
[#{$umlungh}]”
puts “lunghezza tratto rigido al nodo #{@nf} #{@l2}
[#{$umlungh}]”
end
if @tipo == “W” or @tipo == “WR”
puts “Larghezza sottobase lb= #{@lb} [#{$umlungh}]”
puts “Costante di sottoforndo kw= #{@kw} [#{$umdens}]”
end
end
Il metodo lungh calcolca la lunghezza dell’asta.
def lungh
xi = @ni.xi
yi = @ni.yi
zi = @ni.zi
l = Math.sqrt((xf-xi)^2+(yf-yi)^2+(zf-zi)^2)
return l
end
end
Nella classe Asta mi serve un metodo che restituisce i tutti i dati dei
nodi di estrmità : come faccio a “linkare” le due classi?