Limbajul C++ si oop abc-doar



Yüklə 1,36 Mb.
səhifə17/18
tarix12.09.2018
ölçüsü1,36 Mb.
#81721
1   ...   10   11   12   13   14   15   16   17   18

trei parametri distincti.

Cu cat utilizati mai putine mesaje si mai putine functii de raspuns,cu

atat aplicatia se va executa mai simplu si mai rapid.Cu cat creste numarul

de obiecte,si respectiv numarul de mesaje procesate,cu atat procesorul nu

va mai putea face fata si va trebui ca mesajele sa fie arhivate in stiva

de asteptare,de unde vor fi prelucrate succesiv.

In cazul procesoarelor cu linii paralele de procesare,sau a procesoare-

lor paralele,se pot prelucra simultan mai multe mesaje,sau se poate dedica

un procesor specializat pentru fiecare obiect din aplicatie.Acest gen de

operatii se desfasoara in servere,sau in centralele mari de distributie,

pentru a permite accesul simultan la o anumita arhiva de date (Exemplu:

router-ele pentru reteaua Internet).

Pentru fiecare aplicatie,planificati cu atentie fiecare operatie si

fiecare mesaj exploatat,astfel incat sa evitati operatiile inutile.Pe cat

posibil,evitati "obiectele decorative","artificiile" si "mesajele de aver-

tizare de tip reclama,etc.Cu cat un program este mai economic si mai efi-

cient,cu atat se va bucura de mai multi utilizatori.Evitati sa editati

functii de raspuns care nu vor fi utilizate in program ("de rezerva").


-110-

VDBT (Visual Database Tools)
Versiunile mai recente ale Borland C++ includ si biblioteca Vdbt,care

include file destinate pentru utilizarea datelor organizate tabelar sub

forma de baza de date.Pentru acest scop,au fost realizate o serie de

componente software,organizate sub forma de obiecte vizuale.Constructia

acestor obiecte se bazeaza pe arhitectura de tip COM (Component Object

Model) care sta la baza arhitecturii de tip OLE (Object Link Embadded).

Ca rezultat,aceste componente pot fi utilizate pe platforme diferite.

Pentru vizualizarea acestor obiecte,cea mai clara implementare este cea

realizata de platforma Delphi,unde componentele sunt afisate vizual si

pot fi incluse in aplicatie cu ajutorul indicatorului mouse.In Borland C++

aceste obiecte sunt definite in filele cuprinse in biblioteca Vdbt si

trebuiesc introduse explicit in program.Mai mult,obiectele de acest tip

nu au constructorul si destructorul clar definit,astfel incat nu pot fi

incluse in program decat cu ajutorul unor structuri denumite SourcePool.

Source Pools sunt structuri de date in care unul sau mai multe noduri

din program sunt excluse de la etapa de "constructie".Astfel nu se va

apela constructorul pentru obiectele declarate in aceste structuri,iar

componentele de tip Visual Database Tools nu vor mai returna un mesaj de

eroare.Structurile de tip SourcePoola au si alte aplicatii practice.Se

pot utiliza pentru a partaja o fila de resurse intre mai multe aplicatii,

sau pentru a realiza mai multe versiuni ale aceleiasi aplicatii ( de

exemplu o versiune in format de 16 biti si o versune in format de 32 de

biti).SourcePools se pot utiliza si pentru a partaja aceleasi file de

antet (headers) sau pentru a utiliza in comun aceleasi optiuni de setare a

proiectului (daca proiectul contine mai multe executabile distincte).

Pentru a introduce in proiect o astfel de structura,alegeti din meniul

Project optiunea New Target iar in caseta Type alegeti SourcePool.In

caseta Name introduceti numele dorit,apoi confirmati cu OK.In proiectul

deschis se va realiza un nou nod de genul "Numele [SourcePool]".

Exemplu: ( vezi si OWL_ABC / vdbt1 )

Deschideti un director nou cu numele vdbt1.Salvati in acest director o

fila .cpp oarecare (de la un program anterior).Apoi din meniul New alegeti

Project si deschideti un nou proiect pe o platforma de 32 de biti (in

caseta Platform alegeti Win32).Eliminati din proiect filele .rc si .def,

apoi compilati si construiti proiectul.Executati proiectul.

Pana in acest moment,este un proiect asemanator cu toate celelalte.In

continuare,alegeti din meniul Project optiunea New target si introduceti

Name = Sursa1 si Type = SourcePool.Confirmati cu OK.In continuare,pentru

a adauga file la nodul creat apasati tasta Insert,sau executati un click

de mouse drept si alegeti Add node.Adaugati fila de tip .cpp din proiect.

Repetati operatiile de mai sus si realizati inca un nod de tip Source-

Pool denumit sss1,la care adaugati un anumit numar de file.

Pentru a realiza si o varianta pe 16 biti a proiectului,puteti sa

alegeti din nou din File,New si Project,apoi selectati pentru platforma

optiunea Windows 3.x(16) si acelasi nume cu proiectul realizat pe 32 de

biti,apoi confirmati cu OK (sau utilizati un nume diferit). Adaugati si

la acest nod fila de tip .cpp.In acest moment,proiectul d-voastra va

contine doua noduri executabile de tip .exe si doua noduri de tip

SourcePool,care contin cate o versiune a filei .cpp.


-111-

Pentru a observa avantajele nodului SourcePool deschideti una dintre

filele .cpp si efectuati o serie de modificari (actualizari).Inchideti

fila si puteti constata ca toate filele .cpp au fost actualizate.Din

acest motiv,nodurile de tip SourcePool se prefera atunci cand mai multe

aplicatii partajeaza aceeasi fila de resurse sau de cod.Daca proiectul

contine executabile diferite,actualizarea va interesa doar versiunile de

proiect care au acelasi nume.Acest gen de implementare se utilizeaza

mai ales in etapa de programare a unei aplicatii,cand se utilizeza

simultan una sau mai multe variante ale proiectului,sau etape de proiect

aflate in diferite stadii de dezvoltare.

Dupa construirea unui nod de tip SourcePool,acesta poate fi inclus in

proiect la orice nivel,cu o operatie simpla de tip Drag and Drop.Tineti

apasata tasta Alt,alegeti nodul de tip SourcePool dorit si apoi trageti

cu butonul mouse apasat pana la nivelul de program in care doriti sa

includeti nodul respectiv (vezi OWL+ABC /vdbt2 ).De exemplu,in proiectul

realizat in directorul vdbt1,puteti elimina fila de tip .cpp din nodul

executabil si apoi puteti sa includeti la acest nivel intregul nod de

tip SourcePool salvat in Sursa1.Construiti apoi proiectul cu Make si

executati aplicatia.

Acest gen de implementare,este necesar pentru toate componentele de

tip Tool,si in toate situatiile in care fila sursa contine declaratia

obiectelor dar nu include si constructorul sau destructorul implicit.

Pentru exemplificarea nodului de tip SourcePool studiati si exemplul

Srcpool din Examples/IDE.

Pentru a edita o aplicatie simplista,care utilizeaza o baza de date,

editati urmatoarea fila .cpp.

#include
int PASCAL WinMain( HINSTANCE,HINSTANCE,LPSTR,int)

{

PTTable table = new TTable;

table -> DatabaseName = string( "DivePlan" );

table -> TableName = string( "divestok.db" );

table -> Open();

int count = table->FieldCount;

int i; for (i = 0; i < count; i++)

{ MessageBox( 0,table->Fields[i]-AsString->c_str(),

table->Fields[i]-FieldName->c_str(),MB_OK); };

if (table) delete table;

return 0;

}

Salvati fila intr-un director nou (vdbt3).Construiti proiectul cu New si

Project (bifati si Controls: VBX,respectiv Libraries: OLE).Eliminati

din proiect fila .def si fila .cpp,apoi adaugati un nod de tip SourcePool.

Adaugati la nodul de tip Sourcepool fila .cpp de mai sus,apoi adaugati

din biblioteca Lib si filele ajutatoare bdtof.lib si bdtcfi.lib.Apoi

alegeti fila executabila .exe si cu un click drept de mouse selectati

View options hierarchy.In caseta,alegeti nodul .ide,apasati butonul Edit

iar pentru optiunea Make selectati Autodependencies = None.Confirmati cu

Ok apoi cu Close si construiti proiectul cu Make.Executati aplicatia si

observati primele inregistrari din tabelul "divestoc.db"(din SAMPLEDB).


-112-

Exemplul a fost dezvoltat prin simplificarea exemplului Calcfld din

Examples/Vdbt/Calcfld.Baza de date este inclusa in directorul Sampledb.

Acest exemplu contine cea mai simpla operatie posibila.In exemplu,se

declara si se utilizeaza un obiect de tip TTable,pentru a accesa baza

de date,apoi se utilizeaza o bucla de repetitie pentru a afisa datele

din fiecare inregistrare cu ajutorul unui mesaj de tip MessageBox.

Pentru a studia metodele si proprietatile fiecarui component visual,

utilizati in Help optiunea Data-access componets pentru obiectele uti-

lizate la accesare datelor (TBatchMove,TDatabase,TDataSource,TQuery,

TStoredProc si tTable) si respectiv Data Aware components pentru cele

utilizate la prezentarea si/sau actualizarea datelor(TDBCheckBox,TDBEdit,

TDBComboBox,TDBGrid,TDBImage,TDBListBox,TDBLookupCombo,TDBLookupList,

TDBMemo,TDBNavigator,TDBRadioGroup,TDBText).

Pentru utilizatorii de Delphi,selectarea si utilizarea acestor compo-

nente este mult mai usor de realizat,deoarece se poate face oricand un

control vizual direct (proiectati aplicatia in Delphi si apoi execu-

tati operatiile necesare pentru implementarea in C++).Bazele de date

pot fi utilizate in comun de catre aplicatii scrise in Delphi,C++ sau

respectiv in programele sursa (Fox,VisualFox,Excel etc.).

Biblioteca Vdbt nu este destinata pentru a realiza programe complexe

de tip baza de date ci doar pentru a putea realiza legatura dintre apli-

catiile de tip C++ si o baza de date oarecare.In special,se pot realiza

operatii de preluare,prelucrare si actualizare automata a datelor.Pentru

operatii complexe cu si asupra bazelor de date,se vor prefera intotdeauna

programele specializate (Borland C++ nu are tampoane de memorie proiec-

tate special pentru operatiile cu baze mari de date si exista riscul de

a suprascrie bazele de date cu informatii incorecte(tampoane suprascrise).

Componentele vdbt sunt de tip Vbx si pot fi vizualizate cu ajutorul

editorului de resurse.Pentru a utiliza aceste componente vizuale este

necesara o clasa de tip TDialog si o resursa (de tip .rc) care sa includa

si o resursa de tip DIALOG.Componentele de tip "Data access" pot fi

vizualizate doar in etapa de editare a resursei in timp ce componentele

de tip "Data aware" vor fi prezente si in timpul executiei programului.

Pentru a putea prelua si afisa datele stocate intr-o baza de date este

necesar sa se inlantuiasca cel putin trei componente vizuale: unul de tip

"data access" (TTable sau TQuery),unul de tip "Data aware" (TDBGrid,sau

TDBEDit...etc) si un component de legatura,denumit TDataSource.

Pentru a efectua legaturile necesare dintre obiecte,se poate edita

un algoritm in care se precizeaza proprietatile fiecarui obiect,sau se

poate utiliza obiectul grafic denumit "Property Inspector" care a fost

special realizat pentru acest scop (este similar cu Obiect Inspector din

Delphi).

Un exemplu destul de simplu se gaseste arhivat in Examples\Vdbt\Animals.

Construiti si executati proiectul,apoi deschideti fila IDE cu optiunea

Project/Open.Proiectul contine doua file executabile: animalssrc.exe si

un nod de tip SourcePool denumit "animalssrc".

Selectati fila beastwin.rc si executati un dublu click,apoi executati

un click de mouse pe semnul "+" care precede directorul beastwin.rc.

Din directorul beastwin.rc se va afisa fila resursa denumita :

DIALOG:IDD_ANIMALS(1)

Executati un click de mouse cu butonul drept,pe aceasta fila si alegeti


-113-

optiunea View.Se va deschide o fereastra denumita IDD_ANIMALS in care

sunt prezentate toate componentele vizuale ce formeaza resursa (la fel

ca si fereastra Form din Delphi).

Observati cele doua componente de tip "Data acces" suprapuse peste

obiectul TNavigator.Executati un click de mouse drept pe fiecare dintre

ele si alegeti optiunea Properties.Se va afisa fereastra denumita

Property Inspector in care sunt prezentate toate proprietatile obiectului

si modul in care sunt setate.

De exemplu,pentru obiectul TTable1 puteti observa urmatoarele proprie-

tati: DatabaseName = diveplan,TableName = ANIMALS.DBF si Active = True.

Acesta este obiectul prin care se acceseaza o baza de date oarecare.

Apoi executati un click drept de mouse pe obiectul TDataSource1 si

observati ca proprietatea DataSet este setata TTable1,adica obiectul

TDataSource are ca sursa de date obiectul TTable.

Toate celelalte obiecte vizuale sunt conectate la sursa de date prin

intermediul obiectului TDataSource.De exemplu,executati un click drept

pe obiectul grafic de tip TDBImage (desenul cu un peste exotic) si

alegeti Properties.Observati proprietatea DataSource = TDataSource1.

In mod similar,daca executati un click pe obiectul TDBText6 (cel care

contine textul "Angel Fish"),in Property Inspector puteti identifica

proprietatea DataSource=TDataSource1 si proprietatea DataField = NAME.

Pentru a deschide pe rand mai multe obiecte,puteti utiliza caseta de

dialog de tip TEdit,asociata cu obiectul Property Inspector(executati un

click pe butonul de scroll si alegeti obiectul dorit).Toate obiectele

legate de baza de date vor avea proprietatea DataSource = TDataSource1.

Daca doriti sa preluati si sa afisati date din mai multe baze de date

simultan,este necesar sa utilizati cate un obiect de tip TTable si cate

un obiect de tip TDataSource,pentru fiecare baza de date distincta.Apoi

obiectele care prezinta datele vor fi legate de sursa datelor prin pro-

prietatea DataSource si prin obiectrul TDataSource corespunzator.

Pentru a edita o astfel de fila de resurse,cel mai simplu este sa

modificati o fila de resurse gata existenta (vezi si exemplul vdbt4).

De exemplu,pentru a modifica resursa beastwin.rc,inchideti fereastra

IDD_ANIMALS,apoi executati din nou un click de mouse drept pe fila

DIALOG: IDD_ANIMALS(1) si alegeti optiunea Edit.Se va deschide o fereastra

similara,denumita tot IDD_ANIMALS ,dar de aceasta data,toate proprietatile

obiectelor vor fi editabile.Executati un click drept de mouse in fereastra

IDD_ANIMALS (in zona alba) si selectati optiunile: Control Palette,Tool

Palette si Property Inspector.

Optiunea Control Palette va adauga la meniul principal inca o bara de

meniu in care sunt incluse toate obiectele grafice utilizabile intr-o

resursa de tip DIALOG.Obiectele grafice sunt grupate in functie de tipul

lor in urmatoarele categorii: Standard,Common,BWCC,Data Access,Data Aware

si Custom.Grupele Standard,Common si BWCC contin obiectele Windows de tip

OWL prezentate in capitolul anterior.Se utilizeaza la fel,dar se poate

utiliza Property Inspector pentru setarea proprietatilor.

Grupele DataAccess si Data Aware contin componentele vizuale de tip

vdbt utilizate pentru operatii cu si asupra bazelor de date.

Pentru a a dauga in fila resursa un astfel de obiect,selectati obiectul

dorit,apoi apasati butonul cu sageata alba (denumit Select) si executati

un click de mouse in fereastra,in locul dorit.


-114-

De exemplu,pentru a adauga un obiect de tip TDBGrid in care sa fie

afisate toate datele din baza de date,executati urmatoarele operatii:

1.Selectati si extindeti fereastra Form5 (cea cu puncte mici)

2.Alegeti grupul de obiecte DataAware.

3.Selectati butonul SSView (ultimul).

4.Apasati si butonul Select (cel cu sageata alba).

5.Executati un click de mouse in locul dorit.

6.Selectati noul obiect.

7.Extindeti obiectul la dimensiunea dorita (cu mouse apsat).

8.Executati un click drept de mouse pe obiect si alegeti Properties.

9.In Property Inspector alegeti DataSource si apasati sageata

butonului de derulare (scroll) si alegeti TDataSource1.

10.Inchideti Property Inspector.

11.Inchideti fereastra IDD_ANIMALS.

12.Deschideti fila beastwin.rh si verificati daca obiectul

adaugat a fost adaugat si in lista de definitii (Exemplu:

#define IDC_VBCONTROLS 14 114 )

Pentru siguranta,comparati cu identificatorul utilizat in definitia

obiectului(in fereastra din dreapta verificati linia:

CONTROL "VTSSONLY.VBX;SSView;Sheet1,IDC_VBCONTROL14,"VBControl".....

In mod normal,daca proiectul este construit,fila se va actualiza

automat.In caz contrar,identificatorul trebuie specificat manual.

Fie editati fila beastwin.rh,fie editati resursa (cu optiunea Edit

Text),fie adaugati in fila .cpp #define IDC_VBCONTROL14 114.

13.Inchideti fereastra filei de resurse(confirmati schimbarile).

14.Reconstruiti si executati obiectul.

Pentru siguranta,este bine sa pastrati o copie a filei beastwin.rc

originale(copia de siguranta),inainte de a efectua modificarile de mai

sus.

In mod similar,se poate aduga orice alt component.Verificati insa cu

atentie codul de identificare al obiectului,astfel incat sa fie definit

in fila .cpp inainte de a fi apelat prin apelul filei de resurse.

Daca doriti,puteti sa stergeti toate componentele si sa reeditati

complet fila de resurse.

Pentru a selecta o alta baza de date,se procedeaza astfel:

In Property Inspector se selecteaza obiectul TTable1 si se seteaza pro-

prietatea Active = False,apoi se alege baza de date dorita in proprietatea

DatabaseName,iar apoi se alege tabelul dorit,setand proprietatea TableName.

In final se reseteaza proprietatea Active = True.Din acest moment,sursa de

date va fi tabelul setat in TableName si toate obiectele inlantuite cu

ajutorul obiectului TDataSource vor fi orientate spre aceasta sursa de

date.Ca rezultat,toate obiectele conectate cu aceasta sursa de date vor

trebui resetate pentru proprietatea DataField (exceptie fac situatiile in

care noua baza de date contine aceleasi campuri de date-Exemplu: in cazul

in care o baza de date este actualizata cu o baza de date structurata

identic,dar cu date noi).

Daca bazele de date contin aceleasi campuri,cu aceleasi denumiri,se pot

utiliza in paralel.Astfel,se va conecta cate un obiect de tip TTable si

cate un obiect de tip TDataSource pentru fiecare baza de date.Pentru a

schimba interactiv baza de date activa,in obiectele de prezentare a

datelor se va schimba doar proprietatea DataSource.

-115-

Dupa ce resursa de tip DIALOG are aspectul corespunzator,poate fi

apelata in cadrul constructorului unui obiect de tip TDialog,pentru a

fi inclusa in program.Obiectele de tip TDialog pot fi derivate din clasa

TDialog,definita in fila "owl/dialog.h".Clasa TDialog este derivata din

clasa TWindow,astfel incat poate fi utilizata la fel ca orice alta

fereastra,dar adauga si o serie de metode proprii(Create,DoCreate,Execute,

DoExecute,Destroy,Reposition.etc.).

EXEMPLU: ( vezi si OWL_ABC / vdbt5 )

Deschideti un proiect si editati urmatoarea fila .cpp.

#include

#include

#include

#include

#define IDD_ABORTDIALOG 32599

class Aplicatie1 : public TApplication {

public: Aplicatie1() : TApplication() {};

void InitMainWindow(); };

void Aplicatie1::InitMainWindow() {

SetMainWindow(new TFrameWindow(0,"Test",

new TDialog(0,IDD_ABORTDIALOG),true)); };

int OwlMain(int,char* []) { return Aplicatie1().Run(); };

Eliminati din proiect fila .DEF care nu este necesara si inlocuiti fila

de resurse cu fila "owl.printer.rc" (din INCLUDE/OWL ).

Compilati,construiti si executati proiectul (atentie ca fila .cpp si

fila .rc sa fie denumite la fel ca fila .ide).

Yüklə 1,36 Mb.

Dostları ilə paylaş:
1   ...   10   11   12   13   14   15   16   17   18




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin