Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo:laboratoare:15 [2021/01/24 12:58]
carmen.odubasteanu created
poo:laboratoare:15 [2023/01/17 20:09] (current)
mihai.nan
Line 1: Line 1:
 ===== Laboratorul 14. ===== ===== Laboratorul 14. =====
 +
 +
 +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.
 +
 +<​hidden>​
 +<​HTML>​
 +  <iframe src="​https://​ocw.cs.pub.ro/​courses/​_media/​poo/​laboratoare/​laborator_13.pdf"​ width="​740"​ height="​720"></​iframe>​
 +</​HTML>​
 +</​hidden>​
 +
 +{{:​poo:​laboratoare:​arhiva_13.zip|Arhiva laborator}}
 +
 +
 +
 +
 +<​hidden>​
 +
  
 ==== Aplicatie Design Patterns ==== ==== Aplicatie Design Patterns ====
 +
  
 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. ​ 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. ​
Line 14: Line 72:
  
 {{:​poo:​laboratoare:​laborator12_schelet.zip|Schelet de laborator}} {{:​poo:​laboratoare:​laborator12_schelet.zip|Schelet de laborator}}
 +
  
 <​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/​lab12_var_final.pdf"​ width="​640"​ height="​720"></​iframe>​
 </​HTML>​ </​HTML>​
 +</​hidden>​
  
poo/laboratoare/15.1611485922.txt.gz · Last modified: 2021/01/24 12:58 by carmen.odubasteanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0