Sunteți pe pagina 1din 6

UNIVERSITATEA TEHNICA CLUJ-NAPOCA

FACULTATEA DE AUTOMATICA SI CALCULATOARE

TEMA 5
Tehnici de Programare

Nume: Drulea Daniel -Marius


Grupa: 3221
An II

II.ENUNTUL PROBLEMEI

Considerati implementarea (i) unui dictionar explicativ al limbii


Romane sau Engleze sau (ii) a unui dictionary de sinonime pentru limba
Romana sau Engleza. Se cere folosirea Java Collection Framework Map
pentru implementare.
Definiti si implementati o interfata specifica domeniului (populeaza /
adauga / indeparteza / copiaza / salveaza / cauta, etc.). Considerati
implementarea unor programe utilitare specifice pentru procesarea
dictionarelor. De exemplu:
- Implementati o metoda pentru verificarea consistentei dictionarului.
Un dictionar este consistent daca toate cuvintele utilizate pentru
definirea unui alt cuvint sunt la rindul lor definite.
- Implementati cautarea in dictionar folosind * (orice string, incluzind
null) sau ? (un character). DE exemplu, puteti cauta a?t*.
Folositi exemplele de mai sus pentru a va incalzi imaginatia
Nota.
Lucrurile bune, invatate in cadrul Temei 4 vor fi in continuare utilizate
(adica contracte, invarianti, assert, separarea interfetelor de
implementare, javadoc, etc.)

III.ANALIZA PROBLEMEI
M-am gandit sa implementez colectia sub forma unui arbore rosu si negru.
Trebuie astfel creeata o clasa care sa specifice tipul nodurilor din acest arbore
precum si informatia pe care aceste noduri o contin. In fiecare nod din colectie ar
trebui sa fie un cuvant, deci clasa care declara tipul nodului , Node numita ,trebuie
sa contina doua Stringuri ca si cheie si informatie plus campurile de legatura :
campurile tata, fiu stang si fiu drept . Avem , suplimentar un camp pentru culoare.
Avem nevoie de o clasa care sa implementeze structura de arbore sis a
defineasca metodele necesare pt a putea fi parcursa de un iterator. Am ales sa
implementez un iterator intern .
Am defnit o interfata MyIterator care contine cele trei metode specifice unui
iterator : hasNext() , next() , remove().
Colectia va implementa interfata MyIterator.
Aceasta clasa , RBTree , este de fapt arborele.

Pentru a realiza interfata cu utilizatorul , folosim o alta clasa: Main ; aici


sunt initializate datele de intrare cu ajutorul unor metode create pt a prelua date
dintr-un anumit fisier .

IV.PROIECTAREA CLASELOR

Atributele clasei Node sunt binecunoscute :

private Comparable<String> key;


private Object value;
private int color;
private Node father,left, right;

Interfata MyIterator contine metodele , neimplementate :


public boolean hasNext();
public Object next();
public void remove();

Clasa RBTree are un camp root care este radacina arborelui si un camp
suplimentar aux, de tipul Node folosit pentru parcurgerea cu iterator . Aux
reprezinta elementul current .
Metode :
public boolean hasNext();
public Object next();
public void remove();

Implementeaza metodele interfetei MyIterator.

Urmeaza set-erii si get-erii necesari pentru fiecare atribut de care este


nevoie in alte clase :
public
public
public
public
public
public

Node getRoot()
Node getAux()
void setRoot(Node yourRoot)
void setAux(Node yourAux)
int getNrElem()
void setNrElem(int nr)

Metodele de baza ale acestei clase:


public Node determineMinim(Node r) determina minimul din arbore
public Node determineSuccesor(Node q) determina

succesorul unui nod dat ca

parametru
public int insert_nonrec(Node z) primeste ca parametru o referinta la nodul de
inserat ;
--realizeaza inserarea unui nod in arbore
--introducerea se face in ordine alfabetica

public Node search(Product product)


__cauta un produs in arbore ; cautarea se face dupa identificatorul
produsului
__returneaza nodul care contine produdul respectiv sau null in cazul
in care produsul nu se afla in arbore .
public void delete_node(Node z)
__Sterge un nod din arbore
__inainte de a fi sters u n nod trebuie cautat
Clasa MyMap implementeaza metodele deinitede interfata map.
Este de fapt un hash de RBTree., adica o tabela de dispersie in care sunt folositi
arbori rosu_negru astfel definiti.
Implementeaza metodele definite de map:
public Object put(Object key, Object val)
//add (key, val) eventually replacing
// the existing Node with the same key
// Returns the value in that Node or null if such
// Node doesnt exist
public boolean containsKey(Object key)
public Object get(Object key)
public Object remove(Object key),
toate acestea folosind metodele definite in clasa RBTree.

Clasa Load contine un obiect de tip MyMap si metode pentru initializarea


acestui obiect cu informatiile continute de un anumit fisier dat ca parametru.
public void readLoadUsingScanner(String f)

-incarca

arboreal

cu informatiile din fisier


public void writeLoadInFile(String f)

-descarca

arboreal

in fisier.
Clasa Main realizeaza interfata cu utilizatorul . Un cadru cu butoane
specifice .
Constructorul clasei Main creeaza un obiect de tip Load apeland
constructorul implicit al acesteia si apoi initializeaza acest obiect cu datele
din fisier.
Contine 2 etode care verifica daca un cuvant este valid pentru cautare si
respectiv adaugare:
private boolean validate(String s)
__pentru cautare; cuvantul
poate sa contina steluta sau semnul intrebarii.

private boolean validate1(String s)

__pentru adaugarea unui nou

cuvant;

V. Implementare si testare
1.Daca incercam * rezulta:
audi =masina
avion =mijloc de transport
maria =ce nume frumos
marin =nume
marius =nume
mire =om
paine =aliment
pix*( =rechizita
placinta =cu branza e super buna ; doamne ce-as mai manca
ronaldinho =fotbalist la Barca
uite =ce anume? a iesit!!!!! ieeeeeeeeeeeeee
Am obtinut de fapt tot contiutul fisierului.
2. Daca incercam m?r* rezulta:
maria =ce nume frumos
marin =nume
marius =nume
mire =om
3. Daca incercam ?* rezulta deasemenea continutul fisierului:
audi =masina
avion =mijloc de transport
maria =ce nume frumos
marin =nume
marius =nume
mire =om
paine =aliment
pix*( =rechizita
placinta =cu branza e super buna ; doamne ce-as mai manca
ronaldinho =fotbalist la Barca
uite =ce anume? a iesit!!!!! ieeeeeeeeeeeeee

V.Diagrama UML

VI.Dezvoltari ulterioare
Se pot implementa contracte , pre si post conditii pentru fiecare
metoda in parte.

VII.Bibliografie
1. Cursuri si laboratoare An I, Semestrul 2, Autor Marius Joldos
2. Curs 3 ,Tehnici de programare, autor Ioan Salomie
3. Proiect Java an I