C++

Why C++

Inregistrarea si prezentarea sunt disponibile pe https://www.youtube.com/watch?v=UdTzHmjMYBc 

Info for Economic Informatics (English) students (2023-2024)

  • all students (2nd, 3rd and supplementary year)  from the Economic Informatics (English) program are invited to join the dedicated Slack workspace, created for the Objected Oriented Programming course. The registration link is https://join.slack.com/t/csiepoo2023/signup. The registration is done using the @stud.ase.ro email address
  • the Slack channel will be used in parallel with online.ase.ro for messaging, Q&A and announcements
  • the course coordinator is Catalin Boja (catalin.boja@ie.ase.ro)

To register on online.ase.ro into the course section use the next link https://online.ase.ro/course/view.php?id=35092  and the key 7368. For seminar registration, you need to attend an activity.

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 2023-2024
  • sa se implice in activitatile din timpul anului deoarece punctele acumulate in anii anteriori NU se pastreaza
  • sa verifice conditiile valabile in anul universitar 2023-2024 (descrise in fisa discipline)
  • sa participe la activitati de seminar si curs alaturi de studentii din anul 2

Repartizarea studentilor din anul 3 sau anul suplimentar pe grupe de anul 2

  • studentii sunt rugati sa verifice orarul anului 2 al programului de studiu din care fac parte (Informatica, Informatica Engleza, Cibernetica sau Statistica) si sa aleaga in primele 2 saptamani ale semestrului o grupa la care sa participe; 
  • pentru a evita aglomerarea activitatilor, studentii sunt rugati sa obtina acceptul coordonatorului de la seminar; acest lucru se face in persoana, prin participarea la un seminar in primele saptamani ale semestrului
  • fiecare student va incarca eventualele faze ale proiectului si eventualele teme pe platforma http://online.ase.ro in cadrul grupei in care a fost insris(a) de catre coordonatorul de seminar

Fisa disciplinei pentru anul universitar 2023-2024

Fisa disciplinei pentru programul de Informatica Economica in limba romana - PDF (in proces de actualizare)

Fisa disciplinei pentru programul de Informatica Economica in limba engleza - PDF (in proces de actualizare)

Barem general de evaluare curs si seminar, 2023-2024

  • 20% din nota finala - lucrare laborator/grila in saptamana 7-8
  • 10% din nota finala - activitati seminar (teme, participare activa, etc)
  • 10% din nota finala - test grila in ultimele 2 saptamani din semestru
  • 10% din nota finala - proiect
  • 50% din nota finala - examen oral la calculator

Pentru evaluarea generala sunt considerate urmatoarele:

  • Conform fisei de disciplina, evaluarea in examinare are ponderea de 50%, iar nota de seminar are ponderea de 50%. Nota finala = (50/100 * Nota_Examen) + (50/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).
  • Temele sau Proiectul (individual sau in echipa) este obligatoriu de sustinut ca si conditie necesara pentru promovabilitate.
  • Intrarea in examen este conditionata de obtinerea a minimum 2 puncte la seminar (din maxim 5)
  • Fiecare cadru didactic de la activitatea de seminar/laborator isi stabileste propria metoda de evaluare si ponderi interne, dar exista minim o lucrare pe parcursul semestrului, un test grila si un proiect/teme, 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 apelatoare. 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 completa de clasa si instantiere de obiecte in functie apelatoare "main()". Clasele complete au membrii - câmpuri private cu extensie în memoria dinamica - trebuie implementare de constructor default si cu parametri, constructor de copiere, destructor si supra-încarcarea „operatorului =”.
    • supraîncarcarea operatorilor unari (++,--, etc.), binari (+, -, etc.) cât si a celor care implica implementarea operatorilor „friend”.
    • lucru cu fluxuri de octeti (stream) pentru procesarea fisierelor/consolei + serializarea/deserializarea obiectelor / instantelor din clase.
    • Implementarea de mecanisme de mostenire / derivare si clase abstracte plus „interfete” (clase cu metode/functii virtuale pure) inclusiv cu implementare de polimorfism „pur”.
    • Implementare de clase si functii template / „sablon”.
    • Utilizarea de clase pentru structuri de date standard (STL – Standard Template Library).
    • *optional: se evalueaza inclusiv elemente de tipul Static si dinamic „cast”, mecanisme de tip try-catch, optmizarea utilizarii de memorie (evitarea „memory leak”-urilor si a „dangling-pointer”-ilor) si a vitezei de executie.

Program consultatii 

  • Boja Catalin
  • Alin Zamfiroiu
  • Paul Pocatilu
  • Iancu Bogdan

Pregatire practica pentru examen

Pregatire parte teoretica

Model subiect examen

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 
  1. Utilizare mediu de lucru, compilare, depanare, corectie erori de compilare, identificare si corectie bug-uri
  2. Recapitulare pointeri, masive unidimensionale (vectori si siruri de caractere)
  3. Recapitulare transfer parametri catre functii. Transfer parametri prin valoare sau prin adresa. Pointer vs Referinta C++
  4. Clase, specificatori de acces, incapsulare, atribute, metode, atribute statice, atribute constante
  5. Constructori, Destructor;
  6. Constructor copiere, supraincarcare operator =;
  7. Supraincarcare operatori (<<, >>, +, -, *, /, ++, --);
  8. Supraincarcare operatori (+=, [], ( ), !, ->, new, delete, cast);
  9. Derivare/Mosternire
  10. Functii virtuale, supradefinire, mostenire multipla
  11. Clase abstracte, interfete, mecanismul try-catch, domenii de nume;
  12. Operatii I/O orientate pe stream-uri
  13. Clase template, concept, implementare, specializare
  14. STL (Standard Template Library), containere, iteratori si algoritmi,RTTI (Run Time Type Identification

Exemplu de clasa implementata in C++

Evaluare seminar

Lucrarea este data la calculator. Un barem orientativ al evaluarii este (baremul lucrarii va fi afisat pe subiect)
  • Nota 1 - Sa se creeze un proiect C++ in mediul Microsoft Visual Studio 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 *). Pentru acestea sa se defineasca o interfata publica de acces. Metodele de tip set trebuie sa valideze valorile de intrare si sa genereze exceptii sau sa afiseze mesaje specifice
  • 1 punct - Sa se defineasca pentru clasa X constructori (implicit si diferite forme cu parametri) si functia destructor (fara a genera memory leaks)
  • 1 punct - Sa se defineasca pentru clasa X constructorul de copiere
  • 1 punct - Sa se supraincarce pentru clasa X operatorul = fara a avea memory leaks
  • 1 punct - Sa se supraincarce operatorul << / >> pentru clasa X
  • 1 punct - Sa se implementeze 2 metode care sa prelucreze atribute ale clasei
  • 1 punct - Sa se supraincarce operatorul Y1, Y2 pentru clasa X
  • Suplimentar- 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 !!! Metodele implementate trebuie sa evite shallow-copy si generearea de memory leaks

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.

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 considera realizata daca 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 considera realizata daca sunt implementate cel pu?in 75% din cerinte

Cerinte proiect - faza 3

  • Toate cerintele de la fazele anterioare
  • Implementarea unei clase care sa exemplifice conceptul compunerii claselor (daca nu a fost deja implementata in fazele anterioare)
  • 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 cheltuieli, 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.
  • Sa se implementeze din libraria STL cel putin un vector, un set, o lista si un map pentru a gestiona datele aplicatiei
  • Aplicatia trebuie sa ruleze "la cheie" fara a genera erori la executie

* 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.