This is an old revision of the document!
Implementați o clasa Catalog care conține o lista cu obiecte de tip Course.
Va trebui sa va asigurați ca pentru aceasta clasa va putea exista o singura instanța care sa poata fi accesata din orice clasa a proiectului. Implementati metoda toString pentru clasa Catalog.
public class Catalog {
TODO – Adaugati aici implementarea exercitiului
}
public class Course {
}
''
=== Problema 2 ===
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ă. În cadrul acestei paradigme, funcțiile sunt valori de ordinul 1 ce pot fi manipulate ca orice altă valoare, iar funcționalele sunt funcții care manipulează alte funcții, primindu-le ca argumente sau returnându-le ca rezultat, în functie de cum e nevoie, fiind foarte utile în aplicarea anumitor modele de calcul des folosite.
Veți porni implementarea de la clasa ListUtil, pusă la dispoziție în arhiva laboratorului.
Explicatii pentru functionale:
-foldl(function, init, list)- returnează rezultatul aplicării functiei function pe rând asupra unui element din listă si a unui acumulator init. Ordinea folosirii elementelor din listă este de la stânga la dreapta;
Exemplu:
foldl(f(x, y) = x + y, 5, [0, 1, 2, 3]) ⇒ 11
-foldr(function, init, list)- are un comportament similar cu foldl, însă ordinea folosirii elementelor din listă este de la dreapta la stânga;
Exemplu:
foldr(f(x, y) = y, 4, [0, 1, 2, 3]) ⇒ 0
-map(function, list)- returnează lista rezultatelor aplicării unei functii f asupra fiecărui element dintr-o listă;
Exemplu:
map(f(x) = 2*x,[0, 1, 2, 3]) ⇒ [0, 2, 4, 6]
-filter(predicat, list)- returnează lista elementelor dintr-o listă care satisfac un predicat p (un predicat îl vom percepe ca o functie care are un rezultat de tip Boolean);
Exemplu:
filter(f(x) = x % 2 == 0, P[0, 1, 2, 3]) ⇒ [0, 2]
-reduce(function, list)- aplică functia pentru primele două elemente din lista, apoi pentru rezultatul obtinut anterior si urmatorul element si tot asa;
Exemplu:
reduce(f(x, y) = x + y, [47, 11, 42, 13]) ⇒ 113
-all(predicat, list)- primeste un predicat (metoda ce are ca rezultat un boolean) si verifică dacă toate elementele din listă satisfac predicatul;
Exemplu:
all(f(x) = x > 0, [0, 1, 2, 3]) ⇒ True ;
all(f(x) = x % 2 == 0, [0, 1, 2, 3]) ⇒ False
-any(predicat, list)- primeste un predicat si verifică dacă exista cel putin un element în lista care satisface predicatul.
Exemplu:
any(f(x) = x < 0,[1, 2, 3, 4]) ⇒ False ;
any(f(x) = x % 2 == 0,[1, 2, 3]) ⇒ True
Pentru testare, completati exemplele din clasa Test.
=== Problema 3 ===
Sa se scrie un program pentru afisarea pe ecran a liniilor aflate pe pozitii impare dintr-un fisier text. Fiecare linie va fi precedata de numarul ei si un spatiu. In implementare, se va folosi un obiect de tip LineNumberReader. Tratati toate exceptiile care ar putea sa apara exact acolo unde apar! Atentie la inchiderea fisierelor – sa se faca chiar daca apare exceptie la citire!
Pentru validarea acestei cerinte, puteti folosi fisierul text test01.in pus la dispozitie in arhiva laboratorului.
=== Problema 4 ===
Sa se scrie un program care citeste un text de la tastura si il salveaza intr-un fisier pe disc. Citirea se va face pana la introducerea cuvantului exit. In implementare se va uzita metoda readLine() pentru un obiect de tip DataInputStream sau BufferedReader. Tratati toate exceptiile care ar putea sa apara!
=== Problema 5 ===
Sa se implementeze un program care citeste din fisierul test02.in un text si determina numarul de cuvinte din text. Pentru citire se vor utiliza un obiect de tip FileReader si unul de tip StreamTokenizer.
<code java>
FileReader in = new FileReader(new File(“test02.in”));
StreamTokenizer str = new StreamTokenizer(in);
</code>
Arhiva laborator