Differences

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

Link to this comparison view

poo-ca-cd:laboratoare:clase-abstracte-interfete [2022/11/06 18:14]
bogdan.vatamanu [Exerciţii]
poo-ca-cd:laboratoare:clase-abstracte-interfete [2024/11/03 19:59] (current)
alexandru.sima1512 [Exerciţii] Adăugat cerințe pt. exercițiile din 2024
Line 48: Line 48:
 Pentru a exprima faptul că o metodă este abstractă (adică se declară doar interfaţa ei, nu și implementarea),​ Java folosește cuvântul cheie ''​abstract'':​ Pentru a exprima faptul că o metodă este abstractă (adică se declară doar interfaţa ei, nu și implementarea),​ Java folosește cuvântul cheie ''​abstract'':​
 <code java>​abstract void f();</​code>​ <code java>​abstract void f();</​code>​
-O clasă care conţine **metode abstracte** este numită **clasă abstractă**. Dacă o clasă are una sau mai multe metode abstracte atunci ea trebuie să conţină în definiţie cuvântul ''​abstract''​.+O clasă care conţine **metode abstracte** este numită **clasă abstractă**. Dacă o clasă are una sau mai multe metode abstracteatunci ea trebuie să conţină în definiţie cuvântul ''​abstract''​.
  
 Exemplu: Exemplu:
Line 232: Line 232:
  
 ==== Exerciţii ====  ==== Exerciţii ==== 
 +<note important>​
 +Pentru a încărca soluția, va trebui să accesați link-ul https://​code.devmind.ro/​login,​ să intrați pe tab-ul Contests, unde veți găsi laboratorul grupei voastre.
  
-**Schelet de laborator**:​ [[https://​github.com/​oop-pub/​oop-labs/​tree/​master/​src/​lab5|Laborator5]]+</note>
  
-1. (**2 puncte**) Implementaţi interfaţa ''​Task'' ​(din pachetul ''​lab5.task1''​) ​în cele 3 moduri de mai jos. +1. (**2 puncte**) Implementaţi interfaţa ''​Task''​ în cele 3 moduri de mai jos: 
-  * Un task care să afișeze un mesaj la output. Mesajul este specificat în constructor. (''​OutTask.java''​) +  * Un task (''​OutTask.java''​) ​care să afișeze un mesaj la output. Mesajul este specificat în contructorul clasei. 
-  * Un task care generează ​un număr aleator și afișează un mesaj cu numărul generat la output. Generarea se va realiza în constructor ​utilizându-se o instanțglobală a unui obiect de tip ''​Random''​ care a fost inițializat cu seed-ul **12345** ​[[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​Random.html#​Random-long-|Random]]. (''​RandomOutTask.java''​) +  * Un task (''​RandomOutTask.java''​) care genereaza ​un număr aleator ​de tip ''​int'' ​și afișeaza un mesaj cu numărul generat la output. Generarea se va realiza în constructor ​utilizandu-se o instanță globală a unui obiect de tip [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​Random.html#​Random-long-|Random]] ​care a fost inițializat cu seed-ul **12345**. 
-  * Un task care incrementează ​un contor global și afișează valoarea contorului după fiecare incrementare ​(''​CounterOutTask.java''​).+  * Un task (''​CounterOutTask.java''​) care incrementeaza ​un contor global și afișează valoarea contorului după fiecare incrementare. ​
  
 <​note>​**Notă**:​ Acesta este un exemplu simplu pentru [[http://​en.wikipedia.org/​wiki/​Command_pattern|Command Pattern]]</​note>​ <​note>​**Notă**:​ Acesta este un exemplu simplu pentru [[http://​en.wikipedia.org/​wiki/​Command_pattern|Command Pattern]]</​note>​
Line 244: Line 246:
 {{:​poo-ca-cd:​laboratoare:​clase-abstracte-interfete:​ex1.png?​600|}} {{:​poo-ca-cd:​laboratoare:​clase-abstracte-interfete:​ex1.png?​600|}}
  
-2. (**3 puncte**) Interfaţa ''​Container'' ​(din pachetul ''​lab5.task2''​) ​specifică interfaţa comună pentru colecţii de obiecte Task, în care se pot adăuga și din care se pot elimina elemente. ​Creaţi două tipuri de containere care implementează această clasă: +2. (**3 puncte**) Interfaţa ''​Container''​ specifică interfaţa comună pentru colecţii de obiecte Task, în care se pot adăuga și din care se pot elimina elemente. ​
-  - (**1.5p**) ''​Stack''​ - care implementează o strategie de tip [[https://​en.wikipedia.org/​wiki/​Stack_(abstract_data_type)|LIFO]] +
-  - (**1.5p**) ''​Queue''​ - care implementează o strategie de tip [[https://​en.wikipedia.org/​wiki/​Queue_(abstract_data_type)|FIFO]]+
  
-**Bonus**: Incercați să evitaţi codul similar în locuri diferite!+Interfața conține metodele:  
 +  ​''​pop():​Task''​ 
 +  ​''​push(Task):​void''​ 
 +  ​''​size():​int''​ 
 +  ​''​isEmpty():boolean''​ 
 +  * ''​transferFrom(Container):​void''​
  
-<note tip>​**Hint**:​ Puteţi reţine intern colecţia ​de obiecte, utilizând clasa [[http://docs.oracle.com/javase/8/docs/api/java/util/​ArrayList.html|ArrayList]] din SDK-ul Java. +Creaţi două tipuri ​de containere care implementează această clasă: 
- <code java> +  * ''​Stack''​ - care implementează o strategie de tip [[https://en.wikipedia.org/wiki/Stack_(abstract_data_type)|LIFO]] 
-ArrayList<​Task>​ list = new ArrayList<​Task>​();​ +  * ''​Queue''​ - care implementează o strategie de tip [[https://en.wikipedia.org/wiki/Queue_(abstract_data_type)|FIFO]] 
-</​code></​note>​+ 
 +**Bonus**: Incercați să evitaţi codul similar în locuri diferite!
  
 {{:​poo-ca-cd:​laboratoare:​clase-abstracte-interfete:​ex2.png?​600|}} {{:​poo-ca-cd:​laboratoare:​clase-abstracte-interfete:​ex2.png?​600|}}
  
-3. (**2 puncte**) ​În pachetul ''​lab5.task3''​ creați 4 interfețe: ''​Minus'',​ ''​Plus'', ​ ''​Mult'',​ ''​Div''​ care conțin câte o metodă aferentă numelui ce are ca argument un numar de tipul float.+3. (**2 puncte**) ​Creați 4 interfețe: ''​Minus'',​ ''​Plus'', ​ ''​Mult'',​ ''​Div''​ care conțin câte o metodă aferentă numelui ce are ca argument un număr ​de tipul float.
  
-Spre exemplu ​interfata ​''​Minus''​ va declara metoda:+Spre exemplu ​interfața ​''​Minus''​ va declara metoda:
 <code java> <code java>
 void minus(float value); void minus(float value);
 </​code>​ </​code>​
 Scrieți clasa ''​Operation''​ care să implementeze toate aceste interfețe. Pe lânga metodele interfețelor implementate aceasta va conține: Scrieți clasa ''​Operation''​ care să implementeze toate aceste interfețe. Pe lânga metodele interfețelor implementate aceasta va conține:
-  * un câmp ''​value''​ de tipul ''​float''​ asupra căruia se vor efectua operațiile implementate+  * un câmp ''​number''​ de tipul ''​float''​ asupra căruia se vor efectua operațiile implementate
   * o metodata getter ''​getNumber''​ care va returna valoarea câmpului ''​value''​   * o metodata getter ''​getNumber''​ care va returna valoarea câmpului ''​value''​
   * un constructor care primește ca parametru valoarea inițială pentru campul ''​value''​   * un constructor care primește ca parametru valoarea inițială pentru campul ''​value''​
  
-Pentru cazul în care metoda div este apelată cu valoare 0 operația nu va fi efectuată și se va afișa mesajul "​Division by zero is not posible".+Pentru cazul în care metoda div este apelată cu valoare 0 operația nu va fi efectuată și se va afișa mesajul "​Division by is not possible"
 + 
 +4. (**3 puncte**) Implementaţi clasa ''​Song''​ și clasa abstracta ''​Album''​.
  
-4. (**3 puncte**) În pachetul ''​lab5.task4''​ scrieți clasa ''​Song''​ și clasa abstacta ''​Album''​. +Song: 
-Song:  +  * stochează ​atributele ''​name'' ​de tip ''​String''​''​id'' ​de tip ''​int'' ​si ''​composer'' ​de tip ''​String''​ 
-  * stocheaza ​atributele ''​name''​''​String''​''​id''​''​int''​''​composer''​''​String''​ +  * are un constructor care va inițializa atributele specificate anterior 
-  * implementeaza ​un constructor care va inițializa atributele specificate anterior +  * implementează ​metodele de tip getter și setter pentru fiecare atribut 
-  * implementeaza ​metodele de tip getter și setter pentru fiecare atribut +  * suprascrie metoda ''​toString()''​ care va returna un ''​String'' ​de forma "​Song{name=''​name'',​ id=''​id'',​ composer=''​composer''​}"​
-  * suprascrie metoda ''​toString()''​ care va returna un șir de format ​"​Song{name=''​name'',​ id=''​id'',​ composer=''​composer''​}"​+
  
 Album: Album:
-  * stocheaza ​o listă de cântece ​(puteți folosi ArrayList) ​ +  * stochează ​o listă de cântece  
-  * declara ​metoda abstractă ​''​addSong''​ +  * declară ​metoda abstractă ​numită ​addSong ​care primește un Song și nu returnează nimic 
-  * implementeaza metodele ''​removeSong''​ +  * implementează metoda ​removeSong ​care primește un song și nu returnează nimic 
-  * suprascrie metoda ''​toString()''​ care va returna un si de format ​"​Album{songs=[''​Song''​''​Song''​''​...''​]}+  * suprascrie metoda ''​toString()''​ care va returna un ''​String'' ​de forma "​Album{songs=[Song,​ Song, ...]}"
  
-Dupa implementarea claselor ''​Song'' ​si ''​Albun''​ creați clasele ''​DangerousAlbum'',​ ''​ThrillerAlbum'' ​si ''​BadAlbum''​ care vor mosteni ​clasa ''​Album'' ​si vor implementa metoda ''​addSong'' ​dupa urmatoarele ​reguli: ​+După implementarea claselor ''​Song'' ​și ''​Album''​creați clasele ''​DangerousAlbum'',​ ''​ThrillerAlbum'' ​și ''​BadAlbum''​care vor moșteni ​clasa ''​Album'' ​și vor implementa metoda ''​addSong'' ​după următoarele ​reguli:
   * ''​DangerousAlbum''​ conține doar melodii cu id-ul număr prim   * ''​DangerousAlbum''​ conține doar melodii cu id-ul număr prim
-  * ''​ThrillerAlbum''​ conține melodii scrise doar de ''​Michael Jackson''​ și au id-ul număr par +  * ''​ThrillerAlbum''​ conține melodii scrise doar de ''​Michael Jackson''​ și au id-ul număr par
   * ''​BadAlbum''​ conține doar melodii care au nume de 3 litere și id număr palindrom   * ''​BadAlbum''​ conține doar melodii care au nume de 3 litere și id număr palindrom
  
-In cazul in care criteriu ​de adaugare ​specific unui album nu este respectat melodia nu va fi adaugata in acesta. ​+În cazul în care criteriul ​de adăugare ​specific unui album nu este respectatmelodia nu va fi adaugată în acesta. ​
  
poo-ca-cd/laboratoare/clase-abstracte-interfete.1667751278.txt.gz · Last modified: 2022/11/06 18:14 by bogdan.vatamanu
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