Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
14/09/10 9:48
Marcus65
Sto studiando la guida di Totem. Giunto al polimorfismo e provati vari programmi di esempi ed altri di mia “invenzione”, mi restano dei dubbi sull’uso degli scope.


Le variabili interne ad una classe mi pare sia sempre bene dichiararle private o protected (se la classe eredita una o più classi derivate). Ma mi sfugge il senso dello scope private nel caso di variabili mediate da una property public. Solo se la property è readonly la variabile private è realmente immodificabile (immetto il suo valore una volta tramite il costruttore e quello resta). Altrimenti ci si può accedere tranquillamente dall’esterno della classe e cambiarla… Cosa c’è di sbagliato nel mio ragionamento ?
Ancora: come esercizio sul polimorfismo mi sto inventando un programmino che calcola le paghe dei dipendenti di una ditta, così strutturato: c’è una classe base “dipendente” con i seguenti campi: Nome, Cognome, DataNascita, OreLavorate, PagaOraria e una function CalcoloStipendio. Poi ci sono tre classi : Impiegato, Operaio, Dirigente che ereditano dalla classe base. Il campo PagaOraria e la funzione CalcoloStipendio sono oggetto di polimorfismo: in ognuna delle tre classi derivate il calcolo avverrà in maniera differente.
Mi verrebbe da dichiarare tutto protected nella classe base e private eventuali variabili interne alle classi derivate. La data di nascita la dichiarerei readonly come nei programmi di esempio nelle lezioni di totem. Ma perché la data di nascita soltanto può essere immodificabile e non pure il nome e cognome ecc? D'altronde posso sbagliarmi a inserire la data di nascita come pure il cognome…. Invece una eventuale data odierna acquisita dal sistema mi pare abbia ben ragione di essere read only: è quella, non deve essere cambiata.

Sono stato prolisso me ne rendo conto ma, spendendo qualche parola in più, spero di aver chiarito bene la natura dei miei dubbi e ringrazio chi volesse fornirmi delucidazioni.
aaa
14/09/10 9:57
Il Totem
Postato originariamente da Marcus65:
Le variabili interne ad una classe mi pare sia sempre bene dichiararle private o protected (se la classe eredita una o più classi derivate). Ma mi sfugge il senso dello scope private nel caso di variabili mediate da una property public. Solo se la property è readonly la variabile private è realmente immodificabile (immetto il suo valore una volta tramite il costruttore e quello resta). Altrimenti ci si può accedere tranquillamente dall’esterno della classe e cambiarla… Cosa c’è di sbagliato nel mio ragionamento ?


Le variabili private non sono fatte per essere immodificabili, ma per contenere dati inerenti ai meccanismi interni di una classe. Nella fattispecie, è sempre consigliabile avvolgere un campo in una proprietà pubblica perchè è possibile modificare il comportamento della proprietà semplicemente aggiungendo codice ai blocchi get o set, mentre è impossibile ovviare alla natura di un campo in qualsiasi modo.


Postato originariamente da Marcus65:
Ancora: come esercizio sul polimorfismo mi sto inventando un programmino che calcola le paghe dei dipendenti di una ditta, così strutturato: c’è una classe base “dipendente” con i seguenti campi: Nome, Cognome, DataNascita, OreLavorate, PagaOraria e una function CalcoloStipendio. Poi ci sono tre classi : Impiegato, Operaio, Dirigente che ereditano dalla classe base. Il campo PagaOraria e la funzione CalcoloStipendio sono oggetto di polimorfismo: in ognuna delle tre classi derivate il calcolo avverrà in maniera differente.
Mi verrebbe da dichiarare tutto protected nella classe base e private eventuali variabili interne alle classi derivate. La data di nascita la dichiarerei readonly come nei programmi di esempio nelle lezioni di totem. Ma perché la data di nascita soltanto può essere immodificabile e non pure il nome e cognome ecc? D'altronde posso sbagliarmi a inserire la data di nascita come pure il cognome…. Invece una eventuale data odierna acquisita dal sistema mi pare abbia ben ragione di essere read only: è quella, non deve essere cambiata.


Sono più che altro questioni di stile. Se una persona è identificata esclusivamente da Nome, Cognome e DataNascita, allora sarebbe corretto anche dichiarare tutte e tre le proprietà come readonly, rendendo così l'oggetto immutabile (come le stringhe). Nell'esempio che avevo fatto, avevo deciso di non usare readonly per tutte solo per evitare questo caso. Gli oggetti immutabili sono sempre un po' strani.
aaa
14/09/10 12:07
Marcus65
Grazie mille
Chiarimenti preziosi.
Come sempre
aaa