Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Cod, sintaxa si comenzi  Clasa Custom...
 Clasa Custom
 
 5/9/2011 12:27:12 PM
User is offlinedanilea
212 posts
4th


Clasa Custom
 (N/A)
Buna ziua,
Intr-o aplicatie,in functie de de situatie,apelez niste Proceduri(am scris cod) si Functii(am scris cod).
Am declarat Set procedure to ... additive.
Intrebare: Pot sa creez o clasa proprie Custom in care sa declar Procedurile si Functiile ca Metode si
sa le populez cu codul scris si sa le apelez cind am nevoie de ele? Care sint implicatiile practice?
Multumesc.
 5/9/2011 2:22:26 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Clasa Custom
 (N/A)
Aceasta este abordarea OOP.
Ce implica? Schimbarea modului de aplelare a functiilor si procedurilor respective.
Obiectul care le contine trebuie sa fie astfel instantiat, incat sa poata fi apelat in acelasi mod indiferent de ierarhie.
O varianta ar fi instantierea obiectului ca variabila globala, insa asa e susceptibil la comanda clear ...
O alta varianta ar fi instantierea in _vfp, in _screen sau in form.
Se poate face si o combinatie a celor doua, instantiind obiectul in  _vfp sau _screen si referindu-ul intr-o variabila publica.



Daniel Buduru
 5/31/2011 9:56:46 AM
User is offlinedanilea
212 posts
4th


Re: Clasa Custom
 (N/A)
Buna ziua Dl.Buduru,
Am testat folosind o variabila publica :
x = CREATEOBJECT("clasa_custom")
si apelind diverese metode din aceasta clasa:
x.metoda1() .Merge.
dar..."instantiind obiectul in _vfp...si referindu-ul intr-o variabila publica" nu am reusit sa ma dumiresc cum se face.
Multumesc.
 5/31/2011 10:38:10 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Clasa Custom
 (N/A)
ADDPROPERTY(_vfp,"obiectX",NEWOBJECT("clasa_custom"))
? _VFP.ObjectX.Metoda1()

Public oCustom
oCustom=_vfp.ObjectX
? oCustom.Metoda1()

_screen.AddProperty('objectx',NewObject("clasa_custom"))
? _screen.ObjectX.metoda1()

- Obiectul este adaugat ca proprietate fie obiectului aplicatie ( _vfp), fie obiectului _screen.
- Adaugarea ca proprietate face ca obiectul sa nu aiba un obiect parent, si sa se comporte ca si cand ar fi creat intr-o variabila publica.
- O proprietate adaugata unui obiect nu poate fi stearsa accidental cu o coamnda CLEAR.
- Atat _screen cat si _vfp sunt in scop pentru intreaga aplicatie, respectiv pot fi adresate de oriunde.
- Referirea obiectului intr-o variabila permite adresarea obiectului ca si cand ar fi instantiat in variabila publica, daca exista deja cod care il adreseaza in acest mod.



Daniel Buduru
 5/31/2011 11:06:06 AM
User is offlinedanilea
212 posts
4th


Re: Clasa Custom
 (N/A)
Va multumesc Dl.Buduru.
 6/1/2011 1:06:33 AM
User is offlineDumitru
172 posts
5th


Re: Clasa Custom
 (N/A)
Dar din punct de vedere al memoriei ocupate n-ar fi mai bine sa ramana la SET PROCEDURE ?
Care ar fi avantajele folosirii unui obiect?
Probabil viteza. ma gandesc ca obiectul este tinut mereu in memorie pe cand fisierul cu proceduri este accesat numai daca nu gaseste procedura in fisierul curent.
 6/1/2011 2:07:38 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Clasa Custom
 (N/A)
Avantajele utilizarii unui obiect tin in primul rand de incapsulare.

Utilizarea unui obiect este mai sigura decat utilizarea unei proceduri.
Mai multe functii cu acelasi nume, dar cu parametrii si algoritm diferiti, pot fi stocate in fisiere procedura diferite.
In acest caz, la apelarea functiei, se va executa prima functie gasita, si nu neaparat functia de care era nevoie..

Un obiect poate stoca valori de initializare sau/si valori de memorta intre doua apeluri ale unei metode, sau valori de care tin seama alte metode.
Am sa dau un exemplu:
Verificarea codului fiscal poate fi facuta fie intr-o procedura, fie intr-o metoda a unui obiect.
Exemplele de codul procedural de pe forum presupun crearea si initializarea  obiectului winhttprequest la fiecare rulare. In varianta actuala a paginilor de la mf, la fiecare rulare se navigheaza pe prima pagina, se obtine codul cap si cookie, se face interogarea, apoi obiectul se distruge.
Daca ar fi implementat intr-un obiect, winhttprequest ar trebui creat si initializat o singura data, cand s-ar naviga pe prima pagina si s-ar obtine cookie si codul, care s-ar stoca in proprietati ale obiectului, si asta s-ar face chiar la instantierea obiectului. Apoi metoda validarecodfiscal ar executa doar interogarea, setand headerele cu valorile memorate anterior in proprietati. Din pagina returnata s-ar extrage in continuare o serie de date ale agentului, care ar fi stocate in proprietati ale obiectului, putand fi accesate ulterior.

Pe scurt, acest obiect ar contine tot ce este necesar - metode si proprietati - pentru a-si face jobul, si nu ar fi nevoie sa se bazeze pe existenta in calea de acces a funtiilor pe care le apeleaza intern, si nici sa creeze variabile publice pentru stocarea unor valori intre apeluri.

Pentru ca am pomenit de variabile publice: ce se intampla daca o metoda a unui obiect sau o procedura apelata dintr-un obiect creeaza variabile publice, in cazu in care se instantiaza doua astfel de obiecte intr-o aplicatie?  Cine cu ce valori lucreaza?


Daniel Buduru
 6/2/2011 1:03:30 AM
User is offlineDumitru
172 posts
5th


Re: Clasa Custom
 (N/A) Modified By Dumitru  on 6/2/2011 1:10:00 AM)
Da, au si obiectele avantajele lor dar toate sunt dint punctul de vedere al programatorului, e mai elegant, nu se incurca daca-i imprastiat.
Faptul ca odata instantiat, am nevoie sau nu am de el, sta in memorie nu mi se pare o idee buna pentru alocarea resurselor.
Iar chestia cu variabilele globale, daca am nevoie de astfel de variabile voi avea nevoie si de variabile de tipul obiect globale ca sa le pot folosi proprietatielesi metodele, ce-i drept sunt mai putine si pot fi atasate altor obiecte vizibile de oriunde (_SCREEN, _VFP).

Treaba cu MF (WinHttpRequest) cred ca depinde de scopul aplicatiei, daca are nevoie des sa verifice codul fiscal e mai bine cu obiect instantiat si pastrat pentru folosinta ulterioara altfel nu vad de ce varianta procedurala nu ar fi buna (ba chiar mi se pare mai buna).

Referitor la folosirea variabilelor globale in proceduri cred ca depinde de stil, nu au ce cauta variabile globale in functii si proceduri, daca vrei sa folosesti valori din afara functiei le trimiti ca parametrii iar daca vrei ca functia sa modifice mai multe variabile le trimiti prin referinta. Sau folosesti un obiect "register" vizibil, daca situatia o impune (la aplicatii mari cam e nevoie).Trebuie sa spun ca folosind un obiect este mai usor pentru programator sa imbunatateasca ulterior aplicatia.

Daniel, nu zic ca sa te contrazic si nu sunt un partizan al programarii procedurale, o folosesc numai in prima faza pentru ca-mi este mai usor sa testez pana am clar ce trebuie sa fac.
Am vrut numai sa scot in evidenta ca nu se poate obtine un plus (in general!) fara sa dai nimic.

Daniela, daca o aplicatie exista si a fost gandita procedural este bine ca asa sa ramana si alta poate sa-i ia locul, rescrisa de la zero folosind o tehnica avansata, orice carpeala va da dureri de cap.
Eu asa procedez, sterg tot si scriu de la inceput, pentru ca stiu cum trebuie facuta abia dupa ce aplicatia e gata. :) Probabil experienta ma va invata altceva.
 6/2/2011 4:38:17 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Clasa Custom
 (N/A)
Ultima dintre grijile mele este ocuparea memoriei cu obiecte. VFP, ca si FoxPro, utilizeaza un caching al codului, orice cod apelat este pastrat in memorie, indiferent daca este o functie dintr-o procedura sau o metoda a unui obiect.
Daca instantiez 100 de obiecte derivate dintr-o clasa, codul clasei va fi pastrat in memorie intr-un sigur loc pentru toate cele 100 de obiecte. Daca insa se scriu cod in metodele fiecarui obiect, asa cum procedeaza cei care sustin ca utilizarea claselor nu prezinta nici un avantaj, si ca e la fel de simplu sa faci copy/paste cu codul de la un obiect la altul, atunci codul fiecarui obiect va ocupa locul lui in memorie.

Cata vreme eu pot face o aplicatie noua fara sa scriu o linie de cod in ea, utilizand doar obiecte derivate din clasele proprii, am sa raman la convingerea ca programarea OOP este mai simpla decat cea procedurala.
Are si dezavantajele ei chestia asta. De exemplu, n-am mai scris cod pentru actualizarea unei tabele de cand mi-am actualizat clasele la VFP9, si am inceput sa mai uit unele lucruri. Tot ce mai stiu acum e sa ii dau unui obiect numele clasei si biblioteca in care se gaseste cursoradapterul, mai departe el stie cum sa aduca inregistrarile cerute, sa creeze altele noi, sa le valideze si sa le salveze :).

Daca validarea codului MF printr-o functie pare mai eficienta decat cu ajutorul unui obiect, e datorita faptului ca acel exemplu nu contine verificarea existentei unei conexiuni la net, nici tratarea erorilor si nici parserul care extrage si formateaza datele din pagina html.

Cat despre utilizarea variabilele publice in cele mai diverse locuri, un search pe forum e edificator :).


Daniel Buduru
 6/2/2011 7:12:29 AM
User is offlineDumitru
172 posts
5th


Re: Clasa Custom
 (N/A)
Wow! Daniel, cand te mai odihnesti!? Cred ca muncesti mult, ma inclin!
M-am trezit cu gandul de a mai sterge din ce am scris pentru ca mi s-a parut ca suna a polemica dar acum observ ca este instructiv si pot spune ca mi-a placut ce ai punctat din avantajele folosirii programarii pe obiect.
Am citit mai de mult un articol semnat Grigore Dolghin care m-a convins sa aprofundez programarea pe obiecte in VFP. N-am pretentie ca-s profesor la treaba asta si pana nu se apuca sa ma faca praf vreau sa-i sustin oferta cu cursursurile FoxPro spunandu-le doritorilor ca e si bun pedagog, numai daca dormi nu intelegi ... (nu stiu unde-i postul sa pun link)

  Visual FoxPro  Cod, sintaxa si comenzi  Clasa Custom...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement