Sono nuovo al concetto di programmazione orientata agli oggetti (in java) e ho spesso incontrano il seguente problema di progettazione:Best Practice: variabili di istanza di riempimento nel tempo
ho spesso creano classi con variabili di istanza che non sono noti al momento dell'inizializzazione. Queste variabili sono riempite nel tempo. Questo non è un problema reale poiché queste variabili sono nulle fino a quando non vengono riempite, pertanto la mia domanda riguarda maggiormente le migliori pratiche in tali situazioni.
Lasciatemi spiegare con un esempio. Ho una classe Car
. Ogni Car
ha un color
, vMax
, weight
, horsepower
ecc
Quando si inizializza l'Car
solo che è color
, weight
e horsepower
sono noti. ->Car(color, weight, horsepower)
Il vMax
può ora essere calcolato (diciamo: weight/horsepower
). Ciò che mi confonde è che lo Car
, dopo l'inizializzazione è "incompleto", il che significa che lo vMax
sarà riempito solo nel tempo.
Ho trovato questo piuttosto brutto, e, naturalmente, l'esempio di macchina è semplificato. Spesso ho classi con 10+ proprietà in cui alcune sono calcolate nel tempo, che in seguito vengono utilizzate nel codice per calcolare ancora più proprietà di quell'oggetto. Diventa quindi difficile sapere quali variabili sono già state riempite in un determinato punto e quali no.
Mi chiedevo solo se questo è "normale" e il modo in cui funziona OOP, o se tali situazioni dovrebbero essere evitate. Se sì, sarei felice per alcuni suggerimenti sul design.
Michael
mi piacerebbe suggeriamo di esaminare il pattern fluente del builder, usando proprietà nullable (quindi i valori primitivi predefiniti non vengono confusi con i valori non assegnati) e convalidando tutte le proprietà necessarie in uno o più metodi privati, richiamati quando necessario. – Mena
Sembra che 'vMax' dovrebbe essere un metodo piuttosto che una variabile ... – beerbajay
@beerbajay - Preferirei una variabile * transient * invece di un metodo per' vMax' :) – TheLostMind