Differences

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

Link to this comparison view

poo:laboratoare:08 [2017/11/14 13:11]
mihai.nan
poo:laboratoare:08 [2022/11/24 13:08] (current)
carmen.odubasteanu [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>
-K getKey(); +public class ArrayMapEntry<​K,​ V> implements Map.Entry<​K,​ V> { 
-V getValue();​ +private K key; 
-V setValue(V value); +private V value; 
-String toString();​ +...// constructor 
-boolean equals(Object o); +public ​K getKey(); 
-int hashCode();+public ​V getValue();​ 
 +public ​V setValue(V value); 
 +public ​String toString();​ 
 +public ​boolean equals(Object o); 
 +public ​int hashCode(); 
 +}
 </​code>​ </​code>​
  
Line 16: Line 25:
  
 <code java> <code java>
-Set entrySet();​ +public class ArrayMap<​K,​ V> extends AbstractMap<​K,​ V>{ 
-int size(); +... 
-V put(K key, V value);+public ​Set entrySet();​ 
 +public ​int size(); 
 +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();
 </​code>​ </​code>​
 Pentru testare, se va folosi clasa **//​Task3//​**,​ pusă la dispoziție în arhiva laboratorului. Pentru testare, se va folosi clasa **//​Task3//​**,​ pusă la dispoziție în arhiva laboratorului.
 +
 +=== Problema 4 ===
 +
 +Realizați un program care încearcă afișarea a unui tabel în două formate, astfel încât să fie ușor de importat într-un program de calcul tabelar (i.e. Excel - csv) sau pentru a fi ușor de citit pentru oameni - ASCII.
 +
 +Definiți clasa **//​Table//​** pentru a modela un tabel care să poată reprezenta căsuțe de orice tip (de. ex, pe un rând puteți avea atât numere cât și șiruri de caractere). Clasa va conține un **//​Vector//​** de **//​Vector//​** de **//​Object//​** și clasele
 +interne **//​AsciiPrinter//​** și **//​CsvPrinter//​**,​ utilizate la afișarea în format ASCII și respectiv csv a unui obiect de tip **//​Table//​**. Clasa **//​AsciiPrinter//​** va primi o listă de marimi ale fiecărei coloane pentru a putea să le aranjeze corespunzător,​ iar clasa **//​CsvPrinter//​** va primi un șir delimitator – în acest caz va fi “,”.
 +
 +Intuiți din clasa **//​Task4//​** care ar putea fi structura clasei **//​Table//​** și implementați-o.
 +
 +Clasa **//​AsciiPrinter//​** va afișa tabelul sub următoarea formă:
 +<​code>​
 +#| Materie ​                         | An| Semestru| Credite| ​
 +1| Programarea calculatoarelor ​     | 1 | 1       | 6      | 
 +2| Structuri de date                | 1 | 2       | 6      | 
 +3| Programare Orientata pe Obiecte ​ | 2 | 1       | 6      | 
 +</​code>​
 +
 +Clasa **//​CsvPrinter//​** va afișa tabelul sub următoarea formă:
 +<​code>​
 +#,​Materie,​An,​Semestru,​Credite
 +1,​Programarea calculatoarelor,​1,​1,​6
 +2,Structuri de date,1,2,6
 +3,​Programare Orientata pe Obiecte,​2,​1,​6
 +</​code>​
 +
 +<note tip>
 +<code java>
 +public interface Printer, Table.print(Printer p)
 +System.out.format
 +</​code>​
 +</​note>​
poo/laboratoare/08.1510657876.txt.gz · Last modified: 2017/11/14 13:11 by mihai.nan
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