C++

Why C++

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

Test practic laborator

Atentie ! Verificarea identitatii studentilor se va face doar pe baza Cartii de Identitate. Va rugam sa aveti acest document la Dvs cand veniti la testul de la laborator sau la examen.

  • testul practic de la laborator va avea loc in perioada 20-24 noiembrie 2017
  • anul 2 va sustine testul practic luni 20 noiembrie 2017 (cu 2-3 exceptii anuntate la seminar); programul complet este disponibil pe platforma online.ase.ro in sectiunea seminar
  • anul 3 si anul suplimentar va sustine testul practic marti, 21 noiembrie 2017; programul complet si lista studentilor (repartizati pe ore de sustinere a testului) sunt disponibile pe platforma online.ase.ro in sectiunea seminar (seminarul de POO de anul 2 unde fiecare student a fost inregistrat de profesorul coordonator al seminarului)

Lista studentilor din anul 3 si anul suplimentar repartizati pe grupe

Refacere seminar pentru studentii din anul 3 si anul suplimentar

Studentii care nu au promovat disciplina in anii anteriori trebuie :

  • sa refaca toate activitatile de la seminar si curs in anul universitar 2017-2018
  • sa se implice in activitatile din timpul anului deoarece punctele acumulate in anii anteriori nu se pastreaza
  • sa verifice conditiile valabile in anul universitar 2017-2018
  • sa participe la activitati de seminar si curs alaturi de studentii din anul 2 - tebuie completat formularul https://goo.gl/forms/Gjd1wGd61pE2FNz83 in pimele 3 saptamani din semestrul I, 2017-2018

Lista studentilor din anul 3 si anul suplimentar repartizati pe grupe

  • repartizarea stundentilor s-a facut in functie de optiunile transmise prin formularul electronic, fara a accepta mai mult de 15 solicitari per grupa (limita este impusa pentru a permite buna desfasurare a activitatilor de la seminar)
  • in situatia in care a fost depasit numarul maxim de solicitari, studentii au fost repartizati la alte grupe in functie de momentul completarii formularului si in functie gradul de incarcare a celorlate grupe;
  • studentii sunt rugati sa treaca, in urmatoarele 2 saptamani, pe la seminarul grupei unde a fost repartizat pentru a fi inscris pe platforma http://online.ase.ro de catre coordonatorul de seminar
  • fiecare student va incarca fazele proiectului si eventualele teme pe platforma http://online.ase.ro in cadrul grupei in care  a fost repartizat

Program consultatii

  • Boja Catalin, vineri, 15:00 - 16:20, 2001A si marti (doar pentru grupe de la Informatica - Engleza), 10:30 - 11:30, sala 2320
  • Irina Enachescu, joi, 7:30 - 8:50, 2001D
  • Alin Zamfiroiu, joi, 19:30, 2304
  • Paul Pocatilu, joi, 13.30 - 14.30, 2315
  • Dita Alexandru, joi, 19:30, 409

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  si la notificarea Decanatului.

Conditii generale privind realizarea proiectului:

  • 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) sau intr-un singur fisier sursa (.cpp) pana la data stabilita. Arhiva contine 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/fisierului sursa are forma[Proiect][grupa][Nume_prenume] - [Faza proiect] (Exemplu: [Proiect][1066][Popescu Alexandru] - [Faza 1]). 
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.

Specificatii Proiect

Aplicatie pentru gestiunea bugetului. Se inregistreaza cheltuielile pe categorii (alimentare, utilitati etc.). Se pot adauga cheltuieli noi pentru fiecare zi, se pot modifica cheltuielile deja introduse sau se pot sterge. Aplicatia pastreaza istoricul datelor introduse, folosind fisiere text sau binare. Se pun la dispozitia utilizatorului rapoarte de cheltuieli, dupa criterii multiple (total cheltuieli pentru o anumita data, grupate pe categorii sau prezentate individual,  total cheltuieli lunare, anuale, suma medie a cumparaturilor pentru o anumita categorie, etc).

Cerinte 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 obligatoriu >> si <<
  • Pentru fiecare clasa se supraincarca obligatoriu:
    • operatorul pentru idexare []
    • minim un operator matematic (+,-,* sau /)
    • ++ sau -- (cu cele 2 forme)
    • operatorul cast (catre orice tip) explicit sau implicit
    • operatorul pentru negatie !
    • un operator conditional (<.>,=<,>=)
    • operatorul pentru testarea egalitatii dintre 2 obiecte ==
  • 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

Cerinte proiect - faza 2

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

  • 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 facturi.txt cheltuieli.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)
  • Se implementeaza un modul care sa gestioneze o forma simpla de meniu prin care utilizatorul are posibilitatea sa navigheze prin functiile aplicatiei (dupa ce porneste aplicatia, utilizatorul are posibilitatea de a folosi taste numerice sau de a introduce text prin care sa decida ce functii sa activeze - de ex. sa vada facturile din sistem, sa genereze diferite tipuri de rapoarte, etc)
  • Aplicatia permite incarcarea de date din fisiere CSV (comma separated values);  simbolul ales pentru a separa valorile este ales de programator si este folosit pentru toate fisierele CSV
  • Faza 2 se consideră realizată dacă sunt implementate cel puțin 75% din cerinte

* Realizarea proiectul este o activitate care face parte din pregatirea lucrarii si a examenului de la aceasta disciplina. Din acest punct de vedere, este recomandat ca acesta sa includa toate elementele prezentate la curs sau la seminar.

Fisa disciplinei pentru anul universitar 2017-2018

Fisa disciplinei in limba romana - PDF

Fisa disciplinei in limba engleza - 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.

Resurse seminar & curs din ani anteriori

Cristian Toma

Mihai Doinea

Cristian CIUREA

Claudiu Vinte