Automatizarea unor procese institut ,ionale [602529]

Ministerul Educat ¸iei s ,i Cercet ˘arii Nat ¸ionale
Universitatea ”OVIDIUS” din Constant ¸a
Facultatea de Matematic ˘a s,i Informatic ˘a
Specializarea Informatic ˘a
Automatizarea unor procese institut ,ionale
prin intermediul unor robot ,i UiPath
Lucrare de licent ,˘a
Coordonator s ¸tiint ¸ific:
Prof. dr. Sburlan Dragos ,
Absolvent: [anonimizat] ¸a
2020

Cuprins
Cuprins i
Lista Figurilor iii
1 Android 1
1.1 Istoric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Versiuni Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Tehnologii si instrumente de dezvoltare folosite 6
2.1 Android Studio IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.1 Interfata Android Studio . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.2 Structura unui proiect in Android Studio . . . . . . . . . . . . . . . 9
2.1.3 Crearea interfetei cu utilizatorul . . . . . . . . . . . . . . . . . . . 11
2.2 Platforma Ecplipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 Istoria Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.2 Versiuni Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 Robotic Process Automation . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.1 UiPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.2 Versiuni UiPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
i

Cuprins Cuprins
2.4 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.1 Istoria Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.2 Caracteristici ale limbajului . . . . . . . . . . . . . . . . . . . . . 16
2.4.3 Programare orientata pe obiecte in Java . . . . . . . . . . . . . . . 18
2.4.4 Java networking . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5 Mobile Vision Text API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.1 Recunoasterea optica a caracterelor (OCR) . . . . . . . . . . . . . 21
2.5.2 Tipuri de OCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6 JavaScript Object Notation . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Problema propus ˘a 23
3.1 Descrierea problemei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2 Rezolvarea problemei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Clasele s ,i codul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Referint ¸e bibliografice 33
ii

Lista Figurilor
2.1 Crearea unui proiect in Android Studio. . . . . . . . . . . . . . . . . . . . . . 7
2.2 Setarea numelui proiectului. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Fereastra principala Android Studio. . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Fisierele proiectului folosind vizualizarea Android. . . . . . . . . . . . . . . . 9
2.5 Fisierele proiectului folosind vizualizarea Project. . . . . . . . . . . . . . . . . 10
2.6 Fisierele proiectului folosind vizualizarea Problems. . . . . . . . . . . . . . . . 10
3.1 Interfat ,a principal ˘a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Interfat ,a secundara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
iii

Lista Figurilor Lista Figurilor
3.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1

Ministerul Educat ¸iei s ,i Cercet ˘arii Nat ¸ionale
Universitatea ”OVIDIUS” din Constant ¸a
Facultatea de Matematic ˘a s,i Informatic ˘a
Specializarea Informatic ˘a
Automatizarea unor procese institut ,ionale
prin intermediul unor robot ,i UiPath
Lucrare de licent ,˘a
Coordonator s ¸tiint ¸ific:
Prof. dr. Sburlan Dragos ,
Absolvent:
Guteanu Andrei
Constant ¸a
2020

Rezumat
Aplicat ,ia se numes ,te ”Automatizarea unor procese institut ,ionale prin intermediul unor robot ,i
UiPath”. Aceasta este alc ˘atuit˘a dintr-un program software pentru Android, un server s ,i un
robot UIPath. Scopul acestei aplicat ,ii este de a us ,ura procesul de ˆınscriere al student ,ilor la
universitate, utilizatorul trebuind doar s ˘a introduc ˘a poze cu documentele necesare ˆınscrierii,
urmˆand ca datele s ˘a fie extrase ˆın cadrul aplicat ,iei folosind Mobile Vision Text API furnizat
de Google.
Pentru a crea aplicat ,ia Android am utilizat mediul de dezvoltare Android Studio, deoarece
este instrumentul principal de dezvoltare al aplicat ,iilor Android. ˆIn cadrul aplicat ,iei am uti-
lizat controale de tip butoane pentru accesarea camerei foto s ,i a face tranzit ,iaˆıntre cele dou ˘a
activit ˘at,i ale aplicat ,iei, c ˆat s ,i pentru trimiterea datelor c ˘atre server si finalizarea ˆınscrierii.
Pentru a afis ,a denumirea c ˆampurilor am folosit elementul TextView, iar pentru introducerea
textului extras am folosit elementul PlainText.
La deschiderea aplicat ,iei Android, utilizatorul trebuie s ˘a introduc ˘a poze cu cartea de
identitate, respectiv diploma de bacalaureat, urm ˆand ca prin intermediul api-ul de recunoas ,tere
a textului s ˘a fie extrase secvent ,ele de text necesare completarii elementelor EditText. Dup ˘a
verificarea datelor de c ˘atre utilizator, acesta va finaliza ˆınscrierea trimit ,ˆandu-le c ˘atre server
ˆıntr-un obiect JSON.
Server-ul este creat ˆın Eclipse IDE, folosind limbajul de programare Java. Rolul server-
ului este de a recept ,iona datele transmise de catre utilizatorul aplicat ,iei Android s ,i a le salva
ˆıntr-un fis ,ier csv pentru a putea fi prelucrate de c ˘atre robotul UIPath.

Abstract
The application is called ”Automatizarea unor procese institut ,ionale prin intermediul unor
robot ,i UiPath”. It consists of a software program for Android, a server and a UiPath robot.
The purpose of this application is to facilitate the registration process for university students,
the user only has to enter pictures with the documents required for registration, and the
data will be extracted within the application using the Mobile Vision Text API provided by
Google.
To create the Android application I used the Android Studio development environment,
beacause it is the main development tool for Android applications. Within the application I
used button controls to access the camera and make the transition between the two activities
of the application, as well as to send the data to the server and complete the registration. To
display the field name I used the TextView element, and to enter the extracted text I used the
PlainText element.
When opening the Android application, the user must enter the pictures with the identity
card, respectively the diploma of school graduate, following through the text recognition api
to be extracted the text sequences necessary to populate the EditText elements. After the
user verifies the data, he will complete the registration by sending it to the server in a JSON
object.
The server is created in Eclipse IDE, using the Java programming language. The role
of the server is to receive the data transmitted by the Android application user and save it in
a csv file so that it can be processed by the UiPath robot.

Capitolul 1
Android
Android este un sistem de operare si o platforma de programare dezvoltata de catre Google
pentru dispozitivele mobile, cum ar fi telefoanele inteligente sau tabletele. Acesta poate rula
pe diferite dispozitive, produse de diferiti producatori. Android are in componenta sa un set
de aplicatii de baza cum ar fi un client de e-mail, calendar, browser de internet, contacte,
program SMS, harti si alte caracteristici, majoritatea aplicatiilor fiind dezvoltate folosind
limbajul Java. [1] [2]
Fiind cea mai populara platforma mobile din lume, Android alimenteaza sute de mil-
ioane de dispozitive mobile in mai mult de 190 de tari din jurul lumii. In fiecare zi un alt
milion de utilizatori isi configureaza pentru prima data dispozitivul Android, urmand apoi sa
inceapa sa caute aplicatii si jocuri. [2]
In timp ce Andorid ofera o alternativa viabila utilizatorilor la alte sisteme de operare
mobile, raman in continuare cateva limitari. Pe partea dezvoltatorului, codarea experientelor
utilizatorului si interfetelor complexe este des o sarcina dificila care cere o baza mai mare
pe Java decat pe Objective-C. Pentru utilizatori, aplicatiile de pe magazinul Android tind sa
aiba standarde mai joase comparabil cu alte magazine de aplicatii. [3]
Codul sursa al Android este lansat intr-un format open-source pentru a ajuta la avansarea
standardelor pe dispozitivele mobile. Cu toate acestea, in ciuda lansarii ca software deschis,
Andoid este vandut ca software proprietar pe dispozitivele mobile. [3]
1.1 Istoric
In Octombrie, anul 2003, inaintea folosirii termenului smartphone atat de intens, si cu multi
ani inainte ca Apple sa anunte primul iPhone alaturi de sistemul de operare iOS, compania
Android Inc a fost fondata in Palo Alto, California. Cei patru fondatori au fost Rich Miner,
Nick Sears, Chris White si Andy Rubin. La momentul anuntarii publice a fondarii, Andy
Rubin a declarat ca Android Inc urma sa dezvolte dispozitive mobile mai inteligente care
sunt mai constiente de locatia si preferintele proprietarului sau.[4]
1

Android Istoric
In anul 2005, urmatorul mare capitol din istoria Android a fost cand compania initiala
a fost achizitionata de catre Google. Andy Rubin si ceilalti membri fondatori au ramas in
continuare in cadrul companiei pentru a continua dezvoltarea sistemului de operare. Decizia
de a folosi Linux ca baza pentru sistemul de operare Android a insemnat faptul ca Android
ar putea fi oferit gratuit producatorilor de telefoane mobile. Google si echipa Android au
simtit potentialul companiei de a castiga bani oferind alte servicii care folosesc sistemul de
operare, incluzand aplicatii. [4]
In anul 2007, Apple a lansat primul iPhone si a creat o noua era in domeniul dispozi-
tivelor mobile. In acea perioada, Google inca lucra in secret la Android, insa in luna Noiem-
brie a aceluiasi an, compania a inceput sa dezvaluie planurile de a combate Apple si alte
platforme mobile. [4]
Se presupune ca Google a avut cel putin doua versiuni de Android lansate intern inainte
de a face lansarea publica a versiunii beta 1.0 pentru dezvoltatori in luna noiembrie a anului
2007, cam in aceeasi perioada in care a anuntat Open Handset Alliance. [4]
In septembrie, anul 2008, primul telefon inteligent care foloseste Android a fost lansat,
T-Mobile G1, cunoscut si sub numele de HTC Dream. Telefonul avea un ecran pop-up de 3.2
inch, combinat cu o tastatura fizica QWERTY . Telefonul a primit recenzii destul de proaste
din partea presei din domeniul tehnologiei. [4]
Versiunea de Android 1.0 a sistemului de operare integra o serie de produse si servicii
ale companiei Google, inclusiv Youtube, Google Maps si un browser HTML care, desigur,
au folosit serviciile de cautare Google. De asemenea, a avut si prima versiune de Android
Market, magazinul de aplicatii despre care Google spunea cu mandrie ca ar avea zeci de
aplicatii unice. Toate aceste caracteristici suna destul de primitive pentru nivelul tehnologiei
din aceasta perioada, insa acesta a fost doar inceputul cresterii Android pe piata dispozitivelor
mobile. [4]
2

Android Versiuni Android
1.2 Versiuni Android
1.Android 1.0 – 1.1 Android a facut debutul public oficial in 2008 cu Android 1.0, o
versiune atat de antica incat nici macar nu avea un nume de cod. Lucrurile erau destul
de elementare, insa software-ul avea incluse niste aplicatii Google, cum ar fi Harti,
Calendar, Gmail si Youtube, toate fiind integrate in sistemul de operare. [5]
2.Android 1.5: Cupcake Traditia numelor de cod a fost lansata odata cu versiunea An-
droid 1.5 la inceputul anului 2009. Cupcake a introdus numeroase ajustari interfetei
Android, incluzand prima tastatura de pe ecran, ceva necesar pe masura ce telefoanele
se indepartau de modelele cu tastaturi fizice. Android 1.5 a adus de asemenea si
widget-urile pentru anumite aplicatii, care s-au transformat rapid intr-unul dintre cele
mai distincte elemente ale Android si a oferit prima optiune a platformei pentru inreg-
istrarea video. [5]
3.Android 1.6: Donut Donut a fost lansat in toamna anului 2009, acesta a umplut cateva
goluri importante ale Android, inclusiv capacitatea sistemului de operare de a rula pe
o varietate de dimensiuni si rezolutii, un factor care ar fi critic in anii urmatori. De
asemenea, a fost adaugat si suport pentru retelele CDMA precum Verizon, care ar juca
un rol esential in evolutia Android. [5]
4.Android 2.0 – 2.1: Eclair Android 2.0 a aparut la doar sase saptamani dupa Donut.
Actualizarea sa, Android 2.1, numita si Eclair, a aparaut cateva luni mai tarziu. Cel mai
semnificativ element adaugat a fost transmiterea informatiilor despre trafic in timp real,
precum si prima functie speech-to-text a platformei. Tot in cadrul acestei actualizari
au fost introduse si imaginile de fundal live. [5]
5.Android 2.2: Froyo La doar patru luni de la lansarea Android 2.1, Google a pus la
dispozitie Android 2.2, denumit si Froyo. Froyo a oferit pentru prima data actiunile
vocale, ceea ce permite indeplinirea unor functii de baza, apasand o pictograma si apoi
rostind comanda. Froyo a adus si suport pentru Flash in browser-ul Android, care era
necesar datorita utilizarii pe scara larga a Flash-ului la acea vreme. [5]
6.Android 2.3: Gingerbread Aparut in anul 2010, aceasta actualizare ofera Android-
ului prima identitate vizuala adevarata. Verde stalucitor a fost multa vreme culoarea
robotului Android, iar odata cu GingerBread a devenit o parte integranta a aspectului
sistemului de operare. [5]
7.Android 3.0 – 3.2: Honeycomb Perioada anului 2011 a fost o perioada ciudata pen-
tru Android, Honeycomb venind ca o versiune exclusiva pentru tablete pentru a insoti
lansarea Motorola Xoom, urmand ca actualizarile 3.1 si 3.2 sa ramana in continuare
exclusiv pentru tablete. Honeycomb a introdus o interfata cu utilizatorul total schim-
bata, avand un design holografic asemanator spatiului, facand tranzitia de la culoarea
verde a logo-ului la albastru. [5] Desi conceptului unei interfete specifice unei tablete
nu a fost de durata, multe dintre ideile Honeycomb au pus bazele Android, cum ar fi
butoanele de pe ecran pentru comenzile de navigatie. [5]
3

Android Versiuni Android
8.Android 4.0: Ice Cream Sandwich Lansat in anul 2011, a fost momentul oficial al
platformei de intrare in era design-ului modern, actualizarea avand conceptele vizuale
introduse cu Honeycomb imbunatatie si reunind telefoanele si tabletele sub aceeasi
interfata grafica. Android 4.0 a facut, de asemenea, swiping-ul o metoda integranta de
a te deplasa in sistemul de operare. [5]
9.Android 4.1 – 4.3: Jelly Bean Jelly Bean a lansat cele 3 versiuni in anii 2012 si 2013,
versiuni ce au introdus pentru prima data Google Now, spectaculosul utilitar predictiv-
inteligent, care ulterior a devenit un flux de stiri. A introdus notificari interactive, un
sistem mai avansat pentru afisarea rezultatelor cautarii si un sistem extins de cautare
vocala. Jelly Bean a lansat si un sistem pentru adaugarea widget-urilor pe ecranul de
blocare. [5]
10.Android 4.4: KitKat Lansarea KitKat de la sfarsitul anului 2013 a venit cu fundaluri
mai deschise, cu o bara de stare transparenta si icoane albe care ofera sistemului de
operare un aspect mai contemporan. [5] Android 4.4 a fost, de asemenea, prima versi-
une Android care a vazut Ok, Google, insa in KitKat, prompt-ul de activare hands-free
functiona numai cand ecranul era deja aprins aflandu-se pe ecranul principal sau in
aplicatia Google. [5]
11.Android 5.0 – 5.1: Lollipop Google a reinventat, din nou, interfata cu utilizatorul cu
lansarea Android 5.0 din toamna anului 2014. Lollipop a adus un aspect complet nou
pentru toate dispozitivele Android, care s-a extins si pe aplicatiile sale, si chiar pe
unele produse Google. Lollipop a introdus o multime de noi functii, inclusiv controlul
vocal cu ajutorul comenzii ”OK, Google”, dar si un mod prioritar pentru gestionarea
notificarilor. Din pacate, au patruns si niste bug-uri tulburatoare, multe dintre ele fiind
remediate la lansare Android 5.1. [5]
12.Android 6.0: Marshmallow Marshmallow a fost lansat in 2015, a fost o versiune destul
de minora pentru Android, una care parea o actualizare de nivel 0.1, insa Google a
mentinut tendinta de a lansa o versiune principala pe an. Android 6.0 a introdus unele
lucruri cu impact, cum ar fi asistenta pentru cititorul de amprente. [5]
13.Android 7.0 – 7.1: Nouga Versiunea de Android 7.0 lansata in anul 2016 a furnizat
Android un mod de a imparti ecranul utilizand doua aplicatii in acelasi timp, un nou
sistem pentru organizarea notificarilor si o caracteristica de economisire a datelor. [5]
Poate ca cea mai importanta imbunatatire a Nougat a fost lansarea ”Google Assistant”,
care venea impreuna cu anuntul primului telefon realizat complet de Google, Pixel, la
aproximativ doua luni de la lansarea Nougat. [5]
14.Android 8.0 – 8.1: Oreo Android Oreo, lansat in anul 2017, a adaugat o varietate
de functii, cum ar fi o optiune pentru amanarea notificarilor, dar si functia picture-in-
picture. [5] Comunicatul din 2017 a inclus, de asemenea, cateva elemente de remarcat
care au promovat obiectivul Google de a alinia Android si Chrome OS si imbunatatirea
experientei de utilizare a aplicatiilor Android pe dispozitivele Chromebook. [5]
4

Android Versiuni Android
15.Android 9: Pie Pie a aparut in ecosistemul Android in august 2018, cea mai semni-
ficativa schimbare fiind trecerea la navigarea folosind gesturile, care a facut tranzitia
de la traditionalele butoane Back, Home si Overview. Pie include si caracteristici
demne de remarcat, cum ar fi un sistem universal de raspuns generat pentru notificari
de mesagerie, sisteme mai inteligente pentru controlul luminozitatii ecranului, modul
de economisire a bateriei, dar si imbunatatiri ale securitatii. [5]
16.Android 10 Android 10 a fost lansat in septembrie, anul 2019. Este versiunea Android
care se regaseste in acest moment pe majoritatea dispozitivelor noi. Software-ul aduce
o interfata total reimaginata pentru gesturile Android, mizand pe o abordare complet
glisata pentru navigarea sistemului. Android 10 include imbunatatiri care ofera mai
mult control asupra accesului la locatie a aplicatiilor, a fost adaugata si o tema in-
tunecata la nivelul integului sistem si un mod de focalizare care permite limitarea dis-
tragerii de la aplicatii specifice prin apasarea unui buton. [5]
17.Android 11 (Beta) Android 11 pare sa fie o actualizare destul de substantiala, atat la
interfata, cat si la interiorul sistemului. Software-ul a fost lansat ca o versiune beta
la inceputul lunii iunie si se asteapta finalizarea si pregatirea lansarii la finalul verii
sau inceputul toamnei. Cele mai importante schimbari se refera la confidentialitate.
Actualizarea se bazeaza pe sistemul de permisiuni extinse, introdus in Android 10,
si adauga capacitatea utilizatorilor de a acorda permisiuni, cele legate de accesul la
camera, la microfon si locatie, doar pentru o singura utilizare. [5]
5

Capitolul 2
Tehnologii si instrumente de
dezvoltare folosite
In cadrul acestui capitol vor fi prezentate platformele folosite pentru crearea aplicatiei. V or
fi descrise IDE-ul Android Studio, IDE-ul Eclipse, UiPath si o scurta prezentarea a versiu-
nilor acestora. De asemenea, vor fi definite limbajul de programare Java si automatizarea
proceselor robotice (RPA).
2.1 Android Studio IDE
Android Studio este un mediu integrat de dezvoltare (IDE), oficial pentru dezvoltarea apli-
catiilor Android, care include un editor de cod avansat si un set de sabloane de aplicatii.
In plus, acesta contine instrumente pentru dezvoltare, testare, depanare si performanta care
fac mai usoara si rapida dezvoltarea aplicatiilor. In cadrul Android Studio se pot testa apli-
catiile cu o gama larga de emulatoare preconfigurate sau direct pe propriul dispozitiv mobil.
Permite utilizatorilor sa scrie cod in limbajul de programare Java sau folosind limbajul de
programare Kotlin. [6]
Software-ul a fost anuntat pentru prima data de catre Google in luna mai a anului 2013,
desi prima versiune stabila a fost lansata in luna decembrie a anului 2014. Android Studio
este disponibil pentru platforme desktop precum Mac, Windows si Linux. Acesta a inlocuit
Eclipse Android Development Tools (ADT) ca principal mediu integrat de dezvoltare pentru
aplicatiile Android. [7]
2.1.1 Interfata Android Studio
Android Studio ofera o interfata usor de utilizat pentru crearea proiectelor. In 2.1 se poate
vedea cum putem crea un proiect, unde putem selecta dipsozitivul pentru care dorim sa
cream aplicatia. Sunt disponibile sabloane pentru proiecte pentru telefoane, tablete si ceasuri
6

Tehnologii si instrumente de dezvoltare folosite Android Studio IDE
inteligente.
Figura 2.1 : Crearea unui proiect in Android Studio.
Dupa ce selectam dispozitivul pentru care dorim sa cream aplicatia, se va deschide o alta
fereastra care permite setarea numelui proiectului, locul unde va fi salvat acesta si limbajul
de programare pe care dorim sa il utilizam, se poate vedea in 2.2.
Figura 2.2 : Setarea numelui proiectului.
7

Tehnologii si instrumente de dezvoltare folosite Android Studio IDE
1.Bara de instrumente permite efectuarea unei game largi de actiuni, inclusiv rularea
aplicatiei si lansarea intrumentelor Android. [8]
2.Bara de navigare ajuta la navigarea prin proiect si la deschiderea fisierelor pentru ed-
itare. Ofera o vedere mai compacta a structurii vizibile in fereastra Project.[8]
3.Fereastra editorului este locul unde se creaza si modifica codul. In functie de tipul
fisierului deschis, editorul se poate schimba. [8]
4.Bara de ferestre a instrumentelor se gaseste in jurul ferestrei mediului de dezvoltare si
contine butoane care permit extinderea sau minimizarea unor ferestre individuale ale
instrumentelor. [8]
5.Ferestrele cu intrumente ofera acces la anumite sarcini, cum ar fi controlul versiunii,
gestionarea proiectului, cautarea si multe altele. Se pot extinde sau minimiza.[8]
6.Bara de stare afiseaza starea proiectului si mediul de dezvoltare in sine, dar si orice
mesaje si avertismente. [8]
Figura 2.3 : Fereastra principala Android Studio.
Fereastra principala se poate organzia pentru a oferi mai mult spatiu ecranului ascunzand
sau mutand barele de intrumente si ferestrele cu instrumente. De asemenea, se pot utiliza
comenzi rapide cu ajutorul tastaturii pentru a accesa majoritatea functiilor mediului de dez-
voltare. [8]
In orice moment, se pot face cautari in codul sursa, in actiuni, in bazele de date, in
elemente ale interfetei cu utilizatorul si altele, apasand de doua ori tasta Shift, sau facand
click pe lupa din coltul din dreapta sus al ferestrei Android Studio. Acest lucru poate fi
foarte folositor in momentul in care se incearca localizarea unei anumite actiuni care nu a
fost declansata. [8]
8

Tehnologii si instrumente de dezvoltare folosite Android Studio IDE
2.1.2 Structura unui proiect in Android Studio
Fiecare proiect in Android Studio contine unul sau mai multe module cu fisiere ce contin cod
sursa si fisiere cu resurse. Tipurile de module includ:
.Android app modules
.Library modules
.Google App Engine modules
In mod implicit, Android Studio afiseaza fisierele proiectului in vizualizarea Android, cum
se poate vedea in 2.4. [8]
Figura 2.4 : Fisierele proiectului folosind vizualizarea Android.
Toate fisierele de compilare sunt vizibile, se gasesc sub directorul Gradle Scripts si
fiecare modul al aplicatiei contine urmatoarele directoare:
.manifest: Contine fisierul AndroidManifest.xml [8]
.java: Contine fisierele cu cod sursa Java, inclusiv codul de teestare JUnit. [8]
.res: Contine toate resursele ce nu contin cod, cum ar fi XML layouts, UI strings si
imagini bitmap. [8]
Structura proiectului Android care este salvat pe disc difera fata de reprezentarea din
2.4. Pentru a vedea structura reala a fisierelor din proiect trebuie selectat Project din meniul
derulant, in loc de Android, se poate vedea in 2.5.
De asemenea, se poate personaliza vizualizarea fisierelor din proiect pentru a afisa
aspecte specifice dezvoltarii aplicatiei. Spre exemplu, selectarea vizualizarii Problems a
proiectului afiseaza link-uri catre fisierele sursa care contin erori recunoscute ale codului si
sintaxei, cum ar fi uitarea inchiderii unui element XML dintr-un fisier layout, se poate vedea
in 2.6. [8]
9

Tehnologii si instrumente de dezvoltare folosite Android Studio IDE
Figura 2.5 : Fisierele proiectului folosind vizualizarea Project.
Figura 2.6 : Fisierele proiectului folosind vizualizarea Problems.
10

Tehnologii si instrumente de dezvoltare folosite Platforma Ecplipse
2.1.3 Crearea interfetei cu utilizatorul
Interfata cu utilizatorul pentru aplicatiile Android este construita folosind layout-uri si widget-
uri. Un layout defineste structura interfetei, cum ar fi intr-o activitate, toate elementele sunt
concepute folosind o ierarhie a obiectelor View si ViewGroup. Un View, de obicei, reprez-
inta ceva cu care utilizatorul poate interactiona si poate fi vazut de catre acesta, in timp ce
un ViewGroup este un container invizibil care defineste structura layout-ului pentru View si
alte obiecte ViewGroup. [9]
Declararea unei layout se poate face in doua moduri:
.Declararea elementelor interfetei intr-un fisier XML. Android furnizeaza un vocabular
XML care corespunde claselor si subclaselor View, cum ar fi cele pentru widget-uri
si layout-uri. Se poate utiliza si Layout Editor din Android Studio pentru a construi
layout-ul XML folosind interfata drag-and-drop. [9]
.Instantierea elementelor layout la rulare. Aplicatia poate crea obiecte View si View-
Group, putand edita proprietatile, folosind programarea. [9]
Declararea interfetei cu utilizatorul in fisierul XML permite separarea prezentarii aplicatiei
de codul care controleaza comportamentul acesteia. Folosind fisiere XML faciliteeaza, de
asemenea, furnizeaza diferite layout-uri pentru diferite dimensiuni si orientari ale ecranului.
[9]
Android framework ofera flexibilitatea de a utiliza unul dintre cele doua, sau chiar am-
bele metode pentru construirea interfetei cu utilizatorul a aplicatiei. De exemplu, se poate
declara un layout implicit al aplicatiei in fisierul XML, urmand sa fie modificat in timpul
rularii. [9]
2.2 Platforma Ecplipse
Platforma Eclipse care ofera baza pentru Eclipse IDE este compusa din plug-in-uri si este
conceputa sa fie extensibila folosind plug-in-uri suplimentare. Dezvoltata folosind Java,
platforma Eclipse poate fi folosita pentru a dezvolta aplicatii, medii integrate de dezvoltare
si alte instrumente. Eclipse poate fi folosit ca un IDE pentru orie limbaj de programare pentru
care este disponibil un plug-in. [10]
Eclipse este un mediu de dezvoltare integrat pentru Java si alte limbaje de programare
precum C, C++, PHP, Ruby si altele. Mediul de dezvoltare furnizat de catre Eclipse include
Eclipse Java Development Tools (JDT) pentru Java, Eclipse CDR pentru C si C++, Eclipse
PDT pentru PHP, printre multe altele. [10]
2.2.1 Istoria Eclipse
La sfarsitul anilor 1990, IBM a inceput dezvoltarea a ceea ce noi cunoastem astazi drept
Eclipse. Astazi vedem o rata mare de adaptare si dovezi ale aplicarii cu succes a acestei
11

Tehnologii si instrumente de dezvoltare folosite Platforma Ecplipse
tehnologii in industria software. [11]
La mijlocul anilor 1990, erau disponibile un numar mare de medii de dezvoltare puter-
nice, Microsoft Visual Studio devenea mai mult o platforma de instrumente cu scop general.
Un numar mare de IDE-uri bazate pe Java intrau pe piata, cum ar fi Visual Cafe dezvoltat de
Symantec, Jbuilder dezvoltat de Borland, Visual Age pentru Java dezvoltat de catre IBM si
altele. [11]
Aceasta perioada a vazut, de asemenea, aparitia aplicatiilor server concepute pentru a
decupla un programator de multele detalii gasite in sistemul de operare si interfetele asociate.
Pentru aplicatiile Java, piata a oferit WebSphere Application Server de la IBM, WebLogic de
la BEA si suita iPlanet de la Sun. Pentru Microsoft, MTS si COM+ erau mediile de rulare la
acel moment. [11]
In luna noiembrie a anului 1998, grupul IBM Software a inceput crearea unei platforme
de instrumente de dezvoltare care a devenit cunoscuta sub numele Eclipse. Mai intai a fost
construit un nou IDE Java cu resurse de la laboratoarele Object Technology International
(OTI). Echipa OTI a avut o experienta mare in dezvoltarea mai multor generatii de IDE cu
echipe mici si foarte calificate. In acelasi timp, IBM a inceput sa infiinteze echipe supli-
mentare pentru a crea noi produse. [11]
2.2.2 Versiuni Eclipse
1.Eclipse IDE for Java Developers. Acesta include instrumentele esentiale pentru orice
dezvoltator Java, inclusiv un Java IDE, client Git, editor XML, integrarea Maven si
Gradle. [12]
2.Eclipse IDE for Enterprise Java Developers. Acesta include intrumente pentru dez-
voltatori care lucreaza cu aplicatii Web si Java, inclusiv un Java IDE, intrumente pen-
tru servicii web, JPA si Data Tools, JSF, Mylyn, Maven si Gradle, Git si multe altele.
[12]
3.Eclipse IDE for C/C++ Developers. Acesta este un IDE pentru dezvoltatorii de apli-
catii C/C++. [12]
4.Eclipse IDE for Web and JavaScript Developers. Acesta include intrumentele esen-
tiale pentru orice dezvoltator JavaScript, inclusiv JavaScript, TypeScript, HTML, CSS,
XML, YamI, Markdown. [12]
5.Eclipse IDE for PHP Developers. Acesta contine intrumentele esentiale pentru orice
dezvoltator PHP, inclusiv suport pentru limbajul PHP, client Git, Mylyn si editori pen-
tru JavaScript, TypeScript, HTML, CSS si XML. [12]
6.Eclipse IDE for Eclipse Committers. Acesta contine pachetul potrivit pentru dez-
voltarea Eclipse in sine. [12]
7.Eclipse IDE for Java and DSL Developers. Acesta contine intrumentele esentiale
pentru dezvoltatorii Java si DSL, inclusiv un Java & Xtend IDE, un DSL Frame-
work(Xtext), un client Git, editor XML si integrare Maven. [12]
12

Tehnologii si instrumente de dezvoltare folosite Robotic Process Automation
8.Eclipse Modeling Tools. Acesta include pachetul Modeling care ofera intrumente si
rulari pentru construirea aplicatiilor model-based. [12]
9.Eclipse IDE for RCP and RAP Developers. Acesta contine un set complet de in-
strumente pentru dezvoltatorii care doresc sa creeze plug-in-uri Eclipse, Rich Client
Application sau Remote Application Platform(RCP+RAP), plus intrumente Maven si
Gradle si un editor XML. [12]
10.Eclipse IDE for Testers. Acesta contine pachetul care contine caracteristici Eclipse
care asigura procesul de asigurare a dezvoltarii software, precum Jubula. [12]
11.Eclipse IDE for Scientific Computing. Acesta ofera intrumente pentru C++, C, Fortan
si UPC, inclusiv MPI, OpenMP, OpenACC, un depanator paralel si contruirea, moni-
torizarea si rularea aplicatiilor de la distanta. [12]
12.Eclipse IDE for Scout Developers. Eclipse Scout este un framework Java/HTML5
pentru a dezvolta aplicatii care ruleaza pe desktop, pe tablete si dispozitive mobile.
[12]
13.Eclipse IDE for Rust Developers. Acesta ofera intrumentele esentiale pentru orice
dezvoltator Rust, inclusiv suport pentru limbajul Rust, client Git. [12]
2.3 Robotic Process Automation
Robotic Process Automation, prescurtat RPA, este tehnologia care permite oricarei persoane
sa configureze un program software, sau un ”robot”, pentru a imita si integra actiunile uti-
lizatorului care interactioneaza cu un sistem digital pentru a executa un proces. Robotii RPA
utilizeaza interfata cu utilizatorul pentru a captura date si pentru a manipula aplicatii precum
oamenii. [13]
Spre deosebire de alte solutii informatice traditionale, RPA permite organizatiilor sa
automatizeze la o fractiune din timpul acordat anterior anumitor sarcini. [13]
Robotii RPA sunt capabili sa reproduca multe, daca nu chiar toate actiunile unui utiliza-
tor. Se pot autentifica in anumite aplicatii, pot muta fisiera sau directoare, pot copia date, pot
completa formulare, pot extrage date structurate si semi-structurate din documente si multe
altele. [13]
2.3.1 UiPath
Uipath este un instrument pentru automatizarea proceselor robotice (RPA) folosit pentru
automatizarea aplicatiilor Windows. A fost fondat in anul 2005 de catre doi antreprenori
romani, Daniel Dines si Marius T ˆırc˘a. Este folosit pentru automatizarea sarcinilor repetitive
si plictisitoare si elimina interventia umana. Folosind metoda drag-and-drop pentru toate
activitatile, il face cel mai usor instrument RPA. [14]
13

Tehnologii si instrumente de dezvoltare folosite Robotic Process Automation
Exista o multime de intrumente pentru automatizarea proceselor robotice, insa, cu toate
acestea, UiPath este cel mai popular printre ele.
Urmatoarele sunt cateva dintre caracteristicile UiPath care il fac atat de atractiv pentru
RPA:
.Ofera o solutie completa. UiPath ofera o solutie completa cu ajutorul celor trei com-
ponente, respectiv UiPath Studio, UiPath Robots si UiPath Orchestrator. [14]
.Intuitiv. Lucrand folosind UiPath si creand roboti este foarte instinctiv deoarece folos-
este metoda drag-and-drop si fluxuri de activitati. De asemenea, este si usor de invatat.[14]
.Biblioteca de activitati extinsa. UiPath are o biblioteca de activitati extinsa care consta
in sute de actiuni pre-construite, actiuni drag-and-drop.[14]
.Securitate. UiPath ofera securitate de nivel inalt deoarece putem cripta si stoca datele
de autentificare pe serverul centralizat. [14]
.Inregistrare. UiPath ofera facilitatea de a inregistra. Poate inregistra aplicatii desktop
folosind intrumente speciale, mediul Citrix si emulatoare de terminal care fac crearea
automatizarii mult mai rapida si precisa. [14]
.Cautare universala. Are o caracteristica de cautare universala care permite efectu-
area unei singure cautari a tuturor resurselor de automatizare, cum ar fi avtivitatile,
proiectele, librariile si fluxurile de lucru. [14]
.Depanare puternica. UiPath ofera utilizatorului o depanare foarte puternica care este
intuitiva si flexibila. [14]
.Colaborare. UiPath promoveaza si colaborarea, deoarece permite protejarea, distribuirea
si stocarea script-uri in MS Team Foundation si SVN. De asemenea, permite reuti-
lizarea fluxului de lucru. [14]
.Third-party Integration. UiPath ofera, de asemenea, posibilitatea conectarii diferitelor
tehnologii cognitive si OCR de la IBM Watson, ABBYY , Google. [14]
.Licentiere Server-Based. UiPath permite licentiere pe server, ceea ce face ca procesul
de licentiere sa fie centralizat si usor de utilizat. [14]
2.3.2 Versiuni UiPath
Platforma UiPath are disponibile trei produse:
1.UiPath Studio. Cu ajutorul UiPath Studio putem proiecta procesele intr-o maniera
vizuala. Permite folosirea inregistrarii, adaugarea widget-urilor cu ajutorul metodei
drag-and-drop pentru a modela procesele robotizate. [14]
2.UiPath Robot. Rolul UiPath Robot este de a prelua odata ce este finalizata proiectarea
proceselor in UiPath Studio si executarea tuturor proceselor cu o precizie perfecta.
[14]
3.UiPath Orchestrator. Este o aplicatie browser based server care ajuta la monitorizarea,
programarea, implmentarea si gestionarea proceselor si a robotului. Este o platforma
centralizata si, prin urmare, responsabila cu gestionarea robotilor. [14]
14

Tehnologii si instrumente de dezvoltare folosite Java
2.4 Java
Java este un limbaj de programare orientat pe obiecte, dezvoltat de catre Sun Microsystems,
o companie cunoscuta mai bine pentru statiile de lucru Unix de inalta calitate. Modelat dupa
C++, limbajul Java a fost proiectat pentru a fi simplu, mic si portabil pe sisteme de operare
si platforme, atat la sursa cat si la nivel binar. [15]
Java este printre cele mai populare limbaje de programare, in special pentru cat de
compatibil si versatil este. Java poate fi folosit pentru o multime de lucruri, cum ar fi aplicatii
mobile, dezvoltarea de software, aplicatii web si multe altele. [16]
Limbajul de programare Java este un limbaj cu scop general, orientat pe obiecte. Este
conceput sa fie suficient de simplu ca multi programatori sa poata obtina fluenta in limbaj.
Limbajul de programare Java este legat de C si C++, dar este organizat diferit, cu o serie
de aspecte ale C si C++ omise si cateva idei din alte limbaje de programare incluse. Este
destinat sa fie un limbaj de productie, nu un limbaj de cercetare. [17]
Limbajul de programare Java este scris puternic si static. Aceasta specificatie distinge
clar intre erorile de compilare care pot si care trebuie sa fie detectate in momentul compi-
larii, si cele care apar in timpul rularii. Timpul de rulare consta in mod normal in traducerea
programelor intr-o reprezentare a codului byte machine-independent. Activitatile din timpul
rularii includ incarcarea si conectarea claselor necesare pentru a executa programul, gener-
area optionala a codului masina si optimizarea dinamica a programului, si executia efectiva
a programului. [17]
Java este un limbaj de nivel relaltiv inalt, include gestionare automata a memorarii, de
obicei folosind un garbage collector, pentru a evita problemele de siguranta ale eliberarii ex-
plicite, ca in cazul eliberarii din C sau a stergerii din C++. Implementarile high-performance
garbage-collected pot avea pauze limitate pentru a sprijini programarea sistemelor suport si a
aplicatiilor real-time. Limbajul nu include constructii nesigure, cum ar fi accesarea matricei
fara verificarea indexului, deoarece astfel de constructii nesigure ar determina un comporta-
ment nespecific al programului. [17]
2.4.1 Istoria Java
Java este un limbaj de programare orientat pe obiecte dezvoltat de catre James Gosling la
inceputul anului 1990. Echipa a initiat acest proiect pentru a dezvolta un limbaj pentru
dispozitive digitale cum ar fi set-top boxes, televizoare si altele. Initial C++ a fost considerat
a fi folosit in proiect, dar ideea a fost refuzata pentru mai multe motive, de exemplu C++
necesita mai multa memorie. James Gosling s-a straduit sa modifice si sa extinda C++, insa
a renuntat inainte sa faca un alt proiect numit ”Greeen”. Alaturi de echipa sa, James Gosling
au denumit proiectul lor ”Greentalk” si extensia fisierelor era .gt, iar mai tarziu a devenit
cunoscut sub nume de ”OAK”. [18]
Numele ”OAK” a fost folosit de catre Gosling dupa un stejar care a ramas in afara
15

Tehnologii si instrumente de dezvoltare folosite Java
biroului sau. De asemenea, stajarul este o imagine a solidaritatii si a fost ales ca arbore
national pentru numeroase natiuni precum USA, Franta, Germania, Romania. Insa, mai
tarziu, au redenumit proiectul drept Java. [18]
Gosling alaturi de echipa sa au facut o sesiune de gandire, si dupa aceasta sesiune, au
venit cu cateva variante de nume cum ar fi JA V A, DNA, SILK, RUBY . [18]
Numele Java a fost ales dupa multe discutii, deoarece era atat de unic. Numele Java
provine de la un tip de espresso. Gosling a venit cu aceasta idee in timp ce lua o cafea de
langa biroul sau. [18]
Java a fost creat pe principii precum robust, independent de platforma, portabil, de inalta
performanta, si a fost desemnat unul dintre 10 cele mai bune produse din anul 1995 de catre
revista Time. [18]
In acest moment, Java este folosit in programe pentru internet, dispozitive mobile, jocuri
si multe altele. Limbajul Java a experimentat cateva schimbari de la JDK 1.0. Pe langa
modificarile de limbaj, au fost facute modificari considerabile la Java Class Library de-a
lungul anilor, care s-a dezvoltat de la cateva sute de clase in JDK 1.0 la peste trei mii in J2SE
5. [18]
2.4.2 Caracteristici ale limbajului
1.Simplu. Java este usor de invatat, sintaxa sa este simpla, curata si usor de inteles.
Potrivit Sun, limbajul Java este un limbaj de programare simplu deoarece:
.Sintaxa Java se bazeaza pe C++, ceea ce il face usor de invatat pentru programa-
tori dupa ce invata C++. [19]
.Java a eliminat multe caracteristici complicate si utilizate rar, cum ar fi pointerii.
[19]
.Nu este necesara eliminarea obiectelor nereferentiate, deoarece exista Automatic
Garbage Collection in Java. [19]
2.Orientat pe obiecte. Java este un limbaj de programare orientat pe obiecte. Orien-
tat pe obiecte inseamna organizarea software-ului ca o combinatie de diferite tipuri
de obiecte care incorporeaza atat date cat si comportament. Programare orientata pe
obiecte (POO) este o metodologie care simplifica dezvoltarea si intretinerea software-
ului prin furnizarea unor reguli. [19] Concepte de baza ale programarii orientate pe
obiecte:
.Object
.Class
.Inheritance
.Polymorphism
.Abstraction
.Encapsulation
16

Tehnologii si instrumente de dezvoltare folosite Java
3.Independent de platforma. Spre deosebire de alte limbaje de programare precum C
si C++, cand Java este compilat, acesta nu este compilat intr-o masina specifica plat-
formei, ci mai degraba in cod de octeti independent de platforma. Acest cod de octeti
este distribuit pe web si interpretat de catre masina virtuala (JVM) pe orice platforma
pe care este rulat. [20]
4.Securizat. Java este cunoscut cel mai bine pentru securitatea sa. Cu Java, se pot
dezvolta sisteme fara virusi. Java este securizata deoarece:
.Nu are pointeri expliciti. [19]
.Programele Java ruleaza in interiorul unei masini virtuale.[19]
.Classloader. In Java acesta este o parte a Java Runtime Environment (JRE), ceare
este utilizata pentru a incarca clasele in Java Virtual Machine (JVM) dinamic.
Adauga securitate prin separarea pachetului pentru clasele sistemului de fisiere
locale de cele care sunt importate din surse de retea. [19]
.Bytecode Verifier. Acesta verifica fragmentele de cod pentru cod ilegal care poate
incalca dreptul de acces la obiecte. [19]
.Security Manager. Acesta determina ce resurse poate accesa o clasa, cum ar fi
citirea si scrierea pe discul local. [19]
Limbajul Java furnizeaza securitatea in mod implicit. Securitatea poate fi asigurata
si de catre un dezvoltator de aplicatii in mod explicit prin SSL, JAAS, Cryptography.
[19]
5.Robust. Robust inseamna pur si simplu puternic. Java este robust deoarece:
.Utilizeaza o gestionare puternica a memoriei. [19]
.Lipsesc pointerii care evita problemele de securitate.[19]
.Este implementat automatic garbage collection in java care ruleaza pe masina
virtuala pentru a scapa de obiecte care nu mai sunt folosite de o aplicatie Java.
[19]
.In Java exista manipularea exceptiilor si mecanismul de verificare a tipului.[19]
6.Arhitectura neutra. Java este neutru din punct de vedere al arhitecturii, deoarece nu
exista caracteristici dependente de implementare, de exemplu, dimensiunea tipurilor
primitive este fixa. [19]
7.Portabil. Java este portabil deoarece faciliteaza transportarera bytecode-ului Java pe
orice platforma. Nu necesita nicio implementare.[19]
8.Inalta performanta. Java este mai rapid decat alte limbaje de programare traditionale
interpretate, deoarece bytecode-ul Java este apropriat de codul nativ. Este putin mai
lent decat un limbaj compilat, de exemplu C++. [19]
9.Distribuit. Java este distribuit deoarece faciliteaza crearea aplicatiilor distribuite de
catre utilizatori. RMI si EJB sunt folosite pentru dezvoltarea aplicatiilor distribuite.
Aceasta caracteristica a Java ne permite accesul la fisiere prin apelarea unor metode
din orice masina de pe internet. [19]
17

Tehnologii si instrumente de dezvoltare folosite Java
10.Multi-threaded. Un fir de executie este precum un program separat, executand con-
comitent. Se pot dezvolta programe Java care se ocupa cu mai multe sarcini simultan,
prin definirea mai multor fire de executie. Principalul avantaj al multi-threading este
ca nu ocupa memorie pentru fiecare fir de executie. Partajeaza o zona de memorie
comuna. [19]
11.Dinamic. Java este un limbaj dinamic. Suporta incarcarea dinamica a claselor, facand
incarcarea lor la cerere. De asemenea, suporta functii de la limbajele native, C si C++.
[19]
2.4.3 Programare orientata pe obiecte in Java
Dupa cum sugereaza si numele, programarea oritentata pe obiecte face referire la limbajele
de programare care utilizeaza obiecte in programare. Scopul este de a implementa entitati din
lumea reala, precum mostenirea, polimorfismul si altele. Scopul este de a aduce impreuna
datele si functiile care opereaza pe ele, astfel incat nicio alta parte a codului sa nu poata
accesa acele date, cu exceptia acelei functii. [21]
Conceptele programarii orientate pe obiecte sunt:
1.Polimorfismul. Acesta se refera la abilitatea limbajelor de programare orientate pe
obiecte de a diferentia eficient intre entitatile cu acelasi nume. Acest lucru este realizat
de Java cu ajutorul semnaturii si declaratiei acestor entitati. [21]
2.Mostenirea. Acesta este un pilon important al programarii orientate pe obiecte. Este
mecanismul prin care unei clase ii este permisa mostenirea caracteristicilor altei clase,
cum ar fi metodele. [21] Notatii importante:
.Super clasa. Clasa ale carei caracteristici sunt mostenite este cunoscuta ca super
clasa sau clasa parinte. [21]
.Sub clasa. Clasa care mosteneste caracteristicile altei clasei este numita si sub
clasa sau clasa copil. Sub clasa poate adauga si propriile metode si campuri in
plus fata de ceea ce mosteneste de la super clasa. [21]
.Reutilizare. Mostenirea sustine conceptul de reutilizare. Atunci cand se doreste
crearea unei noi clase, insa in cadrul proiectului exista deja o clasa care are in-
clus deja o parte din codul dorit, se poate obtine noua clasa din clasa existenta.
Procedand astfel, sunt reutilizate campurile si metodele clasei existente. [21]
Cuvantul cheie pentru mostenire este ”extends”. [21]
3.ˆIncapsulare. Este definita ca impachetarea datelor intr-o singura unitate. Este mecan-
ismul care leaga codu si datele pe care le manipuleaza, nepermitand accesarea din
exterior a datelor. [21]
.Din punct de vedere tehnic, variabilele sau datele dintr-o clasa sunt ascunse de
alte clase si pot fi accesate numai printr-o functie a clasei in care sunt declarate.
[21]
.Incapsularea poate fi folosita declarand toate variabilele din clasa ca fiind private
si scriind metode publice in clasa pentru a primi valorile variabilelor. [21]
18

Tehnologii si instrumente de dezvoltare folosite Java
4.Abstractizarea. Abstractizarea datelor este proprietatea prin care doar detaliile esen-
tiale sunt afisate utilizatorului. Abstractizarea datelor poate fi definita si ca procesul
de identificare doar a caracteristicilor necesare ale unui obiect, ignorand detaliile irele-
vante. Proprietatile si comportamentul unui obiect il diferentiaza de alte obiecte de
acelasi tip si, de asemenea, ajuta la clasificarea si gruparea obiectelor.Abstractizarea in
limbajul Java se realizeaza prin intermediul interfetelor si a claselor abstracte. [21]
5.Clasa. O clasa este un plan sau un prototip definit de catre utilizator din care sunt
create obiecte. Reprezinta setul de proprietati sau metode care sunt comune tuturor
obiectelor de acelasi tip. In general, declaratiile de clasa pot include aceste compo-
nente, in ordine:
.Modificatori. O clasa poate fi publica sau are acces implicit. [21]
.Numele clasei. Numele ar trebui sa inceapa cu o litera mare. [21]
.Super clasa. Numele clasei parinte, daca exista, precedat de catre cuvantul cheie
extends. O clasa poate mosteni doar o clasa. [21]
.Interfata. O lista separata prin virgula implementata de catre clasa, daca exista,
precedata de cuvantul cheie implements. O clasa poate implementa mai mult de
o interfata. [21]
.Corp. Corpul clasei inconjurat de acolade. [21]
6.Obiect. Este o unitate de baza a programarii orientate pe obiecte si reprezinta entitatile
din viata reala. Un obiect este format din:
.Stare. Este reprezentata de atributele unui obiect. De asemenea, reflecta propri-
etatile unui obiect. [21]
.Comportament. Este reprezentat de metodele unui obiect. De asemenea, reflecta
raspunsul unui obiect cu alte obiecte. [21]
.Identitate. Da un nume unic unui obiect si permite unui obiect sa interactioneze
cu alte obiecte. [21]
7.Metoda. O metoda este o colectie de declaratii care efectueaza anumite sarcini si
returneaza un rezultat. O metoda poate efectua anumite sarcini fara a returna rezul-
tat. Metodele permit reutilizarea codului fara a il rescrie. [21] In general declararea
metodelor are sase componente:
.Modificator de acces. Defineste tipul de acces al metodei, de unde poate fi accesat
in aplicatie. In Java sunt patru tipuri de specificatori de acces. [21]
Public. Accesibil in toate clasele aplicatiei. [21]
Protected. Accesibil in pachetul unde este definit si in sub clase.[21]
Private. Accesibil numai in clasa in care este definit. [21]
Implicit. Accesibil in clasa in care este declarat si in pachetul clasei sale.
[21]
.Tipul returnat. Tipul de date al valorii returnate de catre metoda sau void in cazul
in care nu returneaza nimic. [21]
.Numele metodei. [21]
.Lista de parametrii. Lista parametrilor de intrare, precedate de tipul lor de date,
in cazul in care nu sunt parametri, vor fi utlizate paranteze goale.[21]
.Lista cu exceptii. Exceptiile care pot fi aruncate, se pot specifica aceste exceptii.[21]
.Corpul metodei. Este inconjurata de acolade. [21]
19

Tehnologii si instrumente de dezvoltare folosite Java
8.Transmiterea mesajului. Obiectele comunica intre ele trimitand si primind informatii
unele de la celelalte. Un mesaj de la un obiect este o cererea de a executa o pro-
cedura si, prin urma, invocarea unei functii in obiectul care primeste care genereaza
rezultatul dorit. Transmiterea mesajelor presupune specificarea numelui obiectului,
numelui functiei si a informatiei care trebuie trimisa. [21]
2.4.4 Java networking
Termenul de programare in retea face referire la scrierea programelor care se executa pe
mai multe dispozitive, unde dispozitivele sunt conectate intre ele folosind o retea. Pachetul
java.net din API-ul J2SE contine o colectie de clase si interfete care furnizeaza detalii de
comunicare de nivel scazut, permitand scrierea programelor care rezolva problema. [22]
Pachetul java.net furnizeaza suport pentru doua protocoale de retea:
.TCP. Transmission Control Protocol, care permite comunicare intre doua aplicatii.
TCP este, de obiecei, folosit pentru Internet Protocol, denumit TCP/IP. [22]
.UDP. User Datagram Protocol, un protocol fara conexiune care permite pachetelor de
date sa fie transmise intre aplicatii. [22]
2.4.4.1 Programarea Socket
Socket-urile furnizeaza mecanismul de comunicare inte doua dispozitive folosind TCP. Un
program client creaza un socket la sfarsitul comunicarii si incearca sa conecteza acel socket
la un server. In momentul in care este realizata conexiunea, server-ul creaza un obiect socket
la sfarsitul comunicarii. Clientul si server-ul pot astfel comunica scriind si citind din socket.
[22]
Clasa java.net.Socket reprezinta un socket, iar clasa java.net.ServerSocket furnizeaza
un mecanism pentru programul server pentru a stabili conexiunea cu clientii. [22]
Pentru a realiza o conexiune intre doua dispozitive folosind socket-uri sunt necesari urmatorii
pasi:
.Server-ul initiaza un obiect ServerSocket, care indica numarul port-ului pentru comu-
nicare. [22]
.Server-ul invoca metoda accept() a clasei ServerSocket, aceasta metoda asteapta pana
un client este conectat la server folosind numarul de port dat. [22]
.Dupa ce server-ul este pornit, un client instantiaza un obiect Socket, specificand nu-
mele server-ului si numarul de port la care sa se conecteze. [22]
.Constructorul clasei Socket incearca sa conecteze clientul la server-ul specificat si la
numarul de port. Daca conexiunea este stabilita, clientul are un obiect Socket capabil
sa comunice cu server-ul. [22]
.Pe partea server-ului, metoda accept() returneaza o referinta catre noul socket de pe
server care este conectat la socket-ul clientului. [22]
Dupa realizarea conexiunii, comunicarea poate avea loc folosind fluxuri de intrare si
20

Tehnologii si instrumente de dezvoltare folosite Mobile Vision Text API
iesire. Fiecare socket are atat un OutputStream, cat si un InputStream. Fluxul de iesire al
clientului este conectat la fluxul de intrare al server-ului, iar fluxul de intrare al clientului
este conectat la fluxul de iesire al server-ului. [22]
TCP este un protocol de comunicare bidirectional, prin urmare, datele pot fi trimise in
ambele fluxuri in acelasi timp. [22]
2.5 Mobile Vision Text API
Recunoasterea textului reprezinta procesul de detectare a textului in imagini si recunoasterea
textului continut. Odata detectat, se determina textul din fiecare bloc si se segmenteaza in
linii si cuvinte. Api-ul poate recunoaste fragmente de text din orice limba latina, cum ar fi:
daneza, germana, franceza, engleza, romana si multe altele. [23]
Textul este structurat in blocuri, linii si cuvinte.
.Un bloc reprezinta un set de linii, cum ar fi un paragraf sau o coloana. [23]
.O linie reprezinta un set de ccuvinte care se afla pe aceeasi axa verticala. [23]
.Un cuvant reprezinta un set de caractere alfanumerice pe aceeasi axa verticala. [23]
Api-ul utilizeaza recunoasterea optica a caracterelor (Optical Character Recognition) care
ofera calculatorului abilitatea de a citi textul care apare intr-o imagine, permitand aplicatiilor
sa inteleaga pagini de text, meniuri, pliante sau orice loc in care textul apare ca parte a unei
imagini. [24]
2.5.1 Recunoasterea optica a caracterelor (OCR)
Recunoasterea optica a caracterelor este una dintre primele sarcini ale computer vision,
deoarece in unele aspecte nu necesita deep learning. Prin urmare, au fost diferite imple-
mentari pentru OCR, chiar inainte de evolutia deep learning din anul 2012, iar unele dateaza
din anul 1914. [25]
Acest lucru face ca multi oameni sa creada ca problema OCR este rezolvata, ca nu mai
este o provocare. O alta parere, care vine din surse similare, este ca OCR nu necesita deep
learning, sau in alte cuvinte, utilizarea deep learning pentru OCR este nejustificata.[25]
Orice persoana din domeniul computer vision sau machine learning stie faptul ca nu
exista o sarcina rezolvata si acest caz nu este diferit. Dimpotriva, OCR ofera rezultate foarte
bune numai in cazuri specifice, dar in general, este considerat in continuare o provocare. [25]
In plus, este adevarat ca exista solutii bune pentru anumite sarcini ale OCR care nu nece-
sita deep learning. Cu toate acestea, pentru a avansa cu adevarat catre solutii mai generale,
deep learning este obligatorie. [25]
21

Tehnologii si instrumente de dezvoltare folosite JavaScript Object Notation
2.5.2 Tipuri de OCR
Pentru OCR exista mai multe sensuri, sensul general se refera la extragerea textului din orice
imagine posibila, fie ca este o pagina tiparita dintr-o carte sau o imagine aleatoare ce contine
graffiti(”in the wild”). Pot fi si multe alte sarcini, cum ar fi indicatoarele stradale sau citirea
placutelor de inmatriculare. Desi fiecare dintre aceste optiuni are propriile dificultati, cu
siguranta extragerea dintr-o poza ”in the wild” este cea mai grea. [25]
Atribute ale sarcinilor OCR:
.Densitatea textului. Pe o pagina printata, textul este dens. Cu toate acestea, avand in
vedere o imagine a unei strazi cu un singur semn stradal, textul este rar. [25]
.Structura textului. Textul de pe o pagina este structurat, de cele mai multe ori pe ran-
duri stricte, in timp textul ”in the wild” poate fi raspandit peste tot, in diferite orientari.
[25]
.Fonturi. Fonturile printate sunt usoare, deoarece sunt mai bine structurate decat carac-
terele scrise de mana. [25]
.Tipul caracterelor. Textul poate fi in diferite limbi care pot fi foarte diferite intre ele. In
plus, structura textului poate fi diferita fata de structura numerelor, cum ar fi numerele
caselor. [25]
.Artefacte. In mod clar, imaginile facute afara au un zgomot ridicat fata de imaginile
scanate. [25]
.Locatia. Unele sarcini includ text centrat sau decupat, in timp ce in altele, textul este
localizat aleator in imagine. [25]
2.6 JavaScript Object Notation
JavaScript Object Notation, utilizat de cele mai multe ori sub prescurtarea JSON, este un
format de interschimbare a datelor. JSON este un format de text care este complet indepen-
dent de limbaj, dar care foloseste conventii care sunt familiare programatorilor care folosesc
limbaje precum cele din familia C, cum ar fi C, C++, C#, Java, JavaScript si multe altele.
Aceste proprietati fac JSON un limbaj ideal pentru interschimbarea datelor. [26]
JSON este contruit pe doua structuri:
.O colectie de perechi nume/valoare. In diferite limbaje, acestea sunt realizate ca un
obiect, inregistrare, structura, dictionar, tabela hash, lista cu chei sau tablou asociativ.
[26]
.O lista ordonata de valori. In cele mai multe limbaje, aceasta este realizata sub forma
de tablou, vector, lista sau secventa. [26]
22

Capitolul 3
Problema propus ˘a
ˆIn acest capitol va fi descris ˘a problema aleas ˘a s,i metodele folosite pentru a putea fi rezolvat ˘a.
V oi prezenta procesul prin care au fost create aplicat ,ia Android, server-ul s ,i robotul UiPath,
folosind s ,i imagini sugestive pentru o ˆınt,elegere mai us ,oar˘a.
3.1 Descrierea problemei
Scopul acestui proiect este de a ajuta la us ,urarea procesului de ˆınscriere al student ,ilor la
universitate, ˆın acest mod fiind evitate cozile create datorit ˘a num ˘arului mare de aplicant ,i.
Pentru acest proiect am ales s ˘a folosesc Android Studio IDE pentru aplicat ,ia Android, cea
care va fi utilizat ˘a de c ˘atre student ,i, pentru crearea server-ului am folosit Eclipse IDE, ambele
fiind create utiliz ˆand limbajul de programare Java. ˆIn final, a fost creat un robot pentru
automatizarea proceselor robotice folosind UiPath Studio, fiind instrumentul principal pentru
modelarea proceselor.
3.2 Rezolvarea problemei
Pentru rezolvarea problemei propuse sunt parcurse dou ˘a etape. Prima etap ˘a const ˘aˆın interact ,iunea
utilizatorului cu aplicat ,ia Android, a doua fiind alcatuit ˘a din server-ul care primes ,te datele
utilizatorului si robotul UiPath.
Aplicat ,ia Android este alcatuit ˘a din dou ˘a ferestre. Interfat ,a celor dou ˘a ferestre cont ,ine
elemente de tip TextView, EditText, ImageView si Button. Pentru controalele de tip But-
ton au fost create evenenimente onClick, ad ˘augˆand atributul ”android:onClick” elementului
Button in XML layout.
Fereastra principal ˘a a aplicat ,iei Android a fost creat ˘a folosind ScrollView, care este un
view group care permite derularea view-urilor plasate in mod ierarhic. ˆIn interiorul acestuia
a fost plasat un LinearLayout, deoarece ScrollView poate avea un singur child view ˆın el, iar
23

Problema propus ˘a Rezolvarea problemei
pentru a ad ˘auga mai multe view-uri este nevoie de un view group, ˆın cazul nostru Linear-
Layout. ˆIn LinearLayout au fost ad ˘augate controale de tip Button, TextView si ImageView.
In figura 3.1 se poate vedea fereastra principal ˘a a aplicat ,iei Android, care cont ,ine
urm˘atoarele controale:
1.Bara de titlu care cont ,ine numele ferestrei
2.Dou˘a elemente TextView care descriu funct ,ionalitatea butoanelor care se gasesc sub
ele.
3.Trei controale de tip Button. Primele dou ˘a declans ,eaza camera foto a dispozitivu-
lui mobil pentru a face poze documentelor necesare ˆınscrierii, descrise ˆın elementele
TextView. Cel de al treilea buton este pentru a deschide a doua fereastr ˘a a aplicat ,iei,
ˆıns˘a pentru deschiderea acesteia trebuie s ˘a fie introduse pozele, ˆın caz contrar va afis ,a
un mesaj de atent ,ionare utilizatorului.
4.Dou˘a elemente ImageView care cont ,in pozele f ˘acute de c ˘atre utilizator. Aceste el-
emente sunt invizibile init ,ial, devenind vizibile ˆın momentul ˆın care sunt introduse
pozele.
Figura 3.1 : Interfat ,a principal ˘a.
Dup˘a ap˘asarea butonului NEXT din fereastra principal ˘a a aplicat ,iei se deschide fereastra
secundara. Aceasta a fost creat ˘a folosind ConstraintLayout, care este un ViewGroup ce
permite pozit ,ionarea elementelor s ,i setarea dimensiunii lor ˆıntr-un mod flexibil. Fereastra
secundar ˘a cont ,ine elemente TextView, EditText s ,i Button, dup ˘a cum se poate vedea in figura
24

Problema propus ˘a Clasele s,i codul
3.2.
1.Elementele TextView sunt ˆın num ˘ar de s ,apte, acestea cont ,in un text sugestiv, care sug-
ereaz ˘a informat ,iile care sunt introduse in elementele EditText. Elementele TextView
sunt nume, prenume, cnp, judet ,, localitate, not ˘a rom ˆan˘a, medie bacalaureat.
2.Elementele EditText cont ,in textul extras din cele dou ˘a poze cu documentele introduse
de c˘atre utilizator.
3.Butonul Finalizare este ap ˘asat de c ˘atre utilizator dup ˘a ce acesta verific ˘a datele extrase.
Ap˘asarea acestui buton trimite un obiect JSON c ˘atre server.
Figura 3.2 : Interfat ,a secundara.
Server-ul a fost creat folosind Eclipse IDE s ,i limbajul de programare Java. Acesta
primes ,te de la aplicat ,ia Android un Obiect JSON care cont ,ine datele personale ale utiliza-
torului. Dup ˘a primirea acestuia, datele vor fi salvate ˆıntr-un fis ,ier CSV pentru a fi prelucrate
de c˘atre robotul UiPath.
3.3 Clasele s ,i codul
ˆIn figura 3.3 se poate vedea declararea global ˘a a variabilele extractedTextCI, extracted-
TextBac, imageViewCI, imageViewBac, image uriCI, image uriBac.
.Variabilele extractedTextCI s ,i extractedTextBac vor memora textul extras din poza cu
cartea de identitate, respectiv cu diploma de bacalaureat.
.Variabilele imageViewCI s ,i imageViewBac vor primi pozele c ˘art,ii de identitate, re-
spectiv a diplomei de bacalaureat s ,i vor fi afis ,ate pe fereastra principal ˘a.
.Variabilele image uriCI s ,i image uriBac vor ret ,ine calea pentru a putea accesa pozele
efectuate de c ˘atre utilizator.
25

Problema propus ˘a Clasele s,i codul
Figura 3.3 :
ˆIn figura 3.4 se creaz ˘a pentru prima dat ˘a activitatea. ˆIn aceast ˘a metod ˘a se fac init ,ializ˘arile
statice, de obicei. S-a setat pentru fereastra principal ˘a layout-ul activity main, iar pentru
imageViewCI s ,i imageViewBac se atribuie referint ,a la elementele view folosind metoda
findViewById, care permite transformarea unui view ˆıntr-un obiect Java prin crearea unei
referint ,e.
Figura 3.4 :
Figura 3.5 prezint ˘a evenimentele create pentru primele dou ˘a butoane. Acestea au rolul
de a activa camera foto a dispozitivului mobil, salvarea pozei, iar calea c ˘atre poze este sal-
vata in variabilele declarate global, image uriCI pentru poza cu cartea de identitate s ,i im-
ageuriBac pentru poza cu diploma de bacalaureat.
Figura 3.5 :
ˆIn figura 3.6 este prezentat ˘a metoda care deschide aplicat ,ia de camer ˘a foto a dispozitivu-
lui mobil. Aceast ˘a metod ˘a returneaz ˘a calea c ˘atre poza efectuat ˘a.ˆIn cadrul acestei metode
variabila values primes ,te dou ˘a atribute, titlu s ,i descriere. Acestea sunt transmise variabilei
image uri care stocheaza calea fotografiei. Se creaz ˘a act ,iunea care permite capturarea imag-
inii, primes ,te ca atribut extra calea, iar apoi este lansat ˘a activitatea.
26

Problema propus ˘a Clasele s,i codul
Figura 3.6 :
ˆIn figura 3.7 este prezentat ˘a metoda care extrage textul din pozele introduse de c ˘atre
utilizator s ,iˆıl returneaz ˘a la apelare. Aceast ˘a metod ˘a primes ,te ca parametru un element im-
ageView, care se gaseste in fereastra principal ˘a a aplicat ,iei. Se creaz ˘a variabila recognizer,
se verific ˘a dac ˘a este operational ˘a,ˆın cazul ˆın care nu este va fi afis ,at un mesaj de eroare.
Atlfel, variabila items este init ,ializat ˘a cu elementele detectate ˆın frame. Cuvintele extrase
sunt adaugate ˆıntr-o variabil ˘a stringBuilder, linie cu linie.
Figura 3.7 :
ˆIn figura 3.8 sunt prezentate cele dou ˘a metode care returneaz ˘a numele, respectiv prenu-
mele utilizatorului din textul extras din poza cart ,ii de identitate. ˆIn cadrul metodei getNume()
se face o c ˘autare a textului ”last name” ˆın cadrul textului extras, variabilei start i se atribuie in-
dexul urmatorului r ˆand. Variabilei end i se atribuie indexul ultimului caracter aflat pe r ˆandul
variabilei start. Se returneaza caracterele cuprinse ˆın intervalul start, end. Pentru metoda get-
Prenume() se face c ˘autarea textului ”first name” ˆın cadrul textului extras, apoi urm ˆandu-se
aceeasi pas ,i precum la metoda getNume() va returna caracterele cuprinse ˆın intervalul start,
end.
27

Problema propus ˘a Clasele s,i codul
Figura 3.8 :
ˆIn figura 3.9 este prezentat ˘a metoda care returneaz ˘a cnp-ul utilizatorului. ˆIn cadrul
metodei se indentific ˘a pozit ,ia cuv ˆantului ”cnp” ˆın cadrul textului extras, variabila start primes ,te
indexul cu patru pozit ,ii mai mult fat ,˘a de pozit ,ia unde a fost gasit. Se returneaz ˘a 13 caractere
ˆıncep ˆand de la pozit ,ia start, din textul extras din poza c ˘art,ii de identitate.
Figura 3.9 :
ˆIn figura 3.10 este prezentat ˘a metoda getJudet(), aceasta returneaz ˘a judet ,ulˆın care
locuies ,te utilizatorul. ˆIn cadrul metodei se caut ˘a textul ”jud”, ˆıns˘a de aceast ˘a dat ˘a se va
face c ˘autarea de doua ori, deoarece prima pozit ,ieˆın care este g ˘asit textul va reprezenta locul
nas ,terii utilizatorului, nu domiciliu acestuia. Variabilei start i se atribuie pozit ,ia unde este
g˘asit textul cu patru pozit ,ii mai mult. Se returneaz ˘a dou ˘a caractere incep ˆand de la index-ul
start.
Figura 3.10 :
ˆIn figura 3.11 este prezentat ˘a metoda getLocaliate(), aceasta returneaz ˘a localitatea domi-
ciuliului utilizatorului. ˆIn cadrul metodei a fost creat un pattern, deoarece pentru persoanele
care stau ˆın mediul rural apare si satul, in timp ce la persoanele din mediul urban apare doar
oras ,ul. Folosind pattern-ul se caut ˘a textul ”ors” sau ”sat”, dup ˘a identificare variabilei start
i se atribuie pozit ,ia cu patru pozit ,ii mai mult. Variabilei end i se atribuie finalul r ˆandului
corespunz ˘ator variabilei start. Se returneaz ˘a caracterele aflate ˆın intervalul start, end.
28

Problema propus ˘a Clasele s,i codul
Figura 3.11 :
ˆIn figura 3.12 sunt prezentate metodele care returneaz ˘a nota la limba rom ˆan˘a, respectiv
media de la bacalaureat a utilizatorului. Pentru ambele metode s-a folosit un pattern s ,i a
fost folosit ˘a s,i structura diplomei de bacalaureat. Deoarece notele probelor de la bacalaureat
sunt singurele fragmente de text formate dintr-un numar cu doua zecimale, extragerea si
identificarea materiei corespunzatoare notei a fost destul de usoara. Pentru nota la limba
romana, pozit ,ia primului num ˘ar identificat ce respect ˘a pattern-ul este atribuit variabilei start,
iar pentru media la bacalaureat, pozit ,ia celui de-al patrulea num ˘ar ce respect ˘a pattern-ul este
atribuit variabilei start. Sunt returnate caracterele aflate ˆın intervalul start, start+4 pentru
ambele metode.
Figura 3.12 :
ˆIn figura 3.13 este prezentat ˘a metoda eveniment pentru butonul NEXT, care face legatura
ˆıntre cele dou ˘a ferestre. Dac ˘a nu au fost introduse ambele poze ale documentelor, aceasta va
returna un mesaj de atent ,ionare utilizatorului, altfel va deschide a doua activitate, transmit ,ˆand
datele utilizatorului extrase din pozele documentelor.
29

Problema propus ˘a Clasele s,i codul
Figura 3.13 :
ˆIn figura 3.14 este prezentat ˘a metoda onActivityResult, care permite primirea rezultat-
ului unei alte activit ˘at,i,ˆın cazul nostru de la camera foto a dispozitivului. ˆIn cadrul acestei
metode elemtele imageView primesc ca atribut pozele documentelor s ,i se apeleaz ˘a metoda
pentru extragerea textului din poze.
Figura 3.14 :
ˆIn figura 3.15 sunt prezentate variabilele declarate global ˆın cadrul celei de a doua ac-
tivit˘at,i. Sunt s ,apte variabile corespunz ˘atoare fiec ˘arui elemente EditText din cadrul ferestrei
secundare.
Figura 3.15 :
ˆIn figura 3.16 este prezentat ˘a metoda onCreate a activit ˘at,ii secundare. Este setat ca
layout activity second, variabila intent primes ,te datele transmise din activitatea principal ˘a.
Cele s ,apte variabile EditText sunt init ,ializate cu referint ,ele elementelor view, iar apoi este
setat atributul text al fiec ˘arui view cu datele primite de la activitatea principal ˘a.
30

Problema propus ˘a Clasele s,i codul
Figura 3.16 :
ˆIn figura 3.17 este prezentat ˘a metoda eveniment a butonului Finalizare. ˆIn cadrul acestei
metode este creat ˘a o variabila sendData, SendData este clasa care realizeaz ˘a conexiunea
aplicat ,iei la server. Este creat un obiect JSON care primes ,te datele utilizatorului s ,i care este
trimis c ˘atre server.
Figura 3.17 :
ˆIn figura 3.18 sunt prezentate variabilele globale ale clasei SendData, clas ˘a care real-
izeaz ˘a conexiunea aplicat ,iei la server s ,i cu ajutorul c ˘areia sunt trimise datele c ˘atre server.
Sunt declarate variabilele socket, care va realiza conexiunea la server, si printWriter, care va
realiza transmiterea datelor catre server.
31

Problema propus ˘a Clasele s,i codul
Figura 3.18 :
ˆIn figura 3.19 este prezentat ˘a metoda doInBackground care primes ,te ca parametru un
obiect JSON. ˆIn cadrul acestei metode este realizat ˘a conexiunea aplicat ,iei la server, prin
intermediul variabilei socket. Variabila printWriter este init ,ializat ˘a, urm ˆand apoi s ˘a transmit ˘a
obiectul JSON c ˘atre server.
Figura 3.19 :
ˆIn figura 3.20 este prezentat ˘a aplicat ,ia server. Variabila server este init ,ializat ˘a, primind
num˘arul de port 7800, variabila socket invoc ˘a metoda accept(), ˆın as ,teptarea cererilor pen-
tru conectare, inputStreamReader este init ,ializat pentru a primi datele transmise de c ˘atre
aplicat ,ia Android. Variabilei json i se atribuie obiectul JSON prin intermediul buffere-
dReader, urm ˆand ca datele primite de c ˘atre server s ˘a fie transmise c ˘atre un fis ,ier csv folosind
libr˘aria Opencsv.
Figura 3.20 :
32

Referint ¸e bibliografice
[1] Awal Kharisma. A developer’s first look at android. https://www.academia.
edu/2537177/What_is_Android .
[2] Google. Introduction to android. https:
//google-developer-training.github.io/
android-developer-fundamentals-course-concepts-v2/
unit-1-get-started/lesson-1-build-your-first-app/
1-0-c-introduction-to-android/1-0-c-introduction-to-android.
html .
[3] James Chen. Android operating system. https://www.investopedia.com/
terms/a/android-operating-system.asp .
[4] John Callaham. The history of android os: its name, origin and more. https://
www.androidauthority.com/history-android-os-name-789433/ .
[5] JR Raphael. Android versions: A living history from 1.0 to
11. https://www.computerworld.com/article/3235946/
android-versions-a-living-history-from-1-0-to-today.html .
[6] Google. Android developer fundamentals course. https:
//codelabs.developers.google.com/codelabs/
android-training-hello-world/index.html?index=..%2F.
.android-training#2 .
[7] Margaret Rouse. Android studio. https://searchmobilecomputing.
techtarget.com/definition/Android-Studio .
[8] Google. Meet android studio. https://developer.android.com/studio/
intro .
[9] Google. Layouts. https://developer.android.com/guide/topics/
ui/declaring-layout .
33

Referint ¸e bibliografice Referint ¸e bibliografice
[10] Learn eclipse. https://www.tutorialspoint.com/eclipse/index.
htm.
[11] Gary Cernosek. A brief history of eclipse. https://www.ibm.com/
developerworks/rational/library/nov05/cernosek/index.html .
[12] Eclipse packages. https://www.eclipse.org/downloads/packages/
release/2020-09/m2 .
[13] UiPath. Robotic process automation. https://www.uipath.com/rpa/
robotic-process-automation .
[14] Uipath-basics. https://www.tutorialspoint.com/uipath/uipath_
basics.htm .
[15] Charles L. Perkins Laura Lemay. Teach yourself java in 21 days. https:
//www.cs.cmu.edu/afs/cs.cmu.edu/user/gchen/www/download/
java/LearnJava.pdf .
[16] Learn java. https://www.codecademy.com/learn/learn-java .
[17] James Gosling. The java language specification java se 7 edition. https://docs.
oracle.com/javase/specs/jls/se7/jls7.pdf .
[18] The complete history of java programming lan-
guage. https://www.geeksforgeeks.org/
the-complete-history-of-java-programming-language/ .
[19] Features of java. https://www.javatpoint.com/features-of-java .
[20] What are the major features of java program-
ming? https://www.tutorialspoint.com/
What-are-the-major-features-of-Java-programming .
[21] Object oriented programming (oops) concept in
java. https://www.geeksforgeeks.org/
object-oriented-programming-oops-concept-in-java/ .
[22] Java networking. https://www.tutorialspoint.com/java/java_
networking.htm .
[23] Google. Text recognition api overview. https://developers.google.com/
vision/android/text-overview .
[24] Google. See and understand text using ocr with mobile vision text api
for android. https://codelabs.developers.google.com/codelabs/
mobile-vision-ocr/#0 .
[25] Gidi Shperber. A gentle introduction to ocr. https://towardsdatascience.
com/a-gentle-introduction-to-ocr-ee1469a201aa .
[26] Introducing json. https://www.json.org/json-en.html .
34

Similar Posts