Sunteți pe pagina 1din 6

Ernest SCHEIBER

JAVA ÎN
CALCULUL ŞTIINŢIFIC

Editura Universităţii Transilvania din Braşov

2010
2
Cuprins

1 Aplicaţii numerice simple 7


1.1 Pseudocodul unui algoritm iterativ . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Metode numerice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Produse informatice ajutătoare . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.1 Reţinerea rezultatelor cu apache-log4j . . . . . . . . . . . . . . . . . 11
1.3.2 Verificarea rezultatelor cu junit . . . . . . . . . . . . . . . . . . . . 12
1.3.3 Unealta de dezvoltare apache-ant . . . . . . . . . . . . . . . . . . . 13
1.3.4 Gestiunea proiectelor cu apache-maven . . . . . . . . . . . . . . . . 16
1.4 O mini-bibliotecă numerică . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.5 Rezolvarea problemelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.6 Dezvoltarea mini-bibliotecii cu apache-maven . . . . . . . . . . . . . . . . 30
1.7 Utilizare prin OSGi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2 Accesarea ı̂n Java a unor produse matematice 41


2.1 Java cu Mathematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.2 Java cu Maple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.3 Java cu Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.4 Java cu Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.5 Java cu R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.6 Java cu GNU Scientific Library . . . . . . . . . . . . . . . . . . . . . . . . 66
2.7 Java cu Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

3 Pachete Java de calcul numeric 73


3.1 apache commons-math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.2 Jama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

4 Expresie de calcul dată ca String 81


4.1 Java Expression Parser - JEP . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.2 MathEclipse Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

5 Aplicaţii cu interfaţă grafică 87


5.1 Rezolvarea unei ecuaţii algebrice . . . . . . . . . . . . . . . . . . . . . . . . 88
5.1.1 Interfaţa grafică bazată pe swing . . . . . . . . . . . . . . . . . . . 88
5.1.2 Interfaţa grafică bazată pe SWT . . . . . . . . . . . . . . . . . . . 90
5.1.3 Interfaţa grafică bazată pe JavaFX . . . . . . . . . . . . . . . . . . 92

3
4 CUPRINS

5.1.4 Interfaţa grafică bazată pe apache-pivot . . . . . . . . . . . . . . . . 95


5.2 Rezolvarea unui sistem algebric de ecuaţii liniare . . . . . . . . . . . . . . . 98

6 Generarea reprezentărilor grafice 103


6.1 PtPlot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.2 jfreechart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.3 VisAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.4 Vizualizarea funcţiilor complexe . . . . . . . . . . . . . . . . . . . . . . . . 120

7 Aplicaţii Web 137


7.1 Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
7.1.1 Marcajul <form> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
7.1.2 Server Web - container de servlet . . . . . . . . . . . . . . . . . . . 139
7.1.3 Instalarea unui servlet . . . . . . . . . . . . . . . . . . . . . . . . . 141
7.1.4 Compilarea şi apelarea unui servlet . . . . . . . . . . . . . . . . . . 142
7.1.5 Realizarea unui servlet . . . . . . . . . . . . . . . . . . . . . . . . . 143
7.1.6 Program client al unui servlet . . . . . . . . . . . . . . . . . . . . . 150
7.1.7 Dezvoltarea unui servlet prin maven . . . . . . . . . . . . . . . . . 153
7.1.8 Servlet ca modul OSGi . . . . . . . . . . . . . . . . . . . . . . . . . 155
7.2 Java Web Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
7.3 Java Server Page – JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
7.3.1 Pagini JSP cu componente Java . . . . . . . . . . . . . . . . . . . . 170
7.4 Google Web Toolkit (GWT) . . . . . . . . . . . . . . . . . . . . . . . . . . 173
7.4.1 Dezvoltarea unei aplicaţii cu GWT . . . . . . . . . . . . . . . . . . 174
7.5 Integrare ı̂n platforma Google App Engine . . . . . . . . . . . . . . . . . . 185
7.5.1 Google App Engine - GAE . . . . . . . . . . . . . . . . . . . . . . . 185

8 Încărcarea unui fişier - upload 189


8.1 FileUpload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
8.2 Servlet pentru rezolvarea unui sistem de ecuaţii liniare . . . . . . . . . . . 194

9 Servicii Web 197


9.1 Modelul JAX-WS prin Metro . . . . . . . . . . . . . . . . . . . . . . . . . 198
9.1.1 Serviciu Web pentru calculul unei integrale . . . . . . . . . . . . . . 201
9.2 Servicii Web RESTful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
9.2.1 Modelul JAX-RS prin jersey . . . . . . . . . . . . . . . . . . . . . . 205
9.2.2 Serviciu JAX-RS pentru calculul unei integrale . . . . . . . . . . . . 212
9.2.3 Restlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
9.2.4 Restlet pentru calculul unei integrale . . . . . . . . . . . . . . . . . 223

10 Produsele informatice utilizate 227

Bibliografie 229
Prefaţă

Lucrarea de faţă are ca obiectiv problematica legată de implementarea ı̂n Java a


aplicaţiilor de calcul numeric, cu accentul pe valorificarea programelor ı̂n mediu distribuit.
Din partea cititorului vom presupune existenţa unor abilităţi de programare ı̂n Java
şi bineı̂nţeles, cunoştinţe elementare de calcul numeric. Anumite părţi din lucrare cer
cititorului familiarizarea cu un anumit produs informatic. Pentru fiecare produs utilizat,
Internetul oferă o mulţime de informaţii privind instalarea, utilizarea, exemple, interfaţa
de programare, răspunsuri la ı̂ntrebări frecvente, etc.
Implementarea unei metode de calcul numeric bazat pe un algoritm iterativ este
exemplificată prin crearea unei mini-biblioteci de programe numerice care este folosit
pe parcursul ı̂ntregii lucrări. Sunt utilizate produsele apache-log4j şi junit pentru con-
semnarea rezultatelor şi respectiv pentru verificarea programului. Pentru configurarea şi
executarea sarcinilor se va utiliza cu precădere apache-ant.
Vom pune ı̂n evidenţă posibilitatea utilizării ı̂n Java a resurselor oferite de produse
matematice de prim rang, precum Mathematica, Maple, Scilab, Matlab, R, scipy/Python,
GNU Scientific Library/C. Astfel, limbajul de programare Java apare ca un mediu de
lucru care leagă produsele amintite mai sus.
Utilizarea limbajului de programare Java ı̂n calculul ştiinţific este reprezentată prin
biblioteci de clase pentru rezolvarea unor probleme specifice domeniului. Lucrarea exem-
plifică doar folosirea pachetele apache commons-math şi Jama.
O evidenţă şi observaţii comparative a resurselor de calcul ştiinţific se găsesc pe In-
ternet [18, 19].
Utilizarea unei funcţii definită printr-un şir de caractere este o problemă de programare
specifică unei aplicaţii de calcul numeric care se doreşte utilizată prin intermediul unei
interfeţe grafice sau ı̂n mediu distribuit.
Interfeţele grafice şi aspecte privind vizualizarea unor obiecte matematice sunt de
asemenea atinse. Este dat un exemplu de interfaţă grafică programată ı̂n JavaFX, limbaj
dezvoltat ı̂n ultimii ani. Se prezintă soluţii pentru vizualizarea graficului unei funcţii, prin
intermediul unor produse specializate, integrabile ı̂n aplicaţii Java.
Tipurile de aplicaţii distribuite tratate ı̂n lucrare sunt aplicaţiile Web bazate pe servlet
şi serviciile Web dezvoltate pe modelul apelului de procedură la distanţă (Remote Proce-
dure Call) dar şi serviciile REST. Exemplificările utilizează pachetele metro şi respectiv,
jersey. Prin utilizarea pachetului apache commons-fileupload este dată o soluţie pentru
ı̂ncărcarea unui fişier.
Dintre tendinţele momentului privind dezvoltarea şi utilizarea aplicaţiilor informatice
evidenţiem:

5
6 CUPRINS

• Produse ca servicii - Software as a Service (SaaS)


prin care o aplicaţie se oferă unui client sub forma unui serviciu Web;

• Platforma ca serviciu - Platform as a Service (PaaS)


Serviciile sunt disponibile prin intermediul unor resurse soft şi hard care oferă sca-
labilitate, adică serviciul este disponibil oricărui număr de clienţi, fără modificarea
timpului mediu ı̂n care serviciul rezolvă problema clientului.
Softul care include servicii se vrea independent de platforma de utilizare a serviciului,
de limbajele de programare utilizate.
Pentru un asemenea produs informatic se spune că oferă posibilitatea de cloud com-
puting: serviciul este ı̂ntr-un nor. Această abordare este o formă nouă de valorificare
dar şi de utilizare a produselor informatice.
Google App Engine (GAE) este utilizat pentru instalarea unei aplicaţii Web ı̂n
simulatorul local al norului.

Codurile tuturor programelor din lucrare pot fi descărcate de pe pagina Web

http://cs.unitbv.ro/site/pagpers/scheiber.

Asistăm la perfecţionarea multor produsele informatice simultan cu evoluţia rapidă a


tehnologiilor informatice. Deseori pe aceaşi idee apar implementări diferite. Lucrarea de
faţă ı̂şi propune să ofere cititorului o privire de moment asupra unei sfere de preocupări
de programare distribuită ı̂n Java, prin aplicaţii care permit utilizarea programelor de
calcul numeric ı̂n Internet şi totodată să fie un sprijin pentru ı̂nvăţarea unor tehnici de
programare.

S-ar putea să vă placă și