|
Limbajul C++ si oop abc-doar
|
səhifə | 1/18 | tarix | 12.09.2018 | ölçüsü | 1,36 Mb. | | #81721 |
|
****************************
* Limbajul C++ si OOP *
* ABC-doar *
****************************
**********************************
* autor RUSU MIRCEA AUREL VALER *
**********************************
********************************************************
* MOTTO: *
* "Tot ceea ce nu putem sa indeplinim singuri *
* ne limiteaza libertatea." *
* C. PAVESE *
********************************************************
De ce C++ ?
Pentru streamuri si pointeri,pentru tabele virtuale,pentru clase
template si obiecte predefinite,pentru fereastra CPU,pentru
multitudinea de formate...sau poate pentru abilitatea de a lucra
cu memoria RAM,cu memoria de operare,cu memoria fixa sau virtuala,
pentru zeci de biblioteci DLL si ActiveX,sau pur si simplu pentru
a comunica cu calculatorul si/sau cu alte persoane.
C O N T I N U T
Generalitati . . . . . . . . . . . . . . . . . . 1
Concepte fundamentale . . . . . . . . . . . . . 3
Elementele limbajului C++ . . . . . . . . . . . 8
Concepte de structurare a limbajului . . . . . .10
Clase si obiecte . . . . . . . . . . . . . . . .14
Clase derivate . . . . . . . . . . . . . . . . 23
Module,file,containere,unitati,biblioteci . . . 29
Biblioteca OWL (Object Windows Library). . . . 57
Prelucrarea mesajelor Windows (dispatch). . . .107
VDBT (Visual Database Tools) . . . . . . . . . 110
Concluzii . . . . . . . . . . . . . . . . . . 120
-1-
GENERALITATI
Lucrarea fundamentala in care este descris limbajul C++ apartine
autorilor Margaret Ellis si Bjarne Stroustrup si se intituleaza:
"Adnotated C++ Reference Manual".Aceasta lucrare reprezinta standardul
de referinta ANSI si este recomandata oricarui programator care doreste
sa utilizeze limbajul C++.O alta lucrare de referinta,este "C++ in a
Nutshell"" scrisa de Ray Lischner pentru O'Reilley,sau "An Introduction
to C++ Programming" scrisa de Bjorn Fahller.
Limbajul C++ nu este "o limba moarta" ci este in permaneta dezvoltare.
Fiecare autor completeaza acest limbaj cu noi biblioteci de functii sau
obiecte.Pentru a garanta compatibititatea totala,este necesar ca toti
acesti autori sa respecte standardul de limbaj,astfel incat noile dez-
voltari ale limabjului sa fie comprehensibile si usor de aplicat.
Limbajul C++ nu a fost proiectat si planificat meticulos ci a aparut
mai mult ca o necesitate,din dorinta de a tine pasul cu dezvoltarea
continua a resurselor hardware.Din acest motiv,aspectul general este
asemenator cu cel al unui morman de haine "second hand" in care fiecare
client isi cauta marimea,culoarea sau pretul care-i convine.Limbajul
are la baza nucleul C,la care s-au adaugat structuri speciale capabile
sa organizeze datele sub forma de module,denumite "obiecte"(sau clase).
In epoca de pionierat,procesorul principal lucra direct cu memoria
inscriptibila de pe disc.Apoi s-a adaugat un modul de memorie de operare
in care datele erau stocate temporar,pentru a putea fi utilizate mult
mai eficient.Acest modul de memorie a inceput de la 8 si 16 biti,apoi
a inceput sa creasca exponential pana la 4M,8M,16M si 32M (megabiti),
pentru ca in etapa actuala sa ajunga pana la 1 GByte.Ca rezultat,pro-
cesorul principal a inceput sa lucreze cu fragmente de memorie din ce
in ce mai mari,fara sa fie necesar sa apeleze memoria de disc.Practic,
programul se incarca o singura data in memoria de operare,apoi se deru-
leaza ori de cate ori este necesar,sau se executa un numar infinit de
operatii.Cu cat fragmentele de memorie sunt mai mari,cu atat viteza de
operare si eficienta sistemului este mai mare.
Pentru a optimiza la maximum eficienta resurselor hardware,este
necesar ca programele sa fie subimpartite in astfel de fragmente de
memorie denumite module.Fiecare astfel de modul poate contine unul sau
mai multe obiecte,un anumit numar de variabile,constante,functii si pro-
ceduri si o serie de linii de comanda prin care organizeaza operatiile din
modul.Atunci cand se utilizeaza mai degraba obiecte,decat variabile simple
pentru a organiza datele,procedeul tehnic se numeste programare orientata
spre obiect,sau OOP (Object Oriented Programmming).Este destul de evident
ca programarea orientata spre obiect ofera viteze de lucru mult mai mari,
pentru volume impresionante de date.
La inceput,se utiliza mai degraba termenul de structuri de date.Aceste
structuri erau fie cele din tipul struct (din C),fie alte forme de orga-
nizare a datelor cum sunt inregistrarile: (record),tabelele (database),
ariile de date sau de biti,campurile de biti(Bitmap),matricele etc.
Deoarece datele structurate pot fi organizate in nenumarate forme si
formate,s-a impus necesitatea realizarii unui standard comun,astfel incat
datele dintr-un program sa fie compatibile cu cele din alte programe.In
caz contrar,fiecare program trebuie sa posede un set propriu de functii
si proceduri prin care opereaza asupra datelor.
-2-
Bjarne Stroustrup este cel care a propus standardul pentru structu-
rile de date de tip class(obiecte) si a depus un efort considerabil pentru
raspandirea acestui standard printre programatori.Un astfel de obiect
deriva din tipul struct prezent in limbajul C,dar organizeaza acest tip
de data dupa un set standardizat de reguli,astfel incat orice obiect
dezvlotat cu ajutorul acestui standard sa fie usor de inteles si
usor de aplicat sau transformat.Pentru a aplica sau pentru a dezvolta
astfel de obiecte,este necesar sa cunoasteti si sa intelegeti aceste
reguli elementare (incapsulare,mostenire,supraincarcare etc.).
Ca rezultat,datele pot fi organizate mult mai riguros,iar programa-
torii cu forme de expresie si experiente diferite,pot utiliza in comun
aceleasi structuri de date.Cel mai cunoscut exemplu in acest sens este
standardul ActiveX,prin care obiectele definite in limbaje diferite pot
fi apelate din programe scrise in alt limbaj (Exemplu: C++,Pascal,Delphi).
Mai mult decat atat,exista tendinta de a grupa obiectele din acelasi
tip in biblioteci specializate,sau de a crea module independente de pro-
gram,care pot fi apelate din orice alt program.Cele mai utilizate sunt
asa numitele file de resurse (aplicatii grafice,icons,file pentru sunet
sau imagine,file pentru interfata cu resursele hardware etc.).Astfel
de file pot fi apelate din limbaje diferite (Exemplu: Delphi exploateaza
un numar mare de resurse editate in C++).Practic,valoarea unui program
sau a unui sistem de operare este determinata tocmai de capacitatea de
a lucra cu orice format de date,in orice limbaj de programare.Sistemele
de operare moderne se numesc din acest motiv "medii de programare".
Limbajul C++ este ideal pentru realizarea unor astfel de "resurse
software" si reprezinta un instrument de mare valoare in bagajul de cu-
nostiinte al oricarui programator.In plus,C++ a contribuit substantial
la dezvoltarea conceptului de programare modulara si face parte incontes-
tabila din istoria si evolutia limbajelor de programare.
Acest manual nu isi propune o prezentare exhaustiva a acestui limbaj,
ci doar prezentarea cat mai explicita (gen abecedar) a principalelor
notiuni necesare pentru intelegerea si aplicarea acestui limbaj.Pentru
detalii,notiuni teoretice,referinte si date de specialitate exista o
numeroasa bibliografie.Cel mai practic este sa apelati la cartile gratuite
oferite on-line prin Internet.Datele din acest manual se bazeaza pe
Borland C++ Version 5.A Copyright @1991,1996 si pe Microsoft Visual C++
Copyright @ 1994-1998 versiunea 6.0,dar orice alta versiune si implemen-
tare este la fel de buna.
Acest manual este dedicat incepatorilor si celor care mai au inca
destule notiuni neclare,sau nesigure...sau doresc sa afle un alt punct
de vedere decat cel din manualele de specialitate.Parcurgerea acestui
manual nu confera drepturi stiintifice sau administrative,nu va asigura
nici un fel de credit si nici nu va asigura succesul in dezvoltarea unei
cariere tehnice.Acest manual are doar rolul de a va facilita intelegerea
si/sau aplicarea altor surse de informatie.
-3-
CONCEPTE FUNDAMENTALE
Limbajul C++ poate fi utilizat pentru a apela functii si proceduri,
prin care se solicita prelucrarea datelor.Operatiile executate asupra
datelor se pot efectua atat "la nivel inferior",adica la nivel de bit sau
byte,cat si "la nivel superior",adica datele sunt structurate si/sau
suprastructurate in variabile si constante,obiecte sau structuri de date,
file si arii de memorie,etc.
Limbajul C++ nu este cel mai fericit punct de pornire pentru incepatori
deoarece complexitatea notiunilor necesare pentru a intelege modul de
structurare a unui program poate determina o serie de confuzii.Acest
manual presupune existenta unor notiuni elementare de programare liniara,
cunoasterea notiunilor lexicale elementare (variabila,identificator,ope-
rator,cuvant cheie etc.).Pentru initiere puteti utiliza orice manual
pentru C si/sau Pascal (vezi si Limbajul C si C++ ABC-doar ).
Dintre elementele definitorii pentru C++,fac parte stream-urile si
pointerii.Prin stream-uri,programatorul C++ poate controla modul in care
circula datele in calculator,iar prin pointeri programatorul C++ are
acces nu numai la datele prelucrate ci si la adresele de memorie la care
sunt stocate datele respective.Aceste elemente,specifice pentru mediul
C si C++ confera programatorului mijloace de exprimare inexistente in
alte limbaje de programare(sau mult mai dificil de apelat).
Prin stream (curent,flux de date) se intelege in termeni simplisti
o secventa de biti sau un influx de informatie.In calculator,datele
circula sub forma de curenti electrici alternativi,in care fiecare osci-
latie se traduce prin valoarea unui bit.Un astfel de curent,poate fi
intrerupt imediat,sau poate fi extrem de lung.In functie de procedurile
utilizate pentru interpretarea unui astfel de curent,se poate face o
analiza "la nivel inferior",caz in care stream-ul este format dintr-o
secventa succesiva de elemente izolate de tip bit sau byte,sau se poate
face o analiza "la nivel superior" in care stream-ul este format din
elemente cu un format oarecare(numere int sau float,siruri de caractere,
arii de date sau matrice etc.).Ca rezultat,exista un numar extrem de
mare de variante de intrerpretare a datelor contiunute intr-un astfel
de curent(stream).In termeni generali,stream-ul este inteles cel mai
frecvent ca o fila virtuala,localizata in memoria de operare,care poate
fi utilizata fie ca sursa,fie ca destinatie,pentru un grup de biti(ordo-
nati in structuri formatate sau sub forma de sir de elemente).Spre deose-
bire de memoria inscriptibila (hard-disc),stream-urile au o valoare tem-
porara (au o existenta efemera) dar pot fi scrise si rescrise ori de cate
ori,fara a apela la unitati specializate si fara a uza capacitatea de
stocare a datelor (stream-urile nu uzeaza hardul).In calculatoarele vechi,
cu porturi exclusiv seriale,la un anumit moment dat putea exista un singur
stream activ si eventual cateva stream-uri aflate "pe linie de asteptare"
in memoria auxiliara.Pentru operatiile de intrare a datelor se utiliza
un stream de intrare denumit istream,iar pentru operatiile de iesire a
datelor se utiliza un stream de iesire denumit ostream (i si o provin de
la input si respectiv output).Nu se puteau executa simultan operatii de
intrare si iesire a datelor.In calculatoarele moderne,exista un numar
oarecare de porturi paralele.Ca rezultat,la un anumit moment dat,pot
coexista mai multe stream-uri de intrare si respectiv de iesire a datelor
-4-
din calculator astfel incat se pot executa simultan mai multe operatii.
Streamurile stau la baza operatiilor de multiprocesare paralela.Pentru
fiecare linie de executie (thread) exista cate un stream independent.
Un stream poate sa nu contina nici o data (stream nul) sau poate sa fie
practic infinit(stream neintrerupt).Practic,in momentul in care se
deschide un stream,se deschide la nivel de hardware un port paralel prin
care se vor putea primi sau transmite datele necesare,in momentul potri-
vit.Numarul acestor porturi este limitat.Din acest motiv,programatorul
trebuie sa tina o evidenta stricta a fiecarui stream utilizat.Fiecare
stream deschis si lasat "pe linie de asteptare" reduce din capacitatea
de procesare a unitatii centrale(pana cand eventual se blocheaza complet).
Programele evoluate,mentin automat evidenta stream-urilor cu ajutorul
unor grile de tip tabel si avertizeaza automat in momentul in care
numarul lor devine prea ridicat.In termeni generali,un stream poate fi
interpretat ca si cand ar fi un fragment de memorie,determinat electric
si existent doar temporar in memoria de operare a calculatorului.Modul
de ordonare si gestionare a stream-urilor face diferenta dintre un pro-
gramator calificat si unul incepator.
In C++,toate operatiile de intrare/iesire a datelor sunt mediate prin
streamuri specializate organizate sub forma de obiecte si definite in
unitati specializate.Astfel,comunicarea cu diferitele unitati de intrare
sau iesire a datelor se poate face extrem de simplu,prin apelarea unor
functii sau proceduri simple.Pentru a introduce date in stream se utili-
zeaza obiectul cin si operatorul >> iar pentru a extrage date din stream
se utilizeaza obiectul cout si operatorul <<.
La prima vedere,pare confuziv,deoarece << si >> sunt operatorii pentru
salt binar "left shift" si "right shift".Operatiile sunt posibile deoarece
in unitatea "iostream" utilizata pentru operatiile de tip I/O cei doi
operatori au fost redfiniti,astfel incat sa execute operatia de insertie
si respectiv extractie,pentru fiecare tip de data acceptat de C++.Ca re-
zultat,operatorii se pot utiliza pentru orice tip de data.Acest procedeu
tehnic se numeste "supraincarcarea operatorilor" si este specific pentru
limbajul C++.Daca se utilizeaza in operatii cu valori binare,cei doi
operatori isi mentin si semnificatia initiala si vor executa operatiile
de salt binar.Asadar,prin supraincarcarea operatorilor se intelege metoda
tehnica prin care un anumit operator poate avea semnificatie diferita in
functie de tipul de data cu care lucreaza.In mod similar,operatorul *
poate executa operatia de inmultire,desemneaza un poiner sau respectiv
citeste valoarea unui pointer,etc...
Prin acest artificiu software,functiile printf() si scanf() din uni-
tatea stdio.h (specifice limbajului C) pot fi inlocuite prin expresiile
cout << si respectiv cin >> care sunt mult mai simplu de apelat.Puteti
utiliza in continuare functiile C (printf(),scanf() etc.) dar este reco-
mandabil sa utilizati unitatea "iostream" si obiectele specializate cout
si cin,deoarece sunt proiectate special pentru arhitectura de 32 de biti.
Stream-urile standard stdin,stdout,stderr,stdaux si sdtprn au fost inlocu-
ite prin obiectele cin,cout,cerr etc.
Trebuie remarcat faptul ca in versiunea C++,obiectele cin si cout se
pot utiliza si cu tipuri de date inexistente in limbajul C,cum ar fi
wide string sau tipurile de date definite de catre utilizator.Prima ope-
ratie in C++ este afisarea unui text pe ecran:
-5-
EXEMPLU: (vezi si cplus1.cpp)
#include
#include
main()
{ cout << "Hello world !";
sleep(5);
return 0;
}
Pentru a edita exemplul,alegeti din File optiunea New,apoi Project,iar
in fereastra New Target introduceti numele proiectului(in loc de proj0000)
si schimbati calea de acces(daca este necesar).Este bine sa creati un
director special in care sa arhivati toate proiectele,sau sa utilizati
cate un director nou pentru fiecare proiect.Apoi utilizati Browse pentru
a selecta calea de acces la directorul dorit.Confirmati cu OK.
C++ va crea automat filele .cpp,.def si .rc necesare pentru proiect.
Filele vor fi afisate in fereastra Project,sub forma de arbore de rami-
ficatie cu nodul principal in fila .exe (proiectul va utiliza cele trei
file pentru a compila si construi fila executabila).
In etapa actuala nu este necesara decat fila .cpp.Selecati cu un click
drept de mouse celelalte doua file si alegeti optiunea Delete node pentru
a sterge cele doua file din proiect.Apoi deschideti fila .cpp cu un
dublu click si editati textul de mai sus.Compilati,construiti proiectul
cu Build all apoi convertiti executabilul cu Make all.
Daca nu a intervenit nici o eroare,puteti executa proiectul cu Run,sau
cu butonul pe care este desenat un trasnet (butonul Run).
La executie,se va afisa o fereastra Dos in care se va afisa textul
"Hello world" timp de 5 secunde.Fereastra Dos nu are autostop,astfel
incat este necesara o functie de intarziere pentru a putea observa mesa-
jul dirijat catre ecran.Pentru unele compilatoare este necesar sa repor-
niti programul inainte de a putea fi executat.In acest caz (daca fereastra
de debug afiseaza zero erori),salvati fila,inchideti programul si apoi
lansati din nou C++ si deschideti fila cu Open.Aceasta operatie este
necesara pentru a realiza "link-ul",adica o cale de acces spre adresa de
memorie la care este arhivata fila.Daca nici in acest caz nu observati
fereastra Dos,micsorati fereastra Windows in care este deschis programul
C++ (este posibil ca fereastra sa se deruleze in spatele ferestrei Win-
dows -care are precedenta),sau verificati in Help definitia exacta pentru
functia Sleep() (in unele versiuni parametrul functiei este exprimat in
secunde in timp ce in versiunile recente este exprimat in milisecunde)
si ajustati valoarea astfel incat sa fie compatibila cu versiunea insta-
lata(Exemplu: in Visual C++ utilizati 5000 de milisecunde).
In continuare,puteti utiliza diferite tipuri de date.Incercati sa
utilizati cout impreuna cu numere de tip int,float,double etc.
Pentru a nu incurca cei doi operatori,puteti utiliza urmatoarea regula:
varful unghiului este orientat spre destinatie iar deschiderea unghiului
este orientata spre sursa.
EXEMPLU : cout << "Hello world !"
sursa este sirul de caractere "Hello world !" iar destinatia este
obiectul stream "cout" (care va dirija fluxul de informatii spre ecran).
In mod similar,streamurile intermediaza orice schimb de date dintre
procesor si uinitatile de executie din calculator.
-6-
EXEMPLU: (vezi si cplus2.cpp)
#include
#include
main()
{
cout << "Introduceti raza cercului: \n";
cout << "Click in fereastra,apoi valoarea si Enter!) \n";
float numar=0;
cin >> numar;
cout << "Aria cercului este: \n";
numar=numar*numar*3.141592;
cout << numar;
cout << "\n\n Apasati orice tasta !";
getch();
return 0;
}
In exemplu de mai sus,se realizeaza deja o comunicare intre procesor,
tastatura si ecran.Pentru a introduce datele de la tastatura este
necesar un click de mouse care sa selecteze ecranul.Dupa ce datele intro-
duse sunt afisate pe ecran,tastati Enter pentru confirmarea lor.
Dostları ilə paylaş: |
|
|