Newsgroup: it.comp.lang.delphi
Titolo: Cosa è meglio fare

Non capisco la differenza tra la dichiarazione (metti una stringlist) fatta 
sotto la sezione 'private' oppure in implementation.
Che differenza c'è e cosa è meglio fare ? 
 
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 

 Che differenza c'è e cosa è meglio fare ?
 
L'errore piu` grosso che puoi fare e` mischiare approccio procedurale e 
object-oriented. La stringlist la devi dichiarare nella tua classe, 
perche` e` parte dello stato che quella classe deve memorizzare.
 
-- 
4ndre4
"The use of COBOL cripples the mind; its teaching should, therefore, be 
regarded as a criminal offense." (E. Dijkstra)
"Ora, questo "Delta11" non è nulla di più di uno scemo del villaggio" - 
http://tinyurl.com/z6y6gpd
 

 
 
Secondo me bisognerebbe sapere se la stringlist poi sarebbe utilizzata 
da più classi come dato condiviso.
 
 
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
 
to reply remove "1975nosp"


 da più classi come dato condiviso.
 
Non esiste il dato condiviso tra classi. Le classi devono SOLO lavorare 
usando altre classi come collaboratori, e le dipendenze devono essere 
"iniettate".



 
quello non ha capito un cazzo .
ha semplicemente chiesto COME deve fare.
Certo spiegando le cose in modo tale che sembrino difficili sembra tutto 
un coso molto complesso non da tutti ma solo per pochi.
MA VAI A CAGARE VA! ma non eri passato a java?...ecco bravo tornaci!
 
-- 
Quando la dittatura è un dato di fatto, la rivoluzione diventa un diritto.
(Victor Hugo)
 
“L’intelligenza sa di essere libera, quali che siano le coercizioni 
esteriori.
Sa che la grandezza dell’Uomo è nel pensiero, e sa che c’è sempre
almeno un altro uomo che lo afferra e lo trasmette.”
(Ida Magli, Omaggio agli Italiani)

 "iniettate".
 
https://en.wikipedia.org/wiki/Dependency_injection
 
https://en.wikipedia.org/wiki/Inversion_of_control
 


 
 
mettendola nella sezione private della classe, questo è un dato privato 
della classe e solo suo.
Ogni volta che usi la classe avrai questo campo legato alla nuova classe.
 
Mettendolo nella sezione "Implementation" della unit quello è legato 
alla unit magari è condiviso tra varie classi. E' una variabile globale 
della unit, tutte le funzioni o classi della unit usano quell'instanza.
 
Uno è legato alla classe l'altra alla unit.
 
Come ti hanno detto sarebbe meglio mettere tutto nell'oggetto. Purtroppo 
io sono il primo che a pensare ad oggetti devo ancora arrivare.
 
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
 
to reply remove "1975nosp"
 


 Purtroppo io sono il primo che a pensare ad oggetti devo ancora arrivare.
 
ma non è grave! anche quelli di java non sanno quasi mai quel cazzo che 
stanno facendo. Non ti preoccupare, c'è chi vive nel mondo reale e chi 
invece è immerso nello stipendificio, sa tutto in teoria, ma non ha mai 
fatto un cazzo. Vivi sereno!


 della unit, tutte le funzioni o classi della unit usano quell'instanza.
 
...e questo non va mai fatto. Non si dipenda MAI da variabili globali 
perche` (come tutto cio` che e` globale - vedi anche i singleton) si 
ottiene del codice non testabile, e gli unit test sono fondamentali, 
quando si sviluppa. Le classi devono lavorare con dipendenze 
iniettabili, perche` in sede di unit test si deve poter creare dei 
"mock" per essi:
 
http://xunitpatterns.com/SUT.html
 
http://xunitpatterns.com/DOC.html
 


L'errore piu` grosso che puoi fare e` mischiare approccio procedurale e
object-oriented. La stringlist la devi dichiarare nella tua classe,
perche` e` parte dello stato che quella classe deve memorizzare.
4ndre4
----
Mi spiace aver involontariamente sollecitato anche qualche volgarità, però 
credo che la tua risposta sia giusta e mi abbia illuminato.
Però devo ammettere che contemporaneamente mi è servita la risposta di ca75, 
perchè purtroppo la OO è ancora difficoltosa per me.. 


 perchè purtroppo la OO è ancora difficoltosa per me..
 
Dai un'occhiata qui
 
http://www.delphibasics.co.uk/Article.asp?Name=FirstPgm
 
http://www.delphibasics.co.uk/RTL.asp?Name=Unit
 
 
In parole molto semplici se la metti sotto private quella lista la puoi 
usare SOLO in quell'oggetto (o derivati) e non e' visibile (per renderla 
visibile la devi mettere sotto public/published) se la metti sotto interface 
la puoi usare in tutte le unit che hanno quella unit nella clausola uses.
 
Diverso e' il discorso per le procedure e le funzioni, queste per essere 
utilizzate al di fuori della unit vanno dichiarate prima nella interface e 
poi sviluppate sotto alla implementation (ma questo gia' lo sapevi ....)
 
Ciao
 
Daniele
 
 

 ca75, perchè purtroppo la OO è ancora difficoltosa per me..
 
No, scusa, non possono averti illuminato entrambe le risposte, perche` 
stiamo dicendo due cose l'una l'opposto dell'altra: o usi variabili 
globali (ripeto: e` un antipattern per eccellenza, rende il tuo codice 
non testabile, e per questo non bisogna MAI farlo), o incapsuli gli oggetti.


 .
 
cosa intendi quando dici "non testabile"?
 
 
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
 
to reply remove "1975nosp"
 


 perchè purtroppo la OO è ancora difficoltosa per me..
 
Sempre per te non può essere fatto.
Devi disimparare ciò che hai imparato!
Un Programmatore usa gli Oggetti per saggezza e difesa, mai per attaccare!
Ricorda, il vigore di un Programmatore proviene dagli Oggetti... Ma stai 
attento: goto, gosub, numeri di linea, il lato oscuro essi sono. Quando 
il sentiero oscuro tu intraprendi, per sempre esso dominerà il tuo 
flowchart, tu non sottovalutare i poteri del Basic, o il fato di un 
Commodore64, tu soffrirai.
 
:)
 
-- 
@WarpTen10


 
 
Tu puoi distruggere la OOP. Lui lo ha previsto. Questo è il tuo destino. 
Unisciti a me e insieme potremo programmare la galassia, come padre e 
figlio. Vieni con me. È l'unica strada.
 
;)
 
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
 
to reply remove "1975nosp"
 


 cosa intendi quando dici "non testabile"?
 
L'ho gia` specificato. Significa che non e` possibile scrivere unit 
test, e scrivere unit test e` fondamentale. Non si scrive software senza 
corredarlo di unit test (ed integration test, ed acceptance test, etc.).
 
Immagina di avere una classe TPerson che utilizza un TTaxCodeService per 
verificare la validita` del "tax code" di un individuo. TTaxCodeService 
e` un'interfaccia che espone un metodo isTaxCodeValid(ATaxCode: String).
 
Se TPerson dipende da un'istanza concreta di TTaxCodeService (ad esempio 
un TItalianTaxCodeServiceImpl che si connette all'agenzia delle entrate 
e verifica la validita` del codice fiscale) non riuscirai a scrivere uno 
unit test che verifica tutti i possibili risultati dell'interazione tra 
TPerson e il suo DOC (
http://xunitpatterns.com/DOC.html
) TTaxCodeService.
 
Se, invece, TPerson ha una dipendendenza da TTaxCodeService 
"iniettabile", per esempio su costruttore:
 
constructor TPerson.Create(ATaxCodeService: TTaxCodeService);
 
Quando scrivi lo unit test per TPerson, potrai creare un "mock" per 
TTaxCodeService, iniettarla in un'istanza di person, e verificare le 
interazioni tra TPerson e TTaxCodeService. Per esempio, puoi avere un 
mock per il risultato positivo di ritorno dalla chiamata isTaxCodeValid, 
uno che solleva una TInvalidTaxCodeException, uno che solleva un 
TTaxCodeNotFoundException, ecc..) e puoi quindi verificare che TPerson 
si comporti come ti aspetti in base ogni interazione.


 figlio. Vieni con me. È l'unica strada.
 
Questa è la OOP dei programmatori Java. Non è goffa o erratica come un 
decoratore. È elegante, invece, per tempi più civilizzati. Per oltre 
mille generatori i programmatori Java sono stati i guardiani di moduli e 
proprietà nella vecchia Codifica, prima dell'oscurantismo, prima 
dell'Imperativa.
 
(ndr: Non mi sta molto simpatico Java, ma era l'unica parola di quattro 
lettere che iniziava con J :) )
 
-- 
@WarpTen10


 
 
comunque te la rubo ;)
 
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
 
to reply remove "1975nosp"
 
