Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
teme:tema_de_casa_1 [2015/10/29 01:49] Andrei Roșu-Cojocaru |
teme:tema_de_casa_1 [2015/11/06 07:38] (current) Andrei Roșu-Cojocaru [Barem de corectare și notare] |
||
|---|---|---|---|
| Line 3: | Line 3: | ||
| <note important> | <note important> | ||
| - | Lansare: 30 octombrie 2015, 23:55\\ Termen de Predare: 20 noiembrie 2015, 23:55\\ Pondere: 10 p / 35 | + | Lansare: 6 noiembrie 2015, 23:55\\ Termen de Predare: 27 noiembrie 2015, 23:55\\ Pondere: 10 p / 35 |
| </note> | </note> | ||
| Line 39: | Line 39: | ||
| <code> | <code> | ||
| - | public Supplier getSupplierInformation(); | + | public Supplier getSupplierInfo(); |
| </code> | </code> | ||
| Line 118: | Line 118: | ||
| </code> | </code> | ||
| - | **b)** metoda ''getProductList()'' determină lista tuturor produselor care pot fi comandate, pentru fiecare furnizor în parte: | + | **b)** metoda ''getProducts()'' determină lista tuturor produselor care pot fi comandate, pentru fiecare furnizor în parte: |
| * parametri: -; | * parametri: -; | ||
| * valoare întoarsă: un obiect de tip ''Map'' având drept cheie un obiect de tip ''Supplier'' iar ca valoare o listă de obiecte de tip ''Product'' reprezentând alimentele corespunzătoare furnizorului în cauză. | * valoare întoarsă: un obiect de tip ''Map'' având drept cheie un obiect de tip ''Supplier'' iar ca valoare o listă de obiecte de tip ''Product'' reprezentând alimentele corespunzătoare furnizorului în cauză. | ||
| <code> | <code> | ||
| - | public Map<Supplier, List<Product>> getProductList(); | + | public Map<Supplier, List<Product>> getProducts(); |
| </code> | </code> | ||
| Line 163: | Line 163: | ||
| Modul de operare la nivelul lanțului de restaurante implică obținerea listelor de oferte de la producători, selectarea unui furnizor dintre cei care pot asigura necesarul de ingrediente, realizarea unei rezervări și plasarea unei comenzi de aprovizionare pe baza acesteia. | Modul de operare la nivelul lanțului de restaurante implică obținerea listelor de oferte de la producători, selectarea unui furnizor dintre cei care pot asigura necesarul de ingrediente, realizarea unei rezervări și plasarea unei comenzi de aprovizionare pe baza acesteia. | ||
| + | |||
| + | Arhitectura sistemului informatic va fi prin urmare formată din trei componente care comunică între ele, dintre care una (agentul de intermediere a comunicației) expune funcționalități de tip server atât către componenta de tip furnizor cât și către componenta de tip lanț de restaurante. În această situație, se va asigura faptul că pentru fiecare entitate vor fi accesibile doar metodele specifice, fără a se expune și operațiile aferente altor aplicații. | ||
| + | |||
| + | {{ :teme:tema_de_casa_1:architecture.png?nolink&500 }} | ||
| ===== Precizări suplimentare ===== | ===== Precizări suplimentare ===== | ||
| + | |||
| + | NU este permisă folosirea altor tehnologii cu excepția celor specificate în enunţ. | ||
| + | |||
| + | Persistența informațiilor la nivelul componentelor va fi asigurată prin stocarea acestora în baze de date dedicate. | ||
| Pentru un producător, datele specifice (denumirea și descrierea) vor fi precizate sub formă de parametri în linia de comandă în momentul lansării sale în execuție. | Pentru un producător, datele specifice (denumirea și descrierea) vor fi precizate sub formă de parametri în linia de comandă în momentul lansării sale în execuție. | ||
| Line 170: | Line 178: | ||
| Perioada pentru care o rezervare este menținută se măsoară în număr de zile calendaristice și se exprimă sub formă de constantă la nivelul codului sursă. | Perioada pentru care o rezervare este menținută se măsoară în număr de zile calendaristice și se exprimă sub formă de constantă la nivelul codului sursă. | ||
| - | În cazul agentului de intermediere a comunicației, informațiile cu privire la entitățile cu care există o conexiune nu vor fi stocate în baza de date. Acestea sunt disponibile doar atâta timp cât respectiva componentă se găsește în execuție, fiind pierdute în momentul în care aceasta nu mai rulează sau în cazul în care se produce o eroare. Astfel, legăturile existente nu sunt refăcute atunci când o astfel de componentă este (re)pornită. | + | Metodele de la nivelul agentului de intermediere vor accesa funcționalitățile cu acceeași denumire de la nivelul producătorilor de produse alimentare, în unele situații fiind necesară accesarea întregii liste a furnizorilor care pot fi contactați la un moment dat. Într-un astfel de model, în care componentele sunt strâns cuplate, toate operațiile sunt sincrone (se blochează până se transmite un rezultat de la metoda invocată). Accesul la resursele care pot fi referite de mai multe fire de execuție concomitent trebuie să se realizeze sincronizat. |
| - | De remarcat este faptul că agentul de intermediere expune funcționalități de tip server atât către componenta de tip furnizor cât și către componenta de tip lanț de restaurante. În această situație, se va asigura faptul că pentru fiecare entitate vor fi accesibile doar metodele specifice, fără a se expune și operațiile aferente altor aplicații. | + | Semnăturile metodelor accesibile la distanță pot suferi modificări în funcție de necesități, cu respectarea funcționalității descrise. |
| - | + | ||
| - | Metodele de la nivelul agentului de intermediere vor accesa funcționalitățile cu acceeași denumire de la nivelul producătorilor de produse alimentare, în unele situații fiind necesară accesarea întregii liste a furnizorilor care pot fi contactați la un moment dat. Într-un astfel de model, în care componentele sunt strâns cuplate, toate operațiile sunt sincrone (se blochează până se transmite un rezultat de la metoda invocată). | + | |
| - | + | ||
| - | Semnăturile metodelor accesibile la distanță pot suferi modificări în funcție de necesități, însă trebuie să se repecte funcționalitatea descrisă. | + | |
| Nu este necesar să se implementeze o interfață grafică pentru testarea aplicațiilor, fiind suficient un meniu în mod text care să permită introducerea unui număr de opțiuni corespunzător numărului de metode pe care o componentă le poate accesa la distanță. | Nu este necesar să se implementeze o interfață grafică pentru testarea aplicațiilor, fiind suficient un meniu în mod text care să permită introducerea unui număr de opțiuni corespunzător numărului de metode pe care o componentă le poate accesa la distanță. | ||
| + | |||
| + | Orice specificaţie care nu este menţionată mai sus reprezintă decizie de implementare. Puteţi considera orice simplificare în condiţiile în care enunţul nu precizează altfel. | ||
| ===== Barem de corectare și notare ===== | ===== Barem de corectare și notare ===== | ||
| ^ **Punctaj** ^ **Criterii de acordare** ^ | ^ **Punctaj** ^ **Criterii de acordare** ^ | ||
| - | | x p | | | + | | 2 p | proiectarea tabelelor în baza de date pentru fiecare componentă (furnizor, agent de intermediere, lanț de restaurante)\\ • conformitatea structurii conceptuale a bazei de date cu o formă normală: 40%\\ • definirea de chei primare, chei străine (legături între toate tabelele bazei de date), constrângeri de integritate pentru formatul atributelor: 25%\\ • populare corespunzătoare: 35% | |
| + | | 1,50 p | proiectarea metodelor corespunzătoare componentelor de tip server\\ • componenta furnizor: 35%\\ • componenta agent de intermediere a comunicației (segregarea interfețelor!!!): 65% | | ||
| + | | 2 p | implementarea metodelor corespunzătoare componentei furnizor\\ • ''getSupplierInfo()'': 5%\\ • ''getProductList()'': 10%\\ • ''getOffer()'': 20%\\ • ''makeReservation()'': 35%\\ • ''cancelReservation()'': 15%\\ • ''issueSupplyOrder()'': 15% | | ||
| + | | 2 p | implementarea metodelor din agentul de intermediere a comunicației\\ • ''getSupplierList()'': 10%\\ • ''getProducts()'': 20%\\ • ''getOffers()'': 20%\\ • ''makeReservation'': 30%\\ • ''cancelReservation'': 10%\\ • ''issueSupplyOrder()'': 10% | | ||
| + | | 1,50 p | apelarea metodelor disponibile la distanță din cadrul componentelor de tip client\\ • componenta lanț de restaurante: 55%\\ • componenta agent de intermediere a comunicației: 30%\\ • componenta furnizor: 15% | | ||
| + | | 1 p | modularizare\\ • structura aplicaţiei: 40%\\ • aspecte legate de eficiență: 40%\\ • lizibilitatea codului, comentarii, README: 20% | | ||
| **BONUS**. Se pot obţine punctaje suplimentare, astfel: | **BONUS**. Se pot obţine punctaje suplimentare, astfel: | ||
| - | * 0,50 p – predarea şi prezentarea temei cu o săptămână mai devreme (înainte de 13.11.2015, 23:55); | + | * 0,50 p – predarea şi prezentarea temei cu o săptămână mai devreme (înainte de 20.11.2015, 23:55); |
| * 0,50 p - modificarea modului de funcționare a metodei ''getOffers()'' de la nivelul agentului de intermediere a comunicației, astfel încât acesta să mai primească un parametru, de tip întreg (''criteria'') care să specifice criteriul în funcție de care va fi determinată o singură ofertă, acesta putând fi: ''BEST_PRICE'' - cel mai mic preț total, respectiv ''BEST_DELIVERY_TIME'' - cel mai mic termen de livrare; în situația în care există mai mulți furnizori care întrunesc aceste criterii, va fi ales unul aleator; | * 0,50 p - modificarea modului de funcționare a metodei ''getOffers()'' de la nivelul agentului de intermediere a comunicației, astfel încât acesta să mai primească un parametru, de tip întreg (''criteria'') care să specifice criteriul în funcție de care va fi determinată o singură ofertă, acesta putând fi: ''BEST_PRICE'' - cel mai mic preț total, respectiv ''BEST_DELIVERY_TIME'' - cel mai mic termen de livrare; în situația în care există mai mulți furnizori care întrunesc aceste criterii, va fi ales unul aleator; | ||
| * 1,00 p - modificarea modului de funcționare a metodei ''getOffers()'' de la nivelul agentului de intermediere a comunicației, astfel încât să nu mai fie necesar ca acesta să apeleze metode la distanță în acest moment; în schimb, se va implementa o zonă de memorie tampon în care vor fi stocate toate informațiile cu privire la produsele comercializate de furnizori și la cantitățile în care acestea se găsesc, pe baza invocărilor anterioare; acestea vor fi utilizate pentru a determina lista cu oferte corespunzătoate fiecărui furnizor în parte, în situația în care va fi transmis un parametru de tip adevărat / false (''fromCache''); aceasta implică faptul că o ofertă ar putea să nu fie generată pentru un producător fie din cauza faptului că acesta nu a mai fost accesat fie din cauza faptului că informațiile cu privire la stocurile acestuia nu sunt actualizate. | * 1,00 p - modificarea modului de funcționare a metodei ''getOffers()'' de la nivelul agentului de intermediere a comunicației, astfel încât să nu mai fie necesar ca acesta să apeleze metode la distanță în acest moment; în schimb, se va implementa o zonă de memorie tampon în care vor fi stocate toate informațiile cu privire la produsele comercializate de furnizori și la cantitățile în care acestea se găsesc, pe baza invocărilor anterioare; acestea vor fi utilizate pentru a determina lista cu oferte corespunzătoate fiecărui furnizor în parte, în situația în care va fi transmis un parametru de tip adevărat / false (''fromCache''); aceasta implică faptul că o ofertă ar putea să nu fie generată pentru un producător fie din cauza faptului că acesta nu a mai fost accesat fie din cauza faptului că informațiile cu privire la stocurile acestuia nu sunt actualizate. | ||
| Line 194: | Line 205: | ||
| Tema va fi realizată individual şi va fi prezentată în cadrul laboratorului, până la sfârşitul semestrului. Neprezentarea temei de casă sau un rezultat nesatisfăcător al prezentării (necunoașterea funcționalității aplicației / codului sursă, imposibilitatea de a răspunde la întrebări) atrag după sine anularea punctajului corespunzător acesteia. În cadrul prezentării veţi specifica succint funcţionalităţile pe care le-aţi dezvoltat şi veţi răspunde la întrebări cu privire la modul de implementare al acestora. | Tema va fi realizată individual şi va fi prezentată în cadrul laboratorului, până la sfârşitul semestrului. Neprezentarea temei de casă sau un rezultat nesatisfăcător al prezentării (necunoașterea funcționalității aplicației / codului sursă, imposibilitatea de a răspunde la întrebări) atrag după sine anularea punctajului corespunzător acesteia. În cadrul prezentării veţi specifica succint funcţionalităţile pe care le-aţi dezvoltat şi veţi răspunde la întrebări cu privire la modul de implementare al acestora. | ||
| - | Tema va trebui transmisă sub forma unui mesaj la adresa de poștă electronică [[aipi2015@andreirosucojocaru.ro|]] sub forma unei arhive de tip .zip (având denumirea **Grupa34XCX_NumePrenume_Tema1.zip**) care să conţină script-ul pentru crearea şi popularea tabelelor din bazele de date (numele bazei de date fiind **Grupa34XCX_NumePrenume** pentru lanțul de restaurante, respectiv **Grupa34XCX_NumePrenume_Furnizor** pentru fiecare furnizor) – în rădăcina, sursele aplicaţiei (proiect Eclipse / NetBeans) precum şi un README în care să explicaţi funcționalitățile dezvoltate, problemele întâlnite și modul de soluționare a acestora. Subiectul utilizat va fi **[Tema1][Grupa34XCX][NumePrenume]**. Temele care nu respectă convențiile de nume indicate nu vor fi luate în considerare. Prezentarea se poate face numai după ce tema a fost predată sub această formă. | + | Tema va trebui transmisă sub forma unui mesaj la adresa de poștă electronică [[aipi2015@andreirosucojocaru.ro|]] sub forma unei arhive de tip .zip (având denumirea **Grupa34XCX_NumePrenume_Tema1.zip**) care să conţină script-ul pentru crearea şi popularea tabelelor din bazele de date (numele bazei de date fiind **Grupa34XCX_NumePrenume** pentru lanțul de restaurante, respectiv **Grupa34XCX_NumePrenume_Furnizor** pentru fiecare furnizor) – în rădăcina, sursele aplicaţiilor (proiecte Eclipse / NetBeans), configurațiile de rulare (parametrii ''java.rmi.server.codebase'', ''java.rmi.server.hostname'', ''java.security.policy''), precum şi un README în care să explicaţi funcționalitățile dezvoltate, problemele întâlnite și modul de soluționare a acestora. Subiectul utilizat va fi **[Tema1][Grupa34XCX][NumePrenume]**. Temele care nu respectă convențiile de nume indicate nu vor fi luate în considerare. Prezentarea se poate face numai după ce tema a fost predată sub această formă. |
| Temele vor fi comparate prin aplicaţii specializate pentru a se depista eventualele fraude. În această situaţie, întreg punctajul pe parcursul semestrului va fi anulat, studenţii implicaţi (atât originalul, cât şi copia / copiile) fiind obligaţi să repete disciplina – cu taxă – în anul universitar următor. | Temele vor fi comparate prin aplicaţii specializate pentru a se depista eventualele fraude. În această situaţie, întreg punctajul pe parcursul semestrului va fi anulat, studenţii implicaţi (atât originalul, cât şi copia / copiile) fiind obligaţi să repete disciplina – cu taxă – în anul universitar următor. | ||
