Newsgroup: it.comp.lang.c++
Titolo: Oggetti - corrispondenza uno a uno

Mi scuso se questo non è il newsgroup adatto... cercavo un newsgroup che 
parlasse di ingegneria del software e modellazione ad ogetti...
Quando vado a progettare ad oggetti ed ho due concetti in corrispondenza 
uno a uno con uno dei due abbastanza piccolo (cioè con pochi attributi 
nel dominio del sistema in questione, al limite uno), potremmo dire che 
è regola generale far diventare il secondo e i suoi attributi, attributi 
del primo?
Faccio un esempio: supponiamo di avere il concetto portata ad un 
ristorante e il concetto Consegna (Consegna è un oggetto di cui per il 
momento sembra ci interessi solo l'attributo tempodiconsegna). In questo 
caso seguendo la regola mi conviene far diventare tempodiconsegna un 
attributo di portata?
Questa regola della corrispondenza ha un senso, o quando una classe ha 
pochi attributi si tende comunque a farla diventare un attributo di 
un'altra classe e non c'entra niente la corrispondenza uno a uno?
Grazie.

 attributo di portata?
Riprendo il tuo esempio.. la PORTATA è un oggetto che è disponibile nel 
MENU .. la PORTATA non ha di suo un attributo che indica qual'è il tempo 
medio di consegna, al più può avere un'informazione che indica quanto 
tempo ci vuole a prepararla in media.. ma ovviamente tutto dipende dal 
contesto (ristorante, numero clienti...). Nel momento in cui viene 
inserita la PORTATA nella COMANDA allora si può inserire un 
TEMPODICONSEGNA che magari all'inizio non sarà inizializzato per 
indicare che ancora non è stata soddisfatta la richiesta del cliente...
Saluti
Antonio

 
Io comunque parlavo di concetti, non ancora di oggetti, ma lasciamo 
stare questa distinzione. Se ho una classe con un'attributo, non 
conviene far diventare la prima un attributo delle classi a cui è 
collegata? (Questo quando siamo nella fase in cui stiamo cercando di 
modellare il dominio informativo del problema mentre in un'altra fase 
potrebbe aver senso una classe con un attributo).

 attributo di portata?
In questo caso, io farei, appunto, un'inner class, che descriva, per
Portata, il concetto di tempo. Ma forse, qualcuo può consigliarti qualcosa
di meglio.
class Portata {
        public:
        class Consegna { ... }
}
Comunque, mai e poi mai, spoecare un insieme con concetti che non gli
appartengono!
Ciao,
Maurizio.

 attributo di portata?
Se dicessi quale metodologia stai utilizzando renderesti il tutto piu'
semplice.
Ad ogni modo per come intedo io one-to-one, Consegna e Portata non hanno
corrispondenza one-to-one.
Infatti una portata ha un tempo di consegna (idealmente uno solo). Ad
esempio pollo arrosto, 30 minuti.
Ma... un tempo di consegna puo' trovarsi in piu' portate. Ad esempio
Pollo Arrosto = 30 minuti, Paella = 30 minuti.
(ovviamente ci sono altri tempi di cosegna: gelato = 2 minuti).
In pratica mi pare una corrispondenza one-to-many, ma... a dire il vero
non capisco a cosa ti serva tutta questa discussione e ...
in questa discussione ci vedo pure poco della OOD e piu' di un DBD.
Per finire, nel caso specifico mi pare sia conveniente avere il tempo di
consegna attributo della classe in quanto mi sembra inutile aver una
classe tempo_di_consegna con numerose istanze stupide tipo:
1 minuto
3 minuti
5 minuti
6 minuti
9 minuti
11 minuti
...
ok, voler riutilizzare le istanze, ma...
Dipende anche pero' da cosa vuoi fare con questi dati. Ad esempio se tu
volessi SOLO stampare a video tutti i piatti che hanno 30 minuti di
tempo di consegna il modo piu' efficiente sarebbe quello di avere la
classe tempo_di_consegna (invece di averlo come attributo) e tale classe
potrebbe contenere una lista di Portate che richiedono tale tempo. In
pratica ribaltare la situazione, avere un oggetto lista di portate come
attributo della classe tempo di consegna. Poi questa situazione e' rara,
o meglio e' raro che l'unico scopo per cui ti servano quelle due classe
e' per quella query e se ci sono altri scopi questo di sicuro non e' il
modo migliore.
In generale, il metodo piu' general purpose, e' quello istintivo: di
avere una lista di portate ed ogni portata ha come attributo un tempo di
consegna. Con questo modo, se ti serve fare la query di prima, ci
metterai un pochino di piu' in quanto devi scorrere tutte le portate e
non solo quelle interessate, ma puoi tranquillamente ottenere lo stesso
risultato (ed in tutti gli altre query e' probabilmente piu' veloce e
piu' adatta).
Concludendo l'argomento e' OT su questo NG.
Tommaso
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 non capisco a cosa ti serva tutta questa discussione e ...
Probabilmente non ho spiegato bene cosa intendo per Portata e Consegna.
Portata č un insieme di piatti da consegnare ad un tavolo.
Il tempo di consegna non si conosce a priori, ma quando la portata viene 
consegnata. La corrispondenza quindi č uno a uno.

 
spoecare?

 ok, voler riutilizzare le istanze, ma...
Infatti, sarebbe assurda una cosa del genere :-) A parte il fatto che si 
sprecherebbe più memoria per il puntatore che per l'intero

 spoecare?
volevo dire sporcare... un po' di fantasia su ;-))))
Ciao,
Maurizio.