Ingineria Programarii


1. Timing Diagram

2. Component Diagram

3. Flyweight, dynamic linkage, decorator, cache management, chain of responsibility



 

Laborator 5

Vrem sa simulam functionarea unui editor de text care permite formatarea textului, mai exact permite setarea unui anumit font, a unei anumite marimi si a celor trei atribute obisnuite: bold, italic si underline pentru o portiune de text.

Pentru simulare vom folosi flyweight pattern, fiecare caracter reprezentand un obiect de tipul DocumentChar care contine un singur caracter. Mai multe caractere compun un text. Intr-o clasa DocumentCharFactory veti furniza o metoda pentru a accesa un caracter din lista de caractere din documentul vostru (utilizati un Hashtable pentru a stoca lista de caractere). In clasa DocumentChar veti implementa de asemenea o metoda care va afisa, pentru un parametru de tip DocumentChar, caracterul respectiv pe ecran (impreuna cu numele fontului care il caracterizeaza, formatarea - bold, etc. - si marimea).

Lista de texte dintr-un document o veti retine, eventual, intr-un ArrayList, iar lista de caractere din fiecare text o veti retine eventual tot intr-un ArrayList. Fiecare caracter adaugat in aceasta lista va insemna de fapt un DocumentChar returnat de metoda din DocumentCharFactory.

In continuare va trebui sa folositi chain of responsability pentru a cauta un sir de caractere in tot documentul vostru. Cautarea se va face in lista voastra de mai sus (in ArrayList), pentru fiecare text formatat intr-un anumit stil; daca sirul cautat nu exista in primul text, prin chain of responsability el este cautat in al doilea text (formatat diferit, evident); daca nici aici nu este prezent, el este cautat in al treilea text, etc.

FUNCTIONARE

1. Programul vostru trebuie sa ceara utilizatorului o anumita formatare (nume font, marime si daca textul este bold, italic si/sau underline), dupa care citeste exact o linie de text formatata in acel stil. Procesul se repeta pana cand utilizatorul nu mai doreste sa introduca noi linii de text.

2. In continuare i se cere utilizatorului sirul de cautat in textul documentului (cautarea se va face doar in texte care au aceeasi formatare); programul va afisa fie textul in care apare acest sir, fie va afisa ca nu exista sirul cautat daca el nu a fost gasit.

3. La terminare, programul va afisa fiecare caracter din text, impreuna cu o statistica simpla care evidentiaza cate caractere au fost stocate in text, comparativ cu cate elemente au fost stocate prin flyweight pattern.

4. Numele metodelor folosite la implementare raman la latitudinea voastra.

NOTA: Puteti folosi orice alte elemente auxiliare in programul vostru. Puteti de asemenea adauga parametrii metodelor dupa cum considerati. Puteti adauga metode si atribute suplimentare claselor voastre, fara a modifica insa interfetele si metodele abstracte.

IMPORTANT: Orice atribut al unei clase trebuie sa fie private sau protected , accesul la el se face prin intermediul unor metode public pe care le veti defini. Mentineti obligatoriu conventia de notare a limbajului Java in programele voastre.

+ extra 1p: Implementati o metoda care inlocuieste un sir din textul dat, cu un alt sir. Inlocuirea se aplica doar textelor care au acelasi stil de formatare, dar trebuie sa functioneze in fiecare text din cele care compun documentul.

+ extra 2p: Realizati diagramele UML ale claselor si obiectelor (class & object diagram) folosite in programul vostru, folosind orice program doriti. Evidentiati mostenirile si incapsularile, respectiv implementarile. Va trebui sa predati diagramele UML cerute in format JPEG (JPG), alaturi de codul sursa, in arhiva ZIP, prin e-mail.


"My software never has bugs. It just develops random features."