In aceasta lucrare de laborator vor fi
acoperite total sau partial urmatoarele probleme:
- Structurarea programelor Java
- Reprezentarea claselor si componentelor in UML, diagrame de clase si
de componente
- Generarea codului Java din diagrame de clase UML (ingineria software directa) folosind instrumentul CASE Rational Rose
- Obtinerea diagramelor UML corespunzatoare codului Java (ingineria software inversa) folosind instrumentul CASE Rational Rose
_________________________________________________________________
Programele Java sunt organizate sub
forma unor colectii de clase. In afara claselor nu pot fi facute decat
declaratii de import (includere) a bibliotecilor de clase. Clasele sunt in general continute in fisiere separate. Numele fisierului care contine o clasa
Java este chiar numele clasei pe care o contine, iar extensia este “java”. Astfel, o clasa “Salut1” va fi continuta intr-un fisier cu numele
“Salut1.java”.
Programele Java sunt executate incepand cu metoda main() (principala) a uneia dintre claselor programului. Aceasta metoda se numeste
punct de intrare in program, si prin
intermediul parametrilor pe care ii asteapta (tablou de obiecte de tip String –
sir de caractere) pot fi pasati parametri programului.
Un exemplu minimal de program Java este urmatorul, format dintr-o singura clasa,
numita Salut1, a carei metoda principala, main(), afiseaza un salut catre utilizator.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** Clasa
care ilustreaza elementele esentiale ale unui program Java. * Trebuie sa fie publica pentru ca are metoda
principala. * @author
Eduard C. Popovici */ public
class Salut1 { /**
Metoda principala (punct de intrare in program). * Este prima metoda executata de JVM (Java
Virtual Machine). * Primeste ca parametri argumentele din lina
de comanda. * Nu returneaza nici o valoare. Trebuie sa fie ‘public static’ */ public static void main(String[] args) {
System.out.println(“Buna ziua!”); // Afisarea unui text pe ecran } } |
Comentariile javadoc permit programatorilor Java generarea automata de documentatie HTML pornind de la comentariile declaratiilor de clase si de membri ai claselor (metode si atribute), comentariile din interiorul (corpul) metodelor fiind neglijate. De aceea, comentariile din interiorul metodelor pot fi facute in stil C sau C++.
Diagrama de clase UML asociata (Figura 1.b) va contine simbolul unei clase UML (Figura 1.a): o caseta cu trei compartimente dintre care cel de sus contine numele clasei (Salut1 in cazul nostru), cel din mijloc numele atributelor (niciunul in cazul nostru), iar cel de jos numele metodelor (main() in cazul nostru).
Fig. 1. Diagrama de clase UML
Etapele dezvoltarii programului Java dat:
Prima operatie este editarea programului intr-un editor de text, de exemplu, sub
Windows, Notepad.exe. Fisierul, care va contine cele 5 linii
de text alte programului, trebuie salvat
cu numele Salut1.java.
Pentru obtinerea codului de octeti Java, trebuie compilat codul din acest fisier. Daca se presupune utilizarea compilatorului Java
din linia de comanda (consola standard de intrare), atunci trebuie
executata urmatoarea comanda, in directorul in care se afla fisierul Salut1.java:
directorcurent> javac Salut1.java
In urma acestei comenzi, compilatorul Java va crea genera codul de octeti corespunzator intr-un fisier cu numele Salut1.class, in
directorul curent (acelasi director in care se afla si fisierul Salut1.java).
Pentru executia programului, acesta trebuie lansat in interpretor, folosind comanda:
directorcurent> java Salut1
Rezultatul va fi aparitia
mesajului Buna
ziua! pe ecranul
monitorului, in fereastra linie de comanda (consola standard de iesrire), o
linie sub comanda de executie, urmata de aparitia cursorului (in cazul nostrum:
directorcurent> ) pe linia urmatoare.
In final, pe ecran poate fi urmatoarea
secventa de informatii:
directorcurent> javac Salut1.java
directorcurent> java Salut1
Buna ziua!
directorcurent>
___________________________________________
Pentru a obtine diagrama UML de clase si diagrama UML de componente
corespunzatoare codului Java anterior se vor realiza cateva etape.
1. Deschiderea instrumentului (tool-ului) software Rational Rose. Se va deschide o fereastra de dialog cu numele Create New Model, in care se propune utilizatorului crearea unui nou model (meniul New) si eventuala incarcare a unui model de framework sau biblioteca (cum ar fi jdk-12, jfc-11, VB6 Standard) care contine modelul UML al acelei biblioteci.
Pentru a se evita incarcarea vreunui model de framework, se va actiona butonul Cancel.
2. Salvarea modelului UML sub numele si in directorul dorit (de exemplu, in directorul isw_lab\lab1_isw, sub numele Salut1_java.mdl) folosind comenzile File -> Save As… sau File -> Save sau Ctrl+S.
3. Pentru a incepe procesul ingineriei inverse pornind de la cod Java, trebuie selectat in meniul Tools optiunea Java / J2EE si suboptiunea Reverse
Engineer….
In acest fel se va deschide o noua fereastra, Java Reverse Engineer.
4. Se va specifica calea dorita, adica
directorul in care se afla codul sursa Java (in cazul nostru C:\isw_lab\lab1_isw). Pentru aceasta se va
actiona butonul Edit CLASSPATH…
In acest fel se va deschide o noua fereastra, Project Specification, in care se va actiona butonul cu semnificatia New (Insert), marcat mai jos ().
ceea ce va face activ butonul … marcat mai jos (). Actionand acest buton
se va deschide o noua fereastra, Add to Classpath,
in care trebuie actionat butonul Directory… pentru a se deschide un dialog pentru selectia directoarelor (Select Directory), cu ajutorul caruia se poate selecta directorul dorit.
Dupa confirmarea (actionand butonul OK) in fereastra Select Directory, se confirma (actionand butonul OK) in fereastra Project Specification, si se selecteaza calea dorita in fereastra Java Reverse Engineer.
5. Se selecteaza fisierele sursa dorite (Salut1.java in cazul nostru)
si se actioneaza butonul Add, astfel
incat numele fisierului (calificat de calea catre acesta) este adaugat in lista
fisierelor utilizabile pentru inginerie inversa (reverse engineering).
6. Se finalizeaza ingineria inversa selectand numele calificat al fisierului sursa si
actionand butonul Reverse (urmat de
actionarea butonului Done),
obtinandu-se modelul UML (diagrama de clase si diagrama de componente) pentru
clasa sursa.
Acum, in subfereastra Browser pot fi gasite specificatiile clasei Salut1 si a componentei Salut1.
Pentru aceasta, se vor deschide arborii Logical View si Component View (actionand pe semnele +). Se observa asocierea intre numele clasei Salut1 si numele componentei Salut1.
Selectand diferite elemente (numele clasei Salut1, numele metodei main()) se obtin in subfereastra Documentation (aflata sub subfereastra Browser) documentatiile acestor
elemente, documentatii care in codul sursa Java aveau forma de comentarii Java
in stil javadoc.
Pentru a popula diagrama de clase (Class Diagram: Logical View / Main) aflata in subfereastra diagramelor (in partea din dreapta sus), se “trag” (Drag and Drop) numele claselor (in cazul nostru Salut1) in acea fereastra.
Selectand
fereastra principala (
Aceasta a fost o ilustrare a ingineriei inverse pornind exclusiv de la cod Java.
_________________________________________________________________
In laborator se vor realiza
urmatoarele activitati:
- citirea explicatiilor
anterioare,
- efectuarea tuturor
etapelor anterioare pentru o clasa Java cu specificatiile de mai sus.
Ingineria directa (generarea codului Java) poate fi realizata pornind de la
cod Java si un model UML actualizat al acestuia.
Pentru a genera cod Java pornind de la modelul UML, selectam mai intai clasa al carei cod vrem sa
fie generat. Apoi selectam in meniul Tools
optiunea Java / J2EE si
suboptiunea Generate Code.
Daca am incerca acest lucru in aceasta faza, in subfereastra Log (plasata in partea de jos a ferestrei Rational Rose, contine un
istoric al comenzilor efectuate, si e importanta in special pentru avertizarile
– warnings - pe care ofera si pentru erorile pe care le semnaleaza) ar putea aparea o averzitare de genul:
WARNING: Component Salut1 - 1 method(s) found in code which is(are) not
in model - moved to end of file
iar fisierul Salut1.java ar
contine codul:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//Source file: C:\\isw_lab\\lab1_isw\\Salut1.java /** * Clasa
care ilustreaza elementele esentiale ale unui program Java. * Trebuie
sa fie publica pentru ca are metoda principala. *
@author Eduard C. Popovici */ public class Salut1
{ /** * Metoda
principala (punct de intrare in program). * Este
prima metoda executata de JVM (Java Virtual Machine). * Primeste ca parametri argumentele din lina de comanda. * Nu returneaza nici o valoare. Trebuie sa fie ‘public static’ * * @param args *
@roseuid 412B4C3B0271 */ public static void
main(java.lang.String[] args) { } } /* void
Salut1.main(String[]){ System.out.println("Buna
ziua!"); // Afisarea unui text pe ecran } */ |
Aceasta deoarece semnatura metodei main() in forma initiala (public static void main(String[] args)) nu se potriveste cu semnatura preferata de Rational Rose (public static void main(java.lang.String[] args)).
Pentru a restabili codul se muta linia 27 in locul liniei
22.
In fereastra Project Specification, obtinuta selectand in meniul Tools optiunea Java / J2EE si suboptiunea Project Specification…, se pot selecta:
- calea utilizand Classpath,
- stilul in care este scris codul Java, folosind varianta Style.
In sectiunea Indentation din meniul Style poate fi schimbat de exemplu numarul de caractere (Spaces) la 2, iar in sectiunea Opening Brace pot fi deselectate optiunile On new line for classes si On new line for methods.
Dupa aceste operatii, codul va arata astfel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//Source file: C:\\isw_lab\\lab1_isw\\Salut1.java /** * Clasa
care ilustreaza elementele esentiale ale unui program Java. * Trebuie
sa fie publica pentru ca are metoda principala. *
@author Eduard C. Popovici */ public class Salut1
{ /** * Metoda
principala (punct de intrare in program). * Este
prima metoda executata de JVM (Java Virtual Machine). * Primeste ca parametri argumentele din lina de comanda. * Nu returneaza nici o valoare. Trebuie sa fie ‘public static’ * * @param
args * @roseuid 412B4C3B0271 */ public
static void main(java.lang.String[]
args) {
System.out.println("Buna ziua!"); // Afisarea unui text pe
ecran } } |
Pentru a evita generarea identificatorului Rational Rose (@roseuid 412B4C3B0271), in fereastra Project Specification, in Code Generation se deselecteaza Generate Rose ID.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//Source file: C:\\isw_lab\\lab1_isw\\Salut1.java /** * Clasa
care ilustreaza elementele esentiale ale unui program Java. * Trebuie
sa fie publica pentru ca are metoda principala. *
@author Eduard C. Popovici */ public class Salut1
{ /** * Metoda
principala (punct de intrare in program). * Este
prima metoda executata de JVM (Java Virtual Machine). * Primeste ca parametri argumentele din lina de comanda. * Nu returneaza nici o valoare. Trebuie sa fie ‘public static’ * * @param
args */ public
static void main(java.lang.String[]
args) {
System.out.println("Buna ziua!"); // Afisarea unui text pe
ecran } } |
_________________________________________________________________
In laborator se vor realiza
urmatoarele activitati:
- citirea explicatiilor anterioare,
- efectuarea tuturor etapelor anterioare pentru clasele Java si modelele UML cu specificatiile de mai sus,
Ingineria inversa poate fi realizata si pornind de la un model UML deja
existent si cod Java modificat, pentru a se actualiza modelul UML.
Sa presupunem ca dorim sa realizam o noua versiune a programului Salut1.java (numita Salut2.java) si apoi sa actualizam
modelul Salut1_java.mdl
(redenumindu-l Salut2_java.mdl).
Mai intai se salveaza modelul Salut1_java.mdl sub
numele Salut2_java.mdl. Apoi se
salveaza fisierul Salut1.java sub
numele Salut2.java si se efectueaza
modificarile dorite.
De exemplu, se
poate introduce o noua clasa, cu numele AfisareConsola, plasata in fisierul AfisareConsola.java in acelasi director cu fisierele Salut1.java si Salut2.java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.io.*; /** Contine o metoda care permite afisarea
unui sir de caractere *
in consola standard de iesire */ public class AfisareConsola { /** Afiseaza in consola standard sirul de
caractere primit *
Metoda de clasa (este ‘static’) */ public static void afisareText(String textAfisat) { System.out.println(textAfisat); } } |
Clasa Salut2
va utiliza metoda oferita de clasa AfisareConsola pentru a afisa in consola sirul de caractere “Buna ziua!”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//Source file: C:\\isw_lab\\lab1_isw\\Salut2.java /** * Clasa
care ilustreaza elementele esentiale ale unui program Java. * Trebuie
sa fie publica pentru ca are metoda principala. *
@author Eduard C. Popovici */ public class Salut2
{ /** * Metoda
principala (punct de intrare in program). * Este
prima metoda executata de JVM (Java Virtual Machine). * Primeste ca parametri argumentele din lina de comanda. * Nu returneaza nici o valoare. Trebuie sa fie ‘public static’ * * @param args */ public
static void main(java.lang.String[]
args) { AfisareConsola.afisareText("Buna ziua!"); // Afisarea unui text pe ecran } } |
In modelul UML trebuie redenumite clasa si componenta Salut1, ele luand numele Salut2.
Selectand in meniul Tools optiunea Java / J2EE si
suboptiunea Reverse Engineer…, apoi
fisierele Salut2.java si AfisareConsola.java, si efectuand
ingineria inversa, modelul va fi actualizat.
_________________________________________________________________
In laborator se vor realiza
urmatoarele activitati:
- citirea explicatiilor anterioare,
- efectuarea tuturor etapelor anterioare pentru clasele Java si modelele UML cu specificatiile de mai sus,
- reluarea etapelor anterioare pentru alte clase Java:
(1) se va adauga o clasa PreluareSir, plasata in fisierul PreluareSir.java in acelasi director cu fisierul Salut2.java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import
java.io.*; /**
Contine o metoda care permite preluarea unui sir de caractere * din consola standard de intrare */ public
class PreluareSir { /** Preia din consola standard un sir de caractere si il returneaza *
Metoda de clasa (este ‘static’) */ public
static String preluareText()
throws IOException {
BufferedReader inConsola =
new BufferedReader(new InputStreamReader(System.in)); System.out.print("Introduceti un mesaj de salut: "); return inConsola.readLine(); } } |
(2) clasa Salut2 va utiliza metoda oferita de clasa PreluareSir pentru a prelua din consola un sir
de caractere in genul “Buna ziua!”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//Source file: C:\\isw_lab\\lab1_isw\\Salut2.java /** * Clasa
care ilustreaza elementele esentiale ale unui program Java. * Trebuie
sa fie publica pentru ca are metoda principala. *
@author Eduard C. Popovici */ public class Salut2
{ /** * Metoda
principala (punct de intrare in program). * Este
prima metoda executata de JVM (Java Virtual Machine). * Primeste ca parametri argumentele din lina de comanda. * Nu returneaza nici o valoare. Trebuie sa fie ‘public static’ * * @param args */ public
static void main(java.lang.String[]
args) throws IOException {
AfisareConsola.afisareText(PreluareSir.preluareText());
} } |
Ingineria directa (generarea codului Java) poate fi realizata si pornind de
la zero, prin crearea modelului UML de la zero.
Sa presupunem ca dorim crearea unui model UML din care sa se genereze cod Java.
Se va deschide Rational Rose (evitand incarcarea
bibliotecilor) si se va salva modelul curent (sub numele Salut3_java.mdl).
Se vor specifica, in fereastra Project Specification (obtinuta selectand in meniul Tools optiunea Java / J2EE si suboptiunea Project Specification…):
- calea dorita pentru generarea surselor Java (in Classpath, cu butonul cu semnificatia New (Insert), apoi butonul …, apoi butonul Directory…, apoi selectand directorul dorit). In cazul in care Rational Rose cunoaste deja acea cale, in Classpath trebuie selectata acea cale (acesta este cazul nostru, calea fiind cea utilizata pentru ingineria inversa C:\isw_lab\lab1_isw).
- stilul codului generat (in Style, indentare 2 spatii, cu Opening Brace deselectate)
- continutul codului generat (in Code Generation, deselectat Generate Code ID).
_________________________________________________________________
1. Pentru a crea clasa cu numele Salut3 exista cel putin doua variante:
(A) Cu fereastra Class Diagram: Logical View / Main activata, se actioneaza butonul care simbolizeaza o clasa () si se efectueaza click in interiorul ferestrei, pentru a se crea o noua clasa (purtand initial numele New Class).
(B) Se selecteaza Logical View in subfereastra Browser si, cu ajutorul meniului pop-up (obtinut prin apasarea butonului din dreapta al mouse-ului), se selecteaza New si Class, se schimba denumirea clasei, si se “trage” numele ei din Browser in fereastra Class Diagram: Logical View / Main.
In final se obtine simbolul clasei Salut3 in diagrama de clase.
_________________________________________________________________
2. Pentru a adauga o metoda se foloseste meniul pop-up, fie in Browser (A), fie in diagrama de clase (B), in care se selecteaza New Operation.
(A)
(B)
fie se deschide specificatia (Standard
Specification) clasei Salut3 (C),
(C1a) (C1b)
se selecteaza Operations,
(C2) (C3)
se insereaza o noua metoda, folosind comanda Insert din meniul pop-up,
(C4) (C5)
care este apoi denumita main().
(C6)
Specificatia acestei metode poate fi obtinuta prin dublu click pe numele ei, in specificatia clasei din care face parte,
sau cu ajutorul meniului pop-up, in fereastra Browser, folosind Open Standard Specification….
Se va stabili tipul returnat (Return Type) pentru metoda main() ca fiind void (scris cu “v” mic!), iar vizibilitatea Public.
Se va adauga eventual documentatia (Documentation) care va furniza
comentariile javadoc.
Se va selecta apoi Detail, unde se adauga argumentele (cu Insert in meniul pop-up). Argumentul args, al carui tip este tablou de obiecte de tip String (adica String []).
Pentru stabilirea tipului (A) se poate deschide specificatia parametrului args cu dublu click pe numele lui, apoi se editeaza tipul returnat,
(A1) (A2)
sau (B) se editeaza direct tipul returnat, in fereastra de specificare a operatiei (in varianta Detail).
(B1) (B2)
Pentru a stabili caracterul static al metodei main(), este selectata varianta Java a specificatiei metodei, apoi actionat butonul Edit Set…,
se deschide o fereastra de optiuni (Options, selectate fiind optiunile pentru metoda - Operation), in care se schimba valoarea proprietatii Static din False (implicita) in True.
Operatiile UML au vizibilitate implicita publica (Public,
), inlocuibila cu cea protejata (Protected, ), privata (Private, ) sau echivalentul Java al package (Implementation, ).
_________________________________________________________________
Sa reluam crearea unei clase, pentru o clasa numita AfisareInConsola care are metoda afisareSirCaractere(), care primeste un parametru sir de tip String si nu returneaza (tip returnat void).
Pentru a vizualiza semnaturile metodelor in diagrama de clase UML, trebuie validata optiunea Show Operation Signature (implicit invalidata!) din submeniul Options al meniului pop-up (deschis pe clasa careia dorim sa ii vizualizam semnatura).
Formatul semnaturii unei operatii UML (cu un singur argument) este (ca in Pascal):
numeOperatieUML(numeArgumentUML :
tipArgumentUML) : tipReturnatUML
pe cand formatul semnaturii unei
metode Java (cu un singur argument) este (ca in C, C++):
tipReturnatJava numeMetodaJava(tipArgumentJava numeArgumentJava)
_________________________________________________________________
3. Pentru a adauga un atribut (A) fie se foloseste meniul pop-up (in Browser sau in diagrama de clase), in care se selecteaza New Attribute, (B) fie se deschide specificatia (Standard Specification) clasei Salut3.
(A) (B)
Se selecteaza apoi Attributes, se insereaza atributul sirTest, i se stabileste tipul String,
se deschide specificatia atributului, in varianta Detail, pentru a i se valida caracterul Static.
Atributele UML au vizibilitate implicita privata (Private,
), inlocuibila cu cea protejata (Protected, ), publica (Public, ) sau echivalentul Java al package (Implementation, ).
_________________________________________________________________
4. Pentru a se realiza o asociere unidirectionala intre doua clase (prin care una dintre cele doua clase va avea o referinta catre cealalta) se utilizeaza butonul din bara de instrumente aflata intre subfereastra Browser si subfereastra diagramelor UML.
Cu acest buton actionat, se trage o sageata de la
simbolul clasei Salut3 la simbolul
clasei AfisareInConsola in diagrama
de clase Class Diagram: Logical View /
Main (apasand butonul stanga al mouse-ului in dreptul clasei Salut3 si eliberandu-l in dreptul
clasei AfisareInConsola).
Cu dublu click pe sageata (sau cu meniul pop-up, selectand Open Standard Specification…) se deschide specificatia asocierii (implicit unidirectionale).
Se recomanda denumirea sugestiva a “rolului” (capatului) dinspre varful sagetii (Role A), in cazul nostru afisor.
Asocierile UML conduc la atribute implicit publice, dar vizibilitatea asocierilor poate fi modificata in fereastra de specificare a acesteia.
Se pot observa in Browser, in arborele Logical View, toate clasele, metodele, atributul si asocierea create.
_________________________________________________________________
5. Pentru a genera cod Java mai trebuie adaugate doua componente, cu acelasi nume cu numele claselor, in
diagrama de componente.
Se selecteaza New
si Component in meniul pop-up deschis pe Component View in Browser, si se denumeste cu numele clasei corespunzatoare, dupa
care se “trage” numele din Browser in
diagrama de componente Component
Diagram: Component View / Main.
Sau se actioneaza butonul cu simbol de componenta
() din bara de instrumente (cu diagrama de
componente Component Diagram: Component
View / Main selectata) si se efectueaza click in diagrama de componente,
denumindu-se apoi componenta nou creata.
In final, se “trag” numele componentelor din Browser peste numele claselor corespunzatoare lor (sau invers). Se observa ca acum numele claselor sunt urmate de numele in paranteza ale componentelor.
=>
6. Pentru generarea codului Java, trebuie selectate clasele (individual sau impreuna), selectate Java / J2EE si apoi Generate Code in meniul pop-up (sau in meniul Tools).
Rational Rose poate cere asocierea claselor cu una dintre intrarile din Classpath, caz in care se selecteaza calea dorita pentru generarea codului, clasele pentru care se doreste generarea codului si se actioneaza butonul Assign.
De asemenea, este
posibila aparitia unor avertizari in subfereastra Log (istoric) de genul:
WARNING: Class Logical View::Salut3 - operation main - the type of
parameter args cannot be resolved - no import will be generated
Deoarece in semnatura metodei main() am specificat tipul argumentului args ca fiind String[] necalificat de pachetul de clase Java. Daca am fi utilizat java.lang.String[], generarea de cod ar fi fost fara probleme. Diagrama de clase ar fi aratat astfel:
sau astfel:
Codul rezultat poate fi vizualizat si editat in editorul intern al Rational Rose. Trebuie selectata clasa, selectate Java / J2EE si apoi Edit Code… in meniul pop-up (sau in meniul Tools).
Se observa aparitia in model si in cod a constructorilor impliciti ai claselor Salut3 si AfisareInConsola
(metode cu acelasi nume cu clasele, Salut3()
si AfisareInConsola(), si fara
parametri).
Daca se doreste dezactivarea generarii automate a constructorilor impliciti pentru o
clasa data, trebuie selectata varianta Java
a specificatiei clasei, apoi actionat butonul Edit Set…, care deschide o fereastra de optiuni (Options), in care se schimba valoarea
proprietatii GenerateDefaultConstructor din
True (implicita) in False.
Daca se doreste dezactivarea generarii automate a constructorilor impliciti pentru toate clasele, trebuie selectat Options… in meniul Tools, si obtinuta varianta Java a ferestrei Options,
in care se schimba pentru tipul clasa (Class) valoarea proprietatii GenerateDefaultConstructor din True (implicita) in False.
Dupa astfel de modificari pentru ambele clase, diagrama de clase arata astfel:
Codul rezultat este urmatorul:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//Source file: C:\\isw_lab\\lab1_isw\\Salut3.java /** * Testeaza
afisarea unui sir de caractere pe ecran (consola standard de iesire) */ public class
Salut3 { private static String sirTest; public AfisareInConsola afisor; /** * Metoda
principala (punct de intrare in program). * * @param args */ public static void
main(java.lang.String[] args) { } } |
1 2 3 4 5 6 7 8 9 10 11 |
//Source file:
C:\\isw_lab\\lab1_isw\\AfisareInConsola.java public class AfisareInConsola { /** * @param sir */ public static void afisareSirCaractere(String sir) { } } |
Ce a mai ramas de facut este de completat codul metodelor main() si afisareSirCaractere(). De exemplu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//Source file: C:\\isw_lab\\lab1_isw\\Salut3.java /** * Testeaza
afisarea unui sir de caractere pe ecran (consola standard de iesire) */ public class Salut3
{ private static String sirTest; public AfisareInConsola afisor; /** * Metoda
principala (punct de intrare in program). * * @param args */ public static void
main(java.lang.String[] args) { sirTest
= "Buna ziua!"; Salut3
test = new Salut3(); //
trebuie creat obiect al clasei
test.afisor = new AfisareInConsola(); // Salut3 pentru a accesa atributul
test.afisor.afisareSirCaractere(sirTest); // non-static afisor } } |
1 2 3 4 5 6 7 8 9 10 11 |
//Source file:
C:\\isw_lab\\lab1_isw\\AfisareInConsola.java public class AfisareInConsola { /** * @param sir */ public static void afisareSirCaractere(String sir) {
System.out.println(sir); } } |
Pentru compilarea si executia codului, poate fi plasat in acelasi director cu sursele
Java un fisier intitulat Salut3_CompilareLansare.bat
al carui continut sa fie:
javac Salut3.java
java Salut3
pause
Cu dublu click
pe numele fisierului Salut3_CompilareLansare.bat
in Windows Explorer vor fi compilate sursele cu compilatorul javac si lansata executia codului de
octeti Java cu interpretorul java de
catre JVM (Java Virtual Machine).
Pentru executia codului fara compilare, poate fi plasat in acelasi director cu sursele
Java un fisier intitulat Salut3_Lansare.bat
al carui continut sa fie:
java Salut3
pause
_________________________________________________________________
In laborator se vor realiza urmatoarele activitati:
- citirea explicatiilor
anterioare,
- efectuarea tuturor
etapelor anterioare pentru clasele Java si modelele UML cu specificatiile de
mai sus.
_________________________________________________________________