Differences

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

Link to this comparison view

poo:laboratoare:08 [2018/11/12 16:45]
carmen.odubasteanu
poo:laboratoare:08 [2025/11/24 22:49] (current)
george.tudor1906 [ATENTIE! Se vor folosi tipuri generice in toate problemele!]
Line 6: Line 6:
  
 === 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 15: Line 19:
 public boolean equals(Object o); public boolean equals(Object o);
 public int hashCode(); public int hashCode();
 +}
 </​code>​ </​code>​
  
Line 20: 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 35: Line 44:
 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//, 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 53: 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 66: 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 104: Line 115:
 </​code>​ </​code>​
 </​note>​ </​note>​
 +
 +=== 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>​
 +
poo/laboratoare/08.1542033929.txt.gz · Last modified: 2018/11/12 16:45 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