Storyteller Jewelry: aplicație mobilă Android [619729]

Ministerul Educației Naționale¸
Universitatea “OVIDIUS” Constanța
Facultatea de Matematică și Informatică
Specializarea Informatică

Storyteller Jewelry: aplicație mobilă Android
pentru magazin online
Lucrare de licenț ă

Coordonato r Științific:
Lect. univ. dr. Șerban Cristina

Absolvent: [anonimizat]
2019

MAZILU LAVINIA FLORENTINA 2

Cuprins

Capitol 1 ………………………….. ………………………….. ………………………….. ………………………….. ……………… 4
Introducere ………………………….. ………………………….. ………………………….. ………………………….. …………. 4
1.1 Rezumat ………………………….. ………………………….. ………………………….. ………………………….. …… 4
1.2 Context proiect ………………………….. ………………………….. ………………………….. ……………………… 5
1.3 Motivație ………………………….. ………………………….. ………………………….. ………………………….. …. 6
1.4 Cerințe sistem “Storyteller Jewelry” ………………………….. ………………………….. ………………………. 7
1.4.1 Cerințe funcționale ………………………….. ………………………….. ………………………….. …………… 7
1.4.2 Cerințe non -funcționale ………………………….. ………………………….. ………………………….. …….. 7
1.5 Structura lucrării de licență ………………………….. ………………………….. ………………………….. ……… 8
Capitolul 2 ………………………….. ………………………….. ………………………….. ………………………….. …………… 9
IDE-uri, tehnologii și elemente teoretice utilizate ………………………….. ………………………….. ……………….. 9
2.1 FluidUI ………………………….. ………………………….. ………………………….. ………………………….. …….. 9
2.2 GitHub ………………………….. ………………………….. ………………………….. ………………………….. …….. 9
2.3 SourceTree ………………………….. ………………………….. ………………………….. ………………………….. 10
2.4 Android ………………………….. ………………………….. ………………………….. ………………………….. ….. 12
2.5 PhpMyAdmin ………………………….. ………………………….. ………………………….. ………………………. 14
2.6 MySQL ………………………….. ………………………….. ………………………….. ………………………….. …… 14
2.7 JSON ………………………….. ………………………….. ………………………….. ………………………….. ………. 14
2.8 Visual Studio ………………………….. ………………………….. ………………………….. ………………………… 15
2.9 PHP ………………………….. ………………………….. ………………………….. ………………………….. ………… 16
2.10 C# ………………………….. ………………………….. ………………………….. ………………………….. ………… 16
2.11 Unity ………………………….. ………………………….. ………………………….. ………………………….. ……. 19
2.12 MVC ………………………….. ………………………….. ………………………….. ………………………….. …….. 20
2.13 HTTP ………………………….. ………………………….. ………………………….. ………………………….. ……. 20
Capitolul 3 ………………………….. ………………………….. ………………………….. ………………………….. …………. 21
Proiectare și implementare ………………………….. ………………………….. ………………………….. ………………. 21
3.1 Arhitectura generală a sistemului ………………………….. ………………………….. ………………………… 21
3.2 Diagrama Use -Case ………………………….. ………………………….. ………………………….. ………………. 22

MAZILU LAVINIA FLORENTINA 3
3.3 Serverul ………………………….. ………………………….. ………………………….. ………………………….. . 25
3.3.1 Implementarea serverului ………………………….. ………………………….. ………………………… 25
3.4 Aplicația Android ………………………….. ………………………….. ………………………….. ……………….. 31
3.4.1 Design -ul Interfeței ………………………….. ………………………….. ………………………….. ……… 31
3.4.2 Implementarea UI ………………………….. ………………………….. ………………………….. …………….. 36
3.4.3 Downloadarea și afișarea datelor ………………………….. ………………………….. ……………….. 44
3.5 Proiectarea bazei de date ………………………….. ………………………….. ………………………….. ……. 46
3.5.1 Diagrama Entități -Asociații (DEA) ………………………….. ………………………….. ……………….. 46
3.5.2 MRD (Modelul Relațional al Datelor) ………………………….. ………………………….. ………….. 49
Capitolul 4 ………………………….. ………………………….. ………………………….. ………………………….. …………. 50
Testarea sistemului ………………………….. ………………………….. ………………………….. …………………………. 50
Capitolul 5 ………………………….. ………………………….. ………………………….. ………………………….. …………. 54
Concluzii ………………………….. ………………………….. ………………………….. ………………………….. ……………. 54
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. ………… 55

MAZILU LAVINIA FLORENTINA 4

Capitol 1

Introducere

1.1 Rezumat

Această .lucrare .propune .o.aplicație .Android pentru telefoanele mobile care
reprezintă un magazin al unei firme producătoare de bijuterii gravate. Aplicația
“Storyteller Jewelry” furnizeaz ă informații despre produse, cere toate datele
necesare pentru realizarea produsului final personalizat și oferă utilizatorului
posibilitatea de a deve ni un client – de a plasa o comandă.
Lista produselor poate fi filtrata si sortata pentru a facilita cautarea produsului
dorit de catre potentia lul client.
Aplicația are o secțiune cu cele mai vândute produse ale magazinului pentru ca
utilizatorii să fie informați cu cererea de pe această piață.
Aplicatia isi propune usurarea vanzatorului de a prelua o comanda, dar si
comoditatea utilizatorului d e a acumula informatii si de a plasa o comanda. Munca
celor doi e automatizata, asadar va fi un castig de ambele parti.

MAZILU LAVINIA FLORENTINA 5
1.2 Context proiec t

În ziua de astăzi, magazinele online se orientează tot mai mult către aplicațiile
mobile, deoarece există un grad mare de acoperire al internetului mobil, iar interesul
oamenilor pentru telefoanele inteligente este foarte mare și in creștere.
În ultim ul timp , a devenit .posibil ca tot mai multe sarcini .să fie efectuate cu
ajutorul .telefoanelor , de la .achiziția de bunuri și până .la diferite operațiuni
bancare. .Este mult mai simplu .să accesezi doar cu o .atingere aplicația .dorită , să
vizualizezi direct .ofertele și produsele noi .și să plătești .rapid și în siguranță .
Potrivit unui -studiu al celor de -la GPeC România, în – 2017 peste -40% din
comenzile -online au fost făcute -de pe un smartphone, iar rata de acoperire -a
internetului mobil -era de 85% -în comparație cu -55%, rata de penetrare -a
internetului fix.
În c oncluzie , dacă .le vei pune .clienților la dispoziție .posibilitatea de a
cumpăra .de la tine .simplu și rapid, din .aplicație, poți fi sigur .că aceștia te .vor alege
în detrimentul unui .magazin online obișnuit.

MAZILU LAVINIA FLORENTINA 6
1.3 Motivație

Am ales această te mă, deoarece am lucrat în acest domeniu, în domeniul
vânzărilor, am lucrat într -un magazin de bijuterii personalizate. Am văzut cât de greu
este să preiei personal o comandă de la un client și cât timp pierzi tu, ca angajat. O
aplicație facilitează această m uncă în plus, aș spune eu, dar nu numai asta. Aplicația
poate -oferi informații generale, -prețuri, articole, conturi -pentru utilizatori, noutăți și
multe -altele. Unul dintre cele mai -mari plusuri -când ai o aplicație mobilă este că
toate -detaliile pe care -dorești să le afle clienții -și potențialii tăi -clienți (mai ales cele
legate -de vânzări, promoții) sunt -la îndemână.
Pe lângă timpul câștigat ca și angajat, mai putem enumera și alte beneficia
importante pentru afacerea ta:
 Cresc loialitatea clienților, deoarece, potrivit studiilor, faptul că
telefonul -este mereu la îndemână, -iar pictograma aplicației ,-ca un
banner -atrăgător, îi reamintește utilizatorului -în mod constant
posibilitatea -de a efectua o -achiziție online.
 Convertesc mai-bine vizitatorii în-cumpărători și măresc -vânzările
magazinelor.
 Aplicații mobile sunt-cele care oferă un nivel -mai ridicat de
interacțiune -cu clienții

MAZILU LAVINIA FLORENTINA 7
1.4 Cerințe sistem “ Storyteller Jewelry ”

1.4.1 Cerințe funcționale
 Creare cont: Sistemul afișează un formular pentru introducerea datelor .
Dacă datele utilizatorului nu sunt corecte din punct de vedere sintactic,
afișează un mesaj de eroare , iar daca sunt corecte , le memorează .
 Vizualizare și selectare categorii: Sistemul afișea ză o listă de categorii,
oferă utilizatorilor posibilitatea de a selecta o categorie, după care
afișează o listă de subcategorii/produse care la r ândul lor pot fi
vizualizate si selectate. La selectarea unei subcategorii, acesta afișează
o list ă de produse. Sistemul permite selectarea produsului d orit,
afișează pagina produsului unde oferă detalii despre acesta și permite
adăugarea produsului în coșul de cumpărături.
 Vizualizare și finalizare comanda : Sistemul afișează lista de produse
aflate in coșul de cumpărături , permite ștergerea acestora si plasarea
comenzii.

1.4.2 Cerințe non -funcționale
 Ușurința in utilizare : Utilizatorul nu are nevoie de instruire pentru a
folosi aplicația, oferindu -i acestuia o interfață intuitivă și rapidă;
 Portabilitate : Sistemul poate rula pe sistemul de operare Android;
 Siguranță : Sistemul trebuie să funcționeze non -stop, iar întreruperea
execuției aplicației nu compromite corectitudinea și integritatea
datelor;
 Robustețe : sistemul verifică datele introdus e de actorii software și
afișează mesaje de eroare și solicită introducerea de date corecte ;
 Interfețele grafice: vor fi create folosind Unity și C#.

MAZILU LAVINIA FLORENTINA 8
1.5 Structura lucrării de licență

Primul capitol conține contextul proiectului și descrie toate cerințele și
obiectivele pe care sistemul trebuie să le îndeplinească.
Al doilea capitol prezintă o scurtă descriere a tehnologiilor și a elementelor
teoretice folosite.
Cel de al treilea capitol descrie în întregime procesul de modelare și
implementare a sistemului. Aici este prezentată și arhitectura sistemului, împreună
cu toate componentele care o alcătuiesc.
În capitolul patru este prezentat modul în care sistemul a fost testat, pentru a
mă asigura că acesta funcționează cum trebuie.
Ultimul capitol co nține concluziile formate în urma realizării acestei lucrări
împreună cu posibile dezvoltări ulterioare.

MAZILU LAVINIA FLORENTINA 9

Capitolul 2

IDE-uri, t ehnologii și elemente
teoretice utilizate

2.1 FluidUI
FluidUI este o aplica ție web pentru proiectarea UI rapid ă și care imit ă în
oarecare măsura designul real al sistemelor Android, iOS, web și desktop. Un
proiect poate avea mai multe pagini, intre care se pot stabili leg ături pentru a permite
navigarea interactiv ă a acestuia online sau printr -o aplica ție nat ivă (Fluid Player din
App Store și Google Play) .
Acesta instrument de prototipizare a interfe țelor cu utilizatorul este creat cu
tehnologii le HTML5, CSS3 și JavaScript.

2.2 GitHub
GitHub este un serviciu de hosting al proiectelor git . Un proiect git este
numit repository . Acesta permite menținerea unui duplicat al proiectului online și
vizualizarea tuturor fișierelor și a modificărilor făcute în cadrul lor .
GIT este -folosit în majoritatea -companiilor de IT din Romania , dar și din
străinătate -pentru ve rsionare. Chiar dacă vorbim de proiecte -web, -mobile sau –
desktop , GIT-ul este nelipsit.

MAZILU LAVINIA FLORENTINA 10
Nu numai companiile -folosesc GIT, ci și-freelancerii sau cei care sunt
pasiona ți-de programare , date-fiind beneficiile pe -care le oferă :
 Păstrează fiecăre-versiun e a codului nostru.
 Păstrează un backup remote a -codului nostru, de care ne putem -folosi
în cazuri extreme , precum formatarea disk -ului sau distrugerea PC -ului.
 Face posibil lucratul în echip ă eficient -și fără bătăi de cap.
 Face posibilă separarea codului -unor func ționalit ăți prin -folosirea
branch -urilor.
 Face posibilă întoarcerea la orice -versiune trecut ă-din cod.

2.3 SourceTree
SourceTree este o alternativă bună la linia de comandă Git. Este un mod rapid
și ușor de a lucra cu Git și Mercurial, mai ale s dacă utilizați Git Flow și căutați
software gratuit.
Gestionarea fluxului de lucru în SourceTree este intuitiv și poate facilita
majoritatea sarcinilor git într -o manieră logică.
Gestionarea branch -urilor în Sourcetree este ușo ară. Vă permite să comutați
copiile de lucru cu un singur clic. Vă indică, de asemenea, cât de în față sau în urmă
se află versiunea dumneavoastră și vă avertizează să dați pull sau push .
O parte uriașă a interfeței SourceTree este Istoricul. Această secțiune afișează
istoricul comp let al filialei curente. Fiecare modificare este afișată și accesibilă,
oferind un instrument foarte puternic pentru controlul versiunilor. Doar acest lucru
este un beneficiu uriaș pentru proiectele la care lucrează mai mulți dezvoltatori.

MAZILU LAVINIA FLORENTINA 11

Secțiunea „Working Copy” arată diferența dintre copia dvs. locală și
versiunea din depozitul Git. Acest lucru vă oferă o vizualizare în timp real a fișierelor
dvs. locale, astfel încât să puteți vedea exact ce ați schimbat.

MAZILU LAVINIA FLORENTINA 12

Figur a 1. Arhitectura android [1] 2.4 Android

Android este un sistem de operare mobil între ținut de Google. Acesta este
open-source și se bazeaz ă pe kernelul Linux, fiind proiectat pentru dispozitive
touchscreen precum smartphone -uri și tablete. Dezvoltatorii își pot crea propriile
aplica ții Android utiliz ând kitul de dezvoltare software(sdk) gratuit. Aplica țiile
Android sunt scrise folosind limbajul Java (sau Kotlin) și ruleaz ă prin intermediul
unei mașini virtuale Java (JVM ) optimizat ă pentru dispozitivele mobile. Ma șina
virtual ă “Dalvik” a fost uti lizată până la versiunea Android 4.4 iar de la versiunea
5.0 a fost inlocuit ă de Android Runtime(ART). Platforma android este alc ătuită din
mai multe componente principale, acestea sunt ilustrate mai jos .

MAZILU LAVINIA FLORENTINA 13
Kernelul linux stă la baza funcțonalității sistemului de operare Android, el se
ocupă cu operații de bază low -level cum ar fi threading -ul și gestiunea RAM. Prin
HAL(Hardware Abstraction Layer) sunt expuse capabilități har dware ale
dispozitivului către Java Api Framework. Acest strat este alcătuit din mai multe
librării, fiecare distribuind o interfață de comunicare cu o anumită componentă
hardware cum ar fi camera sau bluetooth.
Android Runtine(ART) este un mediu de rulare a aplicațiilor folosit de
sistemul de operare android, execuția codului având loc într -o mașină virtuală.
Multe componente și servicii de bază ale sistemului android cum ar fi ART
și HAL, sunt construite folosindu -se librării scrise în C și C++. Platform a android
oferă api-uri java pentru a le accesa. De exemplu un dezvoltator poate utiliza
OpenGL ES prin api -ul OpenGL din cadrul framework -ului java android.
Java API Framework conține un set de interfețe de programare(APIs) prin
care li se permite progr amatorilor să scrie rapid și ușor aplicații pentru telefoanele
Android. Întregul set de caracteristici ale sistemului de operare Android este f ăcut
disponibil prin aceste API -uri scrise în java.
System apps, reprezint ă aplic ațiile de baz ă pe care le con ține orice smartphone
Android. Acestea sunt aplica ții precum camera, email, calendar, sms etc.
Android studio este mediul de dezvoltare integrat(IDE) oficial pentru
aplica țiile android, fiind construit peste IntelliJ IDEA de la JetBrains și proiectat
specia l pentru dezvoltarea Android. Acesta ofer ă un emulator performant care poate
fi folosit în testarea aplica țiilor.

MAZILU LAVINIA FLORENTINA 14
2.5 PhpMy Admin

PhpMyAdmin este un instrument software gratuit scris în PHP, destinat să se
ocupe de administrarea MySQL pe Web. PhpMyAdmin suportă o gamă largă de
operații pe MySQL și MariaDB. Operațiunile utilizate frecvent (gestionarea bazelor
de date, tabele, coloane, relații, indexuri, utilizatori, permisiuni etc.) pot fi efectuate
prin interfața cu utilizatorul, în timp ce aveț i totuși posibilitatea de a executa direct
orice interogare SQL.

2.6 MySQL

Este cel mai popular sistem de gestionare a bazelor de date
relațonale(RDBMS) open source. MySQL este dezvoltat de către Oracle
Corporation și a apărut pentru prima dată în anu l 1995. Această tehnologie este
folosită pentru a stoca datele necesare sistemului. Gestionarea datelor se face prin
comenzi din limbajul SQL(Structured Querry Language).

2.7 JSON

JSON(JavaScript Object Notation) este un format text, minimal, ușor de c itit
pentru structurarea datelor. Este folosit în principal pentru a transmite date între un
client și o aplica ție web, ca o alternativ ă la XML. Datele sunt structurate sub form ă
de perechi cheie -valoare. Acest format a devenit din ce în ce mai popular în ultima
vreme, mai ales în dezvoltarea aplica țiilor web. R ăspunsurile returnate de c ătre
serverul aplica ției vor urma acest format deoarece reprezint ă un standard în ziua de
azi și este u șor de parsat pe partea de client. Mai jos este ilustrat un exemplu de date
stocate în format JSON.

MAZILU LAVINIA FLORENTINA 15
{
“nume” : ”Lavinia ” ,
“ varsta ” : 26 ,
“ adresa ” : {
“ strada ” : ”Vulturului, 4 ” ,
“ oraș ” : ” Constanta ”
} ,
” numereTelefon ” : [
{
” numar ” : ”0792 294 315”
},
{
” numar ” : ”0795 359 462”
} ]
}

2.8 Visual Studio
Microsoft Visual Studio este un IDE de la Microsoft. Este utilizat pentru a
dezvolta programe de calculator, precum și site -uri web, aplicații web, servicii web
și aplicații mobile. Visual Studio foloseșt e platforme de dezvoltare software
Microsoft, cum ar fi Windows API, Windows Forms, Windows Presentation
Foundation, Windows Store și Microsoft Silverlight. Poate produce atât codul nativ,
cât și codul gestionat.
Visual Studio acceptă 36 de limbaje de programare diferite și permite
editorului de cod și debugger -ului să suporte aproape orice limbaj de programare.
Limb ajele încorporate includ C, C ++, C ++ / CLI, Visual Basic .NET, C #, F #,
JavaScript, TypeScript, X ML, XSLT, HTML și CSS. Asistența pentru alte limbi,
cum ar fi Python, Ruby, Node.js și M, printre altele, este disponibilă prin pluginuri.
Java (și J #) au fost acceptate în trecut.

MAZILU LAVINIA FLORENTINA 16
2.9 PHP

PHP: Hypertext Preprocessor (sau pur și simplu PHP) este un l imbaj de
programare conceput inițial pentru dezvoltarea web. A fost inițial creat de Rasmus
Lerdorf în 1994 , dar o dată cu creșterea numărului de utilizatori , dezvoltarea PHP
este acum produsă de The PHP Group.
Folosit inițial pentru a produce pagini web d inamice, este folosit pe scară largă
în dezvoltarea paginilor și aplicațiilor web. Este folosit în principal înglobat în
codul HTML , dar 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 we b open -source și server -side, existând versiuni disponibile pentru
majoritatea web serverelor și pentru toate sistemele de operare. Conform statisticilor
este instalat pe 20 de milioane de site -uri 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.

2.10 C#

C# este un limbaj de programare orientat pe obiect creat de Microsoft la
sfârșitul anilor 90. A fost creat ca un concurent pentru limbajul Java . Din punct de
vedere sintactic C# derivă din limbajul C++, dar are și influențe din alte limbaje, mai
ales Java.
Ca limbaj orientat pe obiecte, C# suportă conceptele de încapsulare, moștenire
și polimorfism. Toate variabilele și metodele, inclusiv metoda Main , punctul de
intrare al aplicației sunt încapsulate în cadrul definițiilor clasei. O clasă poate
moșteni direct de la o clasă părinte, dar poate implementa orice număr de interfețe.

MAZILU LAVINIA FLORENTINA 17
Creatorii C# au intenționat să doteze limbajul cu mai multe facilități. Succesul
de care se bucură în acest moment , confirmă calitățile sale:
 Este un limbaj de programare simplu, modern, cu randament mare în
programare.
 Permite dezvoltarea de aplicații industriale robuste, durabile.
 Oferă suport complet pentru implementarea de componente software,
foarte necesare cum ar fi în medii distribuite. De altfel, poate fi
caracteriza t ca fiind nu numai orientat obiect, dar și orientat spre
componente.
Concepte pe care le-am invatat lucrand c u C# in lucrarea de licenta:
 Interface – O interfață este ca un contract. În lumea reala, contractul
dintre doi sau mai mulți oameni îi leagă să acționeze conform
contractului. În același mod, interfața include declarația uneia sau a mai
multor funcționali tăți. Entitățile care implementează interfața trebuie să
definească funcționalitățile declarate în interfață. În C#, o clasă sau un
struct pot implementa una sau mai multe interfețe. În C#, o interfață
poate fi definită folosind cuvântul cheie de interface . Interfețele pot
conține metode, proprietăți, indexi și evenimente ca membri.

 Collections – Pentru multe aplicații, doresti să creezi și să gestionezi
grupuri de obiecte cu legatura. Există două moduri de a grupa obiecte:
prin crearea array -urilor de obi ecte și prin crearea colecțiilor de obiecte.
Array -urile sunt cele mai utile pentru crearea și lucrul cu un număr fix
de obiecte. Colecțiile oferă un mod mai flexibil de a lucra cu grupuri de
obiecte. Spre deosebire de array -uri, grupul de obiecte cu care lucrați
poate crește și micșora dinamic pe măsură ce nevoile aplicației se
schimbă. Pentru unele colecții, puteți atribui o cheie oricărui obiect pe
care l -ați introdus în colecție, astfel încât să puteți prelua rapid obiectul
folosind cheia.

MAZILU LAVINIA FLORENTINA 18
 Dictionary< TKey, TValue> – este o colectie din C# avand aceeași
definitie ca dicționarul englez. Dicționarul englez este o colecție de
cuvinte și definițiile lor, deseori enumerate alfabetic într -una sau mai
multe limbi specifice. În același mod, Dicționarul din C# e ste o colecție
de chei și valori, în care cheia este ca un cuvânt și valoarea este ca o
definiție.

 Language Integrated Query (LINQ) – este numele unui set de tehnologii
bazate pe integrarea capabilităților de interogare direct în limbajul C#.
În mod tradițional, interogările pentru date sunt exprimate ca șiruri
simple, fără verificare de tip la runtime sau suport IntelliSense. În plus,
trebuie să înveți un limbaj de interogare diferit pentru fiecare tip de
sursă de date: baze de date SQL, documente XML, diverse servicii Web
și așa mai departe. Cu LINQ, o interogare este un FCLC (First -Class
Language Construct), la fel ca clasele , metodele, evenimentele. Familia
de tehnologii LINQ oferă o experiență de interogare consistentă pentru
obiecte (LINQ la obiecte), baze de date relaționale (LINQ până la SQL)
și XML (LINQ până la XML).

 Delegates – este un type care reprezintă referinte l a metode cu o anumită
listă de parametri și tip de return. Eu mi le -am imaginat ca fiind interfete
pentru functii. Când inițiați un delegat, puteți asocia instanța sa cu orice
metodă cu o semnătură și un tip de returnare compatibile. Puteți invoca
(sau ape la) metoda prin intermediul instanței delegate. Delegatele sunt
folosite pentru a trece metode ca argumente la alte metode. Event
handlerii nu sunt altceva decât metode care sunt invocate prin delegate.

MAZILU LAVINIA FLORENTINA 19
2.11 Unity

Unity a fost lansat în 2005, având ca scop „democratizarea” dezvoltării
jocurilor, făcând -o accesibilă mai multor dezvoltatori. Anul următor, Unity a fost
desemnată subcategorie în categoria „Best Use of Mac OS X Graphics” din Apple
Design Awards din cadrul Apple. Unity a fost lansat iniți al pentru Mac OS X,
adăugând ulterior suport pentru Microsoft Windows și browserele Web.
Desi U nity a fost creat in special pentru a dezvolta jocuri pe calculator,
consola sau mobil , datorita flexibilitatii lui este folosit in ultima vreme pentru tot
felul de aplicatii tip form/magazine online.
Unity este un game engine, game engine -ul este un framework creat pentru
dezvoltarea jocurilor video. Funcționalitatea principală furnizată de obicei de un
game engine include un motor de redare („renderer”) pentru g rafică 2D sau 3D, un
physics engine, scripting, animație, inteligență artificială, networking, streaming,
memory management, threading, localization support și poate include suport video
pentru cinematografie.
În 2010, Unity Technologies și -a folosit motorul de joc pentru a trece la alte
industrii folosind platforma 3D în timp real, inclusiv film și auto. Unity a
experimentat pentru prima dată în realizarea filmelor cu Adam, un scurtmetraj
despre un robot care a scăpat din închisoare. Ulterior, Unity s -a asociat cu
filmmaker -ul Neill Blomkamp, care a folosit instrumentele motorului, inclusiv
redarea în timp real și Cinemachine, pentru a crea două scurtmetraje generate de
computer, Adam: The Mirror și Adam și The Profet. În 2018, Disney Television
Animation a lansat trei scurtmetraje, numite Baymax Dreams, care au fost create cu
ajutorul motorului Unity.
Producătorii auto folosesc tehnologia Unity pentru a crea modele la scară
completă de vehicule noi în realitat e virtuală, pentru a construi linii de asamblare
virtuale și pentru a instrui lucrători. Motorul Unity este folosit de compania
DeepMind, o companie Alphabet Inc., pentru a instrui inteligența artificială. Alte
utilizări urmărite de Unity Technologies incl ud arhitectură, inginerie și construcții.

MAZILU LAVINIA FLORENTINA 20
2.12 MVC
MVC(Model View Controller) este un stil arhitectural care are ca scop
organizarea codului și imbunătățirea mentenanței. Acest lucru este realizat prin
separarea logicii aplicației de interfața afișată u tilizatorului. Astfel aplicația este
separată în trei părți principale: modelul, view -ul și controlerul.
 Modelul este responsabil de gestiunea datelor folosite de aplicație, aici
având loc interogarea bazei de date.
 View -ul oferă utilizatorului o interfa ță prin care acesta poate
interac ționa.
 Controlerul con ține codul care se execut ă în func ție de ac țiunile
utilizatorului.
2.13 HTTP
Este protocolul care stă la baza internetului. Hypertext transfer protocol [8]
definește un set de reguli folosit în trimiterea datelor(text,imagini,video) și în
formatarea acestora pe internet. HTTP este un protocol stateless, deoarece fiecare
comandă este executată independent, fără a cunoaște comenzile care au avut loc
înainte. Acest protocol utilizează modelul server -client, clientul trimite cereri iar
serverul răspunde. Un răspuns HTTP conține si un status code. Prin intermediul
acestui cod aplicația client își poate da seama care este eroarea. Cele mai fol osite
coduri sunt următoarele:
 200-cerere reușită
 401-cerere respinsă din cauza autentificări eșuate
 403-acces interzis pe această pagină
 500-eroare internă de pe server
De asemenea HTTP folosește comenzi precum GET , POST și PUT , care sunt
utilizate în preluarea și crearea de date. În decursul acestei lucrări se va folosi
protocolul HTTP pentru transferul datelor dintre server și client.

MAZILU LAVINIA FLORENTINA 21

Capitolul 3

Proiectare și implementare

Aplicația ”Storyteller Jewelry” ˆıi permite unui utilizator sa vizualizeze
produsele oferite si sa dea o comanda care poate avea unul sau mai multe produse.
Aplicația îl îndrum ă pe acesta, cerându -i toate datele necesare pentru a plasa o
comandă si anunțându -l când a sarit peste vreun pas . Totodat ă, îi ofer ă posibilitatea
să vadă în timp real cele mai cerute și în vogă produse din magazin . De asemenea
utilizatorul poate să caute un anumit produs din totalul de produse ale magazinului,
introducând cuvinte cheie, poate sorta produsele sau chiar și a le filtra .
In capitolul acesta se va face o prezentare general ă a arhitecturii sistemului.
Prima sec țiune con ține o prezentare pe scu rt a întregii arhitecturi de sistem, dup ă
care se prezint ă în detaliu fiecare pas din implementare și este descris ă fiecare
component ă în parte.

3.1 Arhitectura general ă a sistemului

Determinarea arhitecturii folosite este un pas important în dezvolta rea oricărui
sistem software. Pentru a realiza toate cerințele funcționale ale aplicat,iei, sunt
necesare servicii precum stocarea datelor pe un server central și comunicarea dintre
clienți în timp real. Astfel de servicii trebuie să fie gestionate de o co mponentă
software externă cunoscută sub numele de backend. Backend -ul va rula pe unul sau
mai multe servere, ascultând solicitările dispozitivelor care rulează aplicația client și
răspunzând cererilor acestora.

MAZILU LAVINIA FLORENTINA 22
Așadar, sistemul prezintă o arhitectură de t ip Client/Server cu un client
Android și un server central care are acces la o bază de date și care gestionează
comunicarea în timp real dintre clienți.
Aplicația Android(clientul) va comunica cu serverul central(backend) prin
internet. Clientul a fost im plementat în limbajul C#, iar server -ul folosește
tehnologia PHP.

3.2 Diagrama Use -Case

O diagram ă a cazurilor de utilizare [14] este în forma cea mai simpl ă o
descriere sau o reprezentare a comportamentului sistemului software și a
interac țiunii actorilor software cu acesta. Diagrama cazurilor de utilizare arat ă
diferite tipuri de utilizatori ai unui sistem împreun ă cu cazurile de utilizare .

MAZILU LAVINIA FLORENTINA 23

Caz de utilizare: Autentificare
Descriere : Descrie comportamentul sistemului și interac țiunea lui cu utilizatorul
pentru a putea efectua o comandă
Actori : Utilizator
Eveniment declan șator: Utilizatorul cere sa se autentifice
Precondi ții: Sistemul a memorat datele cel pu țin unui utilizator
Postcondi ții: Sistemul a permis autentificarea , afișând pagina pri ncipală
Flux principal :

Utilizator Sistem

1. Cere autentificarea in sistem
2. Cere introducerea datelor :
 Email
 Parol ă
3. Introduce datele și le trimite 4. Verific ă semantic datele primite [A1]
5. Afi șează pagina principală

Fluxuri alternative:
[A1]: Datele clientului sunt incorecte din punct de vedere sintactic.
1. Sistemul afi șează un mesaj de eroare
2. Fluxul continu ă cu pasul 2 din fluxul principal

MAZILU LAVINIA FLORENTINA 24

Caz de utilizare: Selectare Categorie
Descriere : Descrie comportamentul sistemului și interacțiunea lui cu utilizatorul
pentru a adăuga un produs în coșul de cumpărături
Actori : Utilizator
Eveniment declan șator: Utilizatorul cere accesarea produselor
Precondi ții: Sistemul a înregistrat cererea utilizatorul ui de a accesa produsele
Postcondi ții: Sistemul a permis adaugarea produsului in coș și a memorat datele
produsului comandat
Flux principal :

Utilizator Sistem
1. Selecteaz ă categorie 2. Afi șează listă subcategorii
3. Selecteaz ă subcategorie 4. Afi șează listă produse
5. Selecteaz ă produs 6. Afișează detalii produs
7. Cere introducerea datelor necesare în
funcție de produs
8. Introduce datele și le trimite 9. Verific ă datele din punct de vedere
sintactic [A1]
10. Salvează datele
11. Adaugă produs in coșul de
cumpărături

Fluxuri alternative:
[A1]: Datele sunt incorecte
1. Sistemul afi șează un mesaj de eroare
2. Fluxul continu ă cu pasul 6 din fluxul principal

MAZILU LAVINIA FLORENTINA 25
3.3 Serverul

Serverul ofer ă un REST API care este accesibil de c ătre orice dispozitiv mobil
conectat la internet în rețeaua locală . Serverul este responsabil cu distribu irea datelor
către client și cu comunicare a în timp real.
3.3.1 Implementarea serverului
Tehnologiile folosite în faza de implementare au fost PHP si MySQL . Visual
Studio Code a fost IDE -ul folosit pentru implementarea serviciilor REST ful. REST
este un model arhitectural în care dou ă sau mai multe aplica ții schimb ă resurse între
ele printr -un set de opera ții pe acestea. Resursele sunt unic reprezentate prin URL –
uri. API -ul va r ăspunde diferit în func ție de metoda HTTP a cererii și de url -ul
acesteia.
La baza comunic ării RESTful stau verbele HTTP: GET, POST, PUT,
DELETE care mai sunt referite des prin acronimul CRUD(Create -Read -Update –
Delete).
 GET: O cerere de acest tip întotdeauna indică o operație de preluare a
unor date. Ideal un API implementează posibilitatea de a prelua o
resursa particulară identificată printr -un id sau de a prelua un array care
conține toate resursele de acel tip.
 POST: Cererile de tip post sunt folosite pentru crearea de noi instanțe a
unei resurse. În cazul meu acest tip de cerere este folosit la crearea unei
liste de produse din coș și la înregistrarea unui utilizator.
 PUT: este folosit pentru a crea sau a updata o re sursă. Funcționează
aproape la fel ca și POST doar că în cazul preciz ării id -ului resursei în
cerere serverul va g ăsi mai întâi acea resursa specific ă și o va updata.
 DELETE: este folosit pentru ștergerea unei resurse de pe server. Este
necesar ă precizarea id -ului în cerere.

MAZILU LAVINIA FLORENTINA 26

Am folosit XAMPP pentru a trata adresa de localhost a serverului Apache ca
pe un server la distanță, utilizând protocolul client FTP pentru conectare . El a fost
creat ca un tool pentru dezvoltare, permițându -le progamatorilor sa -si testeze munca
pe calculatoarele proprii fara acces la internet sau in reteaua locala. Ofera suport
pentru crearea si manipularea bazelor de date MariaD B si SQLite printre altele
Apache este un server web open source si este cel mai folosit server pentru
distribuirea de continut web. Serverul Apache foloseste ca root directory un folder
din XAMPP numit htdocs unde am creat folderul StJ care contine fisier ele PHP
pentru a le putea accesa de pe adresa localhost din aplicatie prin url.

PHP este un limbaj de programare server -side. Acesta poate fi folosit pentru
a crea site -uri dinamice, dar eu l -am folosit pentru a extrage si a adauga date in /din
baza de date PhpMyAdmin.
API, sau Application Programming Interface, definește clasele, metodele,
funcțiile și variabilele pe care trebuie să le apeleze aplicația. În cazul aplicațiilor PHP
care trebuie să comunice cu bazele de date, API -urile necesare sunt de obicei expuse
prin extensii PHP. Am folosit extensia mysqli care imi permite sa accesez
functionalitatea oferita de MySQL.

MAZILU LAVINIA FLORENTINA 27

Pentru a identifica userul chiar si cand acesta nu doreste a se inregistra, am
facut serviciul AuthenticateDevice.php unde inregistram deviceId -ul de pe care
acesta a accesat aplicatia daca el nu exista deja in baza noastra de date.

Pentru o mai buna organizare a codului am separat functiile php pe care le
folosesc in mai multe locuri pentru a le reutiliza, folosind functia include() din php.
Primul include() reprezinta conexiunea cu baza de date prin mysqli.

MAZILU LAVINIA FLORENTINA 28

PHP stochează toate variabilele globale într -un tablou numit
$_GLOBALS[index]. Ind icele conține numele variabilei.
$_SERVER este o variabilă super globală PHP care conține informații despre
headers, paths și locațiile scriptului. Pe acesta il folosesc pentru a afla folderul in
care se afla root directory -ul meu.
După cum sugerează și n umele , $_REQUEST este utilizat pentru a obține
request parameters de la UR L. Ca si $_SERVER, $_REQUEST este o variabilă
super globală. În acest exemplu eu o folosesc pentru a obține deviceId -ul.
La linia 14, in AuthenticateDevice.php, apelam funcția tryQue ry() care cere 3
parametrii. Primul este conexiunea cu baza de date, al doilea este query -ul sql sub
forma de string pe care il cream in functia auth_getIdByDevice() , si un boolean cu
care ii spunem daca sa returneze SCOPE_IDENTITY sau nu.
SCOPE_IDENTITY returnează ultimul id al unui insert. Un scope este un
modul: un stored procedure, trigger, function, sau batch.
În această funcție facem un SELECT pentru a afla id -ul clientului in funcție
de $id_device.

MAZILU LAVINIA FLORENTINA 29

Inapoi in AuthenticateDevice.php, daca acest query returneaza un id,
inseamna ca device -ul clientului este deja inregistrat. Altfel, vom face un INSERT
pentru a -l inregistra.

Aceste două funcții in care construim sql -ul returneaza un string care este
folosit de tryQuery() .

MAZILU LAVINIA FLORENTINA 30

Aici executăm query -ul pe baza de date prin mysqli_query () și returnăm inapoi
un rezultat , in functie de variabila $scope_identity returnam si ultimul id inserat .
Funcția mysqli_autocommit() activează sau dezactivează comiterea automată a
modificăril or bazei de date , mysqli_commit() comite tranzacția curentă pentru
conexiunea bazei de date specificată , iar mysqli_rollback() rulează înapoi tranzacția
curentă pentru conexiunea la baza de date specificată.
Intr-un final, serviciul creat returneaza un JSON cu id -ul , ori inserat, ori
selectat al device -lui.

MAZILU LAVINIA FLORENTINA 31
3.4 Aplicația Android

Aplica ția reprezint ă clientul din arhitectura sistemului. Acesta este instalat ă
pe telefonul android al unui utilizator ș i este r esponsabil ă cu afi ăarea unei interfe țe
grafice intuitive prin care utilizatorii pot accesa toate serviciile sistemului. În crearea
aplica ției am folosit IDE -ul Unity î mpreun ă cu limbajul de programare C#.
3.4.1 Design -ul Interfeței
Ceea ce m -a determiant pe mine sa folosesc Unity este ca acesta este un EDIC
(Extensible Dependency Injection Container), extensibilă, care acceptă
interceptarea, are facilitati precum: constructor injection, property injection, and
method call injection. Unity este un containe r cu un scope general parca special facut
sa fie utilizat în orice tip de aplicație Microsoft.NET.
Pentru a intelege orice Tool software trebuie mai intai sa ii intelegi User
Interface -ul. Unity are un UI foarte simplu. Pe centru avem SceneView , este locul
unde construiești scena din punct de vedere vizual, unde îți planifici și execuți ideile.
In partea stanga sus avem Hierarchy care arată ce obiecte sunt în SceneView. In
partea dreapta Inspector -ul, il folosim pentru a accesa diferite propriet ăți și
componente ale obiectelor pe care le selectezi din ierarhie sau proiect. Este locul
unde putem edita si vizualiza GameObject -urile. Tot pe centru avem un tab,
GameView. Este locul unde testezi aplicatia înainte să o construiesti, reprezinta
versiune a run -time a aplicatiei. Nu poți selecta obiecte în acest mod și trebuie să
folosești Camera pentru a vedea orice în acest View.

MAZILU LAVINIA FLORENTINA 32

Concepte de baza in Unity sunt GameObject si Component . GameObject
este cea mai importantă resursă din Unity, or ice din aplicatie este un GameObject
și datorită faptului ca îl vom folosi foarte mult în lucrare, îi vom prescurta denumirea
cu „GO”. GO -ruile, însă, nu fac nimic pe cont propriu. Ele au nevoie de proprietăți
speciale (aka. Component ) pentru a deveni un l oc pe ecran, un buton, un container,
o imagine sau un text.
Pentru a înțelege cu adevărat GameObject -urile trebuie să întelegem
proprietățile ce le deosebesc, acestea se numesc Componente. În funcție de ce gen
de obiect vrei să creăm, vom adăuga diferite c ombinații de componente unui GO. In
imaginea de mai jos putem vedea un astfel de GameObject care se numeste Canvas.
Acesta este Canvas datorita Componentele care il definesc, anume: Canvas Scaler,
Graphic Raycaster si Vertical Layout Group.
Pentru a crea U I-ul (User Interface) am folosit libraria Unity Engine UI.
Pentru a afisa orice pe ecranul aplicatiei, este nevoie sa creez un Canvas apoi cu
ajutorul functionalitatii de layout automat din Unity (Layout Groups) vom crea UI –
ul pentru a arata bine pe toate tipurile de aspect ratio.

MAZILU LAVINIA FLORENTINA 33

Conceptele de baza ale Layout Groups sunt: grupuri orizontale, grupuri
verticale sau grile. De asemenea, permite ca elementele să fie dimensionate automat
în funcție de conținutul din interior sau in functie de dimensiunea parint elui, foarte
de ajutor in lucrul cu dispozitive cu rezolutii dinamice.
Componenta Vertical Layout Group plasează elementele de aranjare a
copiilor una peste alta. Înălțimile lor sunt determinate de înălțimile lor minime,
preferate și flexibile, după modelu l următor:

Înălțimile minime ale tuturor elementelor de dispunere a copilului sunt
adăugate împreună și spațiul dintre ele este adăugat. Rezultatul este înălțimea
minimă a grupului de dispunere verticală.
Înălțimile preferate ale tuturor elementelor de dispunere pentru copii sunt
adăugate împreună și spațiul dintre ele este adăugat. Rezultatul este înălțimea
preferată a grupului de dispunere verticală.
Dacă grupul de dispunere verticală este la înălțimea minimă sau mai mic, toate
elementele de dispun ere ale copilului vor avea și ele înălțimea minimă.
Cu cât grupul de dispunere verticală este mai aproape de înălțimea preferată,
cu atât fiecare element de dispunere a copilului va fi mai aproape de înălțimea
preferată.

MAZILU LAVINIA FLORENTINA 34

Dacă grupul de dispunere vertical ă este mai mare decât înălțimea preferată,
acesta va distribui spațiul suplimentar disponibil proporțional cu elementele de
dispunere ale copiilor, în funcție de înălțimile lor flexibile respective.
Componenta Horizontal Layout Group își așează elementele de dispunere
ale copilului una lângă alta. Lățimile lor sunt determinate de lățimile lor minime,
preferate și flexibile, după modelul următor:

Lățimile minime ale tuturor elementelor de dispunere pentru copii sunt
adăugate împreună și spațiul dintre ele este adăugat. Rezultatul este lățimea
mimimum a grupului de dispunere orizontală.
Lățimile preferate ale tuturor elementelor de dispunere pentru copii sunt
adăugate împreună și spațiul dintre ele este adăugat. Rezultatul este lățimea preferată
a grupului de dispunere orizontală.
Dacă Grupul de dispunere orizontală are lățimea minimă sau mai mic, toate
elementele de dispunere pentru copii vor avea ș i lățimea minimă.
Cu cât grupul de dispunere orizontală este mai aproape de lățimea preferată,
cu atât fiecare element de dispunere a copilului va fi mai aproape de lățimea
preferată.
Dacă Grupul de dispunere orizontală este mai larg decât lățimea preferat ă,
acesta va distribui spațiul suplimentar disponibil proporțional cu elementele de
dispunere pentru copii în funcție de lățimile lor flexibile respective.

MAZILU LAVINIA FLORENTINA 35

Componenta Grid Layout Group plasează elementele sale de aranjare pentru
copii într -o grilă.

Spre deosebire de alte layout grupuri, Grid Layout Group ignoră proprietățile
de dimensiuni minime, preferate și flexibile ale elementelor sale de dispunere
conținute și, în schimb, le atribuie o dimensiune fixă tuturor, care este definită cu
proprietatea D imensiune celulă a grupului Grid Layout în sine.
Dacă doriți să înlocuiți dimensiunea minimă, preferată sau flexibilă a unui
element dintr -un Layout Group, puteți face asta adăugând o componentă Layout
Elemen t pe GameObject.

Un controler de alocare alocă lățimea sau înălțimea unui element de aspect în
următoarea ordine:
În primul rând, controlerul de dispunere alocă proprietăți de dimensiune
minimă (Lățime mină, înălțime minimă).

MAZILU LAVINIA FLORENTINA 36

Dacă există suficient spațiu disponibil, regulatorul de dispunere aloc ă
proprietățile de dimensiuni preferate (Lățime preferată, Înălțime preferată).
Dacă există spațiu disponibil suplimentar, regulatorul de dispunere alocă
proprietățile de dimensiuni flexibile (lățime flexibilă, înălțime flexibilă).

3.4.2 Implementarea UI
Canvas -ul este zona în care trebuie să se afle toate elementele UI. Canvas este
un GameObject cu o componentă Canvas pe ea și toate elementele UI trebuie să fie
copii ale unui astfel de Canvas.
Am setat pe aceasta sa ia dimensiunile camerei si pentru a acomoda mai multe
rezolutii am setat ca rezolutie de baza 480×800(Portrait) si orice rezolutie ar avea
dispozitivul Canvasul va Expanda toate elementele pentru a arata bine.

MAZILU LAVINIA FLORENTINA 37

In imagine d e jos puteti vedea un early stage al developmentului, unde am
structura ierarhia proiectului in Canvas , luandu -ma dupa proiectarea pe care am
realizat -o in Fluid UI.

In Body avem Header -ul, sub el pe aceasi linie ierarhica _Router -ul si Drawer –
ul care este meniul ce vine din stanga la apasarea butonului de meniu. In Router
tinem toate paginile pe care le putem accesa in aplicatie.
Pe Canvas avem o componenta foarte importanta, anume RectTransform.
RectTransform are poziție, rotație și scară la fel ca componentele Transform
obișnuite (regasite in mai multe software -uri de dezvoltare), dar are și lățimea și
înălțimea, folosite pentru a specifica dimensiunile dreptunghiului.

MAZILU LAVINIA FLORENTINA 38
RectTransform ca proprietati are:
 Pivot – Modificările de rotație, di mensiune și scară apar în jurul
pivotului, astfel încât poziția pivotului afectează rezultatul unei rotații,
redimensionare sau scalare. Când butonul Pivot al barei de instrumente
este setat pe modul Pivot, pivotul unei transformări Rect poate fi mutat
în scenă.
 Anchor – Transformările Rect includ un concept de aspect numit
ancore. Ancorele sunt prezentate ca patru mânere triunghiulare mici în
Vizualizarea scenei și informațiile de ancorare sunt afișate și în
inspector. Dacă părintele unui RectTransform est e de asemenea un
RectTransform, Transformarea RT a copilului poate fi ancorată
transformării RT -ului părinte în diferite moduri. De exemplu, copilul
poate fi ancorat la centrul părintelui sau la unul dintre colțuri.
Este una dintre cele mai importante comp onente pentru ca cel mai mare
chalenge al acestui proiect a fost adaptarea vizuala a datelor.
RouterController
Pentru a schimba de pe o pagina pe alta am scris un script custom, numit
RouterController. El a fost adaugat pe GameObject -ul _Router ca componenta.
Acest script este un singleton, modelul singleton este o modalitate de a vă asigura că
o clasă are o singură instanță accesibilă la nivel global disponibilă în orice moment.
Comportându -se la fel ca o clasă statică obișnuită, dar cu anumite avantaje. Acest
lucru este foarte util pentru a face clase de tip manager global care dețin variabile
globale și funcții la care multe alte clase trebuie să aibă acces.

MAZILU LAVINIA FLORENTINA 39
In aceasta am definit fiecare pagina si am adaugat -o ca referinta in
componenta, fiec are pagina este la randul ei un script custom cu un nume
reprezentativ pentru pagina: HomeController, SubCategoriesController,
CartController (denumirile au fost inspirate din modelul MVC). Orice variabila
publica scrisa intr -un script folosit ca component a poate fi vizualizata in inspector
cum putem vedea in imaginea de jos.

Toate script -urile pentru pagini implementeaza interfata IRoute. Cu ajutorul
acestui concept de interfata putem constui un dictionar ce tine ca cheie numele rutei
si ca valoare GameObject -ul paginii pe care vrem sa o vedem.

Apoi de oriunde din aplicatie putem accesa aceasta functie publica pentru a
schimba ruta (pagina pe care o vizualizam) prin activarea obiectului sau dezactivarea
lui.

MAZILU LAVINIA FLORENTINA 40

Un alt concept important in lucrul cu Un ity este Prefab , el imi permite să creez,
configurez și stochez un GameObject complet cu toate componentele sale,
proprietățiile și GameObject -urile copii din acesta, ca un bun reutilizabil. Prefab
Asset acționează ca un șablon din care puteți crea noi ins tanțe Prefab în Scena.
Orice modificări pe care le faceți unui Active Prefab sunt reflectate automat în
cazurile Prefab, ceea ce vă permite să efectuați cu ușurință modificări largi pe
întregul dvs. Proiect, fără a fi necesar să faceți în mod repetat aceea și editare pentru
fiecare copie a Activelor.
O sa folosesc Prefabricatele atunci când o sa să instantiez GameObjects la
runtime, obiecte care nu exista initial în Scena la început, de exemplu: Lista de
categorii si Produsele, acestea venind de pe server si nu sunt obiecte statice.
Pentru licenta am creat prefabricatul Product care este un container, ce are in el
un text (denumirea produsului) si o imagine (poza produsului).

Am creat scriptul ProductComponent.cs pe care l -am adaugat peste
prefabricat.

In el am adaugat cele doua proprietati pe care le vom schimba in functie de ce
Produse aducem de pe server. Product Component implementeaza interfata
IPrefabComponent, interfata ce ne va ajuta sa cream un helper class UsefullUtils.cs
care contine mai multe metoda statice cu care vom gestiona crearea si modificarea
pool-ului de produse.

MAZILU LAVINIA FLORENTINA 41

Dupa ce cerem si incarcam de la server lista de Produse (List<Product> products)
verificam daca avem un prefabricat deja creat in lista de _productsPool cu ajutoru l
functiei CheckInPool().

MAZILU LAVINIA FLORENTINA 42

In function CheckInPool() verificam daca exista obiectul. Daca acesta nu exista
il cream si returnam IPrefabComponent care exista deja pe el (adica Product
Component care implementeaza interfata).

MAZILU LAVINIA FLORENTINA 43

Dupa ce obtinem obiectul pe care il
putem considera ca noul nostru element
UI ce reprezinta produsul adus din baza. Ii
modificam Id -ul, ruta catre care pointeaza
(atunci cand se va face click pe un produs
ne va redirectiona catre pagina de Product
Details acolo unde vom lua detaliile
produsului in functie de id -ul produsului
pe care a fost inregistrat evenimentul de
click), numele si poza si vo ila!

Patternul de object pooling este un concept de software design care folosește un set
de obiecte inițializate păstrate gata de utilizare intr -un "pool" (piscina) în loc să le
aloce și să le distrugă la cerere. Un client al pool -ului va solicita un obiect din pool
și va efectua operațiuni asupra obiectului returnat. Când clientul a terminat, acesta
returnează obiectul în bazin, mai degrabă decât să -l distrugă; aceasta se poate face
manual sau automat.

MAZILU LAVINIA FLORENTINA 44

3.4.3 Downloadarea și afișarea datelor

Pentru a afisa lista de categorii si subcategoryii din aplicatie am folosit aceasi
metodologie ca la produse. Adus categorii din baza de date -> verificarea in
categoriesPool daca exista -> crearea si afisarea in UI.

Pentru a aduce categoriile in pagina de categorii am creat scriptul
CategoriesController.cs unde apelam functia GetC ategories() de pe un alt script
CategoryData.cs. Functia cere ca parametru un categoryId (pentru cazul in care vrem
subcategorii ale unei categorii) si o functie delegate.

CategoryData.cs este un singleton, in el gasim functia GetCategories() inaunt ru
ne construim url -ul caruia vrem sa ii facem request, setam delegate -ul, cream
requestul cu verbul GET si dat fiind faptul ca requestul este unul async vom astepta
ca requestul sa ne intoarca un raspuns printr -o Coroutina.

MAZILU LAVINIA FLORENTINA 45

Obiectul UnityWeb Request este utilizat pentru a comunica cu serverele web, el
gestionează fluxul de comunicare HTTP cu serverele web. Alte obiecte, în special
DownloadHandler și UploadHandler guvernează descărcarea și respectiv încărcarea
datelor.
Un set de funcții statice sunt furnizate pentru comoditate; aceste returnează
obiecte UnityWebRequest configurate corect pentru multe cazuri de utilizare
obișnuite cum ar fi: GET, POST, PUT, DELETE.
www.SendWebRequest() ne va intoarce un raspuns de tip JSO N. Cu ajutorul unei
clase JsonHelper vom mapa datele pe tip -ul de data creat pentru aplicatie, numit
Category. Apoi vom apela delegata setata mai sus, care ne va duce inapoi in
CategoriesController.cs in functia OnCategoriesLoaded() (trimisa ca parametru
pentru delegata) unde ne vom ocupa de afisarea categoriile in UI.

MAZILU LAVINIA FLORENTINA 46

3.5 Proiectarea bazei de date

În scopul stoc ării datelor de c ătre server, s -a folosit o baz ă de date
implementat ă cu MySQL. Acest SGBD (sistem de gestiune a bazelor de date) este
cea mai popular ă soluție open source folosit ă în crearea și managementul bazelor de
date rela ționale .

3.5.1 Diagrama Entități -Asociații (DEA)

Aceast ă diagram ă arată entitățiile și asocierile dintre ele impreun ă cu
atributele acestora.

MAZILU LAVINIA FLORENTINA 47

Atributele entităților prezentate mai sus sunt ar ătate în cele ce urmeaz ă:

MAZILU LAVINIA FLORENTINA 48

MAZILU LAVINIA FLORENTINA 49
3.5.2 MRD (Modelul Relațional al Datelor)

1. CLIENT (id, id_device, email) Φ ㅏid_device, Φ ㅏemail, Φㅏpassword, salt,
lastname, firstname, phone , address1, address2, city, county
2. INVOICE (id) Φㅏ quantity, Φㅏprice, Φㅏvat_price, Φㅏtotal_price
3. GRAVURA (id city,type · category) Φ ㅏ type, Φㅏcategory
4. MATERIAL (id,name ) Φㅏname , gramprice , handicraftprice
5. MEASURE (id) height , width , Φㅏthickness , diameter
6. CATEGORY (id, description ) Φㅏ description , Φㅏlevel
7. MODEL (id, name ) Φㅏ name , description , price , Φㅏ id_measure ⊆ id(din
tabela MEASURE)
8. CART (id, id_invoice ) is_in_progress, Φㅏid_invoice ⊆ id(din tabela
INVOICE) , id_client ⊆ id(din tabela CLIENT) ,
9. CATEGORIES_SUBCATEGORIES (id, id_category · id_subcategory )
Φㅏid_category ⊆ id(din tabela CATEGORY) , Φㅏid_subcategory ⊆ id(din
tabela CATEGORY)
10. CART_PRODUCT (id, id_cart · id_product_options ) Φㅏquantity,
Φㅏid_cart ⊆ id(din tabela CART) , Φㅏid_product_ options ⊆ id(din tabela
PRODUCT_OPTIONS)
11. PRODUCT (id,name )Φㅏname ,Φㅏdescription ,Φㅏlength ,
Φㅏpicture_path, Φㅏid_material ⊆ id(din tabela MATERIAL) , Φㅏid_model
⊆ id(din tabela MODEL) , Φㅏid_categor ⊆ id (din tabela CATEGORY) ,
Φㅏid_subcategory ⊆id(din tabela CATEGORY)
12. PRODUCT_OPTIONS (id) file, text, nume, id_gravura,
Φㅏid_product ⊆id(din tabela PRODUCT )

MAZILU LAVINIA FLORENTINA 50

Capitolul 4

Testarea sistemului

Testarea aplicațiilor este definită ca un tip de testare software, realizat prin
scripturi cu motivul de a găsi erori în software. Se ocupă de teste pentru întreaga
aplicație. Contribuie la îmbunătățirea calității aplicațiilor dvs., reducând în același
timp costuri, maximizând rentabilitatea și economisind timp de dezvoltare.
În Ingineria Software, Testarea aplicațiilor s e poate face în diverse categorii,
cum ar fi GUI, funcționalitate, bază de date (backend), test de încărcare etc.
Aplicațiile și produsele software au o serie de variații în ceea ce privește funcțiile pe
care le suportă, precum și procesele pe care le impl ementează. Așadar, Testarea
aplicației asigură că un anumit program sau o anumită aplicație funcționează corect.
Pentru a testa query -urile pe backend, am folosit PhpMyAdmin, ruland query –
urile in tab -ul SQL al tool -ului.

MAZILU LAVINIA FLORENTINA 51

Iar rezultat ul este mereu unul pozitiv.

Pentru urmatorul test am folosit Postman, care este un instrument excelent
atunci când încercați să testati API -urile RESTful făcute de alții sau să testați cele
pe care le -ați făcut singur. Oferă o interfață elegantă de utili zator cu ajutorul căreia
puteți face solicitări HTML, fără a obține dificultățile de a scrie o grămadă de cod
doar pentru a testa funcționalitatea unei API.

MAZILU LAVINIA FLORENTINA 52
Să zicem că am vrut să fac o solicitare GET împotriva unei API realizate de
fani pentru jocul video Hearthstone pentru a căuta cărți cu „archer” pe numele lor.
Dacă aș vrea să testez o solicitare GET împotriva acestei rute fără să folosesc
Postman – în schimb să scriu efectiv codul în ceva de genul Flask – ar trebui să scriu
o rută și o funcție co mplet nouă pentru a efectua solicitarea, atunci ar trebui să
specific cu mai mult Cod cum ar arăta răspunsul și, în sfârșit, ar trebui să tipăresc
răspunsul la consolă sau să ofer un alt mod de vizualizare efectivă a răspunsului.
Acordat, probabil că ar tr ebui să scriu toate acestea pentru a face o aplicație
funcțională folosind această API, dar a face toate acestea pentru a testa pur și simplu
funcționalitatea unei API este inutil de obositor și necesită mult timp atunci când
există ceva precum Postman.

Cu Postman, un astfel de test este mult mai eficient. Tot ce trebuie să fac este
să conectați ruta în bara de adrese, să selectați metoda de răspuns GET din caseta
derulantă la stânga ei, să dați cu tasta API în secțiunea „Anteturi”, să specific faptul
că vreau răspunsul în „destul de” JSON format, și apăsați trimite. Apoi, primesc
datele de răspuns în JSON ușor de citit cu un cod de stare de 200, confirmând că
solicitarea GET a avut succes. Este atat de simplu!

MAZILU LAVINIA FLORENTINA 53

Si cum ne -am obisnuit deja.. Succes!

In U nity testarea se face dupa fiecare modificare apasand butonul play si
urmarind consola. In cod putem folosii Debug.Log() sau Debug.LogError() pentru a
ne testa aplicatia.

MAZILU LAVINIA FLORENTINA 54

Capitolul 5

Concluzii

In aceast ă lucrare a fost prezentat procesul de creare a unui sistem care are ca
scop facilitarea potentialilor clienti in obtinerea de informați i,-prețuri, produse și
multe -altele , dar nu numai clientii brnrficiaza de aceasta facilitate, ci si vanzatorul
care primeste comanda finalizata fara a relationa cu clie ntul decat in cazuri speciale.
In concluzie, am reusit sa fac ceea ce imi doream: usurarea muncii
vanzatorului, cat si oferirea comoditatii clientului.
Acest proiect m-a ajutat să înțeleg procesul de dezvoltare a unei aplica ții
mobile android care con ține multiple componente și func ționali tăți. Am fost nevoit
să creez un server care expune un API REST și care de asemenea suport ă comunicare
în timp real și să fac conexiunea dintre acest server și aplica ție. În crearea at ât a
serverului c ât și a aplica ției am c ăpătat o înțelegere mai bun ă despre MVC și despre
importan ța acestuia într-un program.
Unity a fost ceva nou pentru mine, neavand nici o interactiune cu acesta
inainte de a incepe acest proiect. Acest lucru m -a facut sa imi maresc interesul de a
invata si alte tehnologii necunoscute pe viitor, sa nu raman blocata pe ceea ce stiu
deja.
Ca dezvoltare ulterioar ă as dori sa adaug mai multe informatii si oferte cum
ar fi: reduceri, gratuitati etc. pentru atragerea cat mai multor clienti sau facilitati cum
ar fi plata cu cardul . O alta devoltare ar fi marirea interactiunii clientului cu sistemul,
introducand sectiunea de feedback si rating la fiecare produs in parte.

MAZILU LAVINIA FLORENTINA 55

Bibliografie

[1] Imagine: https://developer.android.com/guide/platform/images/android -stack_2x.png

Similar Posts