This shows you the differences between two versions of the page.
|
poo:laboratoare:14 [2019/01/14 11:51] carmen.odubasteanu |
poo:laboratoare:14 [2026/01/12 08:32] (current) george.tudor1906 |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Laboratorul 14. ===== | ||
| - | ==== Aplicatie Design Patterns ==== | + | ===== Laboratorul 13 – Fluxuri I/O. Funcționale ===== |
| - | Scopul vostru este să dezvoltați o aplicație care ajută elevii din clasa a 3-a să rezolve expresii artimetice. Aplicația voastră va primi ca input un String ce conține o expresie și va arăta elevului pas cu pas cum se rezolvă expresia. | ||
| - | Formatul expresiilor de input va fi: **(operand operator operand)** unde operatorul poate fi ''*,/,-,+'' iar operanzii pot fi valori numerice sau alte expresii. | + | {{:poo:laboratoare:arhiva_13.zip|Arhiva laborator}} |
| - | Un posibl input poate fi ''(2 + ( (9 / 3) * ( (5 * 2) - (6 * 1))))''. | ||
| - | Evolutia expresiei va fi: ''(2 + (3 * (10 - 6))) -> (2 + (3 * 4)) -> (2 + 12) -> 14''. | + | === Problema 1 === |
| - | Această aplicație se va numi "Arithmo". Veti porni de la scheletul de baza atasat laboratorului si veti urmari indicatiile din breviarul din cadrul laboratorului: | + | Să se scrie un program pentru afișarea pe ecran a liniilor aflate pe poziții impare |
| + | dintr-un fișier text. Fiecare linie va fi precedată de numărul ei și un spațiu. | ||
| - | {{:poo:laboratoare:laborator12_schelet.zip|Schelet de laborator}} | + | În implementare, se va folosi un obiect de tip **LineNumberReader**. |
| + | Cerințe: | ||
| + | * Tratați toate excepțiile care ar putea să apară exact acolo unde apar! | ||
| + | * Atenție la închiderea fișierelor – să se facă chiar dacă apare excepție la citire! | ||
| + | |||
| + | Pentru validarea acestei cerințe, puteți folosi fișierul text //test01.in// pus la | ||
| + | dispoziție în arhiva laboratorului. | ||
| + | |||
| + | === Problema 2 === | ||
| + | |||
| + | Să se scrie un program care citește un text de la tastatură și îl salvează într-un | ||
| + | fișier pe disc. Citirea se va face până la introducerea cuvântului **exit**. | ||
| + | |||
| + | În implementare se va utiliza metoda **readLine()** pentru un obiect de tip | ||
| + | **DataInputStream** sau **BufferedReader**. | ||
| + | |||
| + | Tratați toate excepțiile care ar putea să apară! | ||
| + | |||
| + | === Problema 3 === | ||
| + | |||
| + | Să se implementeze un program care citește din fișierul //test02.in// un text și | ||
| + | determină numărul de cuvinte din text. | ||
| + | |||
| + | Pentru citire se vor utiliza un obiect de tip **FileReader** și unul de tip **StreamTokenizer**. | ||
| + | |||
| + | <code java> | ||
| + | FileReader in = new FileReader(new File("test02.in")); | ||
| + | StreamTokenizer str = new StreamTokenizer(in); | ||
| + | </code> | ||
| + | |||
| + | === Problema 4 – Funcționale === | ||
| + | |||
| + | Realizați o arhitectură unificată, similară cu Collections, pentru manipularea listelor | ||
| + | care să conțină: | ||
| + | |||
| + | * Interfața **Function**, parametrizată corespunzător, care conține o metodă **execute**, având ca parametru un obiect de tip **A** și un rezultat de tip **B**, unde **A** și **B** sunt două tipuri formale; | ||
| + | |||
| + | * Interfața **Addition** folosită pentru a calcula suma a două numere de tip **T**, unde **T** este un subtip al lui **Number** (aceasta va conține o metodă **zero** care va întoarce elementul neutru al operației de adunare și o metodă **add**, care primește două obiecte de tip **T** și returnează suma lor); | ||
| + | |||
| + | * Doi algoritmi polimorfici: **reverse** care inversează elementele unei liste și **sum** care calculează suma elementelor din listă; acești algoritmi trebuie să poată fi folosiți pe implementări diferite de liste, deoarece le abordează la nivel de interfață; | ||
| + | |||
| + | * O serie de metode care au un comportament similar cu funcționalele din paradigma funcțională. | ||
| + | |||
| + | Veți porni implementarea de la clasa **ListUtil**, pusă la dispoziție în arhiva laboratorului. | ||
| + | |||
| + | <hidden> | ||
| <HTML> | <HTML> | ||
| - | <iframe src="https://ocw.cs.pub.ro/courses/_media/poo/laboratoare/lab12_var_final.pdf" width="640" height="720"></iframe> | + | <iframe src="https://ocw.cs.pub.ro/courses/_media/poo/laboratoare/laborator_13.pdf" width="740" height="720"></iframe> |
| </HTML> | </HTML> | ||
| + | </hidden> | ||
| + | |||