Table of Contents

Indicații pentru teme

Temele urmăresc exersarea cunoștințelor și abilităților voastre.

Așadar, urmărim nu doar cod care “merge”. Rezolvările voastre trebuie să nu fie predispuse la erori și să poată fi citite/parcurse/înțelese cu ușurință.

De asemenea, urmărim aplicarea principiilor orientate pe obiect. Acesta este unul dintre scopurile materiei și depășește limbajul de programare cu care lucrăm. Șansele sunt ca majoritatea codului pe care îl veți scrie ca software engineers să fie orientat-obiect. Vom urmări cu strictețe respectarea acestor principii în temele voastre.

Do's

Disclaimer: șansele sunt ca temele să fie mai dificile decât laboratoarele.

Pentru rezolvarea lor, deși nu vă cerem tehnici sau cunoștințe în plus față de laboratoare, va fi probabil nevoie de mai multa documentare individuală.

Vă stăm la dispoziție pe forumuri, teams sau pe email pentru a vă răspunde la întrebări.

Don'ts

Despre forum:

  • Pentru clarificări vă recomandăm să folosiți forum-ul aferent temei, urmând ca întrebarea voastră să primească un răspuns cât de curând (să țineți cont că în weekend se poate răspunde cu o întârziere mai mare).
  • Evitați întrebările foarte specifice care oferă hint-uri la soluționarea temei.
  • De asemenea, verificați forumul periodic pentru update-uri și pentru întrebări ca să nu se creeze intrebări duplicate.

Despre programarea în stil C:

  • Folosiți cât mai multe concepte POO (moștenire, polimorfism, upcast, overloading, overriding etc.)
  • Gândiți temele ca entități care interacționează cu alte entități pentru a programa în stilul POO.
  • Unele funcționalități pot fi doar niște metode, dar pot apărea următoarele probleme:
    • Să spunem că aveți de implementat o funcționalitate care printează eating, speaking, playing într-un mod special pentru fiecare tip de animal care vă este oferit la input.
    • Acestea pot fi reprezentate direct ca metode specifice pe care le puteți apela în cadrul unui switch-case.
    • Ce faceți dacă trebuie să mai introduceți câteva animale? Ar trebui să creați noi metode în clasa voastră unde procesați logica ceea ce ar face fișierul greu de citit.
    • Ce faceți dacă trebuie să adăugați funcționalități noi pentru fiecare tip de animal? Din nou, adăugăm foarte multe metode, ceea ce ar reduce lizibilitatea codului.
    • De asemenea, puteți să aveți foarte mult cod duplicat care ar fi putut fi encapsulat într-o clasă Animal care ar fi putut fi moștenită de clasele voastre specializate (ex. Wolf, Dog, Cat etc.).
    • Totodată dacă nu aplicați corect conceptele POO este posibil să ajungeți la situații în care apelați instance of ca să verificați ce clase trebuie să apelați ceea ce vă reduce codul la o formă de cod scrisă în C (soluția ar fi să folosiți upcasting și o metodă generică suprascrisă conform laboratului în care vi se prezintă upcast/downcast, moștenire, overloading, overriding).
  • Dacă analizați situațiile de mai sus vă puteți da seama că limbajele de tip POO vă reduc drastic din cod și vă oferă extensibilitate pe viitor, adică orice programator vă poate extinde codul mult mai ușor dacă va fi nevoie de feature-uri noi în proiect.

Depunctări generale pentru teme

Temele pe care le primim trebuie să compileze și să ruleze pentru a avea posibilitatea de punctaj non-zero.

Vom aplica depunctări legate de calitatea codului și a abordărilor temelor. Din 10 puncte:

  • Lista nu este exhaustivă. Evaluatorii pot aplica depunctări mai mari decât cele prezentate aici, în funcție de numărul de apariții ale greșelilor sau de gravitatea lor.
  • Pentru abateri minore (de exemplu un nume de metodă folosit neadecvat, in toată tema), se vor pune doar observații cu -0.0.
  • Dacă aveți întrebări legate de barem puteți să ne contactați pe forum/mail sau Teams.