Ti rispondo con le citazioni:
xneo ha scritto:
Il mio discorso vale in generale
Per questo continuiamo a discutere: tu parli in generale, mentre io no.
raph1328 ha scritto:
non non credi sia la soluzione ideale avere più costruttori che chiamano quello con più parametri
Era sottinteso "in questo caso specifico", in questa frase ci trovi la parola "sempre" o "per ogni classe"?
raph1328 ha scritto:
@xneo Non metto in dubbio ciò che dici
Concordo con te se parli in generale, gia te l'ho detto!
xneo ha scritto:
devi sempre considerare il fatto che il codice evolve.
E chi dice di no, ma la classe Angolo - qui sottoposta ad esame - non si evolverà con altri attributi, al massimo avrà metodi in più.
Per inserirne un altro con una certa logica occorre un ordine di grandezza maggiore o minore ai soliti 3. Ragionando per assurdo:
superiore all'angolo giro rimane solo che contarli, ma a che può servire ai fini d'un calcolo con le funzioni trigonometriche sessagesimali create in un'altra classe ad-hoc?
Il secondo di grado è già abbastanza piccolo di per sé che non conviene usare una quantità 1/60 o 1/100 più piccola. Ad esempio un arco di 1" che ha tangente di 1 cm dovrebbe avere un raggio di 1/tan(1") = 206264,81 ovvero poco più di 2 km (è lo stesso rapporto tra 1 parsec ed 1 unità astronomica). Anche i militari hanno smesso da un bel po' di puntare i cannoni girando la manovella oppure fare rilevamenti topografici con 2 punti ravvicinati tra loro e lontani 2 km vuol dire stare messi proprio male!
Per quanto riguarda la tua classe NutritionFacts visto che si tratta solo d'assegnare valori senza calcoli avrei fatto
public NutritionFacts( int servingSize, int servings) {
this.servingSize = servingSize; this.servings = servings;
}
public NutritionFacts( int servingSize, int servings, int calories) {
this(servingSize, servings);
this.calories = calories;
}
//...
per dar più importanza al 1° costruttore senza fargli fare la cascata di chiamate, ma inserendo gli altri costruttori il problema di confusione resta!
Mentre per gaab va bene perché
Angolo(int gradi, int primi){
this(gradi,primi,0);// altrimenti perché ricopiare i calcoli qui?
}
Angolo(int gradi, int primi, int secondi){
// calcoli + assegnamento
}
xneo ha scritto:
Se i parametri sono tutti dello stesso tipo, quando sono "troppi" quando vai ad istanziare l'oggetto potresti confonderti con l'ordine
Se hai "troppi" attributi soprattutto se opzionali mica andrai a creare un costruttore con tutti quei parametri?
xneo ha scritto:
Inoltre supponiamo che ho intenzione di non specificare la quantità di grassi, ma la quantità di sodio e carboidrati in questo caso devo comunque usare il costruttore con il massimo numero di parametri e fornire il valore 0 per i grassi.
Se l'hai impostato così ... allora trucca pure che non t'ingrassi.
Su mettiamo un break in questo loop! Incomincio io!