This shows you the differences between two versions of the page.
|
poo:laboratoare:08 [2017/11/15 08:23] mihai.nan |
poo:laboratoare:08 [2025/11/24 22:49] (current) george.tudor1906 [ATENTIE! Se vor folosi tipuri generice in toate problemele!] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ===== Laboratorul 08. ===== | ===== Laboratorul 08. ===== | ||
| + | |||
| + | ==== ATENTIE! Se vor folosi tipuri generice in toate problemele! ==== | ||
| + | |||
| + | {{:poo:laboratoare:lab8.zip|Arhiva laborator}} | ||
| === Problema 1 === | === Problema 1 === | ||
| - | Să se definească o clasă generică **//ArrayMap//** pentru un dicționar realizat ca o colecție de obiecte **//ArrayMapEntry//** (colecția va fi obiect de tip **//ArrayList//**). Clasa **//ArrayMapEntry//** va implementa interfața **//Map.Entry//** și va avea următoarele metode: | + | Să se definească o clasă **__generică__** **//ArrayMap//** pentru un dicționar realizat ca o colecție de obiecte **//ArrayMapEntry//** (colecția va fi obiect de tip **//ArrayList//**). Clasa **//ArrayMapEntry//** va implementa interfața **//Map.Entry//** și va avea următoarele metode: |
| <code java> | <code java> | ||
| + | public class ArrayMapEntry<K, V> implements Map.Entry<K, V> { | ||
| + | private K key; | ||
| + | private V value; | ||
| + | ...// constructor | ||
| public K getKey(); | public K getKey(); | ||
| public V getValue(); | public V getValue(); | ||
| Line 11: | Line 19: | ||
| public boolean equals(Object o); | public boolean equals(Object o); | ||
| public int hashCode(); | public int hashCode(); | ||
| + | } | ||
| </code> | </code> | ||
| Line 16: | Line 25: | ||
| <code java> | <code java> | ||
| + | public class ArrayMap<K, V> extends AbstractMap<K, V>{ | ||
| + | ... | ||
| public Set entrySet(); | public Set entrySet(); | ||
| public int size(); | public int size(); | ||
| public V put(K key, V value); | public V put(K key, V value); | ||
| + | .... | ||
| + | } | ||
| </code> | </code> | ||
| Line 29: | Line 42: | ||
| === Problema 2 === | === Problema 2 === | ||
| - | Definiți clasa **//Catalog//** care moștenește clasa **//TreeSet//**, specificând tipul **//Student//** pentru elementele din colecție. Clasa **//Student//** este definită în interiorul clasei **//Catalog//**, implementează interfața **//Comparable//** și conține următoarele câmpuri: un **//String//** //name//, pentru reținerea numelui studentului, un **//double//** //media//, | + | Definiți clasa **//Catalog//** care moștenește clasa **//TreeSet//**, specificând tipul **//Student//** pentru elementele din TreeSet. Clasa **//Student//** este definită în interiorul clasei **//Catalog//**, implementează interfața **//Comparable//** și conține următoarele câmpuri: un **//String//** //name//, pentru reținerea numelui studentului, un **//double//** //media//, |
| pentru medie, și un **//int//** //clazz// pentru reținerea numărului grupei din care face parte studentul. Compararea a doi studenți se realizează în funcție de medie (crescător), iar dacă acestea sunt egale, se realizează o sortare alfabetică. | pentru medie, și un **//int//** //clazz// pentru reținerea numărului grupei din care face parte studentul. Compararea a doi studenți se realizează în funcție de medie (crescător), iar dacă acestea sunt egale, se realizează o sortare alfabetică. | ||
| + | Se va defini si metoda toString! | ||
| Clasa trebuie să pună la dispoziție metode pentru următoarele operații: adăugarea unui student, căutarea unui student după nume (va returna null dacă nu există un student cu numele indicat în colecție), ștergerea unui student din catalog (primește ca parametru numele studentului), ordonarea alfabetică a studenților dintr-o grupă, primită ca parametru. | Clasa trebuie să pună la dispoziție metode pentru următoarele operații: adăugarea unui student, căutarea unui student după nume (va returna null dacă nu există un student cu numele indicat în colecție), ștergerea unui student din catalog (primește ca parametru numele studentului), ordonarea alfabetică a studenților dintr-o grupă, primită ca parametru. | ||
| Line 41: | Line 55: | ||
| public Catalog ( ) ; | public Catalog ( ) ; | ||
| - | public void addStudent(String name, float media, int clazz); | + | public void addStudent(String name, double media, int clazz); |
| public Student getStudent ( String name) ; | public Student getStudent ( String name) ; | ||
| public void removeStudent ( String name) ; | public void removeStudent ( String name) ; | ||
| Line 49: | Line 63: | ||
| === Problema 3 === | === Problema 3 === | ||
| - | Definiți clasa generică **//LinkedList//** care va implementa interfața **//Iterable//** și va modela o listă liniară simplu înlănțuită. | + | Definiți clasa **__generică__** **//LinkedList//** care va implementa interfața **//Iterable//** și va modela o listă liniară simplu înlănțuită: |
| + | class LinkedList<T> implements Iterable<T> | ||
| În clasa **//LinkedList//** se vor defini: | În clasa **//LinkedList//** se vor defini: | ||
| - | * o clasă internă privată statică **//Node//** care conține două referințe: una pentru valoarea pe care o reține nodul și una pentru nodul următor din listă; și doi constructori: unul cu doi parametri (valoarea și nodul următor) și unul cu un parametru (valoarea) - va atribui valoarea null nodului următor; | + | * o clasă **//generica//** internă privată statică **//Node//** |
| + | <code> private static class Node<T> </code> | ||
| + | care conține două referințe: una pentru valoarea pe care o reține nodul și una pentru nodul următor din listă; și doi constructori: unul cu doi parametri (valoarea și nodul următor) și unul cu un parametru (valoarea) - va atribui valoarea null nodului următor; | ||
| * două elemente de tip **//Node//**, reprezentând primul și respectiv ultimul element din listă; | * două elemente de tip **//Node//**, reprezentând primul și respectiv ultimul element din listă; | ||
| - | * o clasă internă **//ListIterator//** ce va implementa interfața **//Iterator//**; | + | * o clasă internă **//ListIterator//** ce va implementa interfața generica **//Iterator//**; |
| * metodele prezentate în blocul de cod de mai jos. | * metodele prezentate în blocul de cod de mai jos. | ||
| Line 62: | Line 79: | ||
| //Insereaza un nod la sfarsitul listei | //Insereaza un nod la sfarsitul listei | ||
| public void add(T data); | public void add(T data); | ||
| - | //Returneaza primul nod din lista | ||
| - | public T getNode(); | ||
| //Returneaza un obiect de tip ListIterator | //Returneaza un obiect de tip ListIterator | ||
| public Iterator<T> iterator(); | public Iterator<T> iterator(); | ||
| Line 101: | Line 116: | ||
| </note> | </note> | ||
| - | {{:poo:laboratoare:lab8.zip|Arhiva laborator}} | + | === Problema 5 === |
| + | |||
| + | Realizați un program pentru gestionarea inventarului unui magazin. Definiți clasa Magazin care conține un HashMap<String, Produs> în care cheia este codul produsului și valoarea este obiectul Produs. Clasa internă Produs va avea atributele: nume (String), preț vechi (double), preț nou (double), stoc (int), redus (boolean) și un constructor care validează datele (nume nenul și nevid, preț ≥ 0, stoc ≥ 0). Se va defini și metoda toString(). | ||
| + | |||
| + | Clasa Magazin trebuie să pună la dispoziție metode pentru adăugarea produselor și pentru aplicarea unei reduceri de 15% produselor cu stoc sub 50. Programul va afișa toate prețurile cu două zecimale, rotunjite corespunzător. | ||
| + | |||
| + | Testați implementarea în main cu minim 3 produse. | ||
| + | |||
| + | <code> | ||
| + | public void adaugaProdus(String cod, String nume, double pret, int stoc); | ||
| + | public void aplicaReduceriStocMic(); | ||
| + | public void afiseazaInventar(); | ||
| + | </code> | ||