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  Clase - VCX si PRG  Clasa cu foarte...
 Clasa cu foarte multe metode. Pro si contra.
 
 10/13/2005 11:56:46 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Clasa cu foarte multe metode. Pro si contra.
 (Romania) Modified By Grigore Dolghin  on 10/13/2005 12:12:07 PM)

Salut

Well.... this one is kinda tough. E o problema de design: vreau sa fac un "ceva" care sa contina toate declaratiile functiilor API de care am nevoie. Ca ordin de marime, sunt vreo 300 acum, dar este posibil sa creasca. (Chiar foarte posibil, as zice).

Acest "ceva" va fi folosit in toate aplicatiile. Fiecare aplicatie cu hachitzele ei; unele vor ceva, altele altceva, s.a.m.d. Oricum, o baza de declaratii API comuna exista. Pentru ca eu am foarte multe definitii, din care folosesc doar o parte, in cel mai bun caz, am hotarat sa imi fac apeluri distincte pentru fiecare functie API in parte. N-are sens, dupa parerea mea, sa execut 300 de DECLARE cand eu folosesc 5.

Bun. Un astfel de apel arata asa:

FUNCTION _GetSysColor
*==============================================================================
* Program/Metoda...: _GetSysColor
* Autor............: Grigore Dolghin
* Telefon..........: +40-744-379-089 (GMT +2)
* E-mail...........:
* Site web.........:
* Copyright........: © 1992 - 2004 Class Software
* Fisier Include...: _base.h
* Scop.............: Functia returneaza valoarea numerica a culorii
* .................:    diferitelor elemente ale sistemului.
* Parametri........: - tnIndex - Integer, intre 0 si 28, functie de OS.
* Variabile........: - pnRetVal - de tip numeric.
* Apelat din.......:
* Apeleaza pe......:
* Val. returnata...: De tip numeric - culoarea elementului specificat.
* Note.............: Exemplu:
* .................:  nColor = _GetSysColor(COLOR_WINDOW)
* De facut.........: De testat sistemul de operare, pentru a nu permite apelul
* .................:   functiei cu parametri incorecti.
* Jurnal modificari: Creare: 02/07/04 08:04:35 AM
*==============================================================================
LPARAMETERS tnIndex
PRIVATE pnRetVal *!* Testez daca primesc un parametru corespunzator ca tip de date. IF VARTYPE(tnIndex) = T_NUMERIC DECLARE INTEGER GetSysColor IN user32 ; INTEGER tnIndex pnRetVal = GetSysColor(tnIndex) CLEAR DLLS GetSysColor ELSE *!* Daca nu, returnez o conventie de notatie pentru parametri eronati. pnRetVal = RETURN_FAILURE ENDIF ! (VARTYPE(tnIndex) ... RETURN pnRetVal

Dupa cum vedeti, fiecare declaratie API este "imbracata" in propria ei functie, care o declara, o foloseste, si o scoate din memorie (cu Clear DLLS). Am facut teste de performanta, si iata la ce concluzie am ajuns: CLEAR DLLS se executa aproape instantaneu. Declare-ul de mai sus, executat de 10.000 de ori in bucla, dureaza 1.57 secunde pe calculatorul meu. Daca introduc si CLEAR DLLS,  timpul total creste la 1.67 secunde. Deci 10000 de CLEAR DLLS dureaza 0.1 secunde, ceea ce inseamna ca unul dureaza cam 0.000001 secunde. Asa de putin incat nici nu merita sa-mi bat capul. E bine.

Ce-am obtinut pana acum: pot sa am oricate declaratii, se vor incarca in memorie numai alea folosite efectiv, si numai pe perioada cat sunt folosite.

Ok..... si acum ajung la problema: cum stochez codul asta? Initial m-am gandit la un PRG mare, cu o gramada de functii in el. Are avantajul ca e subtire si usor de intretinut. Apoi am luat in calcul si varianta unui VCX, in care fiecare declaratie sa fie o metoda. Avantajul este ca se poate intretine progamatic mult mai usor decat un prg.

Chestia asta ar trebui sa fie una dintre clasele din base layer-ul framework-ului meu. Cand incep o noua aplicatie, right click, builder si are loc urmatorul dialog: "Are api?" "da, are" "Ok, asta-i lista de api-uri pe care le stiu eu. Ia alege tu de-aici" "pai... asta, asta, asta, aia, si ailalta" "Ok. stai o secunda". Si imi creeaza o clasa in application layer, in care adauga cu ReadMethod si WriteMethod tot codul de care am nevoie. Daca mai tarziu imi dau seama ca imi mai trebuie vreun api, right click, builder, "uite, pe astea le ai deja. Mai vrei?" "pai...da, mai vreau" "ia alege" "pai... asta" "Ok, stai o secunda". Pac, si ma trezesc cu codul la mine in aplicatie.

Cu alte cuvinte, pachetul asta este un depozit de declaratii API. Builderul doar ia de-acolo si pune dincolo. Asta este greu de facut cu un prg (nu poti sa faci builder pe un prg. Poti in schimb sa-ti faci un builder care deschide prg-ul ala, face parsing pe text si gaseste ce-ti trebuie; dar oricum este mult mai greu de facut decat cu clase VCX).

Dezavantajul major al claselor VCX este ca au o limita la _memberdata. 8k. Dupa parerea mea, limita aia e o prostie, da' hey, asta-s eu, ok? :) Oricum, tare mi-ar place sa pot face codul asa: _Screen.oFw.ApiMgr.GetSysColor(AppWorkSpace). Arata intr-un fel, nenica :) A doua chestie e ca o clasa cu foarte multe metode este cam hmmm... ciudata.

Nu stiu ce sa zic. Voi ce-ati alege? Cum ati face treaba asta?


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 10/13/2005 1:10:07 PM
User is offlineanonymous
0 posts


Re: Clasa cu foarte multe metode. Pro si contra.
 (Romania)
Apropo de functii API spuneai tu la un moment dat de un programel cu o colectie de functii API. Ai renuntat la idee?
 10/13/2005 1:16:47 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Clasa cu foarte multe metode. Pro si contra.
 (Romania)
Programelul e in Downloads, are si un thread asociat in Win32API, da' dupa entuziasmul cu care a fost primit (a se citi zero), ma gandesc ca nu trebuie nimanui. Si daca nu trebuie, atunci n-am de gand sa bag 60-70 de ore in el. Prefer sa investesc orele alea intr-un proiect care aduce bani.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 10/13/2005 1:23:22 PM
User is offlineanonymous
0 posts


Re: Clasa cu foarte multe metode. Pro si contra.
 (Romania)
Mie mi se pare ca arata foarte bine, doar ca nu sunt prea multe functii, dar idee e super.
 10/13/2005 1:33:43 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Clasa cu foarte multe metode. Pro si contra.
 (Romania)
Ok, hai sa nu divagam. Eu astept un raspuns la problema din primul mesaj si as dori sa nu schimbam subiectul.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 10/13/2005 2:22:06 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa cu foarte multe metode. Pro si contra.
 (Romania) Modified By Dorin Vasilescu  on 10/13/2005 2:23:03 PM)
 Grigore Dolghin wrote

Dezavantajul major al claselor VCX este ca au o limita la _memberdata. 8k. Dupa parerea mea, limita aia e o prostie, da' hey, asta-s eu, ok? :) Oricum, tare mi-ar place sa pot face codul asa: _Screen.oFw.ApiMgr.GetSysColor(AppWorkSpace). Arata intr-un fel, nenica :) A doua chestie e ca o clasa cu foarte multe metode este cam hmmm... ciudata.

Nu stiu ce sa zic. Voi ce-ati alege? Cum ati face treaba asta?



Aş împărţi pe clase pe funcţionalitate : Bitmap, Color , DC, FileSystem, GDI, GDIPlus, ...

Fiecare ar fi o clasă distinctă (în acelaşi VCX sau separate)
ApiMgr ar fi o colectie de referinte la clasele de mai sus, pe care le instaţiază în Init()
Şi atunci s-ar putea:

_Screen.oFw.ApiMgr.Color.GetSysColor(AppWorkSpace)

 10/13/2005 4:29:31 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Clasa cu foarte multe metode. Pro si contra.
 (Romania)
Excelent, Dorin. E o idee foarte buna. Multumesc.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 10/13/2005 6:44:58 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Clasa cu foarte multe metode. Pro si contra.
 (Romania)

I-am aratat raspunsul tau lui Sorin Stegaru. Replica lui: "In pricipiu, sunt de acord cu Dorin. Dar daca duci mai departe chestia asta, ajungi la ideea de Namespace... si daca te utiti la ce posibilitati avem acum cu API atunci o sa-ti dai seama ca e cam acelasi lucru, functiile API fiind grupate in DLL uri (user, kernel, system, ....). Asa ca ce-ai face tu le-ai organiza altfel (mai bine?) si le-ai da o forma mai "obiectuala".

Cam are dreptate. Incepe sa semene a NameSpace. :)


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 10/13/2005 7:21:21 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa cu foarte multe metode. Pro si contra.
 (N/A)
 Grigore Dolghin wrote

Cam are dreptate. Incepe sa semene a NameSpace. :)


Si e rau ?
Daca te ajuta sa ajungi mai repede la ce doresti ...
 10/13/2005 7:28:10 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Clasa cu foarte multe metode. Pro si contra.
 (Romania)
Nu e deloc rau - n-am vrut sa se inteleaga asta. Din contra, chiar imi place ideea.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 12/1/2006 3:34:12 PM
User is offlineedyshor
1450 posts
1st




Re: Clasa cu foarte multe metode. Pro si contra.
 (Romania)
Si-ai facut-o ?! Will you share ?! :D
 
Apropo de aplicatia de care am vb-it in Win32Api .. m-am oferit sa te ajut, chestia ca nu am calc acasa, si odata ce-mi schimb serviciu (prin ianuarie) se anunta un viitor mai luminos pentru mine si o sa pot sa ma implic in mai multe ..
Ideea pe care am expuso acolo e ceva la care am mai rumegat si are influente din msdn, apiviewer si cateva programele peste care am dat de-a lungul timpului, pus cateva facilitati, am mai invatat cate ceva intre timp si chiar sunt entuziasmat la perspectiva, poate usor usor o sa extindem si o sa trecem forumul (sau chiar mai multe sectiuni din site) si intr-o versiune offline, cu backup, search si mai multe :D
O sa fie fain ;)
O sugestie, deschizi o sectiune (forum) pentru aplicatii in colaborare (free/open source) ? Lucram si la asta (daca va intereseaza) si mai era vorba de un programel .. ProDatum .. de care nu am mai auzit nimica
  Visual FoxPro  Clase - VCX si PRG  Clasa cu foarte...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement