C++

Why C++

Inregistrarea si prezentarea sunt disponibile pe http://channel9.msdn.com/posts/C-and-Beyond-2011-Herb-Sutter-Why-C

Program examene restante

  • Anul 3 si an suplimentar, 23 iunie 2017, ora 7:30, 2001A si 2001D
  • Anul 3 si an suplimentar, 3 iulie 2017, ora 7:30, 2001A si 2001D
  • Anul 2 (doar anul 2), 10 iulie 2017, ora 7:30, 2001A si 2001D

Refacere proiect pentru examenul restant

Studentii care nu au predat proiectul pe parcursul semestrului I sau nu au obtinut punctajul maxim, pot reface aceasta activitate in urmatoare conditii:

  • sa contacteze cadrul didactic de la seminar in vederea confirmarii acestei activitati
  • sa verifice cerintele pentru proiect
  • sa stabileasca impreuna cu cadrul didactic de la seminat modalitatea predarii proiectului

Tema propusa pentru proiect

In vederea informatizarii unui atelier auto trebuie realizat un proiect C++ (consola) care sa permita realizarea unui numar minimal de functii

  • realizarea si urmarirea fisei de service pentru un automobil (reparatii necesare, stadiul acestora si costuri)
  • gestiunea clienti
  • gestiune date mecanici

Pentru realizarea acestui proiect studentii trebuie sa aleaga minim 3 clase din contextul enuntat pentru care sa se implementeze:

  • Definirea a minim 5 clase care au legatura cu cerinta proiectului
  • Fiecare clasa trebuie sa contina minim un camp definit dinamic gestionat printr-un pointer si minim un vector definit static; trebuie abordate atat siruri de caractere (char*) cat si vectori de valori numerice
  • In solutie trebuie sa existe minin o clasa ce defineste un camp static si minim o clasa ce defineste un camp constant
  • Toate atributele se definesc pe zona privata a clasei
  • Pentru fiecare atribut se defineste o interfata publica (functii accesor) ce permite citirea si scrierea valorii; functiile de modificare trebuie sa contina minim o regula de validare a valorii
  • Fiecare clasa contine minim 2 metode generice de prelucrare/afisare a atributelor
  • Fiecare clasa contine minim 2 constructori cu parametri, constructor de copiere, destructor si forma supraincarcata a operatorului =
  • Pentru fiecare clasa se supraincarca >> si <<
  • Toate clasele sunt definite intr-un singur fisier sursa
  • Testarea claselor (metoda main) se gaseste intr-un alt fisier sursa
  • Clasele trebuie sa contina minim 2 constructori cu parametri, destructor, constructor de copiere si operator = (daca acest lucru nu a fost implementat deja)
  • Se implementeaza in proiect minim o forma supraincarcata pentru oricare dintre operatorii +,-,*,/,+=,-=,*=,++ (post si pre), --(post si pre), [], () (functie), !; operatorii se aleg in functie de logica operatiei astfel incat aceasta sa aiba sens in contextul aplicatiei si al clasei; operatorii pot fi implementati intr-o singura clasa sau in mai multe;  fiecare operator trebuie sa fie supraincarcat cel putin o data;
  • Se implementeaza un modul prin care aplicatia primeste fisiere de intrare (de tip text) prin argumentele functiei main (exemplu: daca aplicatia se numeste proiectPOO.exe atunci ea este lansata in executie cu comanda proiectPOO.exe utilizatori.txt intrebari.txt; pot fi folosite doar fisiere text)
  • Se implementeaza un modul prin care utilizatorul poate salva datele aplicatiei in fisiere binare. Datele aplicatiei se considera a fi acele date obtinute din fisierele text primite ca argumente pentru main sau date incarcate de utilizatori in timpul sesiunii de lucru. Daca aplicatia nu primeste argumente prin functia main (se lanseaza in executie cu proiectPOO.exe) atunci va accesa fisiere binare aflate la locatii cunoscute de progamator. Fisirele binare permit salvarea tuturor datelor care au fost incarcate in aplicatie prin diferite metode.
  • Se implementeaza modulul prin care utilizatorul are posibilitatea sa genereze diferite rapoarte text pentru toate datele care sa fie afisate la consola dar si in fisiere text (minim 2 rapoarte)
  • Extinderea claselor definite in fazele anterioare prin adaugarea de atribute noi (necesare in aceasta faza) se face doar prin derivare si NU prin modificarea claselor existente - minim 2 extinderi
  • Se implementeaza minim o clasa abstracta (cu sau fara atribute) ce trebuie sa continta minim 2 metode virtuale pure
  • Se implementeaza minim 2 metode virtuale (altele decat cele virtuale pure)
  • Prin intermediul clasei abstracte sau a unei clase de baza (nou definita sau existenta) se defineste minim o ierarhie care sa descrie o familie de clase; un exemplu de familie de clase definite pentru a descrie forme geometrice 
  • Se implementeaza minim un vector de pointeri la clasa de baza (a ierarhiei) prin care se gestioneaza elemente concrete dintr-o familie de clase (o familie de clase este data de un set de clase aflate in relatii de derivare/mostenire ce au la baza un parinte comun - un exemplu de familie de clase definite pentru a descrie forme geometrice)

Pregatire practica pentru examen

Pregatire parte teoretica

Model subiect examen

Proiecte

Depunerea proiectului (indiferent de punctajul obtinut) reprezinta conditie de intrare in examen. Copierea proiectului in proportie mai mare de 30% conduce la anularea intregului punctaj (lucrare + proiect) de la seminar.

Conditii realizare proiect:

  • proiectul reprezinta o aplicatie executabila (meniul este optional) care testeaza conceptele C++ implementate;
  • proiectul trebuie sa ruleze si sa nu genereze exceptii de executie (atentie la memory-leaks si la valori gestionate prin mai multi pointeri);
  • codul sursa al proiectul trebuie sa fie scris fara erori de compilare;
  • proiectul este dezvoltat in Visual Studio, NetBeans sau Eclipse (NU se accepta Borland C);
  • proiectul se realizeaza individual;
  • proiectul implementeaza clase diferite intre care exista relatii de tip is-a sau has-a
  • NU se folosesc variabile globale sau functii globale;
  • toate entitatile folosite au asociata o clasa; NU exista clase generice ce definesc functii/metode fara o legatura logica cu entitatea definita de clasa;
  • forma finala a proiectele se preda in ultima saptamana;
  • proiectul se realizeaza pe durata semestrului fiind stabilite la seminar conditii si termene intermediare ce trebuie respectate; fiecare faza intermdiara este evaluata si reprezinta pondere din nota finala a proiectului; predarea proiectului doar la final se evalueaza cu 20%;
  • la seminar coordonatorul poate stabili o alta tema insa conditiile generale raman valabile.

Proiectul este predat in format arhivat (.zip) pana la data stabilita. Arhiva contine:

  1. Fisierele sursa al programului. Denumirea fiecarui fisier urmareste sablonul [Proiect][grupa][Nume_prenume]_Denumire_particulara_fisier (de. ex. [Proiect][1038][Popescu_Alex]_Clasa_Student.cpp)

Denumirea arhivei are forma: [Proiect][grupa][Nume_prenume] - [Denumire proiect] (Exemplu: [Proiect][1066][Popescu Alexandru] - [Operatia de inserare in structuri de date]). 
Depunerea proiectelor se face prin intermediul unei platforme virtuale ce va face si o verificare anti-plagiarism a codului sursa. Conturile de utilizator vor fi comunicate la seminar.

Cerințe proiect - faza 1

* aceste cerinte sunt orientative; la seminar, in functie de situatie, pot fi stabilite impreuna cu profesorul coordonator alte cerinte 

  • Termenul de predare se stabilește la seminar. 
  • Definirea a minim 5 clase care au legatura cu cerinta proiectului
  • Fiecare clasa trebuie sa contina minim un camp definit dinamic gestionat printr-un pointer si minim un vector definit static; trebuie abordate atat siruri de caractere (char*) cat si vectori de valori numerice
  • In solutie trebuie sa existe minin o clasa ce defineste un camp static si minim o clasa ce defineste un camp constant
  • Toate atributele se definesc pe zona privata a clasei
  • Pentru fiecare atribut se defineste o interfata publica (functii accesor) ce permite citirea si scrierea valorii; functiile de modificare trebuie sa contina minim o regula de validare a valorii
  • Fiecare clasa contine minim 2 metode generice de prelucrare/afisare a atributelor
  • Fiecare clasa contine minim 2 constructori cu parametri, constructor de copiere, destructor si forma supraincarcata a operatorului =
  • Pentru fiecare clasa se supraincarca >> si <<
  • Toate clasele sunt definite intr-un singur fisier sursa
  • Testarea claselor (metoda main) se gaseste intr-un alt fisier sursa
  • Faza 1 se consideră realizată dacă sunt implementate cel puțin 75% din cerinte

Cerințe proiect - faza 2

* aceste cerinte sunt orientative; la seminar, in functie de situatie, pot fi stabilite impreuna cu profesorul coordonator alte cerinte 

  • Clasele definite la faza 1 trebuie sa contina minim 2 constructori cu parametri, destructor, constructor de copiere si operator = (daca acest lucru nu a fost implementat deja)
  • Se implementeaza in proiect minim o forma supraincarcata pentru oricare dintre operatorii +,-,*,/,+=,-=,*=,++ (post si pre), --(post si pre), [], () (functie), !; operatorii se aleg in functie de logica operatiei astfel incat aceasta sa aiba sens in contextul aplicatiei si al clasei; operatorii pot fi implementati intr-o singura clasa sau in mai multe;  fiecare operator trebuie sa fie supraincarcat cel putin o data;
  • Se implementeaza un modul prin care aplicatia primeste fisiere de intrare (de tip text) prin argumentele functiei main (exemplu: daca aplicatia se numeste proiectPOO.exe atunci ea este lansata in executie cu comanda proiectPOO.exe utilizatori.txt intrebari.txt; pot fi folosite doar fisiere text)
  • Se implementeaza un modul prin care utilizatorul poate salva datele aplicatiei in fisiere binare. Datele aplicatiei se considera a fi acele date obtinute din fisierele text primite ca argumente pentru main sau date incarcate de utilizatori in timpul sesiunii de lucru. Daca aplicatia nu primeste argumente prin functia main (se lanseaza in executie cu proiectPOO.exe) atunci va accesa fisiere binare aflate la locatii cunoscute de progamator. Fisirele binare permit salvarea tuturor datelor care au fost incarcate in aplicatie prin diferite metode.
  • Entitatile care gestioneaza fisierele si operatiile pe fisiere se implementeaza prin clase (codul sursa prin care sunt accesate fisierele trebuie sa fie inclus in metode care sa apartina unor clase noi adaugate in proiect)
  • Se implementeaza modulul prin care utilizatorul are posibilitatea sa genereze diferite rapoarte pentru toate datele (de ex. lista utilizatori, lista intrebari dintr-o anumita categorie, ierarhii utilizatori, raspunsuri pentru o intrebare, etc ) care sa fie afisate la consola dar si in fisiere text (minim 3 rapoarte)

Cerințe proiect - faza 3

  • Extinderea claselor definite in fazele anterioare prin adaugarea de atribute noi (necesare in aceasta faza) se face doar prin derivare si NU prin modificarea claselor existente - minim 2 extinderi
  • Se implementeaza minim o clasa abstracta (cu sau fara atribute) ce trebuie sa continta minim 2 metode virtuale pure
  • Se implementeaza minim 2 metode virtuale (altele decat cele virtuale pure)
  • Prin intermediul clasei abstracte sau a unei clase de baza (nou definita sau existenta) se defineste minim o ierarhie care sa descrie o familie de clase(ex. pentru tipuri de utilizatori, pentru topic-uri, pentru raspunsuri, etc); un exemplu de familie de clase definite pentru a descrie forme geometrice 
  • Se implementeaza minim un vector de pointeri la clasa de baza (a ierarhiei) prin care se gestioneaza elemente concrete dintr-o familie de clase (o familie de clase este data de un set de clase aflate in relatii de derivare/mostenire ce au la baza un parinte comun - un exemplu de familie de clase definite pentru a descrie forme geometrice)
  • Se implementeaza un modul prin care utilizatorul poate indica calea completa catre alte fisiere cu date. Aplicatia citeste datele din fisierul indicat si le adauga la cele existente (daca acest lucru nu a fost implementat in faza 2)
  • Aplicatia trebuie sa permita generarea de diferite rapoarte care sa analizeze activitatea utilizatorilor (data mining in seturile de date pentru a extrage informatii cu privire la activitatea utilizatorilor): minim 2 rapoarte.

Fisa disciplinei

Fisa disciplinei in format - PDF

Barem general de evaluare

Repartizare puncte seminar:

  • 20% din nota finala - lucrare laborator
  • 10% din nota finala - proiect laborator
  • 10% din nota finala - activitati seminar (teme, participare activa)
  • 60% din nota finala - test grila + examen oral la calculator

Pentru evaluarea generala sunt considerate urmatoarele:

  • Conform fisei de disciplina, evaluarea in examinare are ponderea de 60%, iar nota de seminar are ponderea de 40%. Nota finala = (60/100 * Nota_Examen) + (40/100 * Nota_seminar_laborator).
  • Pentru promovare nota din examinarea din sesiune trebuie sa fie minim 5, iar nota finala dupa ponderare (examen + seminar) sa fie minim 5 (cu rotunjire normala).
  • Proiectul individual sau in echipa este obligatoriu de sustinut ca si conditie necesara pentru promovabilitate.
  • Fiecare cadru didactic de la activitatea de seminar/laborator isi stabileste propria metoda de evaluare si ponderi interne, dar exista minim o lucrare pe parcusrul semestrului si un proiect, iar la final, cadrul didactic coordonator de curs primeste o nota de evaluare de la seminar cuprinsa intre 0 (Absent) si 10.
  • Conditii obligatorii pentru promovarea examenului:
    • pentru toate punctele de evaluare (inclusiv nota 5) ca sa existe implementarea atat a elementelor cerute, cat si exemplificarea pentru apelul lor in functia "main()" / metode apeloatare. Tot obligatoriu, pentru fiecare punct din barem, este INEXISTENTA eroriLOR de compilare si link-editare a solutiei. De asemenea, pentru fiecare punct este obligatorie si necesara abilitatea de a lucra in mediu Visual Studio .NET si de a depana programe - intelegerea stivei de proces si segmentelor de date, precum si vizualizarea variabilelor in mediu la momentul depanarii. In evaluarea la examen cadrele didactice pot cere studentului evaluat sa reimplementeze oricare punct din biletul de examinare, avand ecranul gol in proiectul dezvoltat (inclusiv pentru nota 5).
    • definire completă de clasă si instantiere de obiecte in functie apelatoare "main()". Clasele complete au membrii - câmpuri private cu extensie în memoria dinamică - trebuie implementare de constructor default şi cu parametri, constructor de copiere, destructor şi supra-încărcarea „operatorului =”.
    • supraîncărcarea operatorilor unari (++,--, etc.), binari (+, -, etc.) cât şi a celor care implică implementarea operatorilor „friend”.
    • lucru cu fluxuri de octeţi (stream) pentru procesarea fişierelor/consolei + serializarea/deserializarea obiectelor / instanţelor din clase.
    • Implementarea de mecanisme de moştenire / derivare şi clase abstracte plus „interfeţe” (clase cu metode/funcţii virtuale pure) inclusiv cu implementare de polimorfism „pur”.
    • Implementare de clase şi funcţii template / „şablon”.
    • Utilizarea de clase pentru structuri de date standard (STL – Standard Template Library).
    • *optional: se evalueaza inclusiv elemente de tipul Static şi dinamic „cast”, mecanisme de tip try-catch, optmizarea utilizării de memorie (evitarea „memory leak”-urilor şi a „dangling-pointer”-ilor) şi a vitezei de execuţie.

Bibliografie

Sursele principale pentru pregatirea examenului sunt resursele bibliografice [SMEU02] si [SMEU01]. Se recomanda studierea si implementarea in programe scrise, compilate si rulate pe calculator a urmatoarelor:

Resurse seminar

Structura materiei pe seminarii
  1. Recapitulare pointeri, concept, pointeri la functii;
  2. Referinte, Macrodefinitii, Transferul parametrilor pentru subprograme, clase, concept, incapsulare, atribute, metode;
  3. Constructori, Destructor;
  4. Constructor copiere, supraincarcare operator =;
  5. Supraincarcare operatori (<<, >>, +, -, *, /, ++, --);
  6. Supraincarcare operatori (+=, [], ( ), !, ->, new, delete, cast);
  7. Derivare/Mosternire
  8. Functii virtuale, supradefinire, mostenire multipla
  9. Clase abstracte, interfete, mecanismul try-catch, domenii de nume;
  10. Operatii I/O orientate pe stream
  11. Clase template, concept, implementare, specializare
  12. STL (Standard Template Library), containere, ieratori si algoritmi
  13. STL (Standard Template Library), RTTI (Run Time Type Identification

Exemplu de clasa implementata in C++

Evaluare seminar

Lucrarea este data la calculator:
  • Nota 1 - Sa se creeze un proiect in mediul Microsoft Visual Studio .NET care sa nu genereze erori la compilare
  • Nota 3 - Sa se defineasca clasa X ce contine diferite atribute (inclusiv constante sau statice) dintre care unul este in mod obligatoriu un pointer (char* sau int *)
  • Nota 4 - Sa se defineasca pentru clasa X constructori (implicit si diferite forme cu parametri) si functia destructor
  • Nota 5 - Sa se defineasca pentru clasa X constructorul de copiere si o interfata publica pentru un atribut privat al clasei
  • Nota 6 - Sa se supraincarce pentru clasa X operatorul = fara a avea memory leaks
  • Nota 7 - Sa se supraincarce operatorul << / >> pentru clasa X
  • Nota 8 - Sa se supraincarce operatorul Y2 pentru clasa X
  • Nota 9 - Sa se supraincarce operatorul Y3 pentru clasa X
  • Nota 10 - Sa se exemplifice elementele implementate in programul principal. Sa fie utilizat Debugger-ul pentru a vizualiza memoria rezervata datelor si pentru a urmari apelurile diferitelor metode

ATENTIE !!! Dupa fiecare etapa, programul trebuie sa compileze si sa ruleze. In caz contrar, se considera neindeplinit primul punct din evaluare.

Operatori luati in considerare: =, ++ si -- in cele 2 forme (post si prefixata), [] (indexare), +,-,*,/, +=, -+, *=,>> si << (stream-uri pentru lucrul cu consola), !, cast la orice tip (implicit si explicit), () (functie), >, <. >=, <=, ==

Data exacta a lucrarii va fi stabilita in saptamana 7 - 8.