SwRTc   ISw

Catedra de Telecomunicatii

 

 

  POO – an II

 

02/04/2009

 

 

TPI – an III

Inginerie Software in Comunicatii

(ISC)

 

 

                     

 

Laborator 3

Crearea diagramelor UML de comunicatie (colaborare) si secventa (MSC). Modificarea modelelor UML si reconstructia codului (Refactoring)

 

Descrierea laboratorului

 

In aceasta lucrare de laborator vor fi acoperite urmatoarele probleme:

- Crearea diagramelor UML de comunicatie (colaborare) din NetBeans 6

- Crearea diagramelor UML de secventa (MSC) din NetBeans 6

- Modificarea modelelor UML si reconstructia codului (Refactoring) in NetBeans 6

- Studiu de caz - diagrama UML de clase

- Alegerea temelor de documentare

- Cerintele minimale pentru proiect

 

 

Atentie: La inceputul laboratoarelor stergeti mai intai toate proiectele existente (click dreapta pe

 nodul proiectului in fereastra Projects, selectati Delete si confirmati ca doriti sa fie sterse

 surselein cazul proiectelor Java). La finalul laboratoarelor stergeti proiectele create.

 

 

3.1. Crearea diagramelor UML de comunicatie (colaborare)

 

 

In continuare veti invata cum sa folositi functiile UML ale IDE pentru a crea diagrame UML de comunicatie (foste de colaborare in UML 1).

 

O diagrama de comunicatie (colaborare) este o diagrama de interactiuni care subliniaza organizarea structurala a obiectelor care trimit si primesc mesaje. Ea arata interactiunile organizate in jurul instantelor si a legaturilor dintre ele

Diagrama de comunicatie (colaborare) poate fi folosita pentru a:

- descrie un scenariu specific prin ilustrarea deplasarii mesajelor intre obiecte

- arata o organizare spatiala a obiectelor si interactiunilor

 

3.1.1. Incarcarea proiectelor realizate in lucrarea anterioara

 

1. Verificati daca exista directorul numit \UMLTutorial pe drive-ul D: in directorul \isw, in subdirectorul cu numarul grupei, (de exemplu: D:\isw\441E\UMLTutorial).  Daca exista, stergeti-l.

2. Descarcati arhiva UMLTutorial.zip, in subdirectorul cu numarul grupei, (de exemplu: D:\isw\441E\).

3. Dezarhivati fisierul descarcat, folosind WinZip sau WinRar, cu click dreapta pe numele fisierului UMLTutorial.zip selectand apoi optiunea Extract Here.

Automat va fi creat subdirectorul \UMLTutorial iar in el subdirectoarele \UMLTutorialProject (in care se afla proiectul UML) si \JavaPrj1 (in care se afla proiectul Java).

4. Din meniul principal selectaži File> Open Project. Apare asistentul Open Project

Sub Look in, selectati calea proiectului UML anterior dezarhivat (de forma: D:\isw\441E\UMLTutorial\UMLTutorialProject).

Lasati selectat Open as Main Project

Faceti Click pe Open Project.

In Projects apare nodul UMLTutorialProject.

5. Din meniul principal selectaži File> Open Project. Apare asistentul Open Project

Sub Look in, selectati calea proiectului Java anterior dezarhivat (de forma: D:\isw\441E\UMLTutorial\JavaPrj1).

Deselectati Open as Main Project

Faceti Click pe Open Project.

In Projects apare nodul JavaPrj1.

 

3.1.2. Generarea unei diagrame de comunicatie (colaborare)

 

1. In fereastra Projects, deschideti nodul UMLTutorialProject > Model

2. Selectati urmatoarele noduri Class:

ATM

Branch

Consortium

Observatie: puteti selecta mai multe clase apasand Ctrl si selectand fiecare nod clasa

3. Click - dreapta pe ultima clasa selectata si alegeti Create Diagram From Selected Elements din meniul aparut. Se deschide New Wizard si se afiseaza Create New Diagram

4. Din lista Diagram Type selectati Collaboration Diagram

5. In campul Diagram Name scrieti CollaborationDiagram

6. Lasati setarea implicita in campul Namespace si apasati Finish. IDE-ul realizeaza urmatoarele:

Creeaza nodul CollaborationDiagram sub nodul Model in fereastra Projects

Afiseaza noua diagrama in editorul de diagrame (diagrama este alcatuita din trei clase descrise ca elemente vitale)

Deschide Modeling Palette

 

 

 

3.1.3. Rearanjarea unei diagrame de comunicatie (colaborare)

 

1. Cu click si prin deplasarea elementelor rearanjati diagrama ca mai jos:

 

2. In fereastra Projects selectati nodul clasei marcat ca User

3. Trageti clasa selectata in editorul diagramei si plasati-o deasupra elementului ATM, dupa cum este prezentat in figura:

 

3.1.4. Adaugarea legaturilor conector

 

Fiecare element din cadrul unei diagrame de comunicatie (colaborare) poate fi legat prin conexiuni la alte elemente. Aceste legaturi pot fi identificate si le pot fi adaugate fluxuri de mesaje.

1. Din sectiunea de baza a Modeling Palette selectati pictograma Connector Actor icon is displayed.

2. Selectati elementul Lifeline marcat User si apoi selectati ATM. O legatura este trasata intre cele doua elemente

3. Folositi aceeasi procedura pentru a trasa urmatoarele legaturi:

ATMConsortium

ConsortiumBranch

ATMBranch

Diagrama ar trebui sa fie similara celei de mai jos:

4. Deselectati pictograma Connector apasand click-dreapta oriunde in editorul de diagrame.

Collaboration Diagram With Links

 

3.1.5. Vizualizarea numerelor mesajelor

 

 

O diagrama de comunicatie (colaborare) prezinta un scenariu specific utilizand mesaje numerotate. Setarea implicita a IDE-ului ascunde aceste numere.

 

Parcurgeti urmatorii pasi pentru vizualizarea numerelor:

1. Click-dreapta in background-ul editorului diagramei CollaborationDiagram

2. Alegeti Show Message Numbers din meniul aparut.

Cand introduceti succesiunea de operatii (in urmatoarea sectiune), vor aparea numerele mesajelor.

Observatie: intregul reprezinta ordinea secventiala a mesajului in cadrul urmatorului nivel ierarhic al apelarii procedurale. Mesajele care difera printr-un intreg sunt secvential asociate acelui nivel. Spre exemplu, mesajul 3.1.4 urmeaza mesajului 3.1.3 in cadrul “activarii” 3.1.

 

3.1.6. Vizualizarea fluxurilor de operatii (mesaje)

 

 

Un flux de operatii (mesaje) este reprezentat pe diagrama ca o sageata etichetata, plasata paralel cu legatura. Aceasta legatura este folosita ca sa transporte sau sa implementeze livrarea mesajului catre elementul dorit.

1. In editorul diagramei selectati legatura Connector dintre User si ATM

2. Click-dreapta pe portiunea legaturii cea mai apropiata de elementul ATM

3. Alegeti Operations > public float getCashOnHand din meniul aparut. Fluxul de operatii este plasat pe diagrama si numetotat cu intregul 1

Observatie: Dati click pe butonul Fit to Window  pentru a vedea intreaga diagrama in editor.

4. Selectati legatura dintre ATM si Consortium, click-dreapta pe legatura apropiata elementului Consortium

5. Alegeti Operations > public void validateAccountInfo din meniul aparut.

IDE-ul plaseaza operatia selectata pe aceasta legatura si o numeroteaza cu intregul 1.1

Observatie: puteti selecta si repozitiona fluxul de operatii

 

3.1.7. Adaugarea unor operatii la o clasa existenta

 

 

In aceasta procedura puteti adauga o operatie noua legaturii Connector. Aceasta operatie este de asemenea adaugata clasei Branch in diagrama ClassDiagram si in codul sursa Java.

1. Click-dreapta pe legatura dintre Consortium si Branch, aproape de elementul Branch

2. Alegeti Operations > Add Operation din meniul aparut. Eticheta apare in diagrama cu termenul Unnamed subliniat

3. Scrieti verifyCardWithBank

4. Folositi sageata drapta pentru a muta cursorul pe campul operatiilor cu parametrii

5. Scrieti int stringCardStrip pentru parametru si apasati Enter.

Legatura este etichetata

1.1.1 : public void verifyCardWithBank(int stringCardStrip)

si operatia apare in clasa Branch in diagrama ClassDiagram

6. Pe legatura dintre ATM si Branch, click-dreapta aproape de elementul Branch

7. Alegeti Operations > public char getConnected din meniul aparut.

Legatura va fi etichetata

1.2 : public char getConnected()

Diagrama finalizata ar trebui sa arate ca in figura:

Completed Collaboration Diagram

3.1.8. Salvarea diagramei de comunicatie (colaborare)

 

Dupa ce ati terminat diagrama de comunicatie (colaborare), o puteti salva.

1. In editorul diagramei, click-dreapta pe tab-ul CollaborationDiagram

2. Selectati Save Document din meniul aparut.

Meniul se va inchide si diagrama va fi salvata.

Observatie: Cand iesiti din IDE sunteti intrebati daca doriti sa salvati proiectul dvs.

 

3.1.9. Rezumat

 

In acest tutorial ati invatat sa creati diagrame de comunicatie (colaborare) utilizand o diagrama de clasa deja existenta.

 

Ati invatat sa efectuati urmatoarele:

Sa generati o diagrama de comunicatie (colaborare)

Sa adaugati legaturi pe diagrama

Sa vizualizati numerele de mesaje pe diagrama

Sa vizualizati si etichetati fluxurile de operatii

Sa adaugati operatii legaturilor existente pe diagrama

Sa salvati diagrama

 

 

 

 

 

3.2. Crearea diagramelor UML de secventa (MSC)

 

In continuare veti invata cum sa folositi functiile UML ale IDE-ului pentru a crea diagrame de secventa (MSC = Message Sequence Chart). O diagrama de secventa este o reprezentare vizuala a interactiunilor dintre grupuri de obiecte ce colaboreaza intr-un sistem. Diagramele de secventa sunt alcatuite din linii verticale numite lifelines. Fiecare element lifeline reprezinta viata unui obiect. Lifeline-urile sunt conectate prin linii orizontale care ilustreaza mesaje ce trec de la un obiect din scenariu la alt obiect in scenariu.

 

3.2.1. Generarea unei diagrame de secventa (MSC)

 

1. In fereastra Projects, click-dreapta pe nodul UMLTutorialProject > Model > CollaborationDiagram si alegeti Create Diagram From Selected Elements din meniul aparut. Se deschide New Wizard si se afiseaza Create New Diagram.

Observatie: Ceea ce va intereseaza este una din cele doua tipuri de diagrame de interactiune disponibile in meniul aparut: diagrama de comunicatie (colaborare) si diagrama de secventa (MSC). Aceste diagrame aceste diagrame evidentiaza interactiunile dintre obiecte.

2. In lista de Diagram Type, selectati Sequence Diagram

3. In campul Diagram Name scrieti SequenceDiagram

4. Lasati setarea standard in campul Namespace si apasati Finish. IDE va realiza urmatoarele:

Creaza nodul SequenceDiagram sub nodul CollaborationDiagram in fereastra Projects

Afiseaza noua diagrama in editorul de diagrame (diagrama este alcatuita din elemente lifeline si mesaje din diagrama de comunicatie/colaborare)

Deschide Palette si afiseaza pictogramele utilizate in crearea diagramelor de secventa

Diagrama ar trebui sa fie asemanatoare celei de mai jos:

 

 

3.2.2. Reorganizarea unei diagrame de secventa (MSC)

Obiectele dintr-o tranzactie sunt simbolizate cu linii punctate verticale (lifeline), cu numele scrise in partea de sus. Pentru ca ordinea elementelor lifeline nu este neaparat predefinita la crearea diagramei de secventa, trebuie sa le rearanjati in acest moment.

1. Selectati elementul lifeline etichetat User si mutati-l in stanga diagramei

2. Rearanjati elementele ramase plasandu-le uniform pe suprafata editorului de diagrama. Aranjati elementele in urmatoarea ordine (de la stanga la drapta) :

User

ATM

Consortium

Branch

Diagrama ar trebui sa fie asemanatoare figurii:

                       

3.2.3. Adaugarea unui element mesaj reflexiv (catre sine)

 

Un element Message to Self reprezinta un mesaj trimis catre obiectul care il trimite. In continuare vor fi realizati pasii necesari pentru adaugarea unui element Message to Self.

1. Ar putea fi necesara prelungirea elementelor lifeline pentru a usura plasarea de mesaje. Pentru prelungirea lifeline-urilor parcurgeti urmatorii pasi:

Selectati elementul User

Click pe dreptunghiul albastru din centru si trageti dreptunghiul in jos pentru alungirea lifeline-ului

Repetati primii doi pasi pentru alungirea elementelor ramase, pana cand diagrama se aseamana celei de mai jos:

2. Din sectiunea de baza a Modeling Palette selectati pictograma de Message to self Message to Self icon

3. Click pe sectiunea de jos din elementul lifeline extins. IDE-ul plaseaza un mesaj catre sine pe lifeline

 

4. Click-dreapta oriunde in editorul de diagrama pentru deselectarea pictogramei Message to self

5. Pe mesajul catre sine click pe sageata de jos a mesajului. Proprietatile mesajului apar in fereastra Properties

6. In fereastra Properties, in campul Name, scrieti validateCashOnHandOperation si apasati Enter

7. Click-dreapta pe sageata de sus a mesajului catre sine si selectati Operations din meniul aparut. Urmatoarea figura indica unde sa pozitionati cursorul. Atentie la linia dubla aflata deasupra sagetii de sus

screen capture showing Message to Self cursor positioning

8. Alegeti Operations > Add Operation din meniul aparut. Un editor de o singura linie se deschide si afiseaza urmatoarea informatie:

visibility returnType name(parameter) {properties...}

definiti operatia in felul urmator:

  public boolean getIsOperating()

Partea de sus a mesajului este etichetata ca in figura:

Screen capture showing Labeled Message to Self

 

 

3.2.5. Adaugarea unui element mesaj apel de operatie

Deoarece operatia validateCashOnHand face parte din clasa ATM, este necesara plasarea fluxului de mesaje pe lifeline pentru apelarea acelei operatii.

1. Din sectiunea de baza a Modeling Palette selectati pictograma Synchronous Message  Synchronous Message icon.

2. Click pe elementul User, exact sub mesajul getCashOnHand()

3. Click din nou pe lifeline-ul ATM direct in dreapta primului click. Un mesaj si un mesaj return apar pe diagrama, ca in figura:

Observatie: Daca nu doriti afisarea mesajului return pe diagrama, click-dreapta in spatiul alb al editorului de diagrama. Deselectati Show All Return Messages din meniul aparut

4. Click-dreapta oriunde in editorul diagramei pentru deselectarea pictogramei Synchronous Message

5. Click-dreapta pe mesajul pe care tocmai l-ati creat si selectati Operations > Add Operation din meniul aparut

6. Scrieti validateCashOnHand si apasati Enter. IDE-ul eticheteaza mesajul pe diagrama si adauga mesajul ca o operatie in cadrul clasei ATM, in diagrama de clasa. In fereastra Projects extindeti nodul clasei ATM pentru verificarea listei de operatii, similara celei de mai jos

 

3.2.6. Utilizarea optiunii auto-exopandarii mesajelor

Pentru usurarea procesului de design, IDE-ul are o optiune de auto-expansiune a mesajelor. Cu auto-expansiunea selectata, cand un mesaj este plasat pe diagrama, spatiul este extins la latimea mesajului.

1. In header-ul gri de deasupra elementelor lifeline, click-dreapta in zona dintre numele elementelor User si ATM pentru setarea optiunii de auto-expansiune. Un meniu se deschide.

2. Selectati Set Width to Message Width

Un indicator apare in in spatiul dintre cele doua elemente, dupa cum este ilustrat in figura:

Screen capture showing Sequence Diagram with Set Width to Message Width option selected

3. Repetati pasii pentru a seta optiunea pentru latimea mesajului intre elementele ATM si Consortium si intre Consortium si Branch

 

3.2.7. Utilizarea mesajelor care creeaza obiecte noi

 

Notatia de creare mesaj permite crearea unui element lifeline sau a unei instante.

1. Din sectiunea de baza a Modeling Palette, selectati pictograma de Create Message Create Message icon

2. Click pe portiunea de jos a lifeline-ului Branch

3. Trasati legatura spre dreapta elementului Branch si click din nou

Un mesaj si un lifeline sunt plasate pe diagrama dupa cum este ilustrat in figura de mai jos :

4. Apasati tasta ESC pentru a deselecta pictograma`

5. Selectati lifeline-ul nou.

Fereastra Properties afiseaza proprietatile pentru acest element lifeline

6. In fereastra Properties, pe randul etichetat Representing Classifier, click pe sageata care indica in jos. Apare o lista drop-down

7. Selectati CashierStation din lista drop-down si apasati Enter

8. Click in editorul diagramei pentru vizualizarea elementului lifeline etichetat

Diagrama ar trebui sa fie similara celei de mai jos

 

3.2.8. Adaugarea mesajelor asincrone

 

Un mesaj asincron reprezinta un mesaj care nu blocheaza obiectul apelat. Acest tip de mesaj este capabil sa creeze un nou obiect, sa creeze un nou fir de executie sau sa comunice cu un fir de executie deja existent.

1. Din sectiunea de baza a Modeling Palette, selectati pictograma Asynchronous Message Asynchronous Message icon

2. Desenati o legatura intre lifeline-urile Branch si CashierStation selectand elementul Branch, iar apoi elementul CashierStation

3. Apasati ESC pentru a deselecta pictograma

4. Click-dreapta pe noua legatura si alegeti Operation > public int getStationID din meniul aparut. Aceasta actiune adauga operatia mesajului, dupa cum este ilustrat in figura de mai jos

Screen capture showing diagram with Asynchronous Message.

 

3.2.9. Utilizarea elementelor de control cu Combined Fragment

Fragmentul combinat permite exprimarea logica a alternativelor, optiunilor, exceptiilor, executiilor paralele, buclelor, negatiilor, regiunilor critice si a asertiilor, direct pe diagrama de secventa. Fragmentele combinate asigura o metoda de definire a conditiilor speciale si subproceselor pentru orice sectiuni sau lifeline-uri, specificand o zona unde conditiile sau subprocesele se aplica.

1. Din sectiunea Control a Modeling Palette selectati pictograma Combined Fragment Combined Fragment icon

2. Desenati elementul fragment combinat astfel incat sa incapsuleze mesajul public void validateCashOnHand, click in afara dreptunghiului punctat albastru, reprezentand mesajul, si click si trageti dreptunghiul pentru a inconjura mesajul.

Atentie sa nu selectati nici unul din elementele lifeline cand dati click. Fragmentul combinat ar trebui sa fie similar celui din figura:

Screen capture showing Combined Fragment placed around message

3. Apasati ESC pentru a deselecta pictograma

4. Click-dreapta pe eticheta assert declarata in fragmentul combinat si alegeti Interaction Operator > loop

Observatie: o bucla Interaction Operator arata ca fragmentul combinat reprezinta o bucla. De fiecare data cand o bucla se repeta, conditia este evaluata. Conditia poate include un numar specificat de repetari ale buclei.

5. Click-dreapta pe eticheta buclei fragmentului combinat, selectati Interaction OperandEdit Interaction Constraint din meniul aparut. Apare un camp expresie in fragmentul combinat

6. Dublu-click pe expresie pentru a face campul editabil, dupa cum este ilustrat in figura :

Screen capture showing Editable expression box on message

7. Scrieti x < 10 si apasati Enter

8. Click in editorul diagramei. Expresia este acceptata si afisata in campul destinat.

Diagrama trebuie sa semene cu cea din figura:

 

3.2.10. Salvarea diagramei de secventa (MSC)

 

Dupa finalizarea diagramei de secventa, trebuie sa o salvati.

1. In editorul diagramei, click-dreapta pe tab-ul SequenceDiagram

2. Selectati Save Document din meniul aparut. Meniul se inchide si diagrama este salvata.

Observatie: sunteti intrebat daca doriti sa salvati sau sa renuntati la diagrama, cand iesiti din IDE.

 

3.2.11. Rezumat

 

In acest tutorial ati invatat sa creati o diagrama de secventa utilizand o diagrama de comunicatie (colaborare) deja existenta. Ati invatat sa efectuati urmatoarele:

Sa generati o diagrama de secventa dintr-o diagrama de comunicatie (colaborare) existenta

Sa adaugati mesaje diagramei utilizand pictograme din Modeling Palette

Sa adaugati o legatura diagramei

Sa adaugati elemente fragment combinat

Sa salvati diagrama

 

 

 

3.3. Modificarea modelelor UML si reconstructia codului (Refactoring)

 

3.3.1. Pregatirea proiectelor demonstrative Java si UML

 

1. Din meniul principal al IDE-ului selectati File > New Project. Apare asistentul New Project.

2. Īn pagina Choose Project, īn panoul Categories expandaži nodul Samples si selectati  nodul UML. Panoul Projects este actualizat cu proiectele UML disponibile.

3. Īn panoul Projects, selectaži UML Bank App Sample ŗi faceži click pe Next.

4. Īn pagina Name and Location, lasati valoarea implicitć UMLBankAppSample pentru nume proiectului Java.

5. Pentru campul Project Location, click pe Browse pentru a naviga la folderul in care doriti sa salvati fisierele pentru proiectele demonstrative.

Selectati drive-ul D: directorul \isw, subdirectorul cu numarul grupei (de exemplu: D:\isw\441E\). 

De mentionat faptul ca atunci cand schimbati valoarea campului Projects Location, IDE-ul completeaza automat valorile din campurile Java Project Folder si UML Project Folder.

6. Lćsaži valoarea implicitć UMLBankAppSample-Model pentru numele proiectului UML.

7. Faceti click pe Finish. Apare caseta de dialog Opening Projects.

In fereastra Projects apar proiectele: UMLBankAppSample si UMLBankAppSample-Model.

    

8. In fereastra Projects, sub nodul UMLBankAppSample-Model expandati nodul Model si expandati nodul bankpack.

9. Selectati directorul  bankpack si toate elementele de sub directorul bankpack prin apasarea tastei Shift sau a tastei Ctrl atunci cānd faceti selecžia.

10. Faceži click dreapta pe elementele selectate ŗi alegeži Create Diagram From Selected Elements  din meniul de pop-up. Apare asistentul Create New Diagram.

11. In lista Diagram Type selectati Class Diagram.

12. Scrieti BankClassDiagram in campul Diagram Name, lasati UMLBankAppSample-Model in campul Namespace si faceti click pe Finish. IDE-ul realizeaza urmatoarele:

Sub nodul Model creeazć un nod BankClassDiagram

In editorul de diagrama se afiseaza noua diagrama

Deschide Palette

 

3.3.2. Modificarea proiectului UML

 

In continuare veti invata cum sa modificati un model UML, direct sau utilizand diagrame grafice. Veti observa ca toate modificarile sunt automat sincronizate in proiectele asociate Java si UML.  

1. Activati diagrama BankClassDiagram facand click pe fila diagramei sau prin dublu click in arborele de proiect.

2. Selectati Interface in zona Palette.

3. Faceti click pe butonul stanga al mouse-ului in spatiu liber din zona diagramei.

Veti obtine un nou element Interface in modelul UML

Observatie: Pana cand elementul nu are un nume nicio sursa nu este asociata cu el. Numele implicit este Unnamed, si poate fi schimbat.

Observatie: Aveti posibilitatea sa glisati un element catre un alt pachet, in arborele de proiect sau sa schitati link-ul de la elementul dvs. catre pachete de pe diagrama.

4. Selectati elementul Interface (daca nu este selectat). Scrieti numele IMyProject si apasati Enter.

Acum aveti sursa implicita pentru interfata IMyProject in aplicatia Java asociata.

Observatie: In cazul in care incepeti sa scrieti imediat dupa selectie, numele vechi va fi inlocuit cu unul nou. In caz care aveti nevoie de o corectie pentru nume faceti dublu click pe nume spre a intra in modul de editare.

5. Selectati Nested Link in paleta UML. Faceti click pe interfata IMyProject. Faceti click pe pachetul bankpack.

Acum, noua interfata este situata in pachetul de baza (in model si in proiectul Java).

6. Deselectati instrumentul Nesting Link facand click pe butonul dreapta al mouse-ului (sau prin ESC).

7. Selectati 100% in caseta de marire si derulati in zona de diagrama pana la interfata IMyProject.

8. Invocati meniul contextual (pop-up) cu click dreapta pe titlul Attributes in cadrul interfetei.

9. Faceti click pe meniul Insert Attribute.

Un atribut cu nume implicit a fost adaugat in model, nicio sursa nu este asociata cu atributul pana cand unul are nume implicit.

10. Stergeti numele implicit (cu backspace) si stergeti tipul implicit al atributului (int)

                        New Attribute With Cleared Type and Name.

11. Scrieti String ca tip de atribut si AUTHOR ca nume implicit, apasati = si scrieti "YOUR NAME", apoi apasati Enter.

Acum aveti atributul in model si in sursa, si orice modificare a atributului din model va afecta codul sursa.

New AUTHOR attribute in IMyProject interface.

12. Invocati Navigate to Source din meniul contextual (pop-up) al elementului Interface (este necesar mai intai sa folositi Generate Code...). Veti vedea sursa pentru noua interfata.

  package bankpack;           

  public interface IMyProject {

     public static final String AUTHOR = "YOUR NAME";

  }

Observatie: Puteti utiliza Navigate to Source din elementul nodului in proiectul UML, de asemenea in arborele de proiect sau accesand direct sursa din proiectul Java.

13. Activati fila diagramei BankClassDiagram. Adaugati o clasa diagramei (utilizati paleta), dandu-i numele Utils.

14. Mutati Utils in pachetul bankpack.

Ar trebui sa vedeti Utils.class in pachetul bankpack din proiectul Java cu sursa implicita.

  package bankpack;           

  public class Utils {

     public Utils() {

     }

  }

Observatie: Puteti adauga noi clase sau interfete la model folosind arborele proiectului, invocand meniul contextual (pop-up) pentru pachetul dorit si selectand Add > Element item.

15. Activati fila diagramei BankClassDiagram. Selectati butonul Orthogonal Layout The Orthogonal Style icon is displayed. din bara de instrumente a diagramei si faceti click pe Yes in caseta de dialog de avertisment.

16. Selectati clasa Utils in diagrama.

Observatie: Puteti gasi clasa Utils invocand Edit > Find in Model... din meniul principal. Doar scrieti Utils pentru a descoperi si apasati Find. Puteti da dublu click pe rezultatul cautat si diagrama corespunzatoare se va deschide, iar clasa Utils va fi selectata pe diagrama.

17. Apasati tasta Delete. Confirmati stergerea obiectului (nu debifati caseta).

Confirmation for Delete Element from Diagram.

Clasa este eliminata atat din modelul UML (din arborele proiectului si toate diagramele) cat si din proiectul Java.

Observatie: Aveti posibilitatea de a elimina atribute si operatii din model si din sursa selectand si apasand pe Delete sau invocand Delete din meniul contextual (pop-up). Atentie, daca aveti de gand sa eliminati pachetul din diagrama cu optiunea stergere din model bifata, tot continutul pachetului va fi eliminat din model si din proiectul Java (daca diagrama este situata in pachet, atunci si diagrama va fi stearsa) .

18. Invocati Add > Package din meniul contextual (pop-up) al nodului Model.

19. Scrieti numele pachetului temp in asistent.

20. Selectati caseta Create Scoped Diagram. Apasati pe OK. Pachetul cu diagrama scoped apare in model. Diagrama este deschisa dupa creare. Pachetul gol nu este propagat catre proiectul Java.

21. Selectati Class in paleta. Faceti click pe zona din diagrama temp. Noua clasa Unnamed apare.

22. Scrieti numele A si faceti click in zona libera a diagramei. Prima clasa a fost numita A, si apare o a doua clasa, nedenumita. Denumiti-o B si creati o a treia clasa C. Toate clasele apar pe diagrama, in proiectul Java si in arborele proiectului.

23. Selectati legatura Generalization in paleta.

24. Faceti click pe clasa C din diagrama. Faceti click pe clasa A din diagrama. Relatia de generalizare apare pe diagrama, in arborele proiectului UML si se propaga catre proiectul Java.

 

  package temp;           

  public class C extends A {

     public C() {

     }

  }

25. Selectati legatura Navigable Aggregation in paleta.

26. Faceti click pe clasa C si apoi pe clasa B de pe diagrama. O legatura Navigable Aggregation apare pe diagrama, in arborele modelului si se propaga catre proiectul Java.

Metode accessor sunt create in model si in sursa.

 

  package temp;            

public class C extends A {

   private B mB;

     public C() {

     }

     public B getB() {

        return mB;

     }

     public void setB(B val) {

        this.mB = val;

     }

  }

27. Selectati pachetul temp din arborele proiectului. Invocati Delete din meniul contextual (pop-up). Selectati Yes in fereastra de dialog pentru a sterge obiectul. Selectati Yes pentru a confirma stergerea pachetului.

Delete Package Confirmation.

28. Selectati Yes pentru a confirma stergerea celorlalte elemente.

Pachetul temp cu tot continutul, incluzand toate clasele si diagrama de clase, este eliminat din proiectul UML. Pachetul de test cu clasele sale este eliminat din proiectul de Java. Toate filele pentru diagrama si clasele sterse sunt inchise.

 

3.3.3. Modificarea surselor Java

 

In continuare veti invata cum sa modificati sursele Java.  

1. In proiectul Java adaugati un pachet numit helpers. Pachetul gol apare in proiectul Java, dar nu se propaga catre proiectul UML.

2. Adaugati in pachet clasa HelpMe. Folositi Reverse Engineer....

Pachetul helpers si clasa HelpMe apar in model. Clasa si pachetul pot fi glisate catre diagrama. Sau pot fi modificate din cadrul proiectului UML.

3. Activati diagrama BankClassDiagram. Glisati clasa HelpMe catre diagrama.

4. Activati fila sursa. Adaugati o noua metoda in codul sursa al clasei HelpMe

 

     public int getSomeID () {

        return 0;

     }

Metoda apare in model in nodul HelpMe si pe diagrame (daca folositi Reverse Engineer...).

5. Adaugati un atribut in codul sursa al clasei HelpMe

 

     private long info = 15;

Metode de tip accesor (getInfo() si setInfo()) sunt generate in sursa. Atributul si metodele accesor sunt propagate catre model (daca folositi Reverse Engineer...).

6. Adaugati in codul sursa al clasei HelpMe

 

     import bankpack.*;

7. Adaugati in declaratia clasei HelpMe

 

     implements IMyProject

Relatia este propagata catre modelul UML (daca folositi Reverse Engineer...).

8. Activati diagrama BankClassDiagram. Apasati butonul Relationship Discovery Relationship Discovery icon. din bara de instrumente.

Relatia ar trebui sa apara pe diagrama BankClassDiagram.

 

3.3.4. Reconstructia codului (Refactoring)

 

In continuare veti invata cum sa reconstruiti codurile sursa Java.  

1. Adaugati un nou element Class pe diagrama BankClassDiagram. Numiti-o HelpUser.

Elementul clasa apare pe diagrama si in model.

2. Selectati legatura Navigable Composition in paleta.

 

3. Faceti click pe clasa HelpUser si apoi pe clasa IMyProject din diagrama.

Navigable Composition apare pe diagrama, in arborele modelului si se propaga in proiectul Java. Metode accesor sunt create in model si in sursa.

4. Faceti dublu click pe numele IMyProject din elementul diagrama IMyProject pentru a deschide editorul de nume. Acum puteti sa scrieti noul nume.

Element renaming on diagram.

5. Redenumiti interfata IMyProject in GenericHelpProject.

Este redenumit elementul Interface in diagrama, in model si in sursa.

  package bankpack;           

  public interface GenericHelpProject {

     public static final String AUTHOR = "YOUR NAME";

  }

 

6. Dupa redenumirea elementului, este realizata automat reconstructia (Refactoring) care redenumeste toate utilizarile vizibile pe diagrama: adica tipul parametrului si tipul returnat in cazul metodelor accesor generate pentru legatura Composition.

Sunt redenumite si utilizarile elementelor modificate: in relatia Generalization si in metodele accesor generate de relatia Composition.

7. Deschideti fisierul sursa pentru clasa HelpMe.

Observati ca este redenumita si utilizarea elementului Interface in clasa extinsa

8. Deschideti fisierul sursa pentru clasa HelpUser

Observati ca sunt redenumite si tipul atributului si tipurile din metodele accesor.

Composition related usages are renamed.

 

3.3.5. Modificarea modelului UML din arborele proiectului

 

1. Faceti click cu butonul dreapta al mouse-ului pe nodul helpers din arborele proiectului UML.    In meniul contextual deschis, selectati Add > Element

'Add | Element' menu item. 

2. In asistent selectati Class la Element Type. Scrieti HelpThem in campul Element Name. Apasati OK.

Element creation wizard.

 

3. Un nou nod clasa HelpThem este creat. Expandati nodul clasei create pentru a vedea constructorul creat. Glisati clasa HelpThem din arbore in diagrama.

 

 

4. Deschideti meniul contextual pentru nodul clasei si invocati comanda  Add > Atributte. Este creat un nou atribut private int Unnamed.

5. Deschideti meniul contextual pentru nodul atribut creat. Invocati comanda Rename.

6. Scrieti noul nume, theirInfo, si apasati butonul OK

Rename dialog window.

 7. Atributul este redenumit. Sunt create metode accesor.

8. Deschideti Properties pentru nodul atribut theirInfo.

Properties menu item.

9. In campul Type schimbati din int in History: bankpack

Inchideti fereastra Properties.

10. Tipul atributului si tipurile folosite in metodele accesor au fost schimbate.

11. Deschideti meniul contextual pentru nodul clasei si invocati comanda  Add > Operation. 

O noua operatie public void Unnamed() este creata.

12. Deschideti meniul contextual pentru nodul operatiei create. Invocati comanda Rename. Introduceti noul nume: setTheirNames si apasati butonul OK.

Operatia este redenumita.

13. Deschideti Properties pentru nodul functiei setTheirNames. Faceti click pe butonul '...'  pentru a particulariza valoarea Parameters.

14. In fereastra de dialog care se deschide, public void setTheirNames( ) - Parameters apasati butonul New Parameter... Scrieti numele name1. Schimbati tipul in String.

16. Adaugati un alt parametru de acelasi tip cu numele name2. Apasati butonul OK si inchideti fereastra Properties. Modificarile apar in clasa.

 

 

3.3.6. Rezumat

 

In acest tutorial ati invatat sa efectuati urmatoarele:

Sa adaugati noi elemente in model si sa intelegeti relatia model UML – sursa Java.

Sa intelegereti utilizarea si impactul operatiei de reconstructie (refactoring) in timpul modificarii elementelor diagramelor.

Sa modificati proiectul din arborele sau.

 

 

3.4. Studiu de caz - diagrama UML de clase

 

 

Sa se reia pasii anteriori din sectiunile 3.1 si 3.2 pornind de la proiectele aflate in arhiva MonitoringCaseStudy.zip care contine modelul UML si sursele Java pentru studiul de caz de la lucrarea anterioara, realizata pornind de la urmatoarea diagrama UML de clase:

 

Verificati daca exista directorul numit \MonitoringCaseStudy pe drive-ul D: in directorul \isw, in subdirectorul cu numarul grupei, (de exemplu: D:\isw\441E\MonitoringCaseStudy).  Daca exista, stergeti-l.

Descarcati arhiva MonitoringCaseStudy.zip in subdirectorul cu numarul grupei, (de exemplu: D:\isw\441E\).

Dezarhivati fisierul descarcat, folosind WinZip sau WinRar, cu click dreapta pe numele fisierului MonitoringCaseStudy.zip selectand apoi optiunea Extract Here.

Continuati cu pasi asemanatori celor din sectiunile 3.1 si 3.2.

 

 

Atentie: La finalul laboratoarelor stergeti proiectele create (click dreapta pe nodul proiectului in

           fereastra Projects, selectati Delete si confirmati ca doriti sa fie sterse surselein cazul Java)

 

 

3.5. Alegerea temelor de documentare

 

 

Stabilirea temelor se va face cel tarziu in saptamana a 10-a. Prezentarea se va face la ultimul laborator.

 

Se noteaza (10 puncte) realizarea si prezentarea temelor de documentare.

 

Surse bibliografice pentru temele de documentare: referinte webliografice propuse (actualizate pe 02.04.2009)

 

Formatul temelor de documentare: coming soon

 

 

3.6. Cerintele minimale pentru principalele categorii de proiect

 

 

Proiectul (care poate fi realizat individiual sau in echipe de 2-3 studenti) va consta in

- documentarea dezvoltarii unui sistem software cu ajutorul NetBeans IDE si

- eventual utilizarea NetBeans IDE pentru dezvoltarea acelui sistem software.

 

 

Proiectul va putea fi notat cu un bonus suplimentar de pana la 5 puncte (in functie de complexitate) in cazul in care va avea asociat si o realizare practica noua.

 

 

Ca alternativa, se poate realiza doar documentarea dezvoltarii unui sistem software cum este cel (dezvoltat si documentat anterior cu ajutorul instrumentului CASE Rational Rose IDE) aflat la adresa http://discipline.elcom.pub.ro/swrtc/index%20of%20proiect.htm folosind

- instrumentul CASE (Inginerie Software Asistata de Calculator) NetBeans IDE sau

- a altui instrument CASE

 

Categorii de proiecte (si cerintele minimale asociate):

 

1) Documentarea UML folosind un instrument CASE a fazei finale (a doua) a proiectului exemplu, http://discipline.elcom.pub.ro/swrtc/index%20of%20proiect.htm, care implica realizarea

- diagramei de clase a subsistemului client

- diagramei de clase a subsistemului server

- unor diagrame de secventa ale subsistemului client (diferite niveluri de detaliu, minimum 1)

- unor diagrame de secventa ale subsistemului server (diferite niveluri de detaliu,minimum 1)

- unor diagrame de secventa ale sistemului in ansamblu (minimum 1)

- diagramei masinii de stari a subsistemului client (clasei Client)

- diagramei masinii de stari a subsistemului server (clasei Server)

- diagramei de activitati a subsistemului client (clasei Client)

- diagramei de activitati a subsistemului server (clasei Server)

- unor diagrame de componente (la nivel de sistem, subsistem, etc., minimum 1)

 

2) Documentarea UML folosind un instrument CASE bazat pe UML (NetBeans IDE, etc.) a unui proiect pentru sistem software desktop (de sine statator, non-Web), care implica realizarea

- unor diagrame de clase si/sau dependenta (la nivel de sistem, subsistem, etc., minimum 2)

- unor diagrame de secventa relativ complexe (la nivel de sistem, subsistem, etc., minimum 3)

- unor diagrame ale masinilor de stari relativ complexe (minimum 2)

- unor diagrame de activitati relativ complexe (minimum 2)

- unor diagrame de componente (la nivel de sistem, subsistem, etc., minimum 1)

 

3) Documentarea UML folosind un instrument CASE bazat pe UML (NetBeans IDE, etc.) a unui proiect pentru sistem software Web, care implica realizarea

- unor diagrame ale cazurilor de utilizare pentru serviciile oferite (minimum 2)

- unor diagrame de secventa relativ complexe (la nivel de sistem, subsistem, etc., minimum 3)

- unor diagrame ale masinilor de stari pentru navigabilitatea in pagini (minimum 2)

- unor diagrame de activitati pentru navigabilitatea in pagini (minimum 2)

- unor diagrame de componente (la nivel de sistem, subsistem, etc., minimum 1)

 

4) Alte categorii

             - urmeaza sa fie definite