QReferate - referate pentru educatia ta.
Cercetarile noastre - sursa ta de inspiratie! Te ajutam gratuit, documente cu imagini si grafice. Fiecare document sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Documente informatica

Programare modulara in C++. Definirea si utilizarea claselor



Programare modulara in C++. Definirea si utilizarea claselor

Scopul lucrarii: Familiarizarea cu notiunile de baza ale conceptului de clasa.

Desfasurarea lucrarii: Se vor scrie programe in cadrul carora se vor utiliza elementele principale ale definirii si utilizarii claselor:

l    Declaratia unei clase;

l    Obiecte instanta ale unei clase;



l    Membri privati, protejati si membri publici ai unei clase;

l    Functii constructor si functii destructor;

l    Membri statici ai unei clase;

l    Parametrul ascuns this.

Se va utiliza paradigma de abstractizare a datelor, aplicatiile avand fisiere header pentru declararea interfatei si fisiere sursa pentru implementarea comportamentului tipurilor de date dezvoltate, precum si un fisier sursa de utilizare. In cazul in care nu se specifica in mod explicit, se vor identifica si proiecta modulele corespunzatoare pentru rezolvarea fiecarei aplicatii.

Utilizarea notiunilor legate de paradigma programarii pe obiecte

Declaratia unei clase


Clasa este un concept utilizat pentru scrierea programelor, prin care se definesc noi tipuri de date asociate unui set de functii. Notiunea de baza a paradigmei orientate pe obiecte este cea de obiect, o entitate logica, compusa din date si operatii asupra acestora.

'Daca procedurile si functiile sunt verbe, iar blocurile de date sunt substantive, un program procedural este organizat in jurul verbelor, in timp ce un program orientat pe obiecte este organizat in jurul substantivelor' - 'Object-Oriented Analysis with Applications', G.Booch, Addison-Wesley.

Declaratia unei clase presupune specificarea:

l    numelui de clasa;

l    membrii clasei de tip date;

l    functiile membre.

Exemplu:

struct STUDENT


class CLista

Implementarea functiilor membre se poate face fie ca functii inline in cadrul declaratiei clasei ( pentru functiile de mici dimensiuni ), fie in exteriorul clasei (fisierul de implementare a clasei). In cazul functiilor membre implementate in afara declaratiei clasei, trebuie specificat numele clasei urmat de operatorul de rezolutie inaintea numelui functiei. De exemplu, definirea operatiei de creare a listei:
    void CLista
creareLista()

Functiile membre ale unei clase au acces la orice membru (de tip data sau functie) al clasei respective. Accesul la membrii de tip data se face direct, prin numele lor.

In cazul in care o functie nu modifica membrii de tip data, ea se poate declara const: inline static] tip_rezultat nume_functie lista_parametri_formali) const


Modificatorul de acces implicit in cadrul claselor este private.

Observatie: In C++, structurile si uniunile desemneaza tot clase, dar cu diferenta fata de clase ca modificatorul de acces implicit este public.

Obiecte instanta ale unei clase

Pentru accesul la datele publice ale unei clase sau la functiile membre publice, din functii care nu sunt membre, se folosesc operatorii de selectie ( ) si (->), la fel ca in cazul structurilor sau a uniunilor folosite in limbajul C.

Exemplu:

int main()


Membri privati, protejati si membri publici ai unei clase


Pentru controlul accesului la membrii (de tip data sau de tip functie)  unei clase se pot utiliza specificatorii de control ai accesului: public, private si protected; private fiind specificatorul implicit. Membrii privati (date si functii ) sunt accesibili numai functiilor membre si prietene ( friend ) ale clasei. Un membru public poate fi accesat de orice functie din domeniul de declaratie al clasei. Accesul la membrii protected este similar celui la membrii private, dar accesul se poate extinde la functiile membre si prietene ale claselor derivate din clasa respectiva, acest subiect fiind dezvoltat in cadrul platformelor de laborator ce vor urma (mostenirea claselor). 


Functii constructor si functii destructor


Pentru variabilele obisnuite, compilatorul asigura alocarea spatiului de memorie si eventual initializarea explicita cu valori initiale in cadrul declaratiei. In cazul variabilelor dinamice, compilatorul de C++ nu dispune de nici o metoda de initializare si nici operatorul new nu rezolva toate cazurile, ramanand in grija programatorului atribuirea de valori adecvate datelor inainte de utilizare. Acest tip de abordare este de neutilizat in multe situatii in cazul obiectelor.

Pentru crearea, initializarea, si distrugerea obiectelor, in C++ se folosesc functii membre speciale, numite fumctii constructor si functii destructor. Constructorul se apeleaza automat la crearea fiecarui obiect al clasei automatic sau dinamic( cu operatorul new), inclusiv pentru obiecte temporare. Destructorul se apeleaza automat la eliminarea unui obiect, dupa expirarea timpului sau de viata, sau poate fi solicitat prin program, cu operatorul delete.

Functiile constructor si destructor se declara si se definesc similar cu celelalte functii membre, dar se deosebesc de acestea printr-o serie de proprietati specifice:

- numele functiilor constructor si destructor coincide cu numele clasei pentru care au fost definite; destructorii avand numele precedat de caracterul ~;

- nu au declarat nici un tip de return, nici macar void;

- functiile constructor pot avea parametrii, inclusiv parametrii impliciti, si pot fi supradefiniti, in timp ce functiile destructor nu au aceste proprietati;

- in cazul in care o clasa nu dispune de constructori si destructori definiti, compilatorul genereaza automat un constructor implicit, respectiv un destructor.

Exemplu:

class CStudent

// implementarea functiilor constructor si destructor

// functia constructor implicit

CStudent CStudent()

// functia constructor general

CStudent CStudent(char *nume, float medie)

// functia destructor

CStudent ~CStudent()


Membri statici ai unei clase


Asa cum a fost expus si mai sus, fiecare clasa are un set de functii (comportament) si un set de date (atribute). Acestea pot fi de tip private, protected sau public, in functie de acest modificator de acces, ele urmand a fi accesate din interiorul clasei sau din afara ei. Atunci cand se doreste ca unul sau mai multi membri sa fie comuni tuturor obiectelor dintr-o clasa, se poate utiliza specificatorul de acces static.

O data membru de tip static se poate afla atat in zona publica , cat si in zona privata a declaratiei unei clase. O asemenea data va fi creata si initializata intr-un singur loc, in timp ce datele ne-statice vor fi create la fiecare instantiere a clasei.

Exemplu:

class NumarContorizare ;


int main ()


Functiile constructor sunt apelate la fiecare instantiere a unui nou obiect, datele statice nefiind niciodata initializate de constructori, dar pot fi modificate. Pentru exemplu de mai sus in cadrul functiilor constructor variabila contor de tip static, va fi incrementata, folosindu-se pentru determinarea numarului de obiecte instantiate din clasa NumarContorizare la fiecare moment al executiei programului; in functia destructor variabila contor fiind decrementata. Datele statice se pot initializa in cadrul declaratiei lor sau  in afara tuturor functiilor membru, ca variabilele globale.


Exemplu:

// Constructor implicit

NumarContorizare:: NumarContorizare( )

// Constructor general

NumarContorizare:: NumarContorizare(int v )

// Destructor

NumarContorizare:: ~NumarContorizare( )

Limbajul C++ permite si declararea de functii statice. Functiile statice pot folosi doar membrii statice din cadrul clasei, cei care nu sunt statici fiind inaccesibili. Ele nu primesc ca parametru ascuns pointerul this. Functiile declarate static in sectiunea public pot fi apelate fara utilizarea unui obiect al clasei:


Exemplu:

class NumarContorizare ;


void NumarContorizare::InitSuma()

parametrul ascuns this

Functiile membre ale unei clase primesc, pe langa parametrii ce apar in lista formala de parametrii, un parametru ascuns, pointer-ul this, care reprezinta adresa obiectului curent. La apelare, functia este informata asupra identitatii obiectului asupra caruia va actiona prin transferul acestui parametru implicit.

Exemplu:

// Constructor general

NumarContorizare:: NumarContorizare(int v )


Teme propuse:

1. Sa se proiecteze si sa se implementeze o clasa C++ pentru obiecte de tip zaruri. Clasa trebuie sa poata memora numarul de pe fata superioara dupa ultima aruncare a unui zar. In plus, ea trebuie sa contina o functie membru care simuleaza o aruncare a zarului. Aceasta functie genereaza in mod aleator un numar intre 1 si 6, reprezentand fata superioara rezultata in urma aruncarii (pentru acesta se vor utiliza functiile sistem rand si srand, declarate in fisierul header <stdlib.h>).
Utilizand aceasta clasa, sa se simuleze aruncarea a doua zaruri de 9000 de ori consecutiv, iar apoi sa se determine:

l    perechea de numere cu cele mai multe aparitii;

l    perechea de numere cu cele mai multe aparitii consecutive;

l    perechea de numere cu cele mai putine aparitii;

l    frecventa de aparitie a fiecarei fete a unui zar.

2. Sa se modifice implementare pentru problema precedenta, adaungand noi membri, unii dintre ei statici, astfel incat sa permita calculul si afisarea frecventei de aparitie a fiecarei fete a unui zar in interiorul clasei.

3. Sa se proiecteze si sa se implementeze o clasa C++ pentru cartile de joc. O carte de joc este reprezentata de trei elemente: suita, valoare, precum si starea curenta, indicand daca respectiva carte a fost sau nu ridicata de pe masa de joc.
a) Programul va permite crearea si afisarea unui pachet de carti de joc. Se va utiliza un tablou de 52 de carti de joc.
b) Programul va permite simularea jocului de carti numit "21": doi jucatori extrag pe rand carti din pachet si castiga cel care are suma valorilor egala sau cat mai apropiata (dar mai mica) decat 21.

4. Sa se proiecteze si sa se implementeze o clasa C++ pentru bilele utilizate in cadrul extragerilor "Loto". O bila este reprezentata prin numarul asociat si prin starea curenta, indicand daca respectiva bila a fost sau nu extrasa din urna.
Programul va permite simularea unei masini "Loto" pentru jocul 6 din 49. Se va utiliza un tablou de 49 de elemente, precum si o functie care genereaza un numar aleator din multimea . Pentru aceasta se vor utiliza functiile sistem rand si srand, declarate in fisierul header <stdlib.h>.

5. Sa se proiecteze si sa se implementeze o clasa pentru standardul ISBN (International Standard Book Number). Un obiect din aceasta clasa este un numar ISBN unic asociat unei carti sau reviste, format din 10 cifre zecimale grupate in patru secvente de dimensiune variabila:

l    grupul sau identificatorul de tara, pentru identificarea tarii editurii care a publicat cartea sau revista; in mod uzual toate editurile dintr-o anumita tara sau regiune geografica au acelasi numar pentru grup;

l    identificatorul editurii, pentru identificarea editurii in cadrul grupului de edituri;

l    identificatorul de titlu, pentru identificarea titlului unei carti sau reviste editata de o editura;

l    cifra de control, care este intotdeauna formata dintr-o singura cifra.

Spre deosebire de celelalte grupuri, cifra de control poate sa fie atat o cifra zecimala sau litera X, corespunzand numarului 10. Cifra de control se determina ca valoarea modulo 11 din numarul obtinut prin concatenarea tuturor celorlalte 9 cifre. Clasa va avea ca data membru un sir de caractere ce va reprezenta ISBN-ul, utilizand caracterul '-' pentru separarea celor patru grupuri. Ea va trebui sa contina cel putin urmatoarele functii membru:

l    un constructor, in cazul specificarii doar a primelor trei grupuri, cifra de control fiind generata automat;

l    un constructor, pentru cazul in care se specifica complet ISBN-ul, ca sir de 13 caractere;

l    o functie membru pentru validarea cifrei de control;

l    o functie membru pentru afisarea ISBN-ului.

6. Sa se proiecteze si sa se implementeze o clasa pentru reprezentarea cartilor dintr-o biblioteca. Pentru fiecare carte trebuie specificate:

titlul cartii;

autorul (autorii);

editura;

numarul ISBN (sir de caractere);

anul aparitiei;

pretul.

Programul va permite crearea unui tablou cu cartile dintr-o biblioteca si posibilitatea de cautare a unor carti in functie de: titlu, editura, sau ISBN. Functiile clasei vor fi scrise astfel incat sa permita operatiile mentionate mai sus.

7. Sa se proiecteze si sa se implementeze o clasa pentru gestionarea datelor calendaristice. O data calendaristica este un sir de caractere de forma <zi>/<luna>/<an> si poate fi transformata intr-un intreg reprezentand numarul zilei respective din anul curent (ex.: data "1/februarie/2002" are asociat numarul 32). Sa se scrie functii membru specifice pentru urmatoarele operatii:

l    crearea unei date calendaristice plecand de la sirul de caractere aferent;

l    crearea unei date calendaristice plecand de la numarul asociat zilei;

l    verificarea validitatii unei date calendaristice;

l    modificarea zilei, lunii sau a anului unei date calendaristice;

l    accesul la ziua, luna sau anul unei date calendaristice;

l    afisarea unei zile calendaristice.

Programul va permite crearea, consultarea si modificarea unei agende electronice cu activitatile dintr-o saptamana. Se vor specifica numai datele calendaristice, nu si activitatile asociate.  



Nu se poate descarca referatul
Acest document nu se poate descarca

E posibil sa te intereseze alte documente despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site.
{ Home } { Contact } { Termeni si conditii }