Laboratorul 1 Problema 1: Incapsularea datelor, supraincarcarea operatorilor Problema 2: Mostenire Problema 3: Lucrul cu fisiere Problema 4: Polimorfism Problema 5: Composite Problema 1: Incapsularea datelor, supraincarcarea operatorilor Implementati in C++ clasa Person care va avea ca atribute firstname, lastname si dateofbirth. Scrieti metode tip set/get pentru fiecare atribut. Supraincarcati operatorii << si >> pentru a putea scrie/citi instante ale acestei clase. Folositi tipuri de date definite in STL pentru reprezentarea atributelor (std::string). Problema 2: Mostenire Derivati din clasa Person clasa Student. Adaugati atributele year si group si scrieti metode set/get pentru acestea. Supraincarcati operatorii << si >> pentru a putea scrie/citi instante ale acestei clase. Problema 3: Lucrul cu fisiere Scrieti un program care sa citeasca o lista de studenti dintr-un fisier al carui nume este dat in linia de comanda si sa-i afiseze pe ecran ordonati alfabetic dupa nume (lastname, firstname). Folositi clasa std::vector pentru memorarea interna a listei de studenti. Problema 4: Polimorfism Realizati un container eterogen de figuri geometrice. Containerul poate gestiona in acelasi timp cercuri, triunghuri, patrate. Fara a modifica in nici un fel codul sau, acesta va putea gestiona si alte tipuri de figuri ce pot fi adaugate ulterior. Implementati functii de serializare/deserializare intr-un/dintr-un fisier pentru container. Folositi clasele de aici ca punct de plecare. Problema 5: Composite Realizati un compozit de figuri geometrice. Compozitul defineste un grup de figuri, care este tratat la randul sau ca o figura. Asadar, o figura este fie o figura atomica (punct, cerc, patrat etc.), fie un grup de figuri (vezi diagrama de mai jos). Conform cu aceasta definitie, un grup de figuri poate contine la randul sau alte grupuri de figuri. Aria unui grup de figuri va fi privita ca suma ariilor figurilor din grup, deplasarea unui grup de figuri va consta in deplasarea figurilor continute in acel grup etc. 1
Laboratorul 2 Problema 1: Coding style (1) Problema 2: Coding style (2) Problema 3: CSV Extractor Problema 4: CSV Extractor GUI Problema 1: Coding style (1) In aceasta arhiva sunt doua solutii cu rezultat identic pentru aceeasi problema. Prima rezolvare are un cod mai scurt (o pagina) fata de cateva pagini bune a doua, este mai rapida si creaza un executabil de trei ori mai mic. Gasiti si alte motive pentru care aceasta prima rezolvare este de preferat. Problema 2: Coding style (2) Seful va da o bucata de cod pentru a o intelege si explica mai departe. Pe care dintre urmatoarele versiuni ale aceluiasi cod ati prefera-o? De ce? [Versiunea 1] [Versiunea 2] Problema 3: CSV Extractor Implementati un program care sa preia dintr-un fisier CSV o submatrice pe care sa o afiseze la iesirea standard. Numele fisierului si coordonatele submatricei sunt date din linia de comanda. Un exemplu de apel al programului este urmatorul: csv_extract --file <filename> --xstart <value> --ystart <value> --xend <value> --yend <value> Parametrii din linia de comanda vor putea fi dati in orice ordine, iar xstart, ystart nu sunt obligatorii; in cazul in care nu sunt specificati ambii vor avea valoarea implicita 0. Pentru parsarea liniei de comanda folositi o biblioteca externa (TCLAP pentru C++, JArgs pentru Java). Comparativ cu cele doua rezolvari de la problema precedenta, unde se incadreaza programul pe care l-ati realizat? 2
Problema 4: CSV Extractor GUI Realizati o versiune a problemei anterioare care sa ruleze in mod interactiv, cu interfata grafica de tip fereastre. Programul va oferi posibilitatea utilizatorului sa selecteze fisierul CSV, dupa care ii va cere sa introduca coordonatele submatricei (printr-un dialog grafic). Rezultatul va fi scris intr-un fisier pe care utilizatorul il indica printr-un dialog de tip "Salveaza ca..." Ganditi-va cum puteti folosi acelasi cod pentru enumerarea elementelor sumbatricei si pentru versiunea in linia de comanda si pentru cea cu interfata grafica. Incercati sa faceti o biblioteca (lib, dll sau jar) pentru functionalitatea de enumerare a submatricei, care sa fie folosita de ambele versiuni ale programului. Laboratorul 3 TERMEN LIMITA! Alegerea proiectului Problema 1: Relatii intre clase si obiecte Problema 2: UML-Diagrama de clase Problema 3: Implementare TERMEN LIMITA! Alegerea proiectului Discutati cu conducatorul de laborator intentia de proiect. Aceasta discutie se ia in calcul la stabilirea notei finale. Puteti alege un proiect dintre cele propuse sau puteti veni dvs. cu o propunere de proiect. Problema 1: Relatii intre clase si obiecte Se da urmatoarea problema: 1) Un manager al unei companii mici care se ocupa cu comercializarea de produse IT vrea sa se extinda si sa-si deschida un magazin virtual. El ar dori ca unui posibil client sa-i fie prezentata o lista de produse care sunt disponibile. Selectand un anumit produs, clientul ar trebui sa vada informatii despre acestea. De asemenea, un client ar trebui sa poata cauta un produs dupa nume, producator si/sau categorie. In plus, clientul va putea cumpara produse. El va avea un cos virtual, al carui continut il poate modifica (poate adauga, sterge, modifica cantitatea dintr-un produs). Inafara de clienti obisnuiti, site-ul va avea un administrator a carui sarcina este de actualiza informatiile din baza de date si de a trimite clientilor oferte prim email. 2) BCU Iasi va angajeaza pentru a dezvolta un site web care va avea urmatoarele functionalitati: - va permite utilizatorilor sa caute carti/reviste/ziare dupa titlu, autor, nr, isbn. - va afisa numarul de exemplare existente in biblioteca, precum si daca pot fi imprumutate acasa/la sala. - in cazul in care nu exista nici un exemplar disponibil pe moment pentru a fi imprumutat acasa, site-ul va comunica cea mai apropiata data la care se asteapta sa fie returnata o carta de catre un cititor. 3
- un abonat la BCU va avea un cont pe site pe care isi va putea vedea situatia curenta (ce carti are de restituit), precum si un istoric (ce carti a imprumutat si cand au fost imprumutate/restituite); in cazul in care data limita pentru imprumut a fost depasita, abonatului ii va fi trimis un email de notificare iar pe site ii va fi afisata amenda pe care o are de platit. a) Identificati clasele b) Identificati relatiile dintre clase (mostenire, agregare, asociere) c) Identificati multiplicitatile corespunzatoare relatiilor de asociere si agregare. d) Stabiliti responsabilitatile fiecarei clase. e) Care ar fi atributele si metodele pe care ar trebui sa le contina fiecare clasa? Problema 2: UML-Diagrama de clase Exprimati solutia la problema 1 folosind o diagrama de clase UML. Pentru realizarea acesteia puteti, de exemplu, folositi aplicatia ArgoUML sau biblioteca MetaUML. Problema 3: Implementare Realizati o implementare a diagramei de la problema 2 intr-un limbaj de programare orientat obiect (C++/Java). Laboratorul 4 Problema 1: Design refactoring Problema 2: XML/XSLT Problema 3: Server SQL Problema 4: XML reloaded Problema 1: Design refactoring Tinand cont de GRASP si MVC, in cazul in care este posibil, propuneti o versiune imbunatatita a solutiilor problemelor de la laboratorul precedent. Motivati care erau deficientele solutiilor initiale si cum au fost acestea remediate. Problema 2: XML/XSLT In aceasta arhiva aveti un fisier XML si un fisier XSLT. Pe platforma pe care ati ales-o pentru a dezvolta proiectul, instalati programele necesare si realizati procesarea fisierului XML prin fisierul XSLT. (Cautati mai intai pe Internet ce inseamna XML, XSLT; incercati sa va faceti o idee daca aceasta tehnologie este sau nu utilizata.) 4
Problema 3: Server SQL Instalati si configurati un server de baze de date (MySQL, PostgreSQL, MS SQL Server). Creati un tabel care sa contina ca inregistrari studenti: nume, prenume, cod gesco, an studiu etc. Scrieti o comanda SELECT care sa selecteze doar studentii dintr-un anumit an de studiu. Cautati o comanda care sa modifice inregistrarile existente si aratati cum poate fi ea folosita. Aratati cum pot fi sterse inregistrari (de exemplu, sa se stearga toti studentii din ultimul an de studiu). Problema 4: XML reloaded Incercati sa proiectati un fisier XML care sa contina acelasi tip de date ca tabelul de la problema 2. Cum ar trebui sa arate un fisier XSLT cu ajutorul caruia sa se obtina lista tuturor studentilor in format HTML? Dar unul cu ajutorul caruia sa se obtina lista studentilor in format CSV? Laboratorul 5 Problema 1: Unitati de testare automata Problema 2: Compare and Contrast Problema 3: XML tree Problema 1: Unitati de testare automata Realizati o mica aplicatie care sa foloseasca unitati de testare automata (folosind JUnit, cppunit etc.) Exemplu de aplicatie: program care rezolva ecuatia de gradul al 2-lea. Puteti urma acest exemplu. Problema 2: Compare and Contrast In acest fisier gasiti un exemplu de specificare a cerintelor prin scenarii. Comparati-l cu cel realizat pentru proiectul dvs. Problema 3: XML tree Realizati un program care deschide un fisier XML si il afiseaza sub forma de arbore expandabil (gen navigator de directoare) intr-o interfata grafica bazata pe ferestre. Laboratorul 6 TERMEN LIMITA! Prezentarea fisei de scenarii TERMEN LIMITA! Prezentarea fisei de scenarii Discutati cu conducatorul de laborator despre fisa de scenarii pe care ati finalizat-o. 5
Laboratorul 12 Problema 1: Baze de date Problema 2: ORB Problema 1: Baze de date Pornind eventual de la exemplul de la curs realizati o aplicatie experimentala care sa citeasca/scrie dintr-o/intr-o baza de date in cadrul unui limbaj orientat obiect. Incercati sa modelati o inregistrare dintr-un tabel printr-o instanta a unei clase, mapand campurile tabelei in atributele obiectului (folosirea unui camp ID pentru inregistrari poate fi folositoare in identificarea obiectului). Problema 2: ORB Pentru platforma pe care lucrati, identificati o biblioteca (ce are o licenta convenabila) care realizeaza o legatura automata intre obiecte si baza de date (Object-Relational Bridge). Laboratorul 13-14 Prezentarea proiectului Prezentarea proiectului La acest laborator se pot face prezentari finale ale proiectelor. 6