Programmazione OO: beginner

Salva a tutti, ho un problemino con le variabili.
Sono un principiante, quindi perdono per le castronerie che dirò :slight_smile:

Ho un programmino che inserisce oggetti grafici (cerchi, rettangoli,
punti, ecc) in una finestra, così suddiviso:

script N.1 - “tool.rb”
script N.2 - “oggetto.rb”
script N.3 - “oggettotipo1.rb”
script N.4 - “oggettotipo2.rb”

script N.8 - “oggettotipo6.rb”

Ogni script ha una classe.

Lo script N.1, dopo un click su un controllo, chiama il N.2.
Il N.2 ha diversi tipi di oggetto, e, dopo un click su un nuovo
controllo, chiama uno degli script dal N.4 al N.8.

Vorrei numerare tutti gli oggetti che l’utente inserisce diversificando
in base al tipo di oggetto.

Come faccio? Uso le variabili di classe @@numerotipo1, @@numerotipo2? e
se si come si fa?

Grazie a chiunque vorrà aiutarmi.

Pietro G. wrote:

giusto per capirci: hai delle classi inserite in vari file, oppure hai
degli script?

Che differenza c’è?

Lo script N.1, dopo un click su un controllo, chiama il N.2.
Il N.2 ha diversi tipi di oggetto, e, dopo un click su un nuovo
controllo, chiama uno degli script dal N.4 al N.8.

Qui, per esempio, cosa intendi? In che modo lo script N.1 chiama lo
script N.2?

Lo script N.1 mostra (.show) una GUI creata con WxFormBuilder e XRCise
su cui c’un un bottone: al click dell’utente su di esso viene chiamato
lo script N.2.

La mia impressione (se mi sbaglio correggimi) � che manchi un po’ di
struttura generale, cio� che, al momento di contare quel che devi
contare, non sai dove tenere i dati raccolti.

HAI RAGIONE… è proprio questo il dilemma!!

Quello che credo tu voglia � avere una classe che rappresenta in
qualche modo l’applicazione; questa classe avr� una variabile di
istanza @oggetti, che ad esempio potrebbe essere fatta
cos�:@oggetti = {OggettoTipo1 => 3, OggettoTipo2 => 5, …}

� difficile essere pi� precisi; prova a chiarire meglio il problema.

mmmm, vediamo di essere più chiari.
Io avrei bisogno di tenere traccia del numero di oggetti inseriti
dall’utente nello script N.1, che è quello principale.
Ma siccome ho uno script (un file *.rb) per ogni oggetto che il
programma gestisce (mi viene più semplice gestirli così), non so come
“tenere” il numero “attuale”.
Cioè:
Si avvia il programma: nessun oggetto presente.
L’utente seleziona il comando “Quadrato”, e ne inserisce 5 (dal numero 1
al numero 5).
Poi seleziona il comando “Cerchio” e ne inserisce 2 (dal numero 1 al 2).
Riseleziona "Quadrato e ne aggiunge 1 (il numero 6).

ecc.

Il 16 agosto 2010 10:31, Alessandro B. [email protected] ha
scritto:

Pietro G. wrote:

giusto per capirci: hai delle classi inserite in vari file, oppure hai
degli script?

Che differenza c’è?

Facciamo così: gli script non esistono.
Esistono oggetti, classi, metodi.

Esiste il codice; per ragioni di comodità, poi, il codice si scrive
non su un singolo file ma su più d’uno. Questo però non c’interessa,
non ne parleremo mai, a meno che il problema non sia che non riesci a
“caricare” la tal classe definita sul tal file (che non è il nostro
caso, al momento).

Credimi, la discussione sarà molto più chiara.

Lo script N.1 mostra (.show) una GUI creata con WxFormBuilder e XRCise
su cui c’un un bottone: al click dell’utente su di esso viene chiamato
lo script N.2.

Ecco, di nuovo: che vuol dire “viene chiamato lo script N.2”? Come?
Incolli qui il codice della chiamata, per favore?

pietro

Alessandro B. wrote:

Pietro G. wrote:

giusto per capirci: hai delle classi inserite in vari file, oppure hai
degli script?

Che differenza c’è?

Se vuoi un suggerimento…
Studia un pò prima di fare domande altrimenti qualunque risposta
otterrai sarà comunque troppo tecnica per te da capire…

Il 16 agosto 2010 09:59, Alessandro B. [email protected] ha
scritto:

Ogni script ha una classe.
Ciao,

giusto per capirci: hai delle classi inserite in vari file, oppure hai
degli script?

Lo script N.1, dopo un click su un controllo, chiama il N.2.
Il N.2 ha diversi tipi di oggetto, e, dopo un click su un nuovo
controllo, chiama uno degli script dal N.4 al N.8.

Qui, per esempio, cosa intendi? In che modo lo script N.1 chiama lo
script N.2?

Vorrei numerare tutti gli oggetti che l’utente inserisce diversificando
in base al tipo di oggetto.

Come faccio? Uso le variabili di classe @@numerotipo1, @@numerotipo2? e
se si come si fa?

Non sono sicuro di aver afferrato il problema.

La mia impressione (se mi sbaglio correggimi) è che manchi un po’ di
struttura generale, cioè che, al momento di contare quel che devi
contare, non sai dove tenere i dati raccolti.

Quello che credo tu voglia è avere una classe che rappresenta in
qualche modo l’applicazione; questa classe avrà una variabile di
istanza @oggetti, che ad esempio potrebbe essere fatta
così:@oggetti = {OggettoTipo1 => 3, OggettoTipo2 => 5, …}

È difficile essere più precisi; prova a chiarire meglio il problema.

pietro

Alessandro S. wrote:

Alessandro B. wrote:

Pietro G. wrote:

giusto per capirci: hai delle classi inserite in vari file, oppure hai
degli script?

Che differenza c’è?

Se vuoi un suggerimento…
Studia un pò prima di fare domande altrimenti qualunque risposta
otterrai sarà comunque troppo tecnica per te da capire…

Se devo essere onesto pensavo che:

“Ruby è un linguaggio di scripting completamente a oggetti. Nato nel
1993 come progetto personale del giapponese Yukihiro M. (spesso
chiamato semplicemente Matz), Ruby è stato il primo linguaggio di
programmazione sviluppato in Oriente a guadagnare abbastanza popolaritÃ
da superare la barriera linguistica che separa l’informatica nipponica
da quella internazionale e ad essere usato anche in Occidente in
progetti di rilievo.”

(da Wikipedia, Ruby - Wikipedia)

e in quanto tale, ci fossero gli SCRIPT:

"In informatica un linguaggio di scripting è un linguaggio di
programmazione interpretato, destinato in genere a compiti di
automazione del sistema (batch) o delle applicazioni (macro), o ad
essere usato all’interno delle pagine web.

I programmi sviluppati con questi linguaggi vengono detti script,
termine della lingua inglese utilizzato in ambito teatrale per indicare
il testo dove vengono tracciate le parti che devono essere interpretate
degli attori.

Gli script generalmente sono semplici programmi il cui scopo è quello di
interagire con altri programmi molto più complessi in cui avvengono le
operazioni più significative. Gli script si distinguono dai programmi
con cui interagiscono, i quali solitamente sono implementati in un
linguaggio differente e non interpretato. Inoltre, spesso gli script
sono creati o modificati dall’utente finale."

(da Wikipedia, Linguaggio di scripting - Wikipedia).

Forse non ho capito bene.

Non proseguo la discussione ma ti invito a NON leggere le definizioni
italiane tradotte molto spesso (quasi sempre) male da definizioni in
inglese.

Pietro G. wrote:

Incolli qui il codice della chiamata, per favore?

il primo file è:

tool.rb

require “Oggetti_gui”
require “Oggetto_tipo1”
require “Oggetto_tipo2”

class NuovoOggetto < Frm_Oggetto
def initialize
super()
evt_button(@btn_ok) {on_OK}
evt_tool(@tbtn_oggetto1) { | event | oggetto1 }
evt_tool(@tbtn_oggetto2) { | event | oggetto2 }
end

def oggetto1
@tipo = 1
end

def oggeto2
@tipo = 2
end

def on_OK
if @tipo==1
OggettoTipo1.new()
elsif @tipo==2
OggettoTipo2.new()
end
end
end

Il file N.2 contiene:

Oggetto_tipo1.rb

class OggettoTipo1
def initialize

end

def disegna
  . # codice per il disegno
end

end

2010/8/16 Alessandro B. [email protected]:

e in quanto tale, ci fossero gli SCRIPT:

"In informatica un linguaggio di scripting è un linguaggio di
programmazione interpretato, destinato in genere a compiti di
automazione del sistema (batch) o delle applicazioni (macro), o ad
essere usato all’interno delle pagine web.

Forse non ho capito bene.

In questo contesto per script si intende un file direttamente
eseguibile, ad esempio uno che contenga:

#!/usr/bin/ruby
puts “sono uno script direttamente eseguibile”

e’ uno script

mentre un file che contenga

class NuovoOggetto < Frm_Oggetto

end

e’ una definizione di classe (e dei suoi metodi) che se lo esegui non
fa nulla… e che pur essendo scritto in un linguaggio di scripting
non e’ corretto chiamarlo script.

Ciao

Il 16 agosto 2010 12:06, Alessandro B. [email protected] ha
scritto:

end
Ok, ora è più chiaro.
Beh, mi sembra che on_OK sia il posto giusto per i tuoi tracciamenti,
no?
Puoi usare una (o più d’una) variabile d’istanza cui, contestualmente
alla creazione di un nuovo oggetto, assegni qualcosa (non ho ben
capito se devi solo contare quanti oggetti di ogni tipo crei o anche
altro).

Fra parentesi, quella cascata di if non è proprio il massimo;
considera alcune alternative:

  • Array

Objects = [OggettoTipo1, OggettoTipo2, OggettoTipo3, …]

def on_OK
Objetcs[@tipo].new
end

  • Hash

Objects = {:tipo1 => OggettoTipo1, :tipo2 => OggettoTipo2, …}

  • Altro, ci sono decine di modi per fare questa cosa.

Così, se il tuo scopo è solo contare gli oggetti di ogni tipo,
potresti semplicemente avere un hash che ha come chiavi le classi e
come valori il numero di oggetti creati finora:

def on_OK
@oggetti_contati[Objects[@tipo]] += 1
Objects[@tipo].new
end

pietro

Pietro G. wrote:

Ok, ora � pi� chiaro.
Beh, mi sembra che on_OK sia il posto giusto per i tuoi tracciamenti,
no?
Puoi usare una (o pi� d’una) variabile d’istanza cui, contestualmente
alla creazione di un nuovo oggetto, assegni qualcosa (non ho ben
capito se devi solo contare quanti oggetti di ogni tipo crei o anche
altro).

OK. provo e faccio sapere che succede.

Fra parentesi, quella cascata di if non � proprio il massimo;
considera alcune alternative:

  • Array

Objects = [OggettoTipo1, OggettoTipo2, OggettoTipo3, …]

def on_OK
Objetcs[@tipo].new
end

  • Hash

Objects = {:tipo1 => OggettoTipo1, :tipo2 => OggettoTipo2, …}

  • Altro, ci sono decine di modi per fare questa cosa.

Cos�, se il tuo scopo � solo contare gli oggetti di ogni tipo,
potresti semplicemente avere un hash che ha come chiavi le classi e
come valori il numero di oggetti creati finora:

def on_OK
@oggetti_contati[Objects[@tipo]] += 1
Objects[@tipo].new
end

Immaginavo non fossero “da buon programmatore” :slight_smile:
Provo a cambiare il codice (speriamo non mi confonda!!).

Luca De Marinis wrote:

[…] per script si intende un file direttamente
eseguibile
mentre un file che contenga

class NuovoOggetto < Frm_Oggetto

end

e’ una definizione di classe (e dei suoi metodi) che se lo esegui non
fa nulla… e che pur essendo scritto in un linguaggio di scripting
non e’ corretto chiamarlo script.

Grazie Luca,
chiaro, semplice, coinciso, come ruby!!

Signori, grazie a tutti per gli utili consigli. Ho risolto il problema.
So contare!!! (è dalle elementari che non mi sento così felice di
contare i numeri interi … :slight_smile:

Il 17 agosto 2010 09:26, Alessandro B. [email protected] ha
scritto:

Signori, grazie a tutti per gli utili consigli. Ho risolto il problema.
So contare!!! (è dalle elementari che non mi sento così felice di
contare i numeri interi … :slight_smile:

:slight_smile:

sì, è sempre una grande soddisfazione.

pietro