Aplicatie de Registratura pe Platforma Android

Aplicație de registratură
pe platforma Android

Aplicație de registratură pe platforma Android

Cuprins

Introducere

Scopul și structura proiectului

Baze de date relaționale

Despre bazele de date

Limbajul SQL

Sistemul ANDROID

Generalități

Caracteristicile sistemului Android

Arhitectura sistemului Android

Dezvoltarea aplicațiilor Android

Medii de dezvoltare pentru aplicații.Android.
IDE-ul Android Studio

Limbajul JAVA

Generalități

Programarea orientată pe obiecte

Scrierea programelor Java

Elementele de bază ale limbajului de programare Java

Clase și obiecte în Java

Moștenirea

Interfețe

Applet-uri

Interfețe grafice

Formatul JSON

Medii de dezvoltare pentru aplicații Java. IDE-ul Eclipse

Limbajul XML-QL

Generalități despre limbajul XML

Necesitatea introducerii limbajului XML-QL

Limbajul PHP

Realizarea aplicației

Scopul aplicației

Documentare

Structura aplicației

Algoritmul aplicației

Concluzii

Bibliografie

INTRODUCERE

Această lucrare își propune crearea unei aplicații pentru gestiunea studenților dintr-o instituție de învățământ superior, dezvoltată pentru sistemul de operare Android, cu ajutorul limbajului Java, utilizând bazele de date relaționale și beneficiind de unele facilități ale limbajului SQL (limbajul structurat de interogare a bazelor de date), ale limbajului de interogare XML-QL și ale limbajului de scripting PHP.

Având în vedere constrângerile în ceea ce privește bugetul alocat proiectului, cea mai potrivită soluție a fost de a utiliza software open-source (gratuit). Astfel, programarea s-a realizat în mediul de dezvoltare integrat (integrated development environment – IDE) Android Studio, care este o platformă cu acces liber, și utilizând limbajele menționate mai sus, care, de asemenea, pot fi folosite liber.

SCOPUL ȘI STRUCTURA PROIECTULUI

Scopul proiectului este realizarea unei aplicații pentru dispozitive mobile (smartphone-uri sau tablete) care să poată fi descărcată și instalată de pe Play Store, cu ajutorul căreia utilizatorii studenți, creându-și un cont de acces, să își introducă datele personale de identificare într-o bază de date aflată pe un server, de unde aceste date să poată fi accesate și actualizate, și, de asemenea să permită crearea și tipărirea diverselor formulare de cerere necesare studenților în perioada studiilor, în relația acestora cu secretariatele facultăților.

Formularele tipizate vor fi disponibile pe server, ele urmând a fi completate automat cu datele studentului, introduse în prealabil de acesta, iar mai apoi aceste formulare vor fi trimise prin e-mail spre personalul secretariatului, care va da curs solicitării.

Accesul studenților la baza de date se va face securizat, pe bază de nume de utilizator și parolă.

Un factor important avut în vedere la realizarea proiectului a fost utilizarea de resurse financiare cât mai reduse, acest deziderat fiind atins pe deplin, având în vedere că s-au utilizat numai instrumente software gratuite, de tip open-source.

Lucrarea este structurată în câteva capitole dedicate prezentării instrumentelor utilizate la realizarea aplicației (baze de date relaționale, sistemul Android, limbajul Java, limbajul XML-QL, limbajul PHP), urmate de prezentarea aplicației propriu-zise, a principiilor de funcționare, a modului de realizare și a modului de implementare a acesteia. În final, se prezintă câteva concluzii privind utilitatea aplicației și posibile dezvoltări viitoare.

BAZE DE DATE RELAȚIONALE

Despre bazele de date

O bază de date, uneori numită și bancă de date (abreviat BD), reprezintă o modalitate de stocare a unor informații și date pe un suport extern (un dispozitiv de stocare), cu posibilitatea extinderii ușoare și a regăsirii rapide a acestora.[1]

O bază de date este un ansamblu de date integrat, anume structurat și dotat cu o descriere a acestei structuri și a relațiilor dintre date.[2] Altfel spus, baza de date este o colecție de informații corelate despre subiectul studiat, relațiile logice dintre aceste informații și tehnicile de prelucrare corespunzătoare (sortare, regăsire, apreciere, ștergere, adăugare, inserare, modificare).

De obicei o bază de date este memorată într-unul sau mai multe fișiere. Bazele de date sunt manipulate cu ajutorul sistemelor de gestiune a bazelor de date – DBMS (Database management systems).

Sistemele de gestiune a bazelor de date sunt aplicații software care interacționează cu utilizatorii, cu alte aplicații și cu baza de date însăși, pentru a regăsi și analiza datele. Un sistem de gestiune a bazelor de date permite definirea, crearea, interogarea, actualizarea și administrarea bazelor de date.

Cele mai cunoscute sisteme de gestiune a bazelor de date sunt: MySQL, PostgreSQL, Microsoft SQL Server, Oracle, Sybase și IBM DB2.

Orice sistem de gestionare a bazelor de date contine:

limbajul de descriere a datelor (LDD), care permite descrierea structurii bazei de date, a componentelor, a relațiilor dintre componente, a drepturilor de acces al utilizatorilor la baza de date (BD);

limbajul de cereri (LC) – este limbajul în care se scriu programele pentru realizarea prelucrării datelor;

limbajul de prelucrare a datelor (LPD), care permite operații asupra BD, cum ar fi încărcarea BD, inserarea, ștergerea, căutarea sau modificarea unui element, realizarea de statistici.

Administratorul bazei de date este cel care stabilește structura inițială a bazei de date și modul de memorare a datelor la nivel fizic, acordă utilizatorilor dreptul de acces la baza de date sau părți ale ei, stabilește condițiile pentru asigurarea securității și integrității datelor, modifică structura BD dacă este nevoie, asigură întreținerea BD făcând copii periodice și reconstituind BD în cazul în care au apărut erori și răspunde de modul de utilizare a bazei de date.

Principalele sarcini ale gestionarului bazei de date sunt:

reducerea redundanței prin identificarea informațiilor comune și alcătuirea corespunzătoare a aplicațiilor;

eliminarea inconsistențelor ce rezultă din reducerea redundanței;

utilizarea simultană a datelor de către mai mulți utilizatori;

standardizarea informațiilor;

asigurarea securității BD prin acordarea și urmărirea modului de acces al utilizatorilor la componentele BD;

asigurarea integrității BD;

asigurarea sincronizării în cazul utilizării simultane a BD de către mai mulți utilizatori sau a distribuirii informației pe mai multe sisteme.

O bază de date nu poate fi, în general, portată între diverse sisteme de gestiune a bazelor de date, dar diferite DBMS pot interopera utilizând standarde precum SQL, ODBC sau JDBC.

Cel mai răspândit tip de baze de date este cel relațional, în care datele sunt memorate în tabele. Pe lângă tabele, o bază de date relațională mai poate conține: indecși, proceduri stocate, declanșatori, utilizatori și grupuri de utilizatori, tipuri de date, mecanisme de securitate și de gestiune a tranzacțiilor etc.

O bază de date relațională reprezintă o colecție partajată de date, între care există diferite legături logice (împreună cu o descriere a acestora), proiectată pentru a satisface necesitățile informaționale ale unei organizații. Totodată, putem privi o bază de date ca un instrument pentru organizarea și colectarea tuturor informațiilor, astfel încât să se satisfacă toate necesitățile informaționale ale utilizatorilor ei.

Alte tipuri de baze de date sunt modelul ierarhic, modelul orientat pe obiecte și, mai nou, modelul XML.

Modelul relațional utilizat de cele mai populare sisteme de gestiune a bazelor de date este limbajul SQL.

Limbajul SQL

SQL (Structured Query Language – Limbaj Structurat de Interogare) este un limbaj de programare special, conceput pentru a manipula datele conținute într-un sistem de gestiune a bazelor de date[1].

SQL este alcătuit dintr-un limbaj de definire a datelor și un limbaj de manipulare a datelor.

Rolul limbajului SQL este de a insera, interoga, actualiza și șterge date, de a crea și modifica structura bazei de date și de a controla accesul la date.

Limbajul SQL a fost inițial dezvoltat în cadrul companiei IBM, la începutul anilor 1970. Această versiune a fost proiectată pentru a manipula și regăsi datele stocate în sistemul original de baze de date cvasi-relațional al companiei IBM.

Limbajul SQL este compus din următoarele elemente:

Clauze, care sunt componente ale instrucțiunilor și interogărilor;

Expresii, al căror efect este producerea de valori scalare sau tabele;

Predicate, care stabilesc condiții ce sunt evaluate de SQL conform logicii ternare sau logicii booleene, în scopul limitării efectelor instrucțiunilor, sau pentru a influența cursul programului;

Interogări, care au ca scop regăsirea datelor după criterii specifice;

Instrucțiuni, care pot avea un efect persistent asupra datelor sau structurii datelor, sau pot controla tranzacțiile, conexiunile sau cursul programului. În general, instrucțiunile SQL se termină cu caracterul punct-virgulă (";"), deși acest lucru nu este obligatoriu în toate platformele SQL. Spațiile albe suplimentare sunt ignorate, dar ele pot fi folosite pentru lizibilitatea codului SQL.

Cea mai des utilizată instrucțiune în SQL este instrucțiunea SELECT. Această instrucțiune regăsește date din una sau mai multe tabele sau expresii.

Interogările permit utilizatorului să descrie ce date dorește să regăsească, lăsând în seama sistemului de gestiune a bazelor de date planificarea, optimizarea și efectuarea operațiilor fizice necesare pentru a returna rezultatul cerut.

SISTEMUL ANDROID

Generalități

Android este o platformă software și un sistem de operare pentru dispozitive și telefoane mobile, bazată pe nucleul Linux, dezvoltată în prezent de compania Google.

Inițial sistemul a fost dezvoltat de compania Android, Inc., care a fost cumpărată de Google în 2005. Sistemul Android a fost făcut public în 2007, o dată cu fondarea consorțiului comercial Open Handset Alliance, care are ca scop dezvoltarea de standarde deschise pentru dispozitive mobile.[1]

Fig 3.1. Logo-ul Android

Primul dispozitiv comercial bazat pe platforma Android a fost un smartphone, HTC Dream, lansat la 22 octombrie 2008.

Având o interfață utilizator bazată pe manipularea directă, Android este proiectat în special pentru dispozitive mobile cu ecran senzitiv (touchscreen), precum smatrphone-uri și tablete, dar având și interfețe specializate pentru televizoare (Android TV), automobile (Android Auto), sau ceasuri inteligente (Android Wear).

De asemenea, sistemul Android mai este utilizat și în dispozitive fără touchscreen, precum console de jocuri, camere digitale, PC-uri și alte aparate electronice.

Manipularea directă, pe care se bazează sistemul Android, utilizează interacțiunea tactilă într-un mod destul de asemănător cu acțiunile din lumea reală, pentru a manipula obiectele de pe ecran similar cu manipularea obiectelor fizice. Acest lucru face ca interfața să fie mai naturală sau intuitivă față de alte moduri de interacțiune, iar feed-back-ul rapid permite utilizatorului sa reducă erorile și să îndeplinească sarcinile într-un timp mai scurt, deoarece el poate vedea rezultatul unei acțiuni înainte de a finaliza efectiv acțiunea, astfel putând evalua operația și, compensa eventualele greșeli de operare.

Pe lângă posibilitatea de a manipula obiectele prin atingere pe ecran, interfața mai conține și o tastatură virtuală.

Codul sursă al sistemului Android este publicat de Google sub licență open-source, deși cele mai multe dispozitive Android sunt livrate cu o combinație de software open-source și proprietar.

În prezent, dintre toate sistemele de operare, sistemul Android rulează pe cel mai mare număr de dispozitive, la nivel mondial. În prezent, Google Play Store (platforma de distribuire de aplicații Android, operată de Google) găzduiește peste 1,5 milioane de aplicații publicate și are peste 50 de miliarde de descărcări.

Natura deschisă a Android-ului a încurajat o largă comunitate de programatori și de entuziaști să utilizeze codul open-sounaliza efectiv acțiunea, astfel putând evalua operația și, compensa eventualele greșeli de operare.

Pe lângă posibilitatea de a manipula obiectele prin atingere pe ecran, interfața mai conține și o tastatură virtuală.

Codul sursă al sistemului Android este publicat de Google sub licență open-source, deși cele mai multe dispozitive Android sunt livrate cu o combinație de software open-source și proprietar.

În prezent, dintre toate sistemele de operare, sistemul Android rulează pe cel mai mare număr de dispozitive, la nivel mondial. În prezent, Google Play Store (platforma de distribuire de aplicații Android, operată de Google) găzduiește peste 1,5 milioane de aplicații publicate și are peste 50 de miliarde de descărcări.

Natura deschisă a Android-ului a încurajat o largă comunitate de programatori și de entuziaști să utilizeze codul open-source ca fundație pentru diverse proiecte.

Caracteristicile sistemului Android

Caracteristici generale:

Mesagerie (SMS și MMS);

Browser web;

Caracteristici bazate pe interacțiune vocală;

Multi-touch (atingere multi-punct);

Multitasking (rulare în paralel sau simultan a mai multor aplicații);

Captură de ecran;

Apeluri video;

Posibilitate de utilizare a mai multe limbi;

Accesibilitate pentru persoanele cu dizabilități;

Caracteristici de conectivitate:

GSM/EDGE;

Wi-Fi;

Bluetooth;

LTE;

CDMA;

EV-DO;

UMTS;

NFC;

IDEN;

WiMAX

Conectivitatea prin Bluetooth permite apeluri vocale, transmiterea contactelor între telefoane, trimitere de fișiere, accesarea agendei telefonice, comunicația cu diverse alte dispozitive compatibile cu standardul Bluetooth. De asemenea, permite conectarea unor dispozitive de control precum tastatură, mouse sau joystick.

O altă caracteristică importantă de conectivitate este tethering-ul, care permite utilizarea telefonului drept hotspot Wi-Fi, pentru conectarea la internet a altor dispozitive wireless, prin intermediul conexiunii de date a telefonului la rețeaua operatorului de telefonie mobilă.

Caracteristici media:

Sistemul Android suportă o multitudine de formate audio/video: WebM, H.263, H.264, AAC, HE-AAC, MPEG-4 SP, AMR, AMR-WB, MP3, MIDI, Ogg Vorbis, FLAC, WAV, JPEG, PNG, GIF, BMP, WebP.

Permite streaming media. Este suportat streaming-ul RTP/RTSP, download-ul progresiv HTML; prin intermediul plugin-ului Flash sunt suportate Adobe Flash Streaming și HTTP Dynamic Streaming; de asemenea este suportat Apple HTTP Live Streaming.

Suportă dispozitive de stocare externe. Majoritatea dispozitivelor cu Android sunt dotate cu un slot microSD, fiind capabile să utilizeze carduri microSD formatate cu un sistem de fișiere FAT32, Ext3 sau Ext4. De asemenea, mai sunt prevăzute cu o mufă USB, care, pe lângă funcția de conectare a încărcătorului, permite conectarea unor dispozitive de stocare de mare capacitate, cum ar fi: stick-uri de memorie flash sau Hard-discuri externe.

Caracteristici legate de hardware:

Sistemul Android suportă conectarea și controlul unei multitudini de dispozitive și senzori hardware, cum ar fi: camere foto / video, ecrane senzitive (touchscreen-uri), dispozitive GPS, accelerometre, giroscoape, barometre, magnetometre, controlere de jocuri, senzori de presiune, senzori de proximitate, termometre, acceleratoare grafice 3D etc.

Alte caracteristici:

Suportul pentru limbajul Java:
Deși majoritatea aplicațiilor Android sunt scrise în Java, platforma nu conține o Mașină Virtuală Java, iar codul Java nu este executat. Clasele Java sunt compilate în executabile Dalvik (o mașină virtuală de proces sau de aplicație) și apoi executate utilizând Android Runtime (ART). Mașina virtuală Dalvik este special optimizată pentru dispozitive mobile alimentate cu baterii și având resurse limitate din punct de vedere al memoriei și procesorului.

Suportul pentru diverse configurații de ecran:
Platforma Android poate rula pe diverse dimensiuni de ecran, de la cele de smartphone, la cele de tabletă și chiar permite conectarea unor ecrane externe, prin HDMI sau wireless (prin Miracast). Sunt suportate ambele orientări ale imaginilor (portret sau peisaj), comutarea făcându-se, în general, prin rotirea dispozitivului. Sunt utilizate biblioteci grafice 2D și 3D, bazate pe specificațiile OpenGL.

Utilizarea unei baze de date relaționale SQLite pentru gestiunea proceselor de stocare a informațiilor.

Orice sistem Android implementat pe un dispozitiv mobil (smartphone / tabletă) este livrat cu un set de aplicații de bază, incluzând: un client de e-mail, un program de SMS, calendar, hărți, browser, agendă de contacte și altele. Aplicațiile sunt scrise folosind (de cele mai multe ori, dar și cu unele excepții) limbajul de programare Java.

Arhitectura sistemului Android

Sistemul Android se bazează pe un kernel (nucleu) Linux (versiunile 3.4 sau 3.10, începând din aprilie 2014; Android 1.0 folosea kernel-ul Linux 2.6.25) pentru asigurarea serviciilor de sistem „core”, cum ar fi securitatea, gestionarea memoriei, gestionarea proceselor, rețea, drivere. Kernel-ul este și un strat între hardware și restul software-ului.

Oricum, variantele pentru Android ale kernel-urilor Linux conțin modificări arhitecturale implementate de Google în afara ciclului tipic de dezvoltare a sistemului Linux, cum ar fi includerea unor noi componente sau gestionarea diferită a evenimentelor OOM (out-of-memory – memorie insuficientă)

Dezvoltarea aplicațiilor Android

SDK-ul Android

Aplicațiile („apps”), care extind funcționalitatea dispozitivelor Android, sunt scrise în principal în limbajul de programare Java (fără a beneficia de particularitatea deosebită a acestei platforme: „write once, run everywhere” – „scrie-l o dată, rulează-l oriunde”) cu ajutorul „Android Software Development Kit” (Android SDK).

SDK-ul Android conține un set cuprinzător de instrumente de dezvoltare, incluzând un debugger (instrument de corectare a erorilor), biblioteci software, un emulator de dispozitive hardware, documentație, mostre de cod și tutoriale.

SDK-ul Android oferă instrumentele și API-urile (Application Programming Interfaces – interfețe de programare a aplicațiilor) necesare pentru a începe dezvoltarea de aplicații pe platforma Android folosind limbajul de programare Java.

Inițial, mediul integrat de dezvoltare (IDE – Integrated Development Environment) susținut de Google a fost Eclipse, utilizând plugin-ul Android Development Tools (ADT). În decembrie 2014, Google a lansat Android Studio, ca IDE principal pentru dezvoltarea de aplicații Android.

De asemenea, sunt disponibile și alte instrumente de dezvoltare, printre care Android Native Development Kit (NDK), utilizat pentru compilarea bibliotecilor scrise în C, C++ sau alte limbaje, Google App Inventor, un mediu de dezvoltare vizual pentru programatorii începători, și diverse mobile web applications frameworks.

SDK-ul Android poate rula pe computere cu Linux (orice distribuție modernă), Mac OS X (versiuni de la 10.5.8 în sus) sau Windows (XP sau mai recent).

Aplicațiile Android sunt împachetate în format .apk și sunt stocate în sistemul Android de pe dispozitiv, în folderul /data/app. Pachetul .apk conține fișierele .dex (fișiere de cod compilat, numite executabile Dalvik), fișiere de resurse etc.

Deasupra nucleului Linux se află așa-zisul middleware (software care asigură aplicațiilor servicii suplimentare față de cele disponibile din sistemul de operare), precum și biblioteci și API-uri scrise în limbajul C / C++ și software de aplicațíe rulând pe un application framework, care include și biblioteci compatibile Java.

Biblioteci

Platforma Android include un set de biblioteci C / C++ utilizate de către diferite componente ale sistemului Android. Aceste capabilități sunt oferite dezvoltatorilor prin intermediul Android application framework. Câteva din bibliotecile de bază sunt enumerate mai jos:

System C – o implementare derivată din BSD a bibliotecii standard C (libc), specială pentru dispozitivele Linux;

Biblioteci media – bazate pe OpenCORE-ul PacketVideo; acestea suportă redarea și înregistrarea celor mai populare formate audio și video, precum și imagini, incluzând MPEG4, H.264, MP3, AAC, AMR, JPG, PNG;

Surface Manager – gestionează accesul la display și compune perfect layere grafice 2D și 3D de la diferite aplicații;

LibWebCore – un engine modern care dă putere atât browser-ului Android cât și conținutului web încorporat

SGL – engine-ul de grafică 2D;

biblioteci 3D – implementări bazate pe OpenGL ES 1.0 API; bibliotecile folosesc ori accelerare hardware 3D (unde există) sau software-ul optimizat 3D de rasterizare;

SWLite – un engine puternic și simplu de bază de date, disponibil pentru toate aplicațiile.

De asemenea, Android include un set de biblioteci core care furnizează aproape toată funcționalitatea bibliotecilor core ale limbajului de programare Java.

Compatibilitatea cu standardele Java

Există și obstacole în dezvoltarea aplicațiilor Android, de exemplu faptul că platforma Android nu folosește standardele Java acceptate, cum ar fi Java SE (Standard Edition) și ME (Micro Edition). Acest lucru reprezintă o piedică în privința compatibilității între aplicațiile Java scrise pentru alte platforme și cele scrise pentru Android.

Android utilizează doar sintaxa și semantica limbajului Java, dar nu suportă în totalitate bibliotecile de clase și API-urile conținute în Java SE și ME. Totuși, există instrumente pe piață, de la diverse companii, care furnizează servicii de conversie de la Java ME la Android.

Android Runtime

Fiecare aplicație Android rulează în procesul ei separat, cu propria instanță de mașină virtuală Dalvik. Dalvik a fost scris pentru ca un dispozitiv să poată rula mai multe mașini virtuale (virtual machines – VM) eficient. VM Dalvik execută fișiere in formatul .dex care este optimizat pentru folosirea eficientă a memoriei. VM este bazat pe regiștri și rulează clase compilate de un compilator Java, care au fost transformate in .dex de către tool-ul „dx”.

VM-ul Dalvik se bazează pe kernel-ul Linux pentru functionalități de bază precum fire de execuție și gestionarea memoriei mici.

Medii de dezvoltare pentru aplicații. Android Studio

Aplicațiile informatice se pot proiecta și scrie mult mai ușor utilizând medii de dezvoltare specializate, numite IDE (Integrated Development Environment – mediu integrat de dezvoltare de aplicații). Pentru platforma Android, IDE-ul cel mai utilizat este Android Studio.

Android Studio este un IDE cu acces liber, sub licență Apache. Este disponibil sub sistemele de operare Windows, Mac OS X și Linux și reprezintă IDE-ul oficial susținut de Google pentru dezvoltarea aplicațiilor native Android.

LIMBAJUL JAVA

Generalități

Java este un limbaj de programare de nivel înalt, dezvoltat de JavaSoft, companie în cadrul firmei Sun Microsystems, și lansat pe piață în anul 1995.

Limbajul de programare Java este un limbaj de uz general, concurent, bazat pe clase, orientat pe obiecte și proiectat special pentru a fi cât mai puțin dependent de implementare. Aceasta înseamnă că este special conceput pentru a permite dezvoltatorilor de aplicații să beneficieze de avantajele principiului WORA – write once, run anywhere (scrie o dată, rulează oriunde), adică un cod Java compilat poate rula pe toate platformele care suportă Java, fără a fi necesară recompilarea.[1] Astfel, costurile implementării de aplicații pot să scadă spectaculos, nefiind necesare adaptări de soluții pentru fiecare tip sau versiune hardware sau de sistem de operare existent în lume.

Aplicațiile Java sunt compilate în așa-zisul bytecode (cod de octeți), care poate rula fără modificări pe orice mașină virtuală Java, indiferent de arhitectura sistemului pe care aceasta este instalată.

Sintaxa limbajului Java este derivată în mare măsură din limbajele C / C++, dar are un model al obiectelor mai simplu și prezintă mai puține facilități de nivel jos.

Implementarea Java originală, incluzând compilatoare, mașini virtuale și biblioteci de clase, a fost lansată de Sun Microsystems sub licență proprietară. Mai târziu, în 2007, Sun a relicențiat majoritatea tehnologiilor sale Java sub GNU General Public License (Licența publică generală GNU), astfel că, astăzi, tehnologia Java este open-source și poate fi utilizată liber de orice programator.

Începând cu anul 2010, deținătorul implementării oficiale a paltformei Java este Oracle Corporation, care a achiziționat Sun Microsystems. Implementarea Oracle este disponibilă pentru sistemele de operare Microsoft Windows, Mac OS X, Linux și Solaris.

Principiile Java

Încă de la crearea sa, limbajul Java s-a bazat pe cinci principii esențiale:

– trebuie să fie simplu, orientat pe obiecte și familiar;

– trebuie să fie robust și sigur;

– trebuie să fie portabil și independent de arhitectură;

– trebuie să aibă performanțe înalte în execuție;

– trebuie să fie interpretat, dinamic și să permită fire de execuție.

Caracteristici ale limbajului Java[3]

Printre caracteristicile principale ale limbajului Java putem enumera:

simplitate – Java este ușor de învățat, fiind eliminate caracteristicile complicate întâlnite în alte limbaje de programare (supraîncărcarea operatorilor, moștenirea multiplă, șabloane);

robustețe – sunt eliminate sursele frecvente de erori ce apar în programare prin eliminarea pointerilor, administrarea automată a memoriei și eliminarea fisurilor de memorie printr-o procedură de colectare a „gunoiului” care rulează în fundal. Un program Java care a trecut de compilare are proprietatea foarte importantă că la execuția sa nu „crapă sistemul”;

securitate – este cel mai sigur limbaj de programare disponibil în acest moment, asigurând mecanisme stricte de securitate a programelor concretizate prin: verificarea dinamică a codului pentru detectarea secvențelor periculoase, impunerea unor reguli stricte pentru rularea programelor lansate pe calculatoare aflate la distanță, etc.;

portabilitate – Java este un limbaj independent de platforma de lucru, aceeași aplicație rulând, fără nici o modificare, pe sisteme diferite cum ar fi Windows, UNIX sau Macintosh, lucru care aduce economii substanțiale firmelor care dezvoltă aplicații pentru Internet. Sloganul de bază este: „Write once, run anywhere”;

dinamicitate;

este complet orientat pe obiecte – elimină complet stilul de programare procedural; se bazează pe încapsulare, moștenire, polimorfism;

este modelat după C și C++, trecerea de la C / C++ la Java făcându-se foarte ușor;

ușurință în ceea ce privește programarea în rețea;

este compilat și interpretat;

este neutru din punct de vedere arhitectural;

asigură o performanță ridicată a codului de octeți;

conține o bibliotecă de clase și interfețe pentru domenii specifice cum ar fi programarea interfețelor utilizator (JFC, AWT, Swing), programare distribuită (comunicare TCP/IP, CORBA, RMI etc.);

permite programarea cu mai multe fire de execuție (multithreaded);

face diferența între literele mici și mari (este case-sensitive);

permite dezvoltarea aplicațiilor pentru Internet – crearea unor documente Web îmbunătățite cu animație și multimedia;

Java Development Kit (JDK) este disponibil gratis.

Platforme Java[1]

O platformă Java este o suită de programe care ușurează dezvoltarea și rularea programelor scrise în limbajul de programare Java. Platforma nu este specifică vreunui tip de procesor sau sistem de operare, ci, pentru diverse configurații hardware și sisteme de operare, sunt implementate doar câte un motor (engine) de execuție (numit mașină virtuală) și câte un compilator cu un set de biblioteci, asfel încât programele Java vor rula identic pe toate configurațiile.

Există mai multe platforme, fiecare având ca țintă o clasă diferită de dispozitive:

Java Card – o tehnologie care permite rularea unor mici aplicații bazate pe Java (numite applets) pe smart-card-uri și dispozitive similare cu memorie mică;

Java ME (Micro Edition) – Specifică doar câteva seturi de biblioteci pentru dispozitive limitate în privința capacității de stocare, a display-ului sau a consumului de energie. Este utilizată de obicei pentru dezvoltarea de aplicații pentru dispozitive mobile, PDA-uri, smart TV-uri și imprimante;

Java SE (Standard Edition) – pentru uz general pe PC-uri, servere și alte dispozitive similare;

Java EE (Entreprise Edition) – conține, în plus față de Java SE, diverse API-uri utile pentru aplicații client-server la nivelul organizațiilor.

Distribuții Java[1]

Implementarea Oracle a platformei Java este împachetată în două distribuții:

Java Runtime Environment (JRE), care conține acele părți ale platformei Java SE care sunt necesare pentru rularea programelor Java și este destinată utilizatorilor finali;

Java Development Kit (JDK), care este destinată dezvoltatorilor de software și include instrumente de dezvoltare precum Java compiler (compilator), Javadoc (generator de documentații), Jar (Java Archive) și un debugger (depanator).

Java Virtual Machine (JVM)[1]

Inima platformei Java este conceptul de mașină virtuală, care execută programele compilate în bytecode (cod de octeți). Codul de octeți este același, indiferent sub ce hardware sau sistem de operare rulează programul. În interiorul mașinii virtuale există un compilator JIT (Just In Time) care traduce codul de octeți în instrucțiuni native ale procesorului (așa-zisul cod mașină). Acest proces se petrece la momentul rulării (run-time). Rezultă că pentru fiecare platformă de operare există o JVM proprie.

Programarea orientată pe obiecte (OOP – Object-oriented programming)[3]

Programarea orientată pe obiecte este o paradigmă de programare bazată pe conceptul de „obiecte”, acestea fiind structuri de date care conțin:

date – sub formă de câmpuri, numite atribute;

cod – sub formă de proceduri, numite metode.

În programarea orientată pe obiecte programele sunt alcătuite din obiecte care interacționează între ele. Cele mai populare limbaje OOP sunt bazate pe clase.

Obiecte și clase[3]

Programarea orientată pe obiecte este gândită după modelul lumii reale – obiectele sunt adesea formate din mai multe tipuri de obiecte mici.

Când scriem programe într-un limbaj orientat pe obiecte, nu definim obiecte ci clase de obiecte, unde o clasă reprezintă un șablon pentru mai multe obiecte cu caracteristici similare. Clasele însumează toate caracteristicile unei mulțimi particulare de obiecte.

Un obiect reprezintă o instanță a clasei din care acesta face parte. Clasa este reprezentarea generală a unui obiect, iar instanța /obiectul este reprezentarea concretă a clasei.

Fiecare clasă scrisă în Java are două caracteristici de bază: atribute și comportament.

Atribute[3]

Atributele diferențiază obiectele între ele și determină aparența, starea sau alte calități ale obiectului în cauză.

Atributele sunt definite în clase ca variabile. Tipul și numele variabilelor sunt definite în clase și fiecare obiect are valori proprii pentru fiecare atribut. Deoarece fiecare instanță a clasei poate avea valori diferite pentru variabilele sale, aceste variabile se mai numesc și variabile instanță.

Există, de asemenea, și un alt tip de variabile numite variabile clasă. Diferența dintre cele două tipuri de variabile este aceea că valorile variabilelor instanță sunt păstrate în instanțe și se schimbă pentru fiecare instanță, iar valorile variabilelor clasă sunt păstrate în clasă și nu se schimbă pentru fiecare instanță

Comportament[3]

Comportamentul unei clase determină cum operează o instanță a unei clase. De exemplu, cum reacționează un obiect atunci când un alt obiect sau o altă clasă îi cere să facă ceva.

Pentru a defini comportamentul unei clase se definesc metode, echivalentul funcțiilor sau procedurilor din alte limbaje de programare. Spre deosebire de alte limbaje de programare, în Java nu se pot defini funcții în afara claselor. Prin urmare, metodele sunt funcții definite în interiorul claselor, care operează în instanțele claselor respective.

Principiile OOP[3]

Obiectul este o variabilă care are o structură și o stare. Fiecare obiect dispune de operații prin intermediul cărora i se poate manipula starea.

Obiectul trebuie privit ca o unitate atomică pe care utilizatorul nu ar trebui să o disece. De exemplu, când lucrăm cu numere întregi, nu ne punem problema reprezentării lor. Utilizatorul nu are acces direct la părțile constituente ale unui obiect sau la implementarea sa; acestea vor putea fi accesate doar prin intermediul metodelor care au fost furnizate împreună cu obiectul. Gruparea datelor și a operațiilor care pot fi efectuate asupra acestor date, având grijă ca detaliile de implementare să fie ascunse, poarta numele de încapsulare.

Unul din principalele scopuri ale OOP este refolosirea codului. Limbajele de programare orientate pe obiecte furnizează mai multe mecanisme în acest scop:

Folosirea codului generic – dacă implementarea este identică, și diferă doar tipul de bază al obiectului, nu este necesară rescrierea completă a codului – se scrie un cod generic care funcționează pentru orice tip. De exemplu, se poate scrie o metodă care să ordoneze un șir de numere întregi, caractere, șiruri de caractere.

Moștenirea – este un mecanism care permite extinderea funcționalității unei clase. Se pot crea noi tipuri de date care să extindă (sau să restricționeze) proprietățile tipului de date original.

Polimorfismul – un tip referință polimorfic poate să refere obiecte de mai multe tipuri. Atunci când se apelează o metodă a tipului polimorfic, se va selecta automat metoda care corespunde tipului referit în acel moment.

Scrierea programelor Java[3]

Realizarea unui program Java constă în următorii pași:

Scrierea codului sursă al programului într-un editor de texte;

Salvarea programului sub numele NumeClasa.java unde NumeClasa este numele clasei care conține metoda main(). Într-un program Java trebuie să existe o singură clasă care să conțină o metodă main(). Cu alte cuvinte, numele clasei trebuie să coincidă cu numele fișierului. Extensia fișierului este .java

Compilarea programului se face cu ajutorul comenzii:

javac NumeClasa.java

Executarea programului se face cu ajutorul comenzii:

java NumeClasa

Pentru rularea unui program Java, acesta va trece prin următoarele faze:

Cod sursă Java(compilare)Cod de octeți(interpretare)

Toate aplicațiile Java conțin o clasă principală în care trebuie să se găsească metoda main(). Clasele aplicației se pot găsi fie într-un singur fișier, fie în mai multe.

Pe lângă aplicațiile propriu-zise, se pot scrie și applet-uri. Crearea structurii de fișiere și compilarea applet-urilor sunt identice ca în cazul aplicațiilor. Diferă în schimb structura programului și modul de rulare al acestuia. Applet-urile nu rulează independent. Ele pot fi rulate doar prin intermediul unui browser (Internet Explorer, Netscape etc.) sau printr-un program special cum ar fi appletviewer-ul din setul JDK.

Elementele de bază ale limbajului de programare Java[3]

Limbajul Java se bazează pe câteva elemente specifice oricărui limbaj de programare:

Structura lexicală a limbajului;

Tipuri de date;

Variabile;

Instrucțiuni;

Tablouri (vectori);

Șiruri de caractere.

Structura lexicală a limbajului conține Setul de caractere, Cuvinte cheie, Identificatori, Constante, Separatori, Operatori, Comentarii.

Setul de caractere – limbajul Java utilizează setul de caractere Unicode

Cuvintele cheie rezervate sunt cele din limbajul C++, cu câteva excepții

Constantele pot fi constante întregi, constante reale, constante logice, constante caracter și constante șiruri de caractere

Operatorii pot fi: operatori de atribuire, operatori aritmetici binari, operatori aritmetici unari, operatori logici, operatori relaționali, operatori pe biți, operatori de translație, operatorul condițional, operatorul , (virgulă), operatorul de concatenare, operatorul de conversie de tip

Tipuri de date

În Java tipurile de date se împart în două categorii:

tipuri primitive de date (tipuri întregi, tipuri reale, tipul caracter, tipul boolean);

tipuri referință (vectori, clase, interfețe).

Variabile

Variabilele pot avea ca tip fie un tip primitiv de dată, fie o referință la un obiect.

În funcție de locul în care sunt declarate, variabilele se împart în următoarele categorii:

Variabile membru, declarate în interiorul unei clase, vizibile pentru toate metodele clasei respective și pentru alte clase în funcție de modificatorul lor de acces;

Variabile locale, declarate într-o metodă sau într-un bloc de cod, vizibile doar în metoda / blocul respectiv;

Parametrii metodelor, vizibili doar în metoda respectivă;

Parametrii de la tratarea excepțiilor.

Instrucțiuni

Instrucțiunile pot fi de următoarele tipuri:

Instrucțiunea vidă [;];

Instrucțiuni de decizie [if-else, switch];

Instrucțiuni repetitive [for, while, do-while, break, continue].

Tablouri (vectori)

Există două tipuri de tablouri (vectori): unidimensionale și cu mai multe dimensiuni. În Java tablourile cu mai multe dimensiuni (multidimensionale) sunt de fapt vectori de vectori.

Șiruri de caractere

În Java, un șir de caractere poate fi reprezentat printr-un vector format din elemente de tip char, un obiect de tip String sau un obiect de tip StringBuffer.

Clase și obiecte în Java[3]

În Java obiectele au două caracteristici principale:

sunt întotdeauna alocate dinamic. Durata de viață a unui obiect este determinată de logica programului. Ea începe atunci când obiectul este creat și se termină în momentul în care obiectul nu mai este folosit, el fiind distrus de un mecanism de curățenie oferit de limbajul Java – garbage collector (colectorul de gunoaie);

obiectele nu sunt conținute de către variabile. O variabilă păstrează o referință către un obiect. O referință este similară cu ceea ce se numește pointer în alte limbaje de programare cum ar fi C++. Dacă există două variabile de același tip referință și o variabilă este atribuită celeilalte, ambele vor referi același obiect. Dacă informația din obiect se modifică, schimbarea este vizibilă în ambele variabile.

O variabilă referință poate conține și o referință către nimic. Valoarea unei asemenea variabile referință este null.

În Java nu se permite tipurilor referință să fie convertite către tipuri primitive sau invers.

Definirea unei clase se face cu sintaxa:

[public][abstract][final] class NumeClasa
[extends NumeSuperclasa]
[implements Interfata1[, Interfata2, …]]
{
//corpul clasei
}

Antetul declarației este format din modificatorii clasei, cuvântul rezervat class și numele clasei NumeClasa.

Modificatorii clasei sunt:

public: dacă o clasă este declarată publică, ea este accesibilă oricărei alte clase. Dacă modificatorul public nu apare, clasa poate fi accesată doar de către clasele din pachetul căruia aparține clasa (dacă nu se specifică un anume pachet, toate clasele din directorul curent sunt considerate a fi în același pachet). Spațiul de căutare este definit de variabila sistem CLASSPATH;

abstract: o clasă declarată abstractă este o clasă șablon adică ea este folosită doar pentru a crea un model comun pentru o serie de subclase. O clasă trebuie declarată abstractă daca ea este incomplet implementată, adică nu toate metodele ei sunt definite. O astfel de clasă nu poate fi instanțiată, dar poate fi extinsă de alte clase care să implementeze metodele nedefinite. Doar clasele abstracte pot să conțină metode abstracte (metode declarate, dar nu implementate);

final: o clasă poate fi declarată finală dacă a fost complet definită și nu se dorește să fie extinsă (să aibă subclase); cu alte cuvinte ea nu poate apărea în clauza extends a altei clase.

Corpul unei clase urmează după antetul clasei și este cuprins între acolade. Acesta conține:

declararea variabilelor instanță și clasă care împreună formează variabilele membru;

definirea metodelor instanță și clasă care împreună formează metodele membru.

Variabilele unei clase sunt doar cele care sunt declarate în corpul clasei și nu în corpul unei metode. Variabilele declarate în cadrul unei metode sunt locale metodei respective.

Metodele sunt folosite pentru descrierea comportamentului unui obiect.

Moștenirea[3]

După încapsularea datelor, moștenirea este al doilea principiu de bază al programării orientate pe obiecte. Moștenirea este folositoare, deoarece reduce rescrierea codului. Adică, o clasă poate fi moștenită de către o altă clasă (toate caracteristicile primei clase se regăsesc și în a doua clasă). Noua clasă își poate modifica o parte din comportament, poate adăuga ceva nou sau poate ignora ceea ce este neinteresant.

În Java, pentru a crea o clasă nouă trebuie specificate: clasa moștenită și diferențele față de clasa moștenită. Clasa moștenește toate metodele accesibile și variabilele superclasei sale. În Java moștenirea multiplă nu este permisă. Orice clasă are o singură superclasă și poate avea una sau mai multe subclase.

Avantajele creării unei ierarhii de clase:

funcționalitatea comună a mai multor clase se pune în superclase. Acest aranjament permite ca funcționalitatea să fie refolosită în mod repetat deoarece fiecare subclasă primește informația comună din superclasă;

schimbarea sau inserarea unei clase în partea de sus a ierarhiei determină automat schimbări în comportamentul claselor de jos.

Interfețe[3]

Interfețele duc conceptul de clasă abstractă cu un pas înainte, prin eliminarea oricărei implementări a metodelor, punând în practică unul din conceptele OOP de separare a modelului unui obiect (interfața) de implementarea sa.

O interfață Java definește un set de metode, dar nu specifică nici o implementare pentru ele. O clasă care implementează o interfață trebuie obligatoriu să definească toate metodele interfeței. Prin urmare, o interfață este o colecție de metode fără implementare și declarații de constante.

Applet-uri[3]

Unul dintre scopurile limbajului Java a fost crearea unor programe mici (applet) care să ruleze în interiorul unui browser Web.

Un applet reprezintă o suprafață de afișare (container) ce poate fi inclusă într-o pagină Web și gestionată printr-un program Java. Un astfel de program se mai numește miniaplicație.

Codul unui applet poate fi format din una sau mai multe clase. Una dintre acestea este principală și extinde clasa JApplet, fiind clasa ce trebuie specificată în documentul HTML ce descrie pagina de Web în care dorim să includem applet-ul.

Diferența fundamentală dintre un applet și o aplicație constă în faptul că, un applet nu poate fi executat independent, ci va fi executat de browser-ul în care este încărcată pagina Web ce conține applet-ul respectiv.

Un avantaj al folosirii applet-urilor este lipsa necesității instalării lor. De fapt, instalarea este automată de câte ori utilizatorul încarcă pagina Web care conține applet-ul.

Clasa JApplet furnizează tot ce este necesar pentru construirea și întreținerea unui applet. Crearea unui applet implică implementarea metodelor puse la dispoziție de clasa JApplet, care ne ajută să descriem comportamentul dorit al applet-ului.

Interfețe grafice[3]

Interfața grafică se referă la toate tipurile de comunicare vizuală între un program și utilizatorii săi. Interfața grafică se referă nu numai la ceea ce utilizatorul vede pe ecran ci și la toate mecanismele de comunicare între acesta și program.

Limbajul Java pune la dispoziție numeroase clase pentru implementarea diferitelor functionalități ale interfeței grafice.

Crearea unei aplicații grafice presupune următoarele activități:

crearea unei suprafețe de afișare (cum ar fi o fereastră) pe care vor fi așezate obiectele grafice care servesc la comunicarea cu utilizatorul (butoane, controale de editare, texte etc.);

crearea și așezarea obiectelor grafice pe suprafața de afișare în pozițiile corespunzătoare;

definirea unor acțiuni care trebuie să se execute în momentul când utilizatorul interacționează cu obiectele grafice ale aplicației;

„ascultarea” evenimentelor generate de obiecte în momentul interacțiunii cu utilizatorul și executarea acțiunilor corespunzătoare, așa cum au fost ele definite.

În Java există două pachete de clase care oferă servicii grafice: java.awt și javax.swing.

Formatul JSON[1]

JSON este un acronim în limba engleză pentru JavaScript Object Notation, și este un format de reprezentare și interschimb de date între aplicații informatice. Este un format text, inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor și a altor structuri de date și este folosit în special pentru a transmite date structurate prin rețea, procesul purtând numele de serializare. JSON este alternativa mai simplă, mai facilă decât limbajul XML. Eleganța formatului JSON provine din faptul că este un subset al limbajului JavaScript, fiind utilizat alături de acest limbaj. Tipul de media pe care trebuie să îl transmită un document JSON este application/json. Extensia fișierelor JSON este .json. De asemenea este important de amintit că JSON este un standard deschis.

Principalele tipuri de date JSON sunt:

Numere: numere zecimale cu semn, care pot conține o parte fracționară și pot utiliza notația exponențială. Nu se face dsticncție între numere întregi și numere cu virgulă mobilă;

Șiruri de caractere: secvențe de zero sau mai multe caractere Unicode. Șirurile de caractere sunt delimitate de ghilimele duble;

Tipul de date Boolean (date logice): true sau false;

Matrice (array): Liste ordonate având zero sau mai multe valori, fiecare putând fi de orice tip. Sunt delimitate de paranteze pătrate, iar elementele sunt separate prin virgule;

Obiecte: colecții neordonate de perechi nume/valoare, unde numele (numite chei) sunt șiruri de caractere. Obiectele sunt delimitate de acolade, iar perechile sunt separate prin virgule, în timp ce în cadrul fiecărei perechi numele și valoarea sunt separate de simbolul două puncte [:]

Tipul de date null: valori goale, desemnate prin cuvântul null.

Formatul JSON este suportat de versiunile recente ale celor mai utilizate browsere web.

Medii de dezvoltare pentru aplicații Java. IDE-ul Eclipse

Aplicațiile informatice se pot proiecta și scrie mult mai ușor utilizând medii de dezvoltare specializate, numite IDE (Integrated Development Environment – mediu integrat de dezvoltare de aplicații).

Pentru aplicațiile Java, IDE-ul cel mai utilizat este Eclipse. Acesta include un kit de dezvoltare de aplicații, numit Eclipse software development kit (SDK), care conține instrumentele de dezvoltare destinate programatorilor Java. Însuși mediul Eclipse este scris în mare parte în Java.

Eclipse este o comunitate pentru cei care doresc să colaboreze cu ajutorul unui soft open-source (sursă deschisă). Proiectul se bazează pe construirea unei platforme deschise care include cadre extensibile, unelte pentru management și distribuție de software.

Platforma Eclipse este gestionată de Fundația Eclipse, o organizație non-profit, susținută de membri, care găzduiește proiectele Eclipse și ajută la dezvoltarea comunităților open-source.

Proiectul Eclipse poate fi folosit pentru a dezvolta aplicații în Java, dar cu ajutorul extensiilor poate dezvolta și în: Ada, C, C++, COBOL, Fortran, Haskell, JavaScript, Perl, PHP, Python, R, Ruby, Scala, Clojure, Groovy, Scheme și Erlang.

Proiectele Eclipse sunt lansate sub Licență Publică Eclipse (The Eclipse Public License). Unele proiecte au nevoie de licență duală; pentru acestea s-a pus la dispoziție Licența de Distribuție Eclipse (Eclipse Distribution License).

Platforme Eclipse

Proiectul Eclipse cuprinde mai multe platforme, pentru diverse scopuri:

Platforma Rich Client – folosită pentru dezvoltarea de aplicații cu uz general. Componente principale: Equinox OSGi, JFace, Eclipse Workbench;

Platforma pentru servere – se folosește pentru Tomcat, GlassFish și alte servere. Suportă depanare la distanță, permite utilizatorului și dezvoltatorului să urmărească variabile și să parcurgă codul unei aplicații pe un server pas cu pas;

Platforma de unelte web – este o extensie pentru dezvoltare web și aplicații Java. Include sursă și editor grafic pentru mai multe limbaje, aplicații pentru simplificarea dezvoltării, testării și rulării.

Platforma pentru modelare – conține toate proiectele oficiale ale Fundației Eclipse care sunt bazate pe dezvoltare orientată pe model.

LIMBAJUL XML-QL

Generalități despre limbajul XML[1]

Un limbaj de marcare (markup language) este o metodă de formatare a unui text de pe o pagină web, care combină textul cu informațiile suplimentare despre acel text. Informațiile suplimentare sunt exprimate utilizând așa numiți marcatori (sau instrucțiuni de marcare).

O trăsătură comună a multor limbaje de marcare este amestecarea textului cu instrucțiunile de marcare (numite tag, etichetă) în același fișier.

Limbajul XML (eXtensible Markup Language – Limbaj de marcare extensibil) este un sistem de marcare similar cu HTML, care definește un set de reguli pentru codificarea documentelor într-un format care să poată fi citit și interpretat atât de om cât și de mașină.

Scopurile limbajului XML evidențiază simplitatea, generalitatea și uzabilitatea pe întreaga întindere a Internetului. Este un format de date textuale, cu suport puternic pentru diverse limbi, prin intermediul Unicode.

Deși concepția XML este focalizată pe documente, limbajul este larg utilizat pentru reprezentarea unor structuri de date, cum sunt cele folosite în serviciile Web. Se poate spune că XML este limbajul universal pentru date pe Web.

Limbajul XML este o simplificare a limbajului SGML (din care se trage și HTML) și a fost proiectat în scopul transferului de date între aplicații pe Internet.

Datele XML pot fi utilizate în limbajul HTML, deoarece permit o identificare rapidă a documentelor cu ajutorul motoarelor de căutare. Cu ajutorul codurilor javascript, php etc. fișierele XML pot fi înglobate în paginile de Internet.

Necesitatea introducerii limbajului XML-QL[4]

Una dintre principalele aplicabilități alte standardului XML o constituie schimbul de date în format electronic (electronic data interchange – EDI) dintre multiple surse de date de pe Web. Însă disponibilitatea unor cantități mari de date pe Web ridică anumite probleme pe care XML nu le rezolvă. Astfel, nu sunt rezolvate probleme legate de extragerea datelor din documentele XML de mari dimensiuni, de traducerea datelor XML între diferite ontologii (DTD-uri – document type definition), de integrarea datelor XML din mai multe surse XML, de transportarea unor mari cantități de date XML către clienți sau de trimiterea cererilor către sursele XML.

Extragerea datelor, transformarea și integrarea sunt concepte ale teoriei bazelor de date bine cunoscute. Soluțiile lor adesea se bazează pe un limbaj de interogare structurat (SQL) sau orientat obiect (OQL). Aceste limbaje de interogare nu pot fi aplicate direct XML-ului, deoarece datele XML diferă de datele relaționale sau de cele orientate pe obiecte. Datele XML sunt foarte similare, însă, celor din modelul datelor semistructurate.

O rezolvare a problemelor enumerate anterior o reprezintă limbajul XML-QL, care este un limbaj de interogare pentru XML. Limbajul are o construcție de tip SELECT – WHERE, se aseamănă cu SQL și împrumută facilități ale limbajelor de interogare recent proiectate pentru datele semistructurate, de către cercetătorii din domeniul bazelor de date.

XML-QL poate exprima cereri care extrag părți de date din documente XML, poate exprima transformări care, de exemplu, pot lega datele XML între mai multe DTD, poate integra date din mai multe surse XML.

XML-QL suportă mai multe operații complexe, cum ar fi agregările și joncțiunile. În plus, XML-QL aduce mai multe facilități în ceea ce privește construirea noilor date XML, care sunt cerute de transformări.

LIMBAJUL PHP[1]

PHP este un limbaj de programare. Numele PHP provine din limba engleză și este un acronim recursiv: Php: Hypertext Preprocessor. Folosit inițial pentru a produce pagini web dinamice, este folosit pe scară largă în dezvoltarea paginilor și aplicațiilor web. Se folosește în principal înglobat în codul HTML, dar începând de la versiunea 4.3.0 se poate folosi și în mod „linie de comandă” (CLI), permițând crearea de aplicații independente. Este unul din cele mai importante limbaje de programare web open-source și server-side, existând versiuni disponibile pentru majoritatea webserverelor și pentru toate sistemele de operare. Conform statisticilor, este instalat pe 20 de milioane de situri web și pe 1 milion de servere web. Este disponibil sub Licenṭa PHP ṣi Free Software Foundation îl consideră a fi un software liber.

Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor caracteristici :

Familiaritate: sintaxa limbajului este foarte ușoară, combinând sintaxele unora din cele mai populare limbaje, Perl sau C;

Simplitate: sintaxa limbajului este destul de liberă. Nu este nevoie de includere de biblioteci sau de directive de compilare, codul PHP inclus într-un document executându-se între marcajele speciale;

Eficiență: PHP-ul se folosește de mecanisme de alocare a resurselor, foarte necesare unui mediu multiutilizator, așa cum este web-ul;

Securitate: PHP-ul pune la dispoziția programatorului un set flexibil și eficient de măsuri de siguranță;

Flexibilitate: fiind apărut din necesitatea dezvoltării web-ului, PHP a fost modularizat pentru a ține pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele servere web existente: Apache, IIS, Zeus server etc.;

Gratuitate: este probabil cea mai importantă caracteristică a PHP-ului. Dezvoltarea PHP-ului sub licență open-source a determinat adaptarea rapidă a PHP-ului la nevoile web-ului, eficientizarea și securizarea codului.

PHP este simplu de utilizat, fiind un limbaj de programare structurat, ca și C-ul, Perl-ul sau, începând de la versiunea 5, chiar Java, sintaxa limbajului fiind o combinație a celor trei. Datorită modularității sale, poate fi folosit și pentru a dezvolta aplicații de sine stătătorare, de exemplu în combinație cu PHP-GTK sau poate fi folosit ca Perl sau Python în linia de comandă. Probabil una din cele mai importante facilități ale limbajului este conlucrarea cu majoritatea bazelor de date relaționale, de la MySQL și până la Oracle, trecând prin MS SQL Server, PostgreSQL sau DB2.

PHP poate rula pe majoritatea sistemelor de operare, de la UNIX, Windows, sau Mac OS X și poate interacționa cu majoritatea serverelor web. Codul PHP este interpretat de serverul WEB și generează un cod HTML care va fi văzut de utilizator (clientului –browserului – fiindu-i transmis numai cod HTML). Din acest motiv, codul PHP poate fi, pur și simplu, amestecat cu cod HTML.

REALIZAREA APLICAȚIEI

Scopul aplicației

Aplicația care face obiectul prezentului proiect își propune să vină în ajutorul studenților, dar și al personalului din cadrul secretariatelor facultăților, în numeroasele situații în care studenții se adresează conducerii unității de învățământ cu diverse cereri (cereri de înscriere, cereri de eliberare a unor documente etc.).

Prin acest proiect am încercat să ușurez accesul studenților la formularele tipizate necesare în relația lor cu secretariatul facultății, să automatizez procesul de completare a acestor cereri și să facilitez trimiterea și înregistrarea lor, utilizând mijloacele moderne puse la dispoziție de ultimele tehnologii din domeniul IT&C.

Am avut în vedere ca, prin instrumentele utilizate, să obțin o eficiență maximă a utilizării resurselor, prin folosirea doar a instrumentelor software de tip open-source (cu acces liber / gratuite). Asfel, costurile implementării acestei soluții sunt legate doar de factorul uman (timp alocat scrierii și testării aplicației), fără a fi necesare achiziții de licențe software, care, de cele mai multe ori sunt extrem de costisitoare, raportat la bugetul limitat unei instituții de învățământ.

Instrumentele utilizate au fost cele prezentate în capitolele anterioare, aplicate în cadrul Android Studio.

Documentare

Pentru scrierea aplicațíei am folosit ca principală sursă de informație Internetul, unde am găsit diverse manuale, tutoriale și exemple privind scrierea aplicațiilor pentru Android, utilizarea limbajului Java, folosirea instrumentelor de manipulare a bazelor de date, a limbajelor de interogare etc.

Structura aplicației

Aplicația este structurată pe 3 straturi (layer-e):

Database layer;

Server layer;

Client layer.

Database layer

În Database layer se păstrează toate datele necesare aplicației.

În cazul nostru, structura bazei de date este cea prezentată în Fig. 7.1.

Baza de date este alcătuită din 2 tabele: una conține datele de autentificare ale utilizatorilor, iar cealaltă conține informațiile (câmpurile) necesare completării formularelor de cerere.

Fig. 7.1. Structura bazei de date

Legătura între tabele se realizează prin intermediul câmpului cheie id_user (cheie primară în tabela USER și cheie externă în tabela CERERE). De asemenea, tabela CERERE conține și ea o cheie primară, id_cerere. Astfel, fiecare cerere generată de un utilizator se va adăuga în tabela CERERE, primind un identificator unic al cererii și având atașat identificatorul utilizatorului.

Server layer

În Server layer sunt păstrate script-urile PHP care manipulează datele. Am folosit 4 script-uri, dintre care 2 sunt responsabile cu înregistrarea și autentificarea utilizatorului, iar celelalte 2 se ocupă cu salvarea datelor specifice fiecărui tip de cerere.

Structura celor 4 script-uri PHP este similară, singurele diferențe fiind între variabilele capturate și tabelele folosite pentru inserarea sau citirea datelor.

În momentul în care un script este apelat de către aplicația Android, atunci acesta va rula în următoarea ordine:

Se apelează funcțiile care efectuează o conexiune la baza de date. În cazul în care pe server-ul unde se rulează script-ul există mai multe baze de date, atunci conexiunea trebuie îndreptată către baza de date pe care dorim sa o modificăm.

// se efectuează conexiunea cu baza de date
$con = mysqli_connect("localhost", "rsyn4232_marian", "licurici18_88_m3", "rsyn4232_marian");

// se selectează baza de date pe care dorim să facem modificări
$db_selected = mysqli_select_db($con, 'rsyn4232_marian');

După acest pas, trebuie să colectăm variabilele transmise de aplicație prin intermediul metodei GET. Aceste variabile diferă, în funcție de script-ul apelat. Am ales această metodă în detrimentul variantei POST, deoarece aceste script-uri efectuează numai interogări simple către baza de date.

// se capturează variabilele trimise către script
$username = $_GET["username"];
$password = $_GET["password"];
$idFacultate = $_GET["idFacultate"];

În urmatorul pas se pregătește și se execută query-ul către tabela de date dorită. Acest query se efectuează într-o manieră în care se încearcă eliminarea oricărei încercări de SQL Injection. Aceasta este o tehnică folosită pentru a injecta cod SQL într-o aplicație astfel încât acesta să execute diferite comenzi nedorite, cum ar fi să ofere accesul atacatorului la o pagină cu un form de autentificare, fără ca acesta să ofere un utilizator și o parolă validă.

// se efectuează query către baza de date. Se folosește “?” pentru a preveni SQL Injection
$statement = mysqli_prepare($con, "INSERT INTO user (username,password,id_facultate) VALUES (?, ?, ?)");

// se crează legătura între câmpurile tabelului în care dorim sa inserăm datele și variabilele colectate, în funcție de tipul de date;
// s = String
// i = Integer
mysqli_stmt_bind_param($statement, "ssi", $username, $password, $idFacultate);

// execută query-ul
mysqli_stmt_execute($statement);

În cazul în care query-ul dorit trebuie să returneze un rezultat, atunci acesta trebuie procesat de către script și formatat într-o manieră în care aplicația de pe device-ul Android o poate interpreta cu ușurință. Acest lucru se efectuează prin intermediul formatului JSON, acesta fiind o alternativă simplă de reprezentare și interschimb de date între diferite aplicații și limbaje informatice, în cazul nostru între PHP și JAVA.

// alocă rezultatele returnate de către query-ul efectuat la variabilele dorite
mysqli_stmt_bind_result($statement, $userID, $username, $password, $idFacultate);
$user = array();

// crează un array de tipul key => value unde se introduc valorile variabilelor
while(mysqli_stmt_fetch($statement)){
$user['userID'] = $userID;
$user['username'] = $username;
$user['password'] = $password;
$user['idFacultate'] = $idFacultate;
}

// se codează datele finale în format JSON
echo json_encode($user);

Ultimul pas efectuat de către script este acela de a șterge din memorie referința către query-ul efetuat. Acest luru este util și necesar în cazul în care se dorește un nou query în cadrul aceluiași script. Totodată, tot în acest pas se închide și conexiunea cu baza de date.

// se închide query-ul efectuat
mysqli_stmt_close($statement);
// se închide conexiunea către baza de date
mysqli_close($con);

În acest moment aplicația Android a primit datele dorite, iar acestea urmează să fie procesate și/sau afișate, în funcție de dorința utilizatorului.

Client layer

Client layer-ul este partea din aplicație care se ocupă cu interpretarea și afișarea datelor brute primite de la server layer. Această parte este foarte importantă în orice aplicație, deoarece modalitatea în care sunt afișate informațiile colectate au un impact foarte mare auspra utilizatorului. Este de dorit ca orice aplicație să dețină o interfață prietenoasă, intuitivă și bine structurată astfel încât oricine să poată naviga în interiorul acesteia și să poată să găsească ceea ce îl interesează.

Indiferent de platforma folisită, fie că este Android, fie că este o aplicație web bazed client layer este format din cel puțin două componente cheie:

un limbaj programatic ce descrie efectiv designul interfeței

un alt limbaj ce descrie interacțiunile dintre elementele descrise în partea de designe

În cazul nostru acest client layer este structurat ca orice aplicație android și anume, tot ceea ce ține de designul interfeței utilizatorului este declarată în format XML iar restul se face în limbaj java.

Componenta principală a unei aplicați android este Activity-ul. Grafic, aceasta este reprezentată ca fiind ecrane separate din aplicație, adică de fiecare dată când aplicația afișează un ecran nou cu diferite componente inseamnă că este apelat un Activity separat.

În esență un Activitiy este format dintr-un fișier XML, unde se definește leyout-ul pentru ecranul respectiv și o clasă Java.

Fig. 7.2 Ecranul de creare a unui cont nou

Design-ul unui Activity precum puteți observa și în fig 7.2 se definește complet într-un fișier XML după exemplul de mai jos:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"

android:orientation="vertical"
android:layout_width="match_parent"
android:padding="15dp"
android:layout_height="wrap_content">

<TextView
android:layout_width="wrap_content"
android:text="@string/facultate"
android:layout_marginBottom="10dp"
android:layout_height="wrap_content" />

<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/SpFacultate"
android:prompt="@string/SpTitlu"
android:layout_marginBottom="10dp"
android:layout_gravity="center_horizontal" />

<TextView
android:layout_width="wrap_content"
android:text="@string/username"
android:layout_marginBottom="5dp"
android:layout_height="wrap_content" />

<EditText
android:id="@+id/etUsername"
android:inputType="text"
android:layout_width="match_parent"
android:layout_marginBottom="10dp"
android:layout_height="wrap_content" />

<TextView
android:layout_width="wrap_content"
android:text="@string/password"
android:layout_marginBottom="5dp"
android:layout_height="wrap_content" />

<EditText
android:id="@+id/etPassword"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_marginBottom="10dp"
android:layout_height="wrap_content" />

<Button
android:id="@+id/bRegister"
android:layout_width="match_parent"
android:text="@string/register"
android:layout_marginBottom="10dp"
android:layout_height="wrap_content" />
</LinearLayout>

În momentul în care se activează un Activity, se va instanția o clasă Java. În constuctorul acesteia în funcție de necesitatea utilizatorului se pot defini toate variabile sau obiectele de care avem nevoie pentru Activity-ul respective.

Algoritmul aplicației

Acest capitol își propune să exemplifice structura și algoritmul aplicației începând cu primul ecran afișat utilizatorului și terminând cu etapa în care se trimit datele finale către baza de date.

Primul ecran pe care utilizatorul îl vede este cel de Autentificare ( vezi fig. 7.3 ). Acesta este format din clasa LogIn și XML-ul aferent acestui Activity, unde sunt definite câmpurile necesare.

public class LogIn extends AppCompatActivity implements View.OnClickListener

În Android, clasele ce definesc un Activity automat vor extinde și clasa de baza pentru acestea și anume AppCompatActivity. În cazul în care ai nevoie să asculți după diferite Event-uri, în cazul nostru ne interesează dacă utilizatorul dă clic pe butonul de Autentificare sau pe cel de Creați un Cont nou, atunci clasa trebuie să implementeze și interfața View.OnClickListener, interfața ce invocă automat o metodă în momentul în care se detectează un click în interiorul Activity-ului.

Fig. 7.3 Ecranul de start al aplicației

Fiecare Activity trebuie să aibe parametri definiți în funcție de ceea ce este afișat pe ecran. În fig 7.3, avem definite două elemente TextView, tag-uri simple pentru a afișa text, două elemente EditText, căsuțe în care se poate introduce text folosind tastatura de pe ecran și două elemente Button folosite pentru a efectua diferite acțiuni în funcție de ceea ce dorește utilizatorul. Pentru a putea interacționa cu aceste elemente, mai întâi trebuie să le definim ca paramentri în clasă.

Button bLogin;
TextView twContNou;
UserLocalStoreDetails UserLocalStoreDetails;
EditText etUsername, etPassword;

În momentul în care se instanțiază clasa LogIn automat se apelează și constructorul acesteia. În acesta, de cele mai multe ori se setează variabilele de care ai nevoie mai departe pentru a putea interacționa cu elementele din XML.

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log_in);

etUsername = (EditText) findViewById(R.id.etUsername);
etPassword = (EditText) findViewById(R.id.etPassword);

bLogin = (Button) findViewById(R.id.bLogin);
twContNou = (TextView) findViewById(R.id.twContNou);

bLogin.setOnClickListener(this);
twContNou.setOnClickListener(this);

UserLocalStoreDetails = new UserLocalStoreDetails(this);
}

Deoarece am implementat interfața View.OnClickListener, trebuie neapărat să dăm Override la toate metodele definite în aceasta, pentru a reuși o implementare cu succes. Fiind o interfață specifică doar pentru Event-uri OnClick, singura metodă abstractă definită se numește chiar OnClick.

Interfața ascultă toate click-urile dintr-un Activity și invoca metoda OnClick de fiecare dată, pentru a identifica elementul pe care s-a dat click. Metoda primește ca parametru contextul pe care s-a dat click și astfel se oferă o modalitate de a identifica elementul respectiv în funcție de id-ul său. Acest lucru este important în cazul în care într-un Activity ai numeroase tipuri pentru care îți dorești să capturezi Event-ul OnClick.

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bLogin:
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();

User user = new User(username, password, 0);

authenticate(user);
break;
case R.id.twContNou:
startActivity(new Intent(LogIn.this, Register.class));
break;
}
}

Utilizatorul are posibilitatea de a-și ceea un cont nou în cazul în care nu deține unul. În momentul în care dă click pe butonul Creează un Cont nou se capturează acest Event iar în interiorul metodei OnClick, în funcție de id-ul acestui buton se execută un anumit cod, în cazul nostru se instanțiaza un nou Activity, ceea ce presupune și instanțierea clasei ce reprezintă Activity-ul respectiv și cel de Register.(fig 7.4)

Fig. 7.4 Ecranul de creare a unui cont nou

Datele utilizatorului sunt salvate într-o clasă numită user.

public class User {
String username, password;
int idFacultate;

public User(String username, String password, int idFacultate) {
this.username = username;
this.password = password;
this.idFacultate = idFacultate;
}

}

În acest Activity se folosește prima dată clasa care efectuează requst către Server- layer.

Aici avem definiți ca parametri contextul din care se efectuează request-ul, un ProgressDialog, ce definește un nou obiect care afișează pe ecran un dialog ce atenționează utilizatorul că se efectuează un task în spatele aplicației și două constante ce definesc adresa server-ului și timpul maxim în care aplicația încearcă să efectueze conexiunea cu acesta.

Această clasă are două metode definite, prima care trimite date către server pentru a fi inserate în baza de date și a doua care cere date de la server. Totodată pentru a efectua un request, trebuiesc clase separate pentru cele două metode definite în clasa server request. Mai exact în android există o clasă de bază pentru acest lucru care se numeste AsyncTask, ce se execută în background.

public class ServerRequests {

Context context;
ProgressDialog progressDialog;
public static final int CONNECTION_TIMEOUT = 1000 * 15;
public static final String SERVER_ADDRESS = "http://www.synergyplant.ro/wp-content/";

public ServerRequests(Context context){
this.context = context;
progressDialog = new ProgressDialog(context);
progressDialog.setCancelable(false);
progressDialog.setTitle("Processing");
progressDialog.setMessage("please Wait…");
}

public void storeUserDataOnServer(User user, GetUserCallback UserCallback){
progressDialog.show();
new StoreDataUsingAsyncTask(user, UserCallback).execute();
}

public void getUserDataFromServer(User user, GetUserCallback UserCallback){
progressDialog.show();
new GetDataUsingAsyncTask(user, UserCallback).execute();
}

public class StoreDataUsingAsyncTask extends AsyncTask<Void, Void, Void>{

User user;
GetUserCallback UserCallback;

public StoreDataUsingAsyncTask(User user, GetUserCallback UserCallback){
this.user = user;
this.UserCallback = UserCallback;
}

@Override
protected Void doInBackground(Void… params) {
ContentValues data = new ContentValues();
data.put("username", user.username);
data.put("password", user.password);
data.put("idFacultate", user.idFacultate + "");

String setURLdata = "username=" + data.get("username") + "&password=" + data.get("password") + "&idFacultate=" + data.get("idFacultate");

Log.d("MyTag", setURLdata);

try {
URL url = new URL(SERVER_ADDRESS + "Script_l1.php?" + setURLdata);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(CONNECTION_TIMEOUT);
connection.setReadTimeout(CONNECTION_TIMEOUT);
connection.setRequestMethod("GET");
connection.connect();

InputStream connectionResponse = new BufferedInputStream(connection.getInputStream());
String response = IOUtils.toString(connectionResponse);

Log.d("MyTag", response);

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return null;
}

@Override
protected void onPostExecute(Void aVoid) {
progressDialog.dismiss();
UserCallback.done(null);
super.onPostExecute(aVoid);
}
}

public class GetDataUsingAsyncTask extends AsyncTask<Void, Void, User>{

User user;
GetUserCallback UserCallback;

public GetDataUsingAsyncTask(User user, GetUserCallback UserCallback){
this.user = user;
this.UserCallback = UserCallback;
}

@Override
protected User doInBackground(Void… params) {
ContentValues data = new ContentValues();
data.put("username", user.username);
data.put("password", user.password);

String setURLdata = "username=" + data.get("username") + "&password=" + data.get("password");

Log.d("MyTag", setURLdata);

User returnedUser = null;
try {
URL url = new URL(SERVER_ADDRESS + "Script_l2.php?" + setURLdata);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(CONNECTION_TIMEOUT);
connection.setReadTimeout(CONNECTION_TIMEOUT);
connection.setRequestMethod("GET");
connection.connect();

InputStream connectionResponse = new BufferedInputStream(connection.getInputStream());
String response = IOUtils.toString(connectionResponse);

Log.d("MyTag", response);

JSONObject jsonObject = new JSONObject(response);

Log.d("MyTag", jsonObject.length()+"");

if (jsonObject.length() == 0){
returnedUser = null;
}else {
String username = jsonObject.getString("username");
String password = jsonObject.getString("password");
int idFacultate = jsonObject.getInt("idFacultate");

Log.d("MyTag", username);

returnedUser = new User(username, password, idFacultate);
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}

return returnedUser;
}

@Override
protected void onPostExecute(User returnedUser) {
progressDialog.dismiss();
UserCallback.done(returnedUser);
super.onPostExecute(returnedUser);
}
}
}

După ce utilizatorul își creează un cont, automat este întors spre ecranul de LogIn unde trebuie să introducă datele de autentificare. Dacă acest pas a fost efectuat cu succes, atunci utilizatorul vede următorul ecran unde i-se prezintă două obtiuni și anume de a vizulaiza cererile anterioare sau de a-și adăuga o cerere nouă.(fig 7.5)

Datele utilizatorului sunt salvate și local, pe device-ul folosit, pentru a evita multiple request-uri către server în cazul în care acesta s-a autentificat cu un username și o parolă validă. Acest lucru se realizează prin intermediul interfeței SharedPreferences.

public class UserLocalStoreDetails {
public static final String SP_NAME = "userDetails";
SharedPreferences userLocalDatabase;

public UserLocalStoreDetails(Context context) {
userLocalDatabase =context.getSharedPreferences(SP_NAME, 0);
}

public void storeUserData(User user) {
SharedPreferences.Editor spEditor = userLocalDatabase.edit();
spEditor.putString("username", user.username);
spEditor.putString("password", user.password);
spEditor.putInt("idFacultate", user.idFacultate);
spEditor.commit();
}

public User getUserLoggedIn() {
String username = userLocalDatabase.getString("username", "");
String password = userLocalDatabase.getString("password", "");
int idFacultate = userLocalDatabase.getInt("idFacultate", 0);

User localStoredUser = new User(username,password,idFacultate);

return localStoredUser;
}

public void setUserLoggedInState(boolean loggedIn) {
SharedPreferences.Editor spEditor = userLocalDatabase.edit();
spEditor.putBoolean("loggedIn", loggedIn);
spEditor.commit();
}

public boolean getUserLoggedInState(){
if ( userLocalDatabase.getBoolean("loggedIn", false) == true ) {
return true;
}
else
{
return false;
}
}

public void clearAllData() {
SharedPreferences.Editor spEditor = userLocalDatabase.edit();
spEditor.clear();
spEditor.commit();
}
}

Fig. 7.5. Ecranul de selecție

Butonul Vezi cereri anterioare permite utilizatorului să vadă o listă cu toate cererile efectuate și statusul acestora.

Dacă este selectat butonul Adauga cerere noua atunci utilizatorul vede un formular cu diferite câmpuri pe care trebuie să le complecteze în funcție de tipul cereri selectate. Când aceste câmpuri sunt complectate în totalitate atunci se efectuează un nou reqest către server și sunt inserate datele în tabelul corespunzător.(fig 7.6)

Fig. 7.6. Ecranul de introducere date

Cererile pot fi vizualizate de către o persoană autorizată să le proceseze, accesând un link către o pagină web unde vor fi afișate toate cererile. Tot pe această pagină se va modifica statusul fiecărei cerer în parte, în funcție de stadiul în care se află aceasta, din In asteptare… , se Procesează Cererea… și Cererea a fost Finalizată… .

CONCLUZII

Prin implementarea aplicației și postarea ei pe portalul web al Universității Transilvania am dorit să vin în ajutorul studenților, astfel încât interacțiunea cu personalul secretariatului să devină mai ușoară, să se poată face și on-line, de la distanță, o parte din solicitările studenților să poată fi rezolvate mai operativ, fără a fi necesară deplasarea la secretariat pentru activități repetitive și care presupun un nivel ridicat de standardizare.

Am convingerea că soluția adoptată rezolvă o cerință pe care mulți studenți o consideră necesară și că aplicația va fi primită cu interes de potențialii utilizatori.

Firește, această abordare nu este decât un început, ea putând fi extinsă și cu alte funcționalități, ceea ce nu poate fi decât de dorit. Ca în orice întreprindere, a fost mai greu de făcut primul pas, iar continuarea sper să fie o provocare și pentru alți pasionați, care, cu siguranță, vor găsi noi posibilități de sporire a utilității aplicației.

Fig. 8.1.Posibilă locație pe portalul unitbv.ro

Pentru cei care vor dori să continue dezvoltarea acestei aplicații, vreau să prezint și câteva probleme cu care m-am confruntat în timpul conceperii, scrierii și testării acesteia.

Partea care mi-a creat cele mai multe probleme a fost, cu siguranță, cea în care am programat efectiv aplicația folosing limbajul JAVA și API-ul Google. Acesta necesită un nivel de cunoștințe ceva mai ridicat decât cel de incepător. În cazul în care, totuși ești începator, atunci ai nevoie de rabdare și timp pentru a rasfoi documentația Android și pentru a căuta pe internet diferite variante până când reusești să găsești un raspuns adecvat pentru orice problemă pe care o poți întâmpina.

BIBLIOGRAFIE

http://en.wikipedia.org/wiki; https://ro.wikipedia.org/wiki/

Informaticasite Îmbunătățește-ți Cunoștințele de Informatică, Dezvoltă-ți Abilitățile de Programare și Design Web!

www.cs.ubbcluj.ro/~vcioban/…/Curs/CursJava.docx

Popeangă, Daniel – XML-QL, un limbaj de interogare pentru XML, http://www.preferate.ro/referat-Informatica-XML-QL–un-limbaj-de-interogare-pentru-XML-15-166.html, 2003

Android Studio App Development – https://www.youtube.com/watch?v=jliH9hAQMOI

Android-JSON -https://www.youtube.com/watch?v=Ah1of1dg2I&index=7&list=PL9JseSRCtp1U7fHC97qTslodUoER_pGLa

Access External Database on an Android App – https://www.youtube.com/watch?v=4Soj22OMc98

http://www.w3schools.com/json/default.asp

http://www.w3schools.com/php/php_arrays.asp

http://developer.android.com/sdk/installing/adding-packages.html

BIBLIOGRAFIE

http://en.wikipedia.org/wiki; https://ro.wikipedia.org/wiki/

Informaticasite Îmbunătățește-ți Cunoștințele de Informatică, Dezvoltă-ți Abilitățile de Programare și Design Web!

www.cs.ubbcluj.ro/~vcioban/…/Curs/CursJava.docx

Popeangă, Daniel – XML-QL, un limbaj de interogare pentru XML, http://www.preferate.ro/referat-Informatica-XML-QL–un-limbaj-de-interogare-pentru-XML-15-166.html, 2003

Android Studio App Development – https://www.youtube.com/watch?v=jliH9hAQMOI

Android-JSON -https://www.youtube.com/watch?v=Ah1of1dg2I&index=7&list=PL9JseSRCtp1U7fHC97qTslodUoER_pGLa

Access External Database on an Android App – https://www.youtube.com/watch?v=4Soj22OMc98

http://www.w3schools.com/json/default.asp

http://www.w3schools.com/php/php_arrays.asp

http://developer.android.com/sdk/installing/adding-packages.html

Similar Posts