Object Oriented Programming
Anunturi
20.05.2020 Lab 11
- Cerinte: http://www.cs.ubbcluj.ro/~lauras/test/docs/school/oop/2019-2020/labs/lab12.pdf
- Cei cu index par au vaporase, impar avioane.
- Live: citire amplasamente si afisare tabla de joc in consola
- Nota: programul trebuie sa suporte schimbarea modulului de UI (consola/QT) fara modificari la celelalte module asa ca toate operatiunile trebuie sa se faca prin apeluri la servicii.
18.05.2020 Lab 11
- Cerinte: http://www.cs.ubbcluj.ro/~lauras/test/docs/school/oop/2019-2020/labs/lab12.pdf
- Cei cu index impar au vaporase, par avioane.
- Live: citire amplasamente si afisare tabla de joc in consola
- Nota: programul trebuie sa suporte schimbarea modulului de UI (consola/QT) fara modificari la celelalte module asa ca toate operatiunile trebuie sa se faca prin apeluri la servicii.
4.05.2020 Lab 10
– Live: Adaptare pentru teste repo template – 5p
– Tema, cu predare in lab 12 lab 11, restul aplicației + teste – 5p
15.04.2020 314/1 Lab 8
Fabrica de gadget-uri
Operatorii unei fabrici de gadget-uri folosesc un soft pentru a gestiona seriile de dispozitive.
Operatorul are la dispozitie functionalitatile:
1. Login. Dupa autentificarea cu success, sunt afisate toate seriile:
de tip Telefon(numeProducator, numeModel, unitatiProduse, listaOperatoriGSMCompatibili) si Drona(numeProducator, numeModel, unitatiProduse, numarRotoare)
Un producator poate avea mai multe serii chiar si pentru acelasi model.
2. Operare (dupa autentificarea cu success)
Cautare dupa numeProducator -> Se vor afisa toate informatiile seriilor acelui producator (indiferent de ce tip sunt)
Adaugare. Operatorul poate introduce noi serii cu urmatorii validatori: unitatiProduse > 100 si un telefon trebuie sa aiba cel putin un operator in lista listaOperatoriGSMCompatibili;
3. Logout
Precizări:
1. la un moment dat, o singură persoană folosește aplicația (deci nu trebuie acces concurent)
2. Datele de intrare se vor stoca în fișiere text. La pornirea aplicației, entitățile din fișiere vor fi citite din fișier(e). Modificările pe parcursul derulării aplicației se vor salva în aceste fișiere. Toate operațiile de citire și scriere se vor realiza folosind biblioteca iostream.
3. La pornirea aplicației utilizatorul poate alege tipul fișierului/fișierelor pe baza carora se vizualizeaza datele (CSV sau HTML – aplicatia trebuie sa ofere posibilitatea lucrului cu ambele tipuri de fisiere ). În funcție de acest tip ales de utilizator, salvarea datelor în fișier(e) se va face respectând formatul corect. De ex., dacă avem o entitate Student(id, cnp, nume, medie) o linie dintr-un fișier csv ar putea conține atributele unei entiăți separate prin virgulă
– 2, 2800429010309, Ana, 9.80
– 9, 1860808010391, George, 9.90
Implementarea acestei cerințe se va realiza folosind structuri polimorfice.
4. Se vor folosi excepții pentru semnalarea posibilelor erori. Pentru aceasta se vor defini și folosi clase de tip Excepție.
5. Se vor valida datele preluate în aplicație.
6. Se va crea diagrama UML a aplicației folosind un instrument specializat (de ex StarUML).
Lab 8:
– Live 5p (clasele entitate & teste, clasa Repo & teste) – doar un tip de fisier la alegere CSV sau HTML
– Folositi repo-ul cu template de la labul precendent. Daca e implementat corect, trebuie doar instantiat cu noua clasa entitate ca parametru T, fara nicio modificare in codul claselor Repo si RepoFisier.
– Modelare: clasa Serie este o clasa abstracta din care mostenesc Telefon si Drona. Atributele comune se implemnenteaza in Serie.
– Tema, cu predare in lab10 – 5p
– Validare date (folosind exceptii). Validatorii se implementeaza in clase separate ce vor fi folosite in Service. + teste
– Functionalitatea de Login & Diagrama UML
– Celalalt tip de fisier
13.04.2020 314/2 Lab 8
Glovo
Operatorii Glovo folosesc un soft pentru a gestiona comenzile.
Operatorul are la dispozitie functionalitatile:
1. Login. Dupa autentificarea cu success, sunt afisati toate comenzile:
de tip Mancare(numeClient, adresaClient, listaPreparate, pretTotal) si Shopping(numeClient, adresaClient, listaCumparaturi, pretTotal, numeMagazin)
Un client poate avea mai multe comenzi (adresele pot sa difere).
2. Operare (dupa autentificarea cu success)
Cautare dupa numeClient -> Se vor afisa toate informatiile comenzilor acelui client (indiferent de ce tip sunt)
Adaugare. Operatorul poate introduce noi comenzi cu urmatorii validatori: o comanda trebuie sa aiba cel putin un produs in lista si pretTotal > 0;
3. Logout
Precizări:
1. la un moment dat, o singură persoană folosește aplicația (deci nu trebuie acces concurent)
2. Datele de intrare se vor stoca în fișiere text. La pornirea aplicației, entitățile din fișiere vor fi citite din fișier(e). Modificările pe parcursul derulării aplicației se vor salva în aceste fișiere. Toate operațiile de citire și scriere se vor realiza folosind biblioteca iostream.
3. La pornirea aplicației utilizatorul poate alege tipul fișierului/fișierelor pe baza carora se vizualizeaza datele (CSV sau HTML – aplicatia trebuie sa ofere posibilitatea lucrului cu ambele tipuri de fisiere ). În funcție de acest tip ales de utilizator, salvarea datelor în fișier(e) se va face respectând formatul corect. De ex., dacă avem o entitate Student(id, cnp, nume, medie) o linie dintr-un fișier csv ar putea conține atributele unei entiăți separate prin virgulă
– 2, 2800429010309, Ana, 9.80
– 9, 1860808010391, George, 9.90
Implementarea acestei cerințe se va realiza folosind structuri polimorfice.
4. Se vor folosi excepții pentru semnalarea posibilelor erori. Pentru aceasta se vor defini și folosi clase de tip Excepție.
5. Se vor valida datele preluate în aplicație.
6. Se va crea diagrama UML a aplicației folosind un instrument specializat (de ex StarUML).
Lab 8:
– Live 5p (clasele entitate & teste, clasa Repo & teste) – doar un tip de fisier la alegere CSV sau HTML
– Folositi repo-ul cu template de la labul precendent. Daca e implementat corect, trebuie doar instantiat cu noua clasa entitate ca parametru T, fara nicio modificare in codul claselor Repo si RepoFisier.
– Modelare: clasa Comanda este o clasa abstracta din care mostenesc Mancare si Shopping. Atributele comune se implemnenteaza in Comanda.
– Tema, cu predare in lab10 – 5p
– Validare date (folosind exceptii). Validatorii se implementeaza in clase separate ce vor fi folosite in Service. + teste
– Functionalitatea de Login & Diagrama UML
– Celalalt tip de fisier
8.04.2020 – 314/1 Lab 7
Parcarea are un numar predefinit de locuri X.
Administratorul poate adauga sau sterge oricate masini din gestiune cu conditia sa aiba numere de inmatriculare diferite.
Nu se poate sterge din sistem o masina cu statusul “ocupat”, pana ce aceasta iese din parcare.
Senzorul optic citeste numerele la intrare si iesire schimband statusurle.
La intrare, sistemul va citi numarul de inmatriculare si va marca masina ca “ocupat” daca capacitatea parcarii permite, altfel va printa un mesaj de eroare.
De asemena va printa un mesaj de eroare daca o masina marcata “liber” incearca sa iasa sau una marcata “ocupat” incearca sa intre.
Administratorul are nevoie si de numarul cu care se depaseste capacitatea, egal cu maximul de masini care incearca sa intre si nu au loc, intre o intrare si o iesire de succes.
live:
– functionalitatea de intrare cu cazurile exceptionale (capacitate plina, masina vrea sa intre de 2 ori) + teste 3p
– RepoFile (mostenit din Repo), cu functia de loadDataFromFile- 2p
tema:
– finalizare RepoFile si finalizare cerinte si teste
– repository cu template stl (5p)
6.04.2020 – 314/2 Lab 7
Computerul pe care ruleaza managerul are o capacitate RAM predefinita de X Kb.
La adaugarea unei noi aplicatii se vor efectua pasii:
– Daca noua aplicatie depaseste capacitatea, se va afisa eroare
– Daca este posibila lansarea in RAM fara a depasi capacitatea, se adauga in repo cu status=ram
– Altfel, se vor muta in swap exact atatea aplicatii cat e nevoie, in ordinea lansarii lor inainte de a acomoda noua aplicatie in ram.
La stergerea unei aplicatii:
– Se vor muta in ram aplicatiile din swap, in ordinea lansarii lor, cat permite capacitatea
La orice operatie, se printeaza starea veche, starea noua si totalurile de memorie ram consumata.
live:
– functionalitatea de lansare (adaugare) aplicatie + teste 3p
– RepoFile (mostenit din Repo), cu functia de loadDataFromFile- 2p
tema:
– finalizare RepoFile si finalizare cerinte si teste
– repository cu template stl (5p)
01.04.2020 Lab 6 314/1- Aplicatie de management al parcarii
Sistemul de bariera de la parcarea facultatii are nevoie de un sistem de management pentru numere de inmatriculare.
Pentru asta are nevoie de un repository care stocheaza Masina(numePosesor, nrInmatriculare, status).
Numarul de inmatriculare este unic, status in [ocupat, liber].
Folositi conceptele de programare stratificata repo, service, UI.
live:
– clasa entitate & teste, (2p)
– clasa Repo (stl, folosind list!!!!, (optional repo cu template)), popularea repo-ului cu obiecte și ”vizualizarea” lor (add,
getAll) & teste (3p)
tema:
Finalizare repo, servici, UI cu CRUD complet + teste (5p).
30.03.2020 Atentie! Punctajul pentru cerintele live se va putea obtine doar daca commitul se face in timpul laboratorului.
Lab 6 314/2 – Aplicatie de management al memoriei.
Sistemul de operare are nevoie de un manager de memorie RAM care sa inregistreze consumul aplicatiilor.
Pentru asta are nevoie de un repository care stocheaza Aplicatie(nume, consumMemorieKb, status).
Numele este unic per aplicatie, consumMemorieKb > 0, status in [ram, swap]. Daca aplicatia este in
ram, consumul se va contabiliza la total utilizat, daca este in swap, memoria de pe HDD va fi utilizata.
Folositi conceptele de programare stratificata repo, service, UI.
live:
– clasa entitate & teste, (2p)
– clasa Repo (stl, folosind map!!!!, (optional repo cu template)), popularea repo-ului cu obiecte și ”vizualizarea” lor (add,
getAll) & teste (3p)
tema:
Finalizare repo, servici, UI cu CRUD complet + teste (5p).
17.03.2020 Sugestie de flow pentru folosirea GitHub: https://youtu.be/IF87fBHPm-8
Nu este singura solutie, dar e o abordare folosita in multe firme.
12.03.2020 Update – Vom continua sa predam laboratoarele prin Skype. Am pus mai jos doua chatroom links. Va rog sa intrati toti in grupa cu care veniti de obicei la lab. La intrebari raspund cand le vad (dar va rog postati mesage doar intre 8am si 10pm).
Pentru predare laboratoare va rog sa fiti online la orele cand avem in orar activitatea, fiecare cu grupa lui. Vom incerca sa facem one-on-one video conf cu screenshare pe rand cu fiecare. In saptamana 16-20 martie preiau lab-urile 2 si 3 ramase, fara penalizari.
Ca sa avem un avans pentru lab 5, va dau temele acum ca sa avem timp la revenire sa dam testul. Inlocuiti temele din pdf astfel
314/1 – Project(gitPath, noOfBranches, totalNoOfCommits) si urmatoarele 3 functionalitati: – operatiile CRUD – identificarea proiectelor care au cel putin K branch-uri si L commit-uri – eliminarea proiectelor care au noOfBranches*totalNoOfCommits = 0
314/2 – GymExercise(name, noOfSeries, noOfReps, weightKg) si urmatoarele 3 functionalitati: – operatiile CRUD – identificarea exercitiilor care au noOfSeries * noOfReps * weightKg > X – eliminarea exercitiilor care au weightKg * noOfReps < 5
12.03.2020 Pentru laboratoarele care cad in intervalul intreruperii cursurilor, toti veti fi notati ca “prezent”. Testele de la lab 4 se vor replanifica ulterior.
10.03.2020 Conform hotararii UBB, in intervalul 11-22 martie 2020 nu vom tine laboratoare. Va rog sa re-consultati aceasta pagina pentru actualizari privind metoda de recuperare, e posibil sa gasim o solutie virtuala pentru a ne tine laboratorul. In caz contrar, vom recupera dupa 22 martie.
Planificare
Informatica – Matematica Romana – Programare orientata obiect
Reguli suplimentare la laborator
- Fiecare student este responsabil sa verifice acuratetea datelor din tabelul de note si sa semnaleze eventualele nereguli, inainte de parasirea salii de laborator. Nu se admit contestatii ulterioare.
- Se accepta prezenta cu alte grupe doar daca se trimite email cu explicatia motivului intemeiat, inainte cu cel putin 12 ore de laboratorul din orar (nu cel la care aplicati sa veniti). Atentie: Emailurile nesemnate se vor ignora, iar daca mai mult de 2 persoane aplica pentru laborator cu aceeasi grupa, doar primii 2, in ordinea trimiterii emailului pot fi acceptati.
- Laboratoarele din ziua curenta se verifica cu prioritate. ATENTIE: riscul ca timpul sa fie insuficient pentru a preda laboratoarele anterioare si-l asuma studentul. Pentru a preveni situatia in care din lipsa de timp acumulati penalizari, incercati sa predati toate laboratoarele la timp!
Important
Laboratoarele vor primi nota doar in urmatoarele conditii:
- Proiectul compileaza, ruleaza si interfata cu utilizatorul se descrie pe sine (input / output / butoane cu mesaje descriptiv)
- Codul este formatat (Ctrl+K, Ctrl+D in VS, Ctrl+Alt+L in CLion, Ctrl+Shift+F in Eclipse)
- Toate metodele au specificatiile scrise deasupra antetelor (evitati stilul python unde documentatia apare in interiorul metodei)
- Metodele respecta Single Reponsibility Principle (SRP) – exemplu: nu calculeaza si si printeaza; nu returneaza si si creaza efecte secundare pe parametri (pe cat posibil)
- Stilul de cod este consecvent (daca s-a ales snake case pentru variabile, nu apar si camel case la intamplare). Notiuni de code style se gasesc aici.
Resurse
Contact
Pentru a evita situatii in care mesajele nu ajung la destinatie sau intra in spam, va rog sa imi trimiteti email pe stanky[at]cs.ubbcluj.ro, doar de pe casutele de UBB, cu titlu: “OOP – {ceva specific}” sau “POO – {ceva specific}”. Nu garantez ca mesajele trimise in alt mod vor ajunge sa fie citite.
Diverse
Oportunitate voluntariat in cadrul KisdGoTech Cluj. Pentru cei dintre voi carora va place sa lucrati cu copii, poate fi o ocazie buna sa va implicati.
Pentru mai multe informatii despre KidsGoTech Coder Dojo, puteti accesa www.kidsgotech.org/ sau pagina de Facebook www.facebook.com/kidsgotech.org/.