Newsgroup: it.comp.lang.c++
Titolo: Problema su gestione informazioni-proprietà di oggetti

Innanzitutto un saluto a tutto il newsgroup,
scrivo per chiedere chiarimenti su un dubbio che ho, devo scrivere un
codice che deve effettuare controlli su vari oggetti di classi
differenti e sulla base di tali controlli compiere azioni e altri
controlli ancora. Vorrei scrivere il codice in c++, ma di fatto non ho
nessun vincolo sulla scelta del linguaggio. Dico innanzitutto che sono
abbastanza ignorante in materia e mi scuso per la scarsa padronanza
del linguaggio.
Vorrei fare un esempio veloce per piegare il problema, ho la seguente
classe:
class Arancio {
void sbuccia();
void dividispicchi();
? bool c'èilverme();
? bool èpresenteilverme
}
Ora spiego i punti interrogativi. Ho un arancio, dopo averlo sbucciato
e divisi i spicchi posso controllare la presenza del verme, se è
presente o meno il verme farò azioni differenti.
La mia domanda è se la presenza del verme è una proprietà
dell'oggetto?.
Di fatto un arancio ha o non ha il verme, è un qualcosa intimanente
legato all'oggetto arancio, ma non posso saperlo se prima non ho
compiuto le operazioni sbuccia e dividispicchi, quindi se ho una
variabile membro  (bool èpresenteilverme) questa sarà indefinita fino
a quando non ho compiuto le operazioni adatte.
Mi chiedo allora se lo stato di un oggetto può avere propietà
indefinite, questo mi preoccupa in quanto io devo trattare con tanti
aranci e non vorrei leggere la variabile membro èpresenteilverme
quando ancora non ho compiuto i controlli.
Ho pensato di non utilizzare un valore booleano, ma ad es un int: -1 è
presente il verme, +1 non è presente il verme, 0 indefinito, ma ogni
volta che leggo questa variabile devo poi fare un controllo sul suo
valore per vedere e non è zero, non esiste una soluzione più elegante?
Sono sicuro che è un dubbio sciocco per chi programma, ma mi sta
facendo pensare da un po' e non trovo una soluzione adatta.
Aspetto fiducioso una vostra risposta e vi ringrazio anticipatamente.
Ciao a tutti

 Ciao a tutti
Ciao,
Puoi adottare un approccio per default.
Finchè non sbucci la frutta tu non puoi dire che ha il verme, per cui il 
valore iniziale del membro è false.
Oppure ti crei un nuovo tipo di dato enum QualitàFruttoType che ha i 
valori HA_IL_VERME, NON_HA_IL_VERME, NON_SI_SA.
La tua variabile membro m_qualità sarà di tipo QualitàFruttoType e sarà 
inizializzata a NON_SI_SA.
Se poi vuoi aggiungere un metodo booleano che ti ritorni se è presente 
il verme, ti basterà testare se m_qualità ha valore HA_IL_VERME e 
tornare false negli altri casi.
Maurus

 valore per vedere e non č zero, non esiste una soluzione piů elegante?
boost::tribool č piů elegante.
 
http://www.boost.org/doc/html/tribool/tutorial.html
M

 presente o meno il verme farò azioni differenti.
[...]
Per rispondere a tutte le tue domande dovresti chiarire un po' di più
il problema, magari spiegando meglio che cosa sono queste arance nel
domino del tuo problema specifico.
Ciao, Ugo


Caro Ugo, le tue domade sono state utilissime perchè mi fanno capire
che devo approfondire di più l'analisi del problema, quando avrò
focalizzato un po' meglio le cose scrivo per esteso il problema e la
mia soluzione, se ovviamente interessa al newsgroup!
Grazie mille

Quando devo fare una stima del tempo/costo necessario per realizzare
un progetto uso una regola approssimativa. Assegno un terzo del tempo
per la progettazione, un terzo del tempo per l'implementazione, un
terzo del tempo per il debug e la manutenzione.
Se incomincio subito a scrivere il codice senza aver fatto un po' di
progettazione prima, dopo un po', mi ritrovo con un blob che non
riesco più a gestire. Se spendo troppo tempo nella progettazione mi
ritrovo con un progetto che funziona solo sulla carta.
Quindi faccio così:
- Stabilisco a grandi linee quali sono i moduli/librerie del mio
programma/progetto.
- Progetto a grandi linee le classi di un modulo.
- Implemento le classi.
- Cerco di collaudare il codice che ho scritto e lo correggo.
- Se qualche cosa non mi torna riconsidero il progetto e faccio
un'altro ciclo di implementazione e collaudo.
- Se il modulo è abbastanza a posto, passo ad un altro modulo.
E'un approccio che per me va abbastanza bene.
Ciao, Ugo
P.S. Contami tra quelli interessati :-)  (se posti una descrizione del
problema + la tua soluzione.)