Sisteme și Tehnologii Informatice Avansate [617283]

UNIVERSITATEA „LUCIAN BLAGA” DIN SIBIU

FACULTATEA DE
Ș
TIIN
Ț
E

Specializarea:

Sisteme și Tehnologii Informatice Avansate

LUCRARE DE DISERTAȚIE

Coordonator
ș
tiin
ț
ific

Prof.univ.dr. Dana Simian

Absolvent: [anonimizat]

2018

UNIVERSITATEA „LUCIAN BLAGA” DIN SIBIU

FACULTATEA DE
Ș
TIIN
Ț
E

Specializarea:

Sisteme și Tehnologii Informatice Avansate

Food Ordering Applications

System

Coordonator
ș
tiin
ț
ific

Prof.univ.dr. Dana Simian

Absolvent: [anonimizat]

2018

Abstract

1. Introducere

1.1 Contextul proiectului

1.1.1 Coduri de bare

1.1.2 Importan
ț
a informa
ț
iei

1.2 Ideea si scopul proiectului

1.3 Solutii existente in domeniul proiectului (state of the art)

2. Arhitectura aplica
ț
iei

2.1 Arhitectura serverului

2.2 Arhitectura clientului Android

3. Tehnologii folosite

3.1 Java

3.1.1 Limbajul de programare Java

3.1.2 Platforme de lucru Java

3.1.3 JDBC

3.2 Sistemul de operare Android

3.3 MySQL

3.4 Hibernate framework

3.5 Spring Framework

3.6 Maven

3.7 Servicii REST

4. Detalii de implementare

4.1 Aplica
ț
ia server

4.2 Aplica
ț
ia Android

5. Utilizarea Aplica
ț
iei

5.1 Descrierea Aplica
ț
iei

5.2 Scenarii de utilizare

6. Concluzii

7. Bibliografie

Abstract

Lucrarea
are
ca
scop
prezentarea
detaliilor
de
design
ș
i
implementare
a
proiectului

Food Ordering System.

Proiectul
Food
Ordering
System
este
destinat
comercian
ț
ilor
din
domeniul

restaurantelor
(în
special
de
tip
Fast-Food),
dar
ș
i
cumpărătorilor,
pentru
a
optimiza
procesul

de
preluare
a
comenzilor
de
către
comerciant
dar
ș
i
procesul
de
predare
a
comenzilor
de
către

cumpărător,
utilizând
cea
mai
uzuală
metodă
de
a
transfera
informa
ț
ii,
folosind

smartphone-uri.
Lucrarea
este
structurată
pe
capitole,
încercând
prin
aceasta

acopere

informa
ț
iile de bază privi nd ideea, arhitectura, tehnologiile, utilizarea, etc.

Primul
capitol
cuprinde
introducerea
în
sfera
proiectului,
oferind
informa
ț
ii
generale,

structurate
pe
subcapitole.
Primul
subcapitol
se
referă
la
încadrarea
proiectului
în
contextul

actual,
iar
prin
asta
se
explică
tiparul
de
consumatori
din
societate
pe
care
se
axează
sau

căreia
i
se
adresează.
Următorul
subcapitol
încadrează
ideea
de
la
care
a
plecat
proiectul
ș
i

care
este
motivul
sau
scopul
dezvoltării
acestuia.
Ultimul
subcapitol,
numit
“State
of
the
art”,

cuprinde
un
rezumat
al
cercetării
asupra
aplica
ț
iilor
existente
în
domeniul
în
care
se

încadrează
ș
i aplica
ț
ia Food Ordering System.

Al
doilea
capitol
con
ț
ine
prezentarea
arhitecturii
aplica
ț
iei.
Având
în
vedere

proiectul
Food
Ordering
System
este
compus
din
server,
aplica
ț
ie
Web
(destinată

comerciantului)
ș
i
aplica
ț
ie
Android
(destinată
comunită
ț
ii
de
cumpărători),
sunt
prezentate

fiecare
într-un
subcapitol
aferent.
Arhitectura
serverului
este
complexă
ș
i
dezvoltată
având

cuno
ș
tin
ț
e
despre
modul
în
care
se
creează
o
arhitectură
la
nivel
“enterprise”.
Pentru
aceasta

există
ș
i
diagrame
aferen te
pe
baza
cărora
a
fost
construit
sistemul
de
aplica
ț
ii.
Atât
pentru

aplica
ț
ia
Android,
cât
ș
i
pentru
aplica
ț
ia
Web,
s-a
ț
inut
cont
de
standardele
existente
în

domeniu.

Al
treilea
capitol
este
constituit
din
tehnologiile
studiate
ș
i
folosite
pentru
dezvoltarea

aplica
ț
iei,
descrise
succin t,
pentru
a
ajuta
cititorul

în
ț
eleagă
rolul
folosirii
lor
ș
i
pentru
a

crea
o
imagine
în
legătura
cu
modul
de
utilizare
a
lor.
Tehnologiile
folosite
sunt
gratuite
ș
i
se

încadrează
în
cele
mai
folosite
tehnologii
pentru
astfel
de
proiecte,
o
mare
parte
din
ele
fiind

sus
ț
inute de către comuni tatea programatorilor.

Al
patrulea
capitol
cuprinde
detaliile
de
implementare,
rela
ț
ia
dintre
cele
trei
aplica
ț
ii,

modul
în
care
ele
comunica
ș
i
modul
de
folosire
a
tehnologiilor
în
aplica
ț
ia
server
cât
ș
i
în

cele
două
aplica
ț
ii
clien t.
În
acest
capitol,
se
pot
găsi
ș
i
por
ț
iuni
de
cod
care
exemplifică

modul
de
folosire
a
tehnologiilor
în
dezvoltarea
aplica
ț
iilor
în
concordan
ț
ă
cu
standardele
de

dezvoltare actuale.

Al
cincilea
capitol
este
conceput
pentru
a
prezenta
aplica
ț
iile,
fiecare
având
un
mod

de
utilizare
specific,
fiind
interconectate
utilizând
aplica
ț
ia
server.
În
primul
subcapitol
se

descriu
aplica
ț
iile
utilizân d
pa
ș
ii
de
folosire,
iar
în
cel
de
al
doilea
capitol
se
explică
detaliat,

utilizând capturi de ecran din cadrul aplica
ț
iei.

Al
ș
aselea
capito l
este
dedicat
concluziilor
ș
i
elaborării
unor
dezvoltări
viitoare

precum
ș
i impactul realiz ării proiectului în dezvoltarea mea personală.

O
primă
formă
a
proiectului
Food
Ordering
System
a
fost
prezentată
la
Conferin
ț
a

interna
ț
ională
ICDD

“Imagination,
Creativity,
Design,
Development”
2018.
Prezentarea
a

primit multe răspunsuri pozitive, ceea ce contribuie la motiva
ț
ia dezvoltării în continuare [6].

Lucrarea
este
realizată
în
colaborare
cu
GSD
IT,
cu
ajutorul
căreia
o

devină
o

aplica
ț
ie
disponibilă
pe
“Google
Play”
iar
un
lan
ț
de
restaurante
de
tip
Fast-Food
urmează

o folosească în produc
ț
ie pentru a prelua
ș
i procesa comenzi.

1. Introducere

1.1 Contextul proiectului

Contextul
actual
este
reprezentat
de
nevoia
de
procesare
a
informa
ț
ilor
într-un
timp

cât
mai
scurt
posibil,
iar
aici
tehnologia
joacă
un
rol
esen
ț
ial.
Tehnologia
modernă
sprijină

această
nevoie,
iar
dispozitivele
mobile
reprezintă
probabil
exponentul
cel
mai
de
seamă
al

acestei
tehnologii.
Noile
telefoane,
dotate
cu
sisteme
de
operare
din
ce
în
ce
mai
avansate,

tind

con
ț
ină
o
parte
din
personalitatea
noastră:
agenda
telefonicã,
știri
de
ultimă
oră,

alarme,
contacte
cu
prietenii,
jocuri,
întâlniri
de
afaceri,
dieta,
orarul
tratamentului

medicamentos, etc.

Un
studiu
realizat
de
Huawei
împreună
cu
Ipsos,
conclude

79%
dintre
români

folosesc
smartphone-ul
înainte
de
culcare
pentru
a
citi
email-uri,
pentru
a-
ș
i
verifica
conturile

de
Social
Media
ș
i
mesa jele
primite,
în
timp
ce
64%
fac
acest
lucru
când
se
trezesc.
Acesta

este
unul
dintre
motivele
pentru
care
60%
din
români
î
ș
i
iau
telefoanele
când
se
pun
în
pat
ș
i

1 din 10 sau aproximativ 11% din ace
ș
tia, admit că dorm cu telefonul lângă ei [1].

Acela
ș
i
studiu
a
identificat

87%
dintre
români
au
nevoie
de
smartphone
pentru

trimiterea
mesajelor
text,

72%
folosesc
telefonul
pentru
surprinderea
fotografiilor
ș
i,

bineîn
ț
eles,

79%
utilizează
telefonul
pentru
verificarea
re
ț
elelor
Social
Media.
De

asemenea,
cercetarea
a
constatat

56%
dintre
responden
ț
i
recunosc

au
smartphone-urile

cu
ei
mai
mult
de
13
ore
pe
zi,
în
timp
ce
27%
folosesc
smartphone-ul
în
mod
activ
3-4

ore/zi.

Angajații
lucrează
zilnic,
în
cursul
săptămânii,
în
medie,
7:44
ore,
bărbații
cu
38
de

minute
mai
mult
decât
femeile,
iar
populația
are,
de
luni
până
vineri,
mai
puțin
timpul
liber

zilnic
cu
2:11
ore
față
de
zilele
de
odihnă,
potrivit
unui
studiu
realizat
de
Institutul
Național

de Statistică (INS) [2].

Având
aceste
studii
în
vedere,
observăm
ca
societatea
este
formată
din
foarte
multi

oameni
cu
profesii
tot
mai
solicitante,
pentru
care
timpul
este
un
element
important,
motiv

pentru
care,
aceasta
este
o
resursă
folosită
cu
în
ț
elepciune.
De
asemenea,
alimenta
ț
ia
are
o

relevan
ț
ă
mărită
în
activi tatea
de
zi
cu
zi
a
oamenilor.
Potrivit
cercetărilor,
un
număr
mare
de

oameni
fac
comenzi
telefonice
aproape
zilnic
pentru
a-
ș
i
asigura
alimenta
ț
ia.
În
general,

comenzile
telefonice
necesită
o
perioada
de
timp
relativ
mare,
în
special
dacă
comanda
este

complexă.
Pe
de
altă
parte,
intervalele
de
masă
fiind
în
general
comune
(prânz
sau
cină),

liniile
telefonice
pot
forma
o
coadă
de
apelan
ț
i,
lucru
care
este
deranjant
pentru
o
mare
parte
a

oamenilor, pentru care timpul este important.

În
consecin
ț
ă,
bazându-ne
pe
informa
ț
iile
de
mai
sus,
am
decis

înbunătă
ț
im
acest

sistem
de
predare
ș
i
gestionare
a
comenzilor
creând
o
aplica
ț
ie
mobilă
pentru
clien
ț
i
ș
i
o

aplica
ț
ie web pentru furn izori/restaurante.

Proiectul
prin
aplica
ț
ia
mobilă
(Android)
se
focusează
pe
o
varietate
de
consumatori.

Prive
ș
te
în
primul
rând
utilizatorii
din
mediul
urban,
având
în
vedere

mul
ț
i
lucrează
la

birou,
sunt
în
tranzit
sau
timpul
nu
permite
prepararea
alimenta
ț
iei,
această
aplica
ț
ie
oferind

posibilitatea
de
a
comanda
produse
de
la
un
anumit
lan
ț
de
restaurante
într-un
timp
optim
fără

nevoia de a sta la coadă sau a contacta telefonic restaurantul.

De
asemenea,
proiectul
(prin
aplica
ț
ia
web)
se
focusează
pe
proprietarii
de

restaurante,
optimizând
gestionarea
comenzilor,
creând
statistici
bazate
pe
comenzile

anterioare,
automatizând
oferte
pentru
clien
ț
ii
fideli
ș
i
pentru
a
putea
anticipa
numărul
de

comenzi în anumite intervale de timp.

1.2 Ideea si scopul proiectului

Ideea
proiectului
a
pornit
de
la
necesitatea
de
a
comanda
mâncare
de
tip
fast-food

pentru
un
număr
relativ
mare
de
oameni,
fiecare
dorindu-
ș
i
un
meniu
personalizat.
După

primele
comenzi,
s-a
constatat
o
pierdere
de
timp
relativ
mare
pentru
fiecare
comandă,
fapt
ce

a condus la ideea creerii unei aplica
ț
ii care sa u
ș
ureze predarea de comenzi.

Aplica
ț
ii
care
privesc
optimizarea
comenzilor
există
în
acest
moment
pe
pia
ț
ă
însă
se

adresează
unei
mase
mari
de
restaurante,
lucru
care
nu
permite
personalizarea
comenzilor

mari
sau
unele
restaurante
nu
existau
în
lista
oferită.
Scopul
acestui
proiect
este
e
a
crea
o

aplica
ț
ie de baza care, ult erior, să se personalizeze pentru câte un lan
ț
de restaurante.

De
asemenea,
scopul
prevede
o
gestionare
a
comenzilor
mult
mai
u
ș
oara
de
către

furnizor,
eliminând
apelurile
telefonice
ș
i
în
ț
elegerea
gre
ș
ită
a
comenzilor.
Având
un
sistem

de
fidelizare,
încrederea
în
gestionarea
comenzilor
mari
cre
ș
te
iar
periodic
se
pot
genera

rapoarte, promo
ț
ii pentru clien
ț
ii fideli
ș
i alte oferte.

Un
alt
scop
este
de
a
ajuta
consumatorii

vizualizeze
ș
i
în
acela
ș
i
timp

creeze

comanda,
ulterior
de
a
vedea
statusul
comenzii
în
timp
real,
toate
acestea
fiind
securizate.

Utilizatorul
are
acces
la
un
sistem
de
comunicare
scris
pe
fiecare
comandă,
pentru
a
avea

siguran
ț
a implementării, aceasta fiind favorizată printr-un modul de notificări.

Un
avantaj
al
acestei
aplica
ț
ii
este
posibilitatea
de
a
vedea
părerea
altor
utilizatori

despre
anumite
produse
sau
de
a
lăsa
comentarii
la
produse.
Acesta
constituie
un
mare

avantaj
având
în
vedere

părerea
altor
consumatori
poate
fi
ș
i
de
cele
mai
multe
ori
este
un

criteriu consistent în alegerea produselor.

1.3


Solutii existente in domeniul proiectului (state of the art)

Solu
ț
iile
existente
în
domeniu
se
pot
contura
sau
defini
printr-un
studiu
de
pia
ț
ă
care

ajută
crearea
unui
proiect
diferit,
original
sau
potrivit
standardelor
actuale
de
pe
pia
ț
ă.
Rolul

cercetării
este
de
a
cunoa
ș
te
dinamica
actuală
a
pie
ț
ei,
comportamentul
actorilor

(producătorilor/distribuitorilor) cât
ș
i tendin
ț
ele pe termen scurt, mediu
ș
i lung .

Studiul
pie
ț
ei
reprezintă
colectarea
informa
ț
iilor
de
pe
piată,
în
func
ț
ie
de
ce

informa
ț
ii
sunt
necesare ,
dezvoltatorul
abordează
cercetarea
privind
cererea,
oferta
sau

mediul
înconjurator
de
pe
pia
ț
a
respectivă
[13].
În
ceea
ce
prive
ș
te
oferta,
cercetarea
ar
trebui


ia
în
considerare
care
sunt
poten
ț
ialii
concuren
ț
i
de
pe
pia
ț
ă,
care
sunt
ofertele
lor
sau
care

este
politica
lor
comercială.
Pe
de
altă
parte,
este
importantă
cererea,
ea
poate
veni
din
partea

unor
firme
sau
din
partea
consumatorilor
(comunită
ț
ii).
Cunoa
ș
terea
cererii
înseamnă

se

ș
tie
care
este
publicul
la
care
dezvoltatorul
dore
ș
te

facă
referin
ț
ă
(vârsta,
sex,
segment,
stil

de
via
ț
ă,
venituri),
care
sunt
motiva
ț
iile
achizi
ț
ionării
unui
produs.
Al
treilea
factor
este,
în

unele
cazuri,
cel
mai
important
deoarece
cunoa
ș
terea
mediului
extern
este
un
factor
pentru
a

în
ț
elege
oportunită
ț
ile
ș
i
ocolirea
posibilelor
amenin
ț
ări.
Acesta
reprezintă
asigurarea

reglementăriile
(legi,
norme,etc.)
sunt
aplicate
corect,
influen
ț
a
situa
ț
iilor
economice,

influen
ț
a
factorilor
socia li
(presiuni
ecologice,
sindicale,
etc.)
sau
existen
ț
a
noilor
tehnologii

pentru produsul/produsele în cauză [11].

Studiul
de
pia
ț
ă
se
formează
prin
strângerea
ș
i
analizarea
informa
ț
iilor
referitoare
la

clien
ț
i,
competitori
ș
i
pia
ț
ă.
Un
studiu
de
pia
ț
ă
construit
în
manieră
profesională
constituie

funda
ț
ia
unui
plan
de
afaceri,
lansarea
unui
produs
sau
a
unui
serviciu,
etc.
Studiul
este

constituit
din
mai
multe
etape
[12]:
Prima
reprezintă
stabilirea
contextului
în
care
se

încadrează
proiectul
iar
aceasta
cere
în
mod
frecvent
o
reflec
ț
ie
în
prealabil,
înainte
de
a

elabora
proiectul
studiului.
În
cazul
proiectului
Food
Ordering
System,
contexul
se
rezumă
la

multitudinea
de
aplica
ț
ii
mobile
care
oferă
posibilitatea
de
a
comanda
anumite
produse
din

categoria restaurantelor
ș
i gestionarea comenzilor.

A
doua
etapă
se
referă
la
colectarea
informa
ț
iilor
disponibile
pe
site-urile
web,

aplica
ț
ii
mobile,
căr
ț
i,
etc.
Colectarea
informa
ț
iilor
presupune
o
aten
ț
ie
extinsă
având
în

vedere
pia
ț
a
vastă.
Avân d
în
vedere
contextul
proiectului,
s-au
abordat
diferite
surse,
precum

magazinul
de
aplica
ț
ii
disponibil
pe
sistemul
de
operare
Android
(Play
Store),
diferite
colec
ț
ii

sau
top-uri
(clasamente)
pentru
a
găsi
cele
mai
relevante
aplica
ț
ii
care
se
încadrează
în

context, iar rezultatul a fost unul favorabil, s-a găsit un număr relevant de aplica
ț
ii.

Următoarea
etapă
a
studiului
este
de
a
analiza
informa
ț
iile
găsite
în
amănunt,
de
a
crea

statistici,
chestionare
(dacă
este
cazul),
etc..
Analiza
se
construie
ș
te
din
perspectiva
de

producător
sau
creator
dar
ș
i
din
perspectiva
de
client,
ea
este
foarte
importantă
deoarece
este

important

i
se
ofere
clientului
ceea
ce
i
ș
i
dore
ș
te.
Analiza
aplica
ț
iilor
găsite
este
structurată

pe
două
ramuri:
Prima
ramură
este
construită
din
caracteristicile
aplica
ț
ilor,
func
ț
ionalită
ț
i

(avantaje)
existente
în
aplica
ț
ii
care
pot
deveni
noi
func
ț
ionalită
ț
i
în
aplica
ț
ia
Food
Ordering

System.
S-au
găsit
func
ț
ionalită
ț
i
precum
setarea
restaurantului
favorit
pentru
a
evita
anumi
ț
i

pa
ș
i,
op
ț
iunea
de
a
primi
notificări,
sau
posibilitatea
de
a
avea
un
sistem
de
mesagerie
pe

comandă
(petru
a
putea
avea
posibilitatea
de
a
schimba
anumite
detalii
pe
comanda.

Posibilitatea
de
a
da
un
rating
sau
de
a
face
un
review
(comentariu)
la
un
produs.
Unele

aplica
ț
ii
oferă
posibilitat ea
de
a
plăti
în
avans
folosind
un
card
bancar.
Analizând
aplica
ț
iile

selectate,
s-a
descoperit
unele
dezavantaje
la
unele
dintre
ele,
însa
unul
major
este
lipsa

informa
ț
iilor
despre
produse.
În
general
căutarea
s-a
efectuat
folosind
coduri
de
bare
de

produse
alimentare.
Un
alt
dezavantaj
îl
prezintă
accesibilitatea
îngreunată
de
reclame,
un

design
slab
sau
aveau
de
oferit
o
experien
ț
ă
utilizatorului
care
nu
este
predictivă,
fiind
greu

de folosit.

A
patra
etapă,
ultima,
constă
în
raportul
studiului
care
reflectă
analiza,
cu
avantaje
ș
i

dezavantaje.
În
general
aceste
rezultate
se
pot
prezenta
ș
i
oral,
având
rol
de
a
crea
o
discu
ț
ie

pe
baza
acestei
cercetări.
Luând
în
considerare
cele
prezentate
mai
sus,
pe
pia
ț
a
aplica
ț
iilor

mobile
ce
oferă
posibilitatea
comenzilor
produselor
de
tip
Fast-Food
ș
i
administrarea
lor,

exista
pu
ț
ine
(aplica
ț
ii)
care
satisfac
suficient
de
bine
consumat orii,
iar
acestea
se
adresează

unui număr mare de restaurante, personalizarea fiecărui restaurant fiind mai dificilă [13].

2. Arhitectura aplica
ț
iei

Food Ordering System este un sistem de aplica
ț
ii, împăr
ț
it trei aplica
ț
ii, una dintre ele

fiind
o
aplica
ț
ie
Android
destinată
comandării
de
produse,
în
cazul
de
fa
ț
ă,
comandarea
de

mâncare.
Următoarea
aplica
ț
ie
este
aplica
ț
ia
Web,
destinată
comerciantului,
care
utilizează

aplica
ț
ia
pentru
a
administra
comenzile
primite,
pentru
a
modifica
meniul,
sau
pentru
a

genera
oferte
în
func
ț
ie
de
numărul
comenzilor.
Pentru
a
crea
legătura
între
aceste
aplica
ț
ii,

a
fost
nevoie
de
crearea
unui
server,
unde
toată
informa
ț
ia
este
păstrată
într-o
bază
de
date

(Figura 2.1).

Aplica
ț
ia
Android
s-a
construit
pe
conceptul
arhitectural
personalizat
MVC

“Model-View-Controller”
care
a
fost
conceput
pentru
a
separa
interfa
ț
a,
logica
ș
i
informa
ț
iile.

De
asemenea,
aplica
ț
ie
Web
a
fost
creată
pe
conceptul
de
MVC,
urmând
ca
aplica
ț
ia
server

sa
fie
construită
pe
un
concept
de
“Layers”
prin
care
se
separă
serviciile
expuse
de
logică
ș
i

de persisten
ț
ă.

Figura 2.1

Interac
ț
iunea aplica
ț
iilor într-un întreg sistem

2.1 Arhitectura clientului Android

“Model
View
Controller”
sau
MVC
a
ș
a
cum
este
numit
popular,
este
un
model
de

design
software
pentru
dezvoltarea
de
aplica
ț
ii
web.
Un
MVC
este
alcătuit
din
următoarele

trei păr
ț
i:

1.
Modelul
reprezintă
partea
de
hard-programming,
partea
logică
a
aplica
ț
iei.
El

are
în
responsabilitate
ac
ț
iunile
ș
i
opera
ț
iile
asupra
datelor,
autentificarea

utilizatorilor,
integrarea
diverselor
clase
ce
permit
procesarea
informa
ț
iilor
din

diverse baze de date.

2.
View-ul
se
ocupă
de
afi
ș
area
datelor,
practic
această
parte
a
programului
va

avea
grijă
de
cum
vede
end-userul
informa
ț
ia
procesată
de
controller.
O
dată

ce
func
ț
iile
sunt
executate
de
model,
viewului
îi
sunt
oferite
rezultatele,
iar

acesta
le
va
trimite
către
browser.
În
general
viewul
este
o
mini-aplica
ț
ie
ce

ajută la randarea unor informa
ț
ii, având la baza diverse template-uri.

3.
Controller-ul
reprezintă
creierul
aplica
ț
iei.
Aceasta
face
legătura
între
model
ș
i

view,
între
ac
ț
iunile
userului
ș
i
partea
deciziona la
a
aplica
ț
iei.
În
func
ț
ie
de

nevoile
utilizatorului,
controllerul
apelează
diverse
func
ț
ii
definite
special

pentru
sec
ț
iunea
de
site
în
care
se
află
userul.
Func
ț
ia
se
va
folosi
de
model

pentru
a
prelucra
(extrage,
actualiza)
datele,
după
care
informa
ț
iile
noi
vor
fi

trimise către view, ce le va afi
ș
a apoi prin template-uri.

MVC
este
popular
deoarece
izolarea
logicii
aplica
ț
iei
de
pe
stratul
de
interfa
ț
ă

utilizator
ș
i
sus
ț
ine
separarea
preocupărilor.
Aici,
controlorul
prime
ș
te
toate
cererile
pentru

aplica
ț
ie
ș
i
apoi
lucrează
cu
modelul
pentru
a
pregăti
orice
date
necesare
vizualizării.

Vizualizarea
utilizează
apoi
datele
pregătite
de
controlor
pentru
a
genera
un
răspuns
final

prezentabil. Abstrac
ț
ia MVC este reprezentată grafic în Figura 2.1.1.


Figura 2.1.1

arhitectura de tip MVC

În
aplica
ț
ia
Andr oid,
interfe
ț
ele
sunt
reprezentate
prin
“Activities”
ș
i
“Fragments”,

moduri
prin
care
Java
reu
ș
e
ș
te

controleze
interfa
ț
a.
La
nivelul
“Controller”
se
folosesc

clase
care
cuprind
logica,
pentru
a
pregăti
datele
pentru
interfa
ț
ă.
De
la
nivelul
logicii
se

apelează serviciile care fac legătura într-e aplica
ț
ia Android
ș
i server.

În
stadiul
de
dezvoltare,
în
această
aplica
ț
ie
s-au
folosit
obiecte
con
ț
inând
date
de
test

“Mock
data”.
Din
punct
de
vedere
arhitectural,
s-au
folosit
“Interfaces”
(interfe
ț
e)
pentru
a

crea
un
contract
între
clasele
care
controlează
ceea
ce
se
afi
ș
ează
ș
i
clasele
ce
se
ocupă

livrarea
informa
ț
iilor,
în
asa
fel
încât

se
poată
schimba
implementarea
când
serverul
este

implementat.
Pe
baza
contractului,
ini
ț
ial
s-a
lucrat
cu
date
false,
obiecte
de
tip
“Mock”,

urmând ca acestea să fie schimbate odată cu dezvoltarea serviciilor de pe server.

Sistemul
de
operare
Android
oferă
posibilitatea
arhitecturală
de
a
crea
mai
multe

foldere
în
directorul
de
resurse
pentru
a
crea
anumite
configura
ț
ii,
în
func
ț
ie
de
regiunea
pe

care
e
setat
smartphone-ul.
În
acest
fel
s-a
permis
implementarea
unui
sistem
de

interna
ț
ionalizare
a
aplic a
ț
iei,
în
care
avem
un
fi
ș
ier
numit
“Strings.xml”
pentru
fiecare

limbă,
adaugat
în
directorul
specific,
numele
fiind
definit
de
Android,
de
exemplu
pentru
a

crea
un
director
pentru
România
avem
nevoie
ca
numele
directorului

fie
“values-ro”,

pentru
Germania
ar
trebui

se
numească
“values-de”.
Sistemul
a
fost
implementat
în
Food

Ordering System pentru trei limbi: Romană, engleză
ș
i germană.

Android
este
folosit
pe
mai
multe
tipuri
de
dispozitive,
de
la
smartphone,
la
tablete
ș
i

uneori
pe
TV.
Pentru
ca
aplica
ț
ia

se
adapteze
la
aceste
dispozitive,
Android
oferă

posibilitatea
de
a
folosi
fragmente,
care
reprezintă
bucă
ț
i
de
func
ț
ionalitate
din
interfa
ț
ă,
care

pot
fi
refolosite,
sau
aranjate
în
interfa
ț
ă
în
func
ț
ie
de
mărimea
ecranului.
În
aceea
ș
i
categorie

se
încadrează
ș
i
imaginil e
folosite
în
aplica
ț
ie,
care
se
pot
încărc a
foarte
greu
pe
dispozitive

cu
ecran
mic
ș
i
hardware
slab
în
cazul
în
care
imaginile
au
o
rezolu
ț
ie
prea
mare.
În
func
ț
ie

de
categoria
de
ecrane,
rezolu
ț
ia
imaginii
se
schimbă
ș
i
se
pune
în
directorul
corespunzător

ecranului.

2.2 Arhitectura clientului Web

Arhitectura clientului web este una de tip MVC deoarece reprezintă recomandarea

comunită
ț
ii programatori lor ce dezvoltă aplica
ț
ii utilizând Angular.


Figura 2.2.1

arhitectura de tip MVC [17]

2.3 Arhitectura serverului

Arhitectura serverului necesită adaptabilitate, scalabilitate, posibilitatea de a putea fi

refolosită în alte contexte, pentru a-i permite aplica
ț
iei să răspundă foarte repede la cereri. De

aceea, folosind servicii web, care creează legătura dintre aplica
ț
ia Web
ș
i aplica
ț
ia Android,

s-a creat un server pentru acumularea și gestionarea informațiilor. Serverul con
ț
ine un

serviciu web, care prin apeluri HTTP returnează un fișier cu informațiile aferente într-un

anume format, cele mai des utilizate sunt JSON și XML.

Serverul
este
creat
pe
baza
unei
arhitecturi
care
respectă
standardele
de
tip
enterprise,

aceasta
presupune
împărțirea
funcționalităților
fără
a
depinde
direct
una
de
cealaltă,
pentru

aceasta folosindu-se interfe
ț
e, în caz contrar ar exista erori de compilare.

Arhitectura
aplica
ț
iei
este
structurată
în
patru
straturi
diferita,
după
cum
vedem
în

Figura
2.1:
stratul
de
servicii,
stratul
de
func
ț
ionalitate,
stratul
de
persisten
ț
ă
ș
i
stratul

elementelor comune.

Pachetul
de
servicii
presupune
expunerea
unor
servicii
care
sunt
apelate
de
clien
ț
i

pentru
a
salva
informa
ț
ii
sau
pentru
a
prelua
informa
ț
ii
din
baza
de
date.
Acest
pachet
include

interfe
ț
e
pentru
comunica re.
Aici
se
implementează
securitatea
serverului,
ea
fiind
constinuită

din
autentificare
ș
i
autor izare.
Autentificarea
se
folose
ș
te
atunci
când
un
client
accesează

pentru
prima
data
serverul
prin
servicii
web,
încercând

creeze
o
sesiune.
Autorizarea
în

schimb,
se
execută
la
fiecare
cerere
a
unui
client
ș
i
verifică
dacă
clientul
are
acces
la
acea

cerere
(request).
În
pachetul
de
servicii
există
o
parte
de
validare
care
verifică
parametrii
de

intrare a serviciilor.

Al
doilea
strat
al
arhitecturii
este
locul
în
care
se
implementează
logica,
locul
de

decizie,
în
care
se
decide
unde
se
livrează
informa
ț
ia
sau
de
unde
se
preia.
Acest
strat
este

locul
unde
se
fac
validări,
apeluri
succesive
către
stratul
de
persisten
ț
ă
sau
alte
servicii

externe, totul pentru a crea un răspunsul cerut prin servicii.

Al
treilea
strat
al
arhitecturii
este
reprezentat
de
partea
de
date
sau
informații
(mai

fiind
numit
ș
i
stratul
de
persisten
ț
ă).
Prima
componentă
al
acestu i
strat
este
definită
de
entități

care
au
rolul
de
a
memora
pentru
o
perioadă
scurtă
de
timp
informații.
Aceste
entități
sunt

defapt
niște
obiecte
cărora
le
sunt
însușite
proprietăți,
în
general
private,
care
se
pot
accesa

prin
metode
specifice
(setter/getter).
Fiecare
entitate
reprezintă
o
tabelă
din
baza
de
date,

aceasta
reprezentând
conceptul
de
“ORM

Object
Relational
Mapping”.
Entitățile
sunt

folosite
de
următoarea
componentă
a
acestei
părți,
de
componentele
de
accesare
a
datelor

(Data
Access
Object).
Într-o
bază
de
date,
informațiile
din
entități
se
salvează
prin
crearea

unei
cereri
(query)
care
conține
fiecare
coloană
și
proprietățiile
entităților.
Folosind

Hibernate,
se
specifică
doar
entitatea
care
trebuie
salvată
sau
referința
pentru
entitatea
care
se

caută
iar
Hibernate
face
totul
în
locul
dezvoltatorului.
Pe
lângă
entități
și
obiectele
de

accesare a datelor mai avem și “Data Helpers” care ne ajută la convertirea obiectelor.

Figura 2.3.1

Arhitectura serverului

Toate
cele
trei
straturi
sunt
din
punct
de
vedere
arhitectural
independente,
însă
au
ș
i

elemente
comune,
elemente
care
se
folosesc
în
fiecare
fără
a
crea
dependen
ț
ă
între
celalalte

ramuri, aceasta este cunoscută
ș
i sub denumirea de “Cross Cutting” într-un mod personalizat.

Unul
din
elementele
“Cross-Cutting”
este
sistemul
de
excep
ț
ii,
care
este
folosit
pentru
a

genera
ș
i
transporta
mesa je
de
eroare
de
la
cel
mai
jos
strat,
cel
de
persisten
ț
ă,
pânâ
la
cel
mai

înalt
strat,
cel
de
servicii,
urmând

fie
interpretat
ș
i
transmis
către
client.
Acest
sistem
de

excep
ț
ii,
poate
fi
folosit
într-un
mod
care
ajută
la
interna
ț
ionalizarea
mesajelor
de
eroare.

Pentru
a
folosi
un
sistem
de
interna
ț
ionalizare
a
mesajelor
de
eroare
folosind
excep
ț
iile,
este

nevoie
de
un
fi
ș
ier
de
tip
proprietă
ț
i
în
care

ț
inem
sub
forma
cheie-valoare,
numele
clasei

excep
ț
iei
ș
i
un
cod
de
eroare,
urmând

se
creeze
fi
ș
iere
de
mesaje,
care
con
ț
in
tot
sub
forma

cheie-valoare
codul
de
eroare
ș
i
mesajul
în
func
ț
ie
de
limba
fi
ș
ierului.
Folosind
aceste
două

fi
ș
iere
de
proprietă
ț
i,
se
poate
crea
un
obiect
care

interpretez e
fi
ș
ierele,
iar
dacă
clasa
de

excep
ț
ie
este
gasită
în
primul
fi
ș
ier,
atunci
se
ia
codul
de
eroare
urmând

fie
căutat
în

fi
ș
ierul corespunzător reg iunii cererii (requestului).


Figura 2.3.2

Obiect de transfer date (DTO)

Modelul
de
date
este
complex,
însă
în
cazul
nostru
se
folosește
pentru
a
crea
obiecte

care
înșusesc
proprietăți
ale
entităților
pe
care
le
folosim
pentru
transferul
de
date,
aceste

obiecte
mai
poartă
sufixul
de
DTO
(Data
Transfer
Object).
Obiectele
de
transfer
sunt
create

pentru
a
încapsula
date
care
ulterior
sunt
trimise
altor
module/sub-sisteme
ale
aplicației.

Atunci
când
se
lucrează
cu
o
interfa
ț
ă
de
la
distan
ț
ă
pentru
a
accesa
date,
fiecare
apel
este

costisitor.
Ca
și
rezultat
trebuie
scăzut
numărul
de
apeluri.
După
cum
putem
vedea
în
Figura

2.3.1,
un
mod
de
a
scădea
numărul
de
apeluri,
este
de
a
trimite
obiecte
compuse.
În
partea

dreaptă
avem
două
obiecte
în
relație.
Pentru
a
scădea
numărul
de
obiecte,
doar
pentru

transfer,
s-a
creat
un
obiect
care
conține
proprietățile
amândurora.
Diferența
dintre
obiectele

de
transfer
(DTO)
și
obiectele
de
acces
(DAO)
sau
obiectele
care
administrează
aplicația

constă
în
compoziția
lor,
obiectele
de
transfer
conțin
doar
proprietăți
cu
accesori,
fără
metode

care
necesită
testare,
pe
când
celelalte
tipuri
de
obiecte
cum
ar
fi
cele
de
acces
trebuie

fie

testate.

Logarea
este
comună
tuturor
straturilor
arhitecturii,
fiind
utilizată
pentru
stocarea

erorilor
și
a
informațiilor
importante
într-o
ordine
cronologică.
Sistemul
de
logare
a
erorilor

este
important
pentru
dezvoltarea
continuă
a
aplicației.
În
cazul
aplicațiilor
care
implică
mai

multe fire de execuție, logarea ajută la identificarea problemelor.

Ultima
parte
a
elementelor
comune,
numit
“utilities”,
după
cum
putem
vedea
în

Figura
2.3.1,
cuprinde
și
alte
eventuale
nevoi
care
se
folosesc
în
cel
puțin
două
părți
din

arhitectura
serverului.
Un
exemplu
de
clasă
utilitară
ar
putea
fi
o
clasa
statică
de
constante

care
se
definesc
ca
și
câmpuri
publice,
statice
ș
i
finale,
pe
care
le
folosim
fără
a
crea
un

obiect.
Un
alt
exemplu
de
utilitate
ar
putea
fi
conversia
de
date,
de
exemplu
dintr-o
dată

într-un șir de caractere.

3. Tehnologii folosite

3.1 Limbajul de programare Java

Java
este
un
limbaj
de
programare
ș
i
o
platformă
de
calcul
lansată
ini
ț
ial
de
Sun

Microsystems
în
1995.
Există
o
mul
ț
ime
de
aplica
ț
ii
ș
i
site-uri
web
care
nu
vor
func
ț
iona

decât
dacă
ave
ț
i
instalat
Java
ș
i
din
ce
în
ce
mai
multe
sunt
create
în
fiecare
zi.
Java
este
un

limbaj
rapid,
sigur
ș
i
fiabil.
De
la
laptopuri
la
centre
de
date,
console
de
jocuri
la

supercomputere
ș
tiin
ț
ifice, telefoane mobile la Internet [5].

Este
dificil

relatăm
un
singur
motiv
pentru
care
limbajul
de
programare
Java
a

devenit
omniprezent.
Cu
toate
acestea,
caracteristicile
majore
ale
limbajului
au
jucat
toate
un

rol în succesul său, incluzând următoarele componente:

Programele
create
în
Java
oferă
o
portabilitate
într-o
re
ț
ea.
Codul
sursă
este
compilat

în
ceea
ce
Java
nume
ș
te
bytecode,
care
poate
fi
rulat
oriunde
într-o
re
ț
ea
dintr-un
server
sau

client
care
are
o
ma
ș
ină
virtuală
Java
(JVM).
JVM
interpretează
codul
bytecode
în
cod
care

va
rula
pe
hardware-ul
computerului.
În
schimb,
majoritatea
limbajelor
de
programare,
cum

ar
fi
COBOL,
C
++,
Visual
Basic
sau
Smalltalk,
compilează
codul
într-un
fi
ș
ier
binar.

Fi
ș
ierele
binare
sunt
specifice
platformei,
astfel
încât
un
program
scris
pentru
o
ma
ș
ină

Windows
bazată
pe
Windows
nu
poate
rula
un
Mac,
o
ma
ș
ină
bazată
pe
Linux
sau
o

mainframe
IBM.
JVM
include
un
compilator
op
ț
ional
la
jumătatea
perioadei
(JIT)
care

compilează
dinamic
codul
bytecode
în
cod
executabil
ca
alternativă
la
interpretarea
câte
unei

instruc
ț
iuni
bytecode
la
un
moment
dat.
În
multe
cazuri,
compila
ț
ia
dinamică
JIT
este
mai

rapidă decât interpretarea ma
ș
inii virtuale [4].

Codul
este
robust.
Spre
deosebire
de
programele
scrise
în
C
++
ș
i
în
alte
limbi,

obiectele
Java
nu
con
ț
in
referin
ț
e
la
date
externe
pentru
ele
sau
alte
obiecte
cunoscute.
Acest

lucru
asigură
faptul

o
instruc
ț
iune
nu
poate
con
ț
ine
adresa
de
stocare
a
datelor
într-o
altă

aplica
ț
ie
sau
în
sistemul
de
operare
în
sine,
oricare
ar
determina
încetarea
sau
prăbu
ș
irea

programului
ș
i,
eventual,
a
sistemului
de
operare.
JVM
face
o
serie
de
verificări
pe
fiecare

obiect pentru a asigura integritatea [13].

Java
este
orientat
pe
obiecte.
Un
obiect
poate
profita
de
faptul

face
parte
dintr-o

clasă
de
obiecte
ș
i
de
a
mo
ș
teni
un
cod
comun
pentru
clasă.
Obiectele
sunt
considerate
ca

"substantive"
pe
care
un
utilizator
le-ar
putea
referi
mai
degrabă
decât
"verbele"
tradi
ț
ionale

procedurale.
O
metodă
poate
fi
considerată
ca
fiind
una
dintre
capabilită
ț
ile
sau

comportamentele
obiectului.
Orientarea
spre
obiect
este
relativ
obi
ș
nuită
în
peisajul
de

programare
de
astăzi,
dar
încă
din
1996,
doar
o
mână
de
limbi
implementează
în
mod
eficient

concepte
orientate
pe
obiecte
ș
i
modele
de
design.
Abilitatea
de
a
se
dezvolta
ca
un
limbaj

creat
de
la
început
orientat
obiect,
a
făcut
ca
Java

devină
o
platformă
interesantă
pe
care

se programeze.

Un
applet
oferă
flexibilitate.
Pe
lângă
faptul

este
executat
pe
client
mai
degrabă

decât pe server, un applet Java are alte caracteristici proiectate pentru a face să ruleze rapid.

Dezvoltatorii
pot
învă
ț
a
Java
rapid.
Cu
sintaxa
similară
cu
C
++,
Java
este
relativ
u
ș
or

de învă
ț
at, mai ales pentr u cei cu fundal în C.

O
concep
ț
ie
gre
ș
ită
este

există
o
asociere
între
Java
ș
i
JavaScript.
Cele
două
limbi

împărtă
ș
esc asemănări în sintaxă, dar, altfel, sunt două construc
ț
ii foarte diferite.

Există trei platforme-cheie pe care programatorii dezvoltă aplica
ț
ii Java:


Java
SE.
Aplica
ț
iile
simple,
independente,
sunt
dezvoltate
folosind
Java

Standard
Edition.
Fost
cunoscut
sub
numele
de
J2SE,
Java
SE
oferă
toate

API-urile necesare dezvoltării aplica
ț
iilor desktop tradi
ț
ionale.


Java
EE.
Java
Enterprise
Edition,
cunoscut
anterior
ca
J2EE,
oferă

posibilitatea
de
a
crea
componente
pe
partea
de
server
care
pot
răspunde
la
o

cerere
pe
bază
de
solicitare
web.
Acest
aranjament
permite
crearea
de

programe
Java
care
pot
interac
ț
iona
cu
clien
ț
i
baza
ț
i
pe
internet,
inclusiv

browsere
web,
clien
ț
i
baza
ț
i
pe
CORBA
ș
i
chiar
servicii
web
bazate
pe
REST

ș
i SOAP.


Java
ME.
Java
oferă,
de
asemenea,
o
platformă
u
ș
oară
pentru
dezvoltarea

mobilă
cunoscută
sub
numele
de
Java
Micro
Edition,
cunoscută
anterior
ca

J2ME.
Java
ME
sa
dovedit
a
fi
o
platformă
foarte
populară
pentru
dezvoltarea

dispozitivelor
încorporate,
dar
sa
străduit

ob
ț
ină
trac
ț
iune
în
arena
de

dezvoltare
a
smartphone-urilor.
În
ceea
ce
prive
ș
te
dezvoltarea

smartphone-urilor, Android a devenit platforma de dezvoltare mobilă.

Folosind
diferitele
componente
furnizate
de
Java
EE,
este
u
ș
or
pentru
dezvoltatori

scrie
programe
care
folosesc
modele
de
design
populare
de
software
ș
i
convenite
în
mod

universal asupra celor mai bune practici.

De
exemplu,
framework-urile
Struts,
Spring
ș
i
JavaServer
Faces
utilizează
un
servlet

Java
pentru
a
implementa
modelul
de
design
al
controlerului
frontal
pentru
centralizarea

cererilor.

Între
timp,
o
mare
parte
a
ecosistemului
Java
este
o
mare
varietate
de
proiecte
open

source,
platforme
software
ș
i
API
pe
care
comunitatea
le-a
construit
folosind
limba.
De

exemplu,
Funda
ț
ia
Apac he
găzduie
ș
te
o
varietate
de
proiecte
scrise
folosind
Java,
printre

care:


Cadre simple de înregistrare pentru Java (SLF4J).


Cadre mari de procesare a datelor, cum ar fi Fire
ș
i Hadoop.


Platforme
de
integrare
precum
Apache
Camel,
Axa
Apache
ș
i
CXF
pentru

dezvoltarea de servicii web RESTful.


Platforme de dezvoltare de micro-servicii.

Mai
multe
întreprinderi
vor
încerca

transforme
mediile
Java
EE
în
cloud.
Pe

măsură
ce
dezvoltatorii
Java
creează
servicii
de
cloud
Java,
abilitatea
de
a
scala
rapid
aceste

servicii este o preocupare majoră, precum capacitatea de a colabora în cloud.

3.2 Sistemul de operare Android

Android
este
un
sistem
de
operare
mobil
dezvoltat
de
Google,
bazat
pe
o
versiune

modificată
a
kernel-ului
Linux
ș
i
a
altor
produse
software
open
source
ș
i
conceput
în
primul

rând
pentru
dispozitive
mobile
dotate
cu
“touchscreen”,
cum
ar
fi
smartphone-uri
ș
i
tablete.

În
plus,
Google
a
dezvoltat
în
continuare
Android
TV
pentru
televizoare,
Android
Auto

pentru
ma
ș
ini
ș
i
Wear
OS
pentru
ceasuri
de
mână,
fiecare
cu
o
interfa
ț
ă
de
utilizator

specializată.
Variantele
de
Android
sunt
de
asemenea
folosite
pe
console
de
jocuri,
camere

digitale, PC-uri
ș
i alte pro duse electronice [18].

Ini
ț
ial
dezvoltat
de
Android
Inc.,
pe
care
Google
la
cumpărat
în
2005,
Android
a
fost

lansat
în
2007,
cu
primul
dispozitiv
comercial
Android
lansat
în
septembrie
2008.
Sistemul

de
operare
a
trecut
de
atunci
prin
mai
multe
versiuni
importante,
versiunea
curentă
fiind
de

8.1
"Oreo"
,
lansat
în
decembrie
2017.
Codul
sursă
de
bază
Android
este
cunoscut
sub

numele
de
Android
Open
Source
Project
(AOSP)
ș
i
este
licen
ț
iat
în
principal
sub
licen
ț
a

Apache.

Android
este,
de
asemenea,
asociat
cu
o
multitudine
de
produse
software
dezvoltate

de
Google,
inclusiv
aplica
ț
ii
de
bază
pentru
servicii
precum
Gmail
ș
i
“Google
Search“,

precum
ș
i
magazinul
de
aplica
ț
ii
ș
i
platforma
de
distribu
ț
ie
digitală
Google
Play
ș
i
platforma

de
dezvoltare
asociată.
Aceste
aplica
ț
ii
sunt
licen
ț
iate
de
producătorii
de
dispozitive
Android

certificate
conform
standardelor
impuse
de
Google,
dar
AOSP
a
fost
folosit
ca
bază
pentru

ecosistemele
Android
concurente,
cum
ar
fi
Fire
OS
Amazon.com,
care
utilizează
propriile

lor echivalente cu Google Mobile Services.

Android
a
fost
cel
mai
bine
vândut
sistem
de
operare
din
întreaga
lume
pe

smartphone-uri
începând
din
2011
ș
i
pe
tablete
începând
cu
2013.
În
mai
2017,
are
peste

două
miliarde
utilizatori
activi
lunar,
cea
mai
mare
bază
instalată
a
oricărui
sistem
de
operare,

iar începând din 2017, Google Play magazin caracteristici peste 3,5 milioane de aplica
ț
ii.

Prima
versiune
comercială
de
Android,
1.5,
a
intrat
pe
pia
ț
ă
în
Aprilie
2009
sub

numele
Cupcake.
Toate
versiunile
de
Android,
de
altfel,
au
nume
de
cod
inspirate
după

diverse
deserturi
sau
dulciuri.
A
urmat
o
accelerare
a
dezvoltării,
fiind
lansată
următoarea

versiune
majoră,
2.1
Éclair,
înainte
de
finalul
aceluia
ș
i
an.
Primele
versiuni
cu
adevărat

mature
ș
i
cu
impact
semn ificativ
în
cadrul
comunită
ț
ii
de
dezvoltatori
au
fost
lansate
în
2010,

în mai (2.2 Froyo), respectiv decembrie (2.3 Gingerbread).

În
2011,
odată
cu
confirmarea
tabletelor
ca
pia
ț
ă
importantă
ș
i
cu
potential
pentru

tehnologia
mobile,
Google
a
lansat
versiunea
3.1
Honeycomb
a
sistemului
de
operare,

orientată
însă
exclusiv
spre
acestea.
Odată
cu
această
lansare
a
avut
loc
ș
i
o
puternică

consolidare
ș
i
unificare
a
serviciilor
din
zona
de
consumer
caracterizată
în
principal
prin

accentul
pus
pe
user
experience
cât
ș
i
pe
puternica
integrare
a
serviciilor
(GMail,
Search,

Calendar, etc.).

Honeycomb
a
fost
mai
mult
o
versiune
de
sacrificiu,
fiind
adoptată
doar
pe
un
număr

mic
de
tablete
care
au
pionierat
intrarea
Android
pe
acea
pia
ț
ă.
Cota
nu
a
depă
ș
it
2%.

Răspunsul
la
noua
versiune
a
fost
însă
foarte
pozitiv,
iar,
în
decembrie
2011,
Google

introduce
versiunea
4.0
Ice
Cream
Sandwich.
Această
versiune
aduce
împreună
versiunile

pentru
telefoane
ș
i
pentru
tablete,
unificând
în
acela
ș
i
timp
interfa
ț
a
grafică,
conferindu-i
un

stil aparte
ș
i o identitate p roprie.

În
topul
pe
luna
ianuarie
2018,
Android
Marshmallow
(versiunea
6.0)
rămâne
pe

primul
loc
fiind
instalat
pe
28,6%
din
dispozitivele
active.
Locul
doi
este
ocupat
de
Nougat

(versiunea
7.0),
versiunea
precedentă,
cu
26,3%
din
piață,
o
veste
bună,
având
în
vedere

și

adopția
sa
a
fost
destul
de
înceată
anul
trecut.
Locul
trei
este
însă
ocupat
de
Lollipop

(versiunea
5.0)
cu
25,1
%
din
total.
Având
în
vedere

aceste
trei
variante
sunt
și
cele
mai

recente
înainte
de
Oreo,
iar
fiecare
are
cam
un
sfert
din
total,
Am
ajuns
într-un
punct
în
care

platforma
Android
chiar
se
poate
lăuda

este
destul
de
modernă
în
comparație
cu
anii

precedenți, când Android KitKat era la putere [23].

Odată
cu
versiunea
5,
Android
a
adus
no
ț
iunea
de
aspect
material
“Material
design”,

care a schimbat masiv aspectul aplica
ț
iilor.

Platforma
acaparează
tot
mai
mult
din
pia
ț
a
de
terminale
mobile,
în
special
datorită

politicii
mult
mai
permisive
decât
cea
a
lui
Apple.
Android
este
prezent
în
peste
30%
din

terminalele
mobile
de
pe
pia
ț
a
globală
fiind
cel
mai
răspândit
sistem
de
operare
mobil.
Faptul


Android
are
până
în
prezent
8
versiuni
majore,
a
dus
la
fragmentarea
cotei
de
pia
ț
ă.
Totu
ș
i

doar
două
versiuni
ocupă
o
cota
semnificativă,
restul
fiind
destul
de
neglijabile
ca
pondere.

Astfel, cele mai răspândite versiuni sunt 6 cu 28.6%
ș
i 7 cu 26.3%.

Ca
orice
altă
platformă
de
dezvoltare,
Android
este
alcătuit
din
mai
multe
straturi,

fiecare reprezentând o func
ț
ie specifică
ș
i având responsabilită
ț
i clare. Acestea sunt:

Aplica
ț
iile
reprez entate
în
Figura
3.2.1,
sunt
reprezentate
prin
aplica
ț
iile
care
se
pot

găsi pe magazinul de aplica
ț
ii de pe sistemul Android.

Cadrul
de
aplica
ț
ii
reprezintă
o
parte
puternic
integrată
a
platformei
ș
i
a
SDK-ului
ș
i

oferă o serie de API-uri pentru interac
ț
iunea high-level cu sistemul de operare.

Librăriile
necesare,
așa
cum
sugerează
ș
i
numele,
aceasta
este
o
colec
ț
ie
de

componente
care
fac
legătura
dintre
sistemul
de
operare
ș
i
aplica
ț
ii.
Aici
sunt
con
ț
inute

func
ț
ii, cum ar fi stocarea de date, engine-ul grafic
ș
i altele.

Baza
este
reprezentată
de
sistemul
de
operare
care
este
bazat
pe
Linux
ș
i
se
comportă

exact ca
ș
i omologul de p e desktop.

Figura 3.2.1

Interac
ț
iunea dintre aplica
ț
ii
ș
i sistemul de operare Android

În
cadrul
aplica
ț
iei
noastre,
s-a
folosit
acest
sistem
de
operare
pentru
aplica
ț
ia
client

deoarece
este
cel
mai
răspândit,
este
gratuit,
permisiv
din
punct
de
vedere
al
dezvoltării,
în

compara
ț
ie
cu
dezvoltare a
de
aplica
ț
ii
pentru
Apple,
următorul
pe
lista
utilizării
telefoanelor

inteligente.
Pentru
aplica
ț
ia
Android
s-a
pornit
de
la
versiunea
5
ca
versiune
minimă,
cu

posibilitatea
de
a
o
adapta
ș
i
pentru
versiunea
4.
S-a
ales
versiunea
5
deoarece
a
fost
cea
care

a
adus
un
plus
considerabil
în
design,
iar
în
momentul
demarării
proiectului,
a
fost
versiunea

ce mai folosită de către utilizatori.

3.3 MySQL

MySQL
este
un
sistem
de
gestiune
a
bazelor
de
date
rela
ț
ionale,
produs
de
compania

suedeză
MySQL
AB
ș
i
distribuit
sub
Licen
ț
a
Publică
Generală
GNU.
Este
cel
mai
popular

sistem
de
gestiune
a
bazelor
de
date,
cu
sursele
disponibile
pe
internet
la
ora
actuală,
fiind
o

componentă cheie a stivei LAMP (Linux, Apache, MySQL, PHP) [8].

O
bază
de
date
este
o
colec
ț
ie
structurată
de
date.
Poate

fie
de
la
o
listă
simplă
de

cumpărături
până
la
o
galerie
de
imagini
sau
cantitatea
mare
de
informa
ț
ii
dintr-o
re
ț
ea

corporativă.
Pentru
a
adăuga,
a
accesa
ș
i
a
procesa
date
stocate
într-o
bază
de
date

computerizată,
ave
ț
i
nevoie
de
un
sistem
de
gestionare
a
bazelor
de
date,
cum
ar
fi
serverul

MySQL.
Deoarece
calculatoarele
sunt
foarte
bune
la
manipularea
unor
cantită
ț
i
mari
de
date,

sistemele
de
gestionare
a
bazelor
de
date
joacă
un
rol
central
în
calcul,
ca
utilită
ț
i
de
sine

stătătoare sau ca păr
ț
i ale altor aplica
ț
ii [24].

O
bază
de
date
rela
ț
ională
stochează
datele
în
tabele
separate,
în
loc

pună
toate

datele
într-un
depozit
mare.
Structurile
bazei
de
date
sunt
organizate
în
fi
ș
iere
fizice

optimizate
pentru
viteză.
Modelul
logic,
cu
obiecte
precum
baze
de
date,
tabele,
vizualizări,

rânduri
ș
i
coloane,
oferă
un
mediu
de
programare
flexibil.
Se
pot
stabili
reguli
care

reglementează
rela
ț
iile
dintre
diferitele
câmpuri
de
date,
cum
ar
fi
unu-la-unu,
unul-la-multe,

unic,
necesar
sau
op
ț
ional
ș
i
"
indicii
"
între
diferite
tabele.
Baza
de
date
aplică
aceste
reguli,

astfel
încât,
cu
o
bază
de
date
bine
concepută,
aplica
ț
ia
dvs.
nu
vede
niciodată
date

inconsistente, duplicate, singure, depă
ș
ite sau lipsite de date.

Partea
SQL
a
"MySQL"
înseamnă
"Language
Structured
Query".
SQL
este
cea
mai

comună
limbă
standardizată
folosită
pentru
a
accesa
bazele
de
date.
În
func
ț
ie
de
mediul
dvs.

de
programare,
este
posibil

introduce
ț
i
direct
SQL
(de
exemplu,
pentru
a
genera
rapoarte),


încorpora
ț
i
instruc
ț
iunile
SQL
în
cod
scrise
într-o
altă
limbă
sau

utiliza
ț
i
un
API
specific

limbajului
care
ascunde
sintaxa
SQL,
în
cazul
aplica
ț
iei
noastre,
un
exemplu
bun
este

utilizarea
Hibernate
care
permite
scrierea
cererilor
către
baza
de
date
într-un
limbaj
generic

care permite schimbarea bazei de date fără a fi necesară adaptarea cererilor (queries).

SQL
este
definit
de
standardul
ANSI
/
ISO
SQL.
Standardul
SQL
a
evoluat
din
1986

ș
i
există
mai
multe
versiu ni.
În
acest
manual,
"SQL-92"
se
referă
la
standardul
lansat
în
1992,

"SQL:
1999"
se
referă
la
standardul
lansat
în
1999,
iar
"SQL:
2003"
se
referă
la
versiunea

curentă
a
standardului.
Folosim
expresia
"standardul
SQL"
pentru
a
însemna
oricând

versiunea curentă a standardului SQL.

“Open
Source”
înseamnă

este
posibil
ca
oricine

utilizeze
ș
i

modifice
codul

sursă.
Oricine
poate
descărca
codul
MySQL
de
pe
Internet
ș
i
îl
poate
folosi
fără

plătească

nimic.
Dacă
dori
ț
i,
pute
ț
i

studia
ț
i
codul
sursă
ș
i

îl
modifica
ț
i
în
func
ț
ie
de
nevoile
dvs.

Aplica
ț
ia
MySQL
folose
ș
te
GPL
(GNU
General
Public
License) ,
pentru
a
defini
ceea
ce
este

posibil
ș
i nu se poate face cu software-ul în situa
ț
ii diferite

Serverul
MySQL
a
fost
dezvoltat
ini
ț
ial
pentru
a
gestiona
bazele
de
date
mari
mult

mai
repede
decât
solu
ț
iile
existente
ș
i
a
fost
utilizat
cu
succes
în
medii
de
produc
ț
ie
extrem
de

exigente
timp
de
mai
mul
ț
i
ani.
De
ș
i
în
curs
de
dezvoltare,
MySQ L
Server
oferă
astăzi
un
set

bogat
ș
i
util
de
func
ț
ii.
Conectivitatea,
viteza
ș
i
securitatea
fac
MySQL
Server
foarte
potrivit

pentru accesarea bazelor de date pe Internet.

3.4 Hibernate framework

Lucrul cu software orientat obiect
ș
i baze de date rela
ț
ionale poate fi time-consuming

ș
i poate cauza diverse ero ri datorită diferen
ț
elor dintre reprezentarea datelor în baza de date
ș
i

modelarea lor în obiecte.

Hibernate este o biblioteca ORM()Object-Relational Mapping) pentru limbajul Java, utilă

pentru maparea modelului orientat pe obiecte pe bazele de date rela
ț
ionale. Principalul atu al

acestei librării este faptul că oferă o solu
ț
ie rapidă, de înaltă performan
ț
ă, independentă de

tipul bazei de date folosite pentru modelarea obiectelor unei baze rela
ț
ionale.

Aceasta tehnologie este free si open source, distribuita sub licenta GNU Lesser

General Public License.

Principala caracteristică a Hibernate este maparea între clasele Java
ș
i tabelele bazelor de date

precum
ș
i între tipurile de date Java
ș
i SQL. Hibernate pune la dis pozitie posibilitatea

redactării de query-uri si data-retrieval.

Hibernate este o solu
ț
ie pentru Object-Relational-Mapping pentru Java. Este o

tehnologie gratis creată de Gavin King în 2001. Este un puternic, foarte performant,

Object-Relational Persistence serviciu pentru orice aplica
ț
ie Java.

Hibernate mapează clasele Java pe tabelele bazei de date, astfel se pot folosi direct

obiecte Java pentru a transforma informa
ț
iile din baza de date.

Maparea claselor Java pe tabele dintr-o bază rela
ț
ională se realizează prin

configurarea unui fi
ș
ier X ML sau prin folosirea de adnotări Java. Atunci când se alege prima

variantă, Hibernate poate genera un schelet de cod pentru clasele persistente. Dacă se folosesc

adnotările Java acest lucru nu mai este necesar. Hibernate poate folosi oricare dintre cele

două variante pentru a men
ț
ine schema bazei de date.

Hibernate
oferă
posibilitatea
de
a
realiza
rela
ț
ii
one-to-one
sau
many-to-many
între

clase.
De
asemenea
se
pot
realiza
asocieri
reflexive
între
un
obiect
ș
i
mai
multe
instan
ț
e
din

acela
ș
i timp, rela
ț
ie de tip one-to-many.

Configurările
necesare
pentru
lucrul
cu
Hibernate
se
realizează
în
fi
ș
erul

hibernate.cfg.xml

.

Acest fi
ș
ier con
ț
ine informatii pentru realizarea conexiunii JDBC precum:

ș
propietăti –

property

ș
connection.driver_class

ș
connection.url

ș
connection.username

ș
connection.password

ș
connection.pool_size

– folosit pentru configurarea pool-ului

ș
dialect

– specifica dialectul pe care Hibernate o va converti

ș
hbm2ddl.auto

– activează generarea schemei bazei de date direct

în baza de date;

ș
mapări persistente pentru clasele POJO –

mapping

ș
class

– numele clasei mapate referitor la pachetul în care se află

ș
resource

– localizează clasa folosind java.lang.ClassLoader

3.5 Spring Framework

Spring Framework este o platformă Java care oferă suport complet pentru

infrastructură pentru dezvoltarea aplica
ț
iilor Java. Spring se ocupă de infrastructură, astfel

încât putem să ne concentrăm asupra aplica
ț
iei.

Spring permite construirea de aplica
ț
ii din "Plain Old Java Object" (POJOs)
ș
i

aplicarea de servicii asupra POJOs. Această posibilitate se aplică complet modelului de

programare Java SE
ș
i par
ț
ial modelului Java EE.

Spring facilitează crearea de aplica
ț
ii pentru întreprinderi Java. Acesta oferă tot ce

ave
ț
i nevoie pentru a îmb ră
ț
i
ș
a limbajul Java într-un mediu de afaceri, cu suport pentru

Groovy
ș
i Kotlin ca limbi alternative pe JVM
ș
i cu flexibilitatea de a crea multe tipuri de

arhitecturi în func
ț
ie de n evoile unei aplica
ț
ii. Începând cu Spring Framework 5.0, Spring

necesită JDK 8+ (Java SE 8+)
ș
i oferă deja suport pentru JDK 9.

Spring suportă o gamă largă de scenarii de aplicare. Într-o întreprindere mare,

aplica
ț
iile există adesea p entru o lungă perioadă de timp
ș
i trebuie să ruleze pe un server JDK

ș
i aplica
ț
ie al cărui ciclu de upgrade este dincolo de controlul dez voltatorilor. Al
ț
ii pot rula ca

un singur “Jar” cu serverul incorporat, eventual într-un mediu de tip cloud. Cu toate acestea,

altele pot fi aplica
ț
ii indep endente (cum ar fi loturi sau volume de integrare) care nu au

nevoie de un server.

Primavara este open source. Are o comunitate vastă
ș
i activă, care oferă feedback

continu bazat pe o gamă largă de cazuri de utilizare în lumea reală. Acest lucru a ajutat

Spring să evolueze cu succes într-un timp foarte îndelungat.

Termenul "Spring" înseamnă lucruri diferite în diferite contexte. Acesta poate fi

folosit pentru a face referire la proiectul Spring Framework însu
ș
i, de unde a început totul.

Cel mai adesea, atunci când oamenii spun "Spring", ei în
ț
eleg întreaga familie de proiecte.

Spring Framework este împăr
ț
it în module. Aplica
ț
iile pot alege modulele de care au

nevoie. În centru modulelor este containerul de bază, incluzând un modul de configurare
ș
i un

mecanism de injec
ț
ie a de pendin
ț
elor. Dincolo de aceasta, framew ork-ul Spring oferă suport

fundamental pentru diferite arhitecturi de aplica
ț
ii, inclusiv mesagerie, date tranzac
ț
ionale
ș
i

persisten
ț
ă
ș
i web. Acesta include, de asemenea, site-ul de web M ervent MVC bazat pe

Servlet
ș
i, în paralel, cadr ul web reactiv Spring Web.

O idee importantă este: librăriile Spring permit implementarea pe calea versiunii Java,

JDK 9 ("Jigsaw"). Pentru utilizarea în aplica
ț
iile Jigsaw, librăriile Spring Framework 5 vin cu

denumiri automatizate a modulelor "Automatic-Module-Name" care definesc nume de

module stabilite la nivel de limbă ("spring.core", "spring.context" etc).

Spring este folosit în sistemul Food Ordering System pentru server, unde

administrează ciclul de via
ț
ă a obiectelor, de
ț
ine configurările pentru Hibernate
ș
i conexiunea

cu baza de date
ș
i expune servicii web cu ajutorul librăriei Jersey.

3.6 Maven

Maven
este
un
sistem
de
construire
ș
i
management
al
proiectelor,
scris
în
Java.
Face

parte
din
proiectele
găzduite
de
Apache
Software
Foundation.
Este
un
tool
open
source

(instrument
cu
codul
sursă
deschisă)
care
este
pe
larg
utilizat
atât
de
majoritatea
proiectelor

Java
OpenSource,
cât
ș
i
de
altele.Ce
este
Maven?
Cea
mai
mare
parte
a
utilizatorilor
Maven

vor
spune

Maven
este
uninstrument
pentru
build,
în
timp
ce
defini
ț
ia
de
pe
pagina
oficială

a
proiectului
ApacheMaven
spune

Maven
este
un
instrument
pentru
management
al

proiectelor.
Un
instrument
pentru
build
se
axează
în
principal
pe
preprocesare,

compilare,ambalare
(packaging),
testare
ș
i
distribuie.
Un
instrument
pentru
management,

cum
ar
fi
Maven,
în
plus
fa
ț
ă
de
capacită
ț
ile
de
build
pe
care
le
are,
ș
i
care
sunt
cu
mult
mai

simple
ș
i
u
ș
oare
în
folosire,
mai
prevede
de
asemenea
ș
i
un
ciclu
de
via
ț
ă
al
proiectului,
un

sistem
de
management
al
dependin
ț
elor,
poate
rula
rapoarte,
genera
o
pagină
web
a

proiectului,
facilitează
comunicarea
între
membrii
echipei
de
lucru
prin
oferirea
unei
interfe
ț
e

comune,
ș
i multe alte fac ilită
ț
i [9].

O
caracteristică
centrală
în
Maven
este
managementul
dependen
ț
ei.
Mecanismul
de

gestionare
a
dependin
ț
elor
Maven
este
organizat
în
jurul
unui
sistem
de
coordonate
care

identifică
artefacte
individuale,
cum
ar
fi
librăriile
sau
modulele.
Un
exemplu
foarte
folosit
de

proiectele
Maven
este
Junit
care
este
în
general
o
dependen
ț
ă
directă
a
proiectului.
Un
proiect

care
are
nevoie,

zicem,
de
biblioteca
Hibernate
trebuie
doar

declare
coordonatele
din

proiectului
Hibernate
în
POM.
Maven
va
descărca
automat
dependin
ț
a
ș
i
dependin
ț
ele
pe
care

le
are
Hibernate
(numite
dependin
ț
e
tranzitive)
ș
i
le
va
stoca
în
local.
Maven
2
Central

Repository
este
utilizat
în
mod
implicit
pentru
a
căuta
librării,
însă
se
pot
configura
depozite

de librarii care vor fi utilizate (de exemplu, un repository privat al companiei) în cadrul POM.

Există
motoare
de
căutare,
cum
ar
fi
motorul
de
căutare
Maven
central,
care
poate
fi

folosit
pentru
a
găsi
coordonate
pentru
diferite
biblioteci
ș
i
librării
care
au
implementarea

oferită gratis pentru comunitate.

Proiectele
dezvoltate
pe
o
singură
ma
ș
ină
pot
depinde
una
de
cealaltă
prin
depozitul

local.
Depozitul
local
este
o
structură
de
directoare
care
ac
ț
ionează
atât
ca
o
memorie
cache

pentru
dependen
ț
ele
descărcate,
cât
ș
i
ca
un
loc
de
stocare
centralizat
pentru
artefacte

construite
local.
Comanda
Maven
”mvn
install”
construie
ș
te
un
proiect
ș
i
plasează
fi
ș
ierele

binare
în
repozitoriul
local.
Apoi,
alte
proiecte
pot
utiliza
acest
proiect
prin
specificarea

coordonatelor în POM-urile lor.

3.7 Servicii REST

Mai
mult
de
un
deceniu
după
introducerea
sa,
REST
a
devenit
una
dintre
cele
mai

importante
tehnologii
pentru
aplica
ț
iile
Web.
Importan
ț
a
sa
este
probabil

continue

crească
rapid,
pe
măsură
ce
toate
tehnologiile
se
îndreaptă
către
o
orientare
API.
Fiecare

limbaj
de
dezvoltare
majoră
include
acum
cadre
pentru
construirea
serviciilor
Web
RESTful.

Ca
atare,
este
important
ca
dezvoltatorii
web
ș
i
arhitec
ț
ii

aibă
o
în
ț
elegere
clară
a

serviciilor
REST
ș
i
RESTful.
Acest
tutorial
explică
REST
arhitectural,
apoi
scufundă
în

detaliile de utilizare a acestuia pentru activită
ț
i comune bazate pe API.

În
timp
ce
REST
reprezintă
“Representational
State
Transfer”,
care
este
un
stil

arhitectural
pentru
aplica
ț
iile
hypermedia
în
re
ț
ea,
este
folosit
în
principal
pentru
a
construi

servicii
Web
care
sunt
u
ș
or
de
între
ț
inut
ș
i
scalabile.
Un
serviciu
bazat
pe
REST
este
numit

serviciu
RESTful.
REST
nu
depinde
de
niciun
protocol,
dar
aproape
fiecare
serviciu
RESTful

folose
ș
te HTTP ca protoc ol de bază [12].

Fiecare
sistem
utilizează
resurse.
Aceste
resurse
pot
fi
imagini,
fi
ș
iere
video,
pagini

web,
informa
ț
ii
de
aface ri
sau
orice
altceva
care
poate
fi
reprezentat
într-un
sistem
bazat
pe

computer.
Scopul
unui
serviciu
este
de
a
oferi
o
interfa
ț
ă
clien
ț
ilor
săi,
astfel
încât
ace
ș
tia

aibă
acces
la
aceste
resurse.
Arhitec
ț
ii
ș
i
dezvoltatorii
de
servici i
doresc
ca
acest
serviciu

fie
u
ș
or
de
implementat,
u
ș
or
de
între
ț
inut,
extensibil
ș
i
scalabil.
Un
design
RESTful
promite

acest lucru
ș
i mai mult.

Obiectivul
unui
serviciu
RESTful
se
referă
la
resurse
ș
i
la
modul
de
a
oferi
acces
la

aceste
resurse.
O
resursă
poate
fi
u
ș
or
de
gândit
ca
un
obiect
ca
ș
i
în
cazul
OOP.
O
resursă

poate
consta
din
alte
resurse.
În
timp
ce
proiectează
un
sistem,
primul
lucru
de
făcut
este

identificarea
resurselor
ș
i
determinarea
rela
ț
iei
dintre
ele.
Aceasta
este
similară
cu
prima

etapă a proiectării unei baze de date: Identificarea entită
ț
ilor
ș
i a rela
ț
iilor.

Odată
ce
ne-am
identificat
resursele,
următorul
lucru
de
care
avem
nevoie
este

găsim
o
modalitate
de
a
reprezenta
aceste
resurse
în
sistemul
nostru.
Pute
ț
i
utiliza
orice

format
pentru
reprezentarea
resurselor,
deoarece
REST
nu
pune
o
restric
ț
ie
asupra
formatului

unei reprezentări.

Cele mai folosite tipuri de servicii RESTful sunt[16]:


POST:
upload-ul
unei
noi
resurse
(creare
sau
modificare).
Execu
ț
ii
repetate
pot
avea

efecte distincte.


PUT:
crearea
unei
noi
resurse.
Execu
ț
ii
repetate
vor
avea
acela
ș
i
efect
ca
ș
i
o
singură

execu
ț
ie IDEMPO TENT.


GET:
cititrea
unei
resurse
fără
a
modifica
resursa.
Opera
ț
ia
nu
trebuie

fie
folosită
la

creare de resurse.


DELETE:
stergerea
unei
resurse.
Execu
ț
ii
repetate
vor
avea
acela
ș
i
efect
ca
ș
i
o

singură execu
ț
ie IDEMPOTENT.

Conceptul
de
REST
a
fost
folosit
ini
ț
ial
în
anii
2000,
de
Roy
Fielding.
Câteva
aspecte
legate

de serviciile REST:

1.
Este
un
stil
architectural
simplu
bazat
pe
standarde
Web
ș
i
HTTP
(câ
ș
tigând
teren
în

fa
ț
a unor model e ca
ș
i SOAP)

2.
Este
o
arhitectură
client-server
bazată
pe
folosirea
resurselor.
Exemplu
de
resurse:

carte, produs, ma
ș
ină, etc.

3.
Comparativ
cu
SOAP,
REST
nu
este
foarte
strict
cu
tipurile
de
date,
este
mai
u
ș
or
de

citit folosind substantive
ș
i verbe
ș
i este mai pu
ț
in "verbose"

4.
Tratarea erorilor se face conform tratării erorilor în protocolului HTTP.

5.
Este
o
arhitectură
scalabilă
datorită
separării
de
responsabilită
ț
i
între
client
ș
i
server.

De
exemplu,
responsabilitatea
unui
client
este

men
ț
ină
starea
unui
utilizator,
în

timp
ce
serverul
nu
men
ț
ine
nici
o
stare,
dar
este
resposabil
de
managementul
datelor.

De
asemenea
între
request-uri
serverul
nu
trebuie

se
men
ț
ină
starea
clientului

(stateless).

6.
Clien
ț
ii
pot
folosi
tehnici
de
caching
pentru
cre
ș
trea
performan
ț
ei
ș
i
scalabilită
ț
ii
unei

solu
ț
iei.

7.
Partea
de
server
poate

con
ț
ină
mai
multe
nivele,
fără
ca
modificări
ale
acestora

afecteze
în
vreun
fel
clien
ț
ii.
Aceasta
abordare
ar
putea
duce
la
o
separare
de

responsibilită
ț
i
a
diferitelor
nivele,
ca
de
exemplu:
load
balancing,
securitate,
stocarea

datelor, caching de resurse.

8.
Resursele
pot
avea
diferite
reprezentări
(JSON,
XML,
definit
de
user,
etc),
folosirea

lor
determinându-se
conform
protocolului
HTTP
(de
exemplu
folosind
HTTP

Headers).

În
aplica
ț
iile
proiectului
Food
Ordering
System,
serviciile
RESTful
sunt
folosite
pe

partea
de
server,
care
expune
servicii
pentru
ca
aplica
ț
iile
client

poată
avea
baza
de
date

comună
ș
i
pentru
a
intero ga
informa
ț
ii
de
care
ambele
au
nevoie .
Serviciile
REST
mai
pot
fi

numite
ș
i conectorii aplic a
ț
iilor.

4. Detalii de implementare

În acest capitol se prezintă detaliile de implementare atât pentru aplica
ț
ia Android, cât

ș
i pentru aplica
ț
ia server. Aplica
ț
ia web este în stadiul de design.

4.1 Aplica
ț
ia server

Aplica
ț
ia
server
este
dezvoltată
utilizând
limbajul
Java,
fiind
un
proiect
Maven,

împăr
ț
it
pe
module
(Figura
4.1.1).
Această
aplica
ț
ie
este
împăr
ț
ită
pe
module
(proiecte

Maven
ce
sunt
tratate
ca
dependin
ț
e
pentru
alte
proiecte),
pentru
a
asigura
posibilitatea
de

reutilizare a modulelor, sau pentru a avea “Low-Coupling” (dependin
ț
ă u
ș
oară între ele).


Primul
proiect
Maven
(forsys),
este
folosit
ca
proiect
agregator,
care
are
rolul

de
a
ț
ine
toate
modulele
într-un
proiect
mai
mare,
ajutând
astfel
la
build.

Pentru
a
face
un
build
modulelor,
este
necesar
ca
modulele

fie
inserate
în

pom
într-o
ordine
specificată
de
dependin
ț
a
dintr-e
ele.
Un
modul
utilizat
ca

dependin
ț
ă
trebuie

fie
prioritar
în
ordinea
de
build,
în
compara
ț
ie
cu
cel
care

îl are ca
ș
i dependin
ț
ă.


Al
doilea
proiect
Maven,
fiind
primul
ca
ordine
de
build,
este
“forsys-parent”

care
are
rolul
de
a
administra
dependin
ț
ele
externe.
În
fi
ș
ierul
“pom.xml”
al

acestui
proiect,
se
află
definită
fiecare
dependin
ț
ă
externă
a
tuturor
modulelor,

cu
versiune,
urmând
ca
în
modulele
care
au
nevoie
de
dependin
ț
ă,

se

definească
numai
artefactul
ș
i
id-ul
grupului
dependin
ț
ei.
În
cazul
în
care
se

dore
ș
te
schimbarea
versiunii
unei
dependin
ț
e,
atunci
se
schimbă
din
fi
ș
ierul

“pom.xml”
a
proiectului
“parent”
iar
toate
proiectele
care
folosesc
acea

dependin
ț
ă,
o

primească
noua
dependin
ț
ă.
În
acest
proiect
se
mai
pot
defini

proprietă
ț
i
specifice
întregului
proiect
ș
i
care

fie
utilizare
în
celelalte

module Maven.


Al
treilea
proiect
Maven,
“commons”
este
al
doilea
în
ordinea
de
build.
Acest

proiect
reprezintă
foarte
bine
stratul
arhitectural
“Cross-Cutting”
care
cuprinde

toate
elemente
ce
se
folosesc
în
toate
modulele.
El
este
dependin
ț
ă
pentru

modulele:
Persistence,
Business
ș
i
Web-Service.
Modulul
cuprinde
elemente

comune
precum
obiectele
de
transfer
“Data
Transfer
Object”,
folosite
pentru
a

evita
utilizarea
entită
ț
ilor
(obiectele
reprezentative
ale
tabelelor
din
baza
de

date)
prin
celelalte
module.
Un
alt
element
comun
ce
se
găse
ș
te
în
acest
modul

este
sistemul
de
excep
ț
ii
ș
i
logarea
mesajelor
de
eroare
în
fi
ș
iere.
De
asemenea

aici
se
pot
adăuga
orice
fel
de
clase
utilitare
care
se
pot
folosi
în
cel
pu
ț
in
două

module din proiect.


Cel
de
al
patrulea
proiect
Maven,
“persistence”
este
al
treilea
în
ordinea
de

build
deoarece
depinde
direct
de
modulul
“commons”.
Acest
modul
se

folose
ș
te
pentru
a
administra
baza
de
date.
Aici
se
mapează
entită
ț
i
la
tabele

din
baza
de
date,
urmând
ca
printr-o
sesiune
cu
baza
de
date,

se
acceseze

datele
prin
clase
specializate
“Data
Acces
Object”.
În
acest
modul,
se
definesc

interfe
ț
e
care
care
definesc
contractul
care
trebuie
implementat
ulterior,
în
a
ș
a

fel
încât
doi
programatori
pot
lucra
în
acela
ș
i
timp
la
două
implementări

diferite ce servesc acela
ș
i set de ac
ț
iuni dar cu o im plementare diferită.


Cel
de
al
cincilea
modul
Maven,
“business”
este
al
patrulea
în
ordinea
de

build,
deoarece
el
depinde
de
modulele
“commons”
ș
i
“persistence”.
În
acest

modul
se
implementează
logica,
el
are
rolul
unui
“Controller”,
de
a
prelucra

informa
ț
ia
ș
i
a
o
pregăti
pentru
salvare
sau
predarea
ei
mai
departe,
către

modulul
de
servicii
sau
un
alt
modul
având
în
vedere

din
acest
modul

rezultă
un
“Jar”.
În
acest
modul
se
injectează
“Data
Access
Objects”
pentru
a

comunica
cu
baza
de
date.
De
asemenea,
de
la
modulul
“persistence”
se

primesc
obiecte
de
transfer
(Transfer
Objects)
pentru
a
transmite
informa
ț
ia

mai departe.


Cel
de
al
ș
aselea
modul
este
“service”,
care
este
al
cincilea
în
ordinea
de
build.

Acest
modul
are
ca
dependin
ț
ă
directă
modulul
“business”
care
aduce
la

rândul
lui
librăria
“persistence“,
care
aduce
mai
departe
librăria
“commons”.

În
acest
modul
se
expun
servicii
RESTful
cu
ajutorul
librăriei
Jersey.
Acest

modul se împachetează la build ca jar.


Cel
de
al
ș
aptelea
modul
este
“war”,
care
este
ultimul
în
ordinea
de
build

deoarece
acesta
are
ca
dependin
ț
ă
directă
librăria
“service”
care
aduce
mai

departe
toate
librăriile
rezultate
mai
sus
în
ordinea
de
build.
Acest
modul
are

rolul
împachetării
ș
i
pregătirii
proiectului
pentru
a
putea
fi
pus
în
func
ț
iune
pe

un
container
de
aplica
ț
ii.
Împachetarea
este
de
tipul
“WAR

Web
Archive”

deoarece este nevoie ca aceasta sa poată fi interpretată ca o aplica
ț
ie web.


Ultimul
modul
este
“project-config”
ș
i
este
folosit
pentru
a
cuprinde
toate

configurările
pentru
ca
proiectul

poată
fi
mutat
pe
orice
ma
ș
ina
care
are
un

JVM instalat.

În
Figura
4.1.2
este
prezentat
fi
ș
ierul
“web.xml”
care
este
primul
fi
ș
ier
executat
de

containerul
de
aplica
ț
ii
atunci
când
se
instalează
aplica
ț
ia.
Acest
fi
ș
ier
mai
are
denumirea
de

descriptor.
În
prima
parte
a
fi
ș
ierului,
se
define
ș
te
calea
către
fi
ș
ierul
de
configurare
pentru

Spring,
care
urmează

se
execute
imediat.
După
executarea
fi
ș
ierului
“spring-config”,
se

ini
ț
ializează contextul Jer sey pentru expunerea serviciilor web din modulul de servicii.

În
Figura
4.1.4
este
prezentat
fi
ș
ierul
de
configurare
“spring-config.xml”
din
modulul

“war”
care
este
folosit
pentru
a
defini
configurările
pentru
Spring.
Spring
este
un
tool
foarte

puternic
care
oferă
posibilitatea
de
a
crea
o
sesiune
cu
baza
de
date,
administrează
ciclul
de

via
ț
ă
al
obiectelor,
creează
instan
ț
e
de
obiecte
pe
baza
adno tărilor
pe
care
le
injectează

ulterior
oriunde
este
necesar.
În
Figura
4.1.4
se
define
ș
te
un
bean
numit
“dataSource”
care

creează
la
runtime
o
sesiune
cu
baza
de
date.
Următorul
bean
se
nume
ș
te
“sessionFactory”
ș
i

este
definit
pentru
ca
ulterior

fie
injectat
în
obiectele
de
tip
“DAO

Data
Access
Object”

din
modulul
“persistence”
pentru
a
avea
acces
la
sesiunea
creată
către
baza
de
date.
De

asemenea,
avem
“transactionManager”
care
ne
ajută


creăm
tranzac
ț
ii
cu
baza
de
date.

Spring
administrează
ciclul
de
via
ț
ă
a
obiectelor,
ceea
ce
înseamnă

e
nevoie

ș
tie
ce

obiecte
administrează,
iar
pentru
asta
există
definit
tag-ul
“context:component-scan”
care

cuprinde
toate
pachetele
în
care
Spring
ar
trebui

caute
pentru
clase
care
trebuie

fie

administrate.

Figura 4.1.1

Structura proiectului Maven

În
Figura
4.1.5
este
prezentă
maparea
unei
entită
ț
i
pe
baza
de
date
utilizând

“Hibernate”
ș
i
“JPA

Java
Persistence
Api”
ca
ș
i
tehnologii
pentru
baza
de
date.
Clasa

“User”
este
adnotată
cu
“@Entity”
pentru
ca
“Hibernate”

ș
tie
ca
aceasta
reprezintă
o

entitate.
Mai
departe,
urmează
adnotarea
“@Table”
care
are
numele
tabelei
pe
care
este

mapată
această
entitate.
Cu
ajutorul
acestor
tehnologii,
putem
defini
coloanele
prin
adăugarea

unei
adnotări
în
sens,
a
defini
id-ul
unic
al
tabelei
sau
a
adăuga
diferite
constrângeri
pentru

fiecare coloană din baza de date.

În
Figura
4.1.3
este
prezentat
un
exemplu
de
“@Repository”
care
este
interpretat
de

Spring
ca
o
clasă
care
are
rolul
de
a
administra
opera
ț
iile
pe
baza
de
date
pentru
utilizatori.
În

toate
clasele
care
administrează
opera
ț
ii
pe
baza
de
date,
se
injectează
sesiunea
către
baza
de

date
(definită
în
spring-config.xml).
Aceasta
clasă
implementează
interfa
ț
a
“IUserDao”,
care

extinde
o
interfa
ț
ă
gener ică
numită
“IDao”
care
are
rolul
de
a
defini
metodele
în
func
ț
ie
de

genericitatea
functionalită
ț
ii:
Un
exemplu
bun
este
metoda
“findAll()”
ce
se
găse
ș
te
în
Figura

4.1.3
ș
i
este
definită
în
“IDao”
deoarece
se
poate
aplica
pe
orice
tabelă
din
baza
de
date
care

are
cel
pu
ț
in
două
înregis trări.
Acestă
metodă
returnează
o
listă
de
obiecte
de
transfer
de
tipul

“UserTO”
deoarece
sunt
momente
în
care
în
obiectele
de
transfer
se
adaugă
proprietă
ț
i

speciale
care
nu
sunt
reprezentate
în
baza
de
date,
caz
în
care
entită
ț
ile
nu
ar
mai
reprezenta
o

tabelă
din
baza
de
date.
Pentru
a
transmite
obiecte
de
transfer
avem
clase
utilitare
care

convertesc obiectele de transfer în entită
ț
i sau invers.

Figura 4.1.2

Structura proiectului Maven


Figura 4.1.3

Clasa pentru administrarea opera
ț
iilor pe baza de date

Figura 4.1.4

Fi
ș
ierul de configurare pentru Spring

Figura 4.1.5

Maparea unei entită
ț
i utilizând Hibernate

4.2 Aplica
ț
ia Android

Sistemul
de
aplica
ț
ii
începe
cu
aplica
ț
ia
Android
este
construită
folosind
limbajul
Java

ș
i
un
număr
de
librării
utilitare.
Conceptul
aplicat
pentru
implementarea
aplica
ț
iei
este
MVC.

Interfe
ț
ele
sunt
impleme ntate
utilizând
activită
ț
i
ș
i
fragmente,
un
exemplu
de
interfa
ț
ă
este

prezentat în Figura 4.2.1.

Defini
ț
ie
1[

11

]
Un
fragment
reprezintă
un
comportament
sau
o
por
ț
iune
a
interfe
ț
ei
de

utilizator
într-o
activitate.
Se
pot
combina
mai
multe
fragmente
într-o
singură
activitate

pentru
a
crea
un
interfa
ț
ă
UI
multiplă
ș
i
se
poate
reutiliza
un
fragment
în
mai
multe

activită
ț
i.
Conceptual,
un
fragment
se
poate
gândi
ca
o
sec
ț
iune
modulară
a
unei
activită
ț
i,

care
are
propriul
ciclu
de
via
ț
ă,
prime
ș
te
propriile
evenimente
de
intrare
ș
i
pe
care
le
pute
ț
i

adăuga
sau
elimina
în
timp
ce
activitatea
se
desfă
ș
oară
(un
fel
de
"subactivitate"
care
se

poate reutilizarea în diferite activită
ț
i).

Defini
ț
ie
2[

10

]
O
activ itate
reprezintă
un
singur
screen
cu
propriul
ciclu
de
via
ț
ă.
O

activitate este o subclasă a ContextThemeWrapper.class.

Figura 4.2.1

Utilizarea unui fragment în fi
ș
ierul interfe
ț
ei

Mai
departe,
se
exemplifică
comunicarea
dintre
aplica
ț
ia
server,
web
ș
i
aplica
ț
ia

Android
folosind
bucă
ț
i
de
cod,
se
explică
pa
ș
i
care
includ
folosirea
unor
tehnologii
sau
a

unor librării.

În
aplica
ț
ia
client ,
după
ce
un
client
adaugă
în
co
ș
ul
de
cumpărături
produsele
dorite,

pentru
a
putea
plasa
comanda,
el
are
nevoie
de
un
cont
de
utilizator.
Pentru
a
crea
un
cont,
s-a

implementat
un
modul
de
înregistrare.
Înregistrarea
unui
utilizator
se
face
pe
server,
prin

urmare
este
nevoie
de
conexiune
la
internet
ș
i
un
pachet
de
clase
pentru
servicii.
În
Figura

4.2.2
se
prezintă
o
clasă
care
are
rolul
de
a
autentifica
un
utilizator
folosind
servicii
web.

Servicile
web
sunt
implementate
folosind
librăria
Volley
[7]
care
oferă
numeroase
avantaje

precum:


Programarea automată a request-urilor.


Conexiuni concurente către serviciile web.


Crearea unui cache al răspunsurilor care fac mult mai rapidă accesarea datelor.


Suport pentru prioritizarea cererilor.


Posibilitatea
de
oprire
a
requesturilor.
Se
poate
anula
un
singur
request,
sau
se

pot seta scopuri pentru anularea cererilor.


Posibilitatea unei customizări u
ș
oare;


Cererile pot fi asincrone, ceea ce permite actualizarea datelor din interfa
ț
ă.


Utilitare pentru “Debug”
ș
i “Tracking”.

Pentru
a
apela
serviciul
pentru
autentificare,
este
necesar

facem
o
cerere
de
tip

“GET”,
în
care
numele
utilizatorului
este
encodat
in
Base64,
urmând
ulterior

fie
criptat.

Răspunsul
cererii
poate
fi
unul
fără
eroare,
caz
în
care
este
prins
pe
“onResponse”,
unde
este

interpretat
iar
în
func
ț
ie
de
con
ț
inut
se
decide
dacă
utilizatorul
se
autentifică
sau
nu,
sau
poate

fi
prins
pe
“onErrorResponse”
caz
în
care
se
poate
interpreta
con
ț
inutul
de
tip
JSON
ș
i
afi
ș
a

în interfa
ț
ă mesajul de ero are.

Figura 4.2.2

Utilizarea serviciilor pentru a autentificare

5. Utilizarea Aplica
ț
iei

5.1 Descrierea Aplica
ț
iei Android

Aplica
ț
ia
dezvolta tă
exclusiv
pe
sistemul
de
operare
Android,
este
destinată
masei
de

clien
ț
i
care
doresc

predea
comenzi
complexe,
fără
a
a
ș
tepta
rândul
la
telefon,
astfel

asigurându-se
un
loc
monitorizat
în
ordinea
comenzilor.
S-a
precizat
monitorizat
deoarece

orice
comandă
trimisă
folosind
aplica
ț
ia
mobilă,
are
pe
langă
ora
de
trimitere,
un
status
curent

care ajută clien
ț
ii în a esti ma mai bine timpul de ridicare/livrare.

Aplica
ț
ia
Android
are
ca
ș
i
scop,
predarea
comenzilor
către
orice
restaurant
din
listă,

vizualizarea
statusului
comenzii
într-un
timp
real
ș
i
schimbul
de
mesaje
pe
comandă
în
cazul

în care apar complica
ț
ii, un exemplu este lipsa stocului unui anumit produs.

Pe
prima
pagina
a
aplica
ț
iei
apare
logo-ul
restaurantului,
acesta
având
rolul
de
a

a
ș
tepta până datele ini
ț
iale ale aplica
ț
iei sunt încărcate, Figura 5.1.1.

După
pregătirea
datelor,
se
afi
ș
ează
automat
prima
pagină
unde
utilizatorul
are
control

complet.
După
cum
se
vede
în
Figura
5.1.2
ș
i
Figura
5.1.3,
utilizatorul
are
posibilitatea
de
a

căuta
restaurantul
dorit
în
moduri,
prima
fiind
într-o
listă,
unde
fiecare
restaurant
are
o

imagine,
un
afi
ș
aj
refer itor
programul
restaurantului,
în
cazul
în
care
e
deschis,
în
afi
ș
aj

utilizatorul
vede
câte
ore
mai
este
deschis,
altfel
v-a
vedea
doar
faptul

este
închis.
De

asemenea,
dacă
utilizatorul
are
loca
ț
ia
pornită,
se
va
afi
ș
a
ș
i
distan
ț
a
până
fiecare
restaurant

raportat
la
loca
ț
ia
curen tă.
Utilizatorul
mai
poate
căuta
restaurantul
dorit
ș
i
în
func
ț
ie
de

pozi
ț
ia
lui
pe
hartă,
acesta
oferindu-i
de
asemenea
posibilitatea
de
a
viziona
informa
ț
ii
sumare

precum disponibilitatea restaurantului cât
ș
i distan
ț
a până la acesta.


Figura 5.1.1

Pagina temporară pentru încărcarea ini
ț
ială a datelor

Figura 5.1.2

Pagina restaurantelor sub formă de listă

În
general,
un
lan
ț
de
restaurante
poate
ajunge
ș
i
la
zeci
de
puncte
de
vânzare,
având

aceasta
în
vedere,
s-a
creat
ș
i
un
mod
de
filtrare,
în
cazul
acestui
lan
ț
,
filtrul
este
în
func
ț
ie
de

numele
ora
ș
ului.
Acest
filtru
este
de
tip
introducere
text,
aceasta
însemnând

utilizatorul

poate
introduce
ș
i
nu
selecta
ora
ș
ul
pe
care
îl
caută,
urmând
ca
doar
restaurantele
din
acel

ora
ș
să fie afi
ș
ate.

Bazat
pe
cele
spuse
anterior,
utilizatorul
poate
accesa
din
această
pagină
orice

restaurant,
cât
ș
i
un
meniu
contextual
care
îi
da
posibilitatea
de
a
crea
un
cont
sau
a
se

autentifica,
de
a
vedea
notificările,
de
a
accesa
istoricul
comenzilor
sau
de
a
accesa
pagina
de

setări a aplica
ț
iei.

Figura 5.1.3

Pagina restaurantelor organizate pe hartă

După
ce
utilizatorul
a
accesat
un
restaurant
din
listă
sau
de
pe
hartă,
i
se
afi
ș
ează
o

nouă
pagină,
pagina
restaurantului.
Acestă
pagina
include
trei
sec
ț
iuni,
doar
una
fiind
vizibilă

ș
i
putând
fi
schimbate
cu
ajutorul
tab-urilor.
Pe
lângă
sec
ț
iuni,
această
pagină
include
în

partea
de
sus,
informa
ț
ii
generice
despre
restaurant,
de
exemplu
pagina
de
Facebook,

Twitter/Google+,
logo
sau
un
ajutor
de
navigare
spre
restaurantul
curent.
Partea
de
sus

include
ca
ș
i
fotografie
de
fundal
o
imagine
din
restaurant,
altfel,
aceasta
fiind
înlocuită
cu

sigla companiei/lan
ț
ului d e restaurante.

Pe
pagina
restaurantului,
dacă
utilizatorul
are
un
cont,
atunci
este
pregătit
pentru

prima comandă, după cum se poate vedea în Figura 5.1.4.

Ini
ț
ial,
utilizatoru l
întâlne
ș
te
sec
ț
iunea
meniului,
unde
poate
consulta
meniul,
adăuga

în
co
ș
produsele
dorite
sau
poate
accesa
un
anumit
produs.
Utilizatorul
poate
vedea
ș
i
părerea

altor utilizatori referitoare la un anumit produs urmărind nota acordată.

Figura 5.1.4

Pagina restaurantului, sec
ț
iunea meniului

Cea
de
a
doua
sec
ț
iune,
sec
ț
iunea
pre-comenzii,
este
reprezentată
în
Figura
5.1.5
ș
i

este
folosită
pentru
a
avea
imagine
asupra
produselor
adăugate
în
co
ș
.
Această
pagină
oferă

atât
posibilitatea
de
a
vedea
detaliat
fiecare
produs
cu
ingrediente
extra
sau
specifica
ț
ii

speciale
pe
produs,
de
a
ș
terge
un
anumit
produs
din
co
ș
ul
de
cumpărături,
sau
de
a
modifica

detaliile
pentru
un
anumit
produs.
Produsele
din
cos
pot
fi
complexe,
caz
in
care,
exista
un

dialog
creat
special
pentru
aceasta
în
care
se
pot
vedea
detaliile
pentru
fiecare
produs,
se

poate
vedea
în
Figura
5.1.6.
Dialogul
pentru
detaliile
co
ș
ului
ajută
în
cazul
comenzilor

complexe, astfel u
ș
urând vizualizarea acestora.

Următorul
tab
este
cel
destinat
exclusiv
pentru
fidelizarea
clien
ț
ilor.
Comerciantul

poate
crea
oferte
pentru
fiecare
restaurant,
încât

atragă
clien
ț
ii,
aceste
informa
ț
ii
find

adăugate
din
aplica
ț
ia
destinată
comercian
ț
ilor.
De
asemenea,
o
dezvoltare
la
care
se
lucrează

este
un
sistem
de
data-mining
prin
care

generăm
cupoane
de
reducere
pentru
clien
ț
ii
fideli.

Pentru
a
face
asta
este
nevoie
de
foarte
multe
interogări
a
bazei
de
date,
pentru
a
extrage

informa
ț
ii
despre
capacit atea
de
cumpărare
a
unui
anumit
restaurant,
încât,
pe
baza
capacită
ț
ii

de
cumpărare,

extragem
clien
ț
ii
fideli,
iar
dacă
se
încadrează
în
anumite
tipare,
se
pot

genera
cupoane
de
reducere,
sau
în
func
ț
ie
de
for
ț
a
de
cumpărare
de
la
un
anumit
restaurant,

se pot oferi meniuri gratis.

Figura 5.1.5

Pagina restaurantului, sec
ț
iunea pre-comenzii

Figura 5.1.6

Detaliile unui produs adaugat in cos

În
pagina
destinată
fidelizării
utilizatorilor,
avem
un
fragment
în
care
fiecare

restaurant
poate
adăuga
ș
tiri
informative
referitor
la
un
nou
produs,
sau
bucătari
invita
ț
i

speciali,
etc..
Acest
modul
de
ș
tiri
poate
fi
dus
la
nivelul
următor,
încât

afi
ș
eze
informa
ț
iile

de
pe
pagina
web
a
restaurantului,
ș
i
adăugarea
unui
sistem
de
comentarii
unde
utilizatorii
pot

spune păreri despre
ș
tire.

Figura 5.1.7

Cupoane pentru clien
ț
ii fideli

În
sec
ț
iunea
a
treia,
numită
“Despre”,
vezi
Figura
5.1.7,
restaurantul
poate
adăuga

oferte
astfel
utilizatorii
sunt
tenta
ț
i

comande
conform
acesteia.
De
asemenea,
un
client
care

este
fidel
aplica
ț
iei
ș
i
comandă
des,
el
poate
primi
vouchere
pe
care
le
poate
folosi
ca

reducere
la
următoarele
comenzi.
Acest
modul,
cel
de
a
crea
vouchere,
are
scopul
de
a
crea

fidelitate,
de
a
avea
consumatori
constan
ț
i,
mul
ț
umi
ț
i
de
produ sele
oferite.
Cupoanele
sunt

generate
pe
client
în
timp
de
ofertele
sunt
generate
pe
restaurant,
oricine
poate
accesa
o
ofertă

însă
nu
oricine
poate
avea
un
cupon,
decât
dacă
numărul
comenzilor
este
mare
sau
comenzile

au
fost
într-un
procent
foarte
mare
livrate/ridicate
cu
succes.
Componenta
de
ș
tiri
este
folosită

pentru
a
ț
ine
un
curs
al
evenimentelor
petrecute
în
fiecare
restaurant,
astfel
asigurându-se
un

istoric
ș
i reclamă restaura ntului.

Figura 5.1.8

Personalizarea unui produs

Atât
din
pagina
meniului
cât
ș
i
din
pagina
co
ș
ului
de
produse
(pre-comandă),

produsele
se
pot
personaliza
sau
edita
în
func
ț
ie
de
dorin
ț
ele
clientului.
În
Figura
5.1.8
se

observă

se
pot
alege
ingrediente
în
plus
pe
fiecare
produs,
sau
se
pot
adăuga
cerin
ț
e

speciale
ș
i
observa
ț
ii,
cât
ș
i
posibilitatea
de
alege
o
cantitate
din
acel
produs.
Pagina
din

Figura
5.1.8
are
două
roluri,
una
de
a
edita
produsul,
iar
a
doua
de
a
vedea
con
ț
inutul

produsului, ingredientele din care e compus, vezi Figura 5.1.9.

5.2 Descrierea Aplica
ț
iei Web

Sistemul
de
aplica
ț
ii
oferă
pe
lângă
aplica
ț
ia
pentru
clien t,
care
este
folosită
pentru
a

comanda
produse,
o
aplica
ț
ie
pentru
comercian
ț
i,
pentru
lan
ț
urile
de
restaurante
pentru
a

administra
comenzile,
meniul
ș
i
a
lansa
oferte
sau
promo
ț
ii.
Serverul,
a
treia
aplica
ț
ie,
este

locul
unde
se
ț
in
toate
informa
ț
iile
pentru
a
putea
fi
u
ș
or
accesate
atât
de
către
aplica
ț
ia

destinată utilizatorilor cât
ș
i de către aplica
ț
ia destinată administrării comenzilor.

Aplica
ț
ia
pentru
comercian
ț
i
are
trei
mari
func
ț
ionalită
ț
i,
însă
ș
i
idei
ce
urmează

fie

transformate în func
ț
ionalită
ț
i.

S-a
creat
aplica
ț
ia
web
pentru
a
se
putea
rula
pe
orice
tip
de
device
ce
suportă
un

browser.
Prima
pagină
a
aplica
ț
iei
este
pagina
de
autentificare
(Figura
5.2.1)
deoarece

aplica
ț
ia
fiind
destinată
unui
lan
ț
de
restaurante,
atunci
fiecare
restaurant
sau
fiecare
angajat

ar trebui să se autentifice separat pentru a putea urmării cine a preluat comenzile.

Figura 5.2.1

Pagina de autentificare

După
ce
un
angajat
s-a
autentificat,
ajunge
pe
pagina
principală
(Figura
5.2.2)
de
unde

poate
începe
administrarea
comenzilor.
În
partea
de
sus
a
paginii
se
găse
ș
te
un
meniu

contextual
pentru
a
naviga
între
pagini.
În
partea
stânga
a
paginii
se
află
comenzile
în
ordine

cronologică
cu
detalii
despre
utilizator,
ora
comenzii
ș
i
loca
ț
ia
de
livrare.
Comenzile
pot
fi

filtrate
în
func
ț
ie
de
cele
care
au
fost
procesate
sau
care
urmează

fie
procesate.
În
partea

dreaptă
apar
detaliile
comenzii
selectate.
În
partea
dreaptă,
jos,
există
butonul
de
status
care

ajută
comerciantul

transmită
în
timp
real
un
status
al
comenzii.
Ini
ț
ial,
când
angajatul
preia

comanda,
apasă
butonul
“start
work
on
it”
care
este
folosit
pentru
a
transmite
aplica
ț
iei
client

un
status
în
timp
real.
Dupa
ce
a
lucrat
la
comandă,
angajatul
apasă
butonul
“Ready
for

delivery”
care
pe
lângă
faptul
ca
informează
utilizatorul
cu
privire
la
comandă,
poate
muta

comanda
într-o
pagină
a
unui
alt
angajat
care
se
ocupă
doar
de
livrări
pentru
a
administra

comenzile pregătite de livrare.

Figura 5.2.2

Pagina de administrare a comenzilor

Figura 5.2.3

Pagina de editare a unui produs

Figura 5.2.4

Pagina de administare a meniurilor

O
a
doua
func
ț
ionalitate
foarte
importantă
este
cea
de
administrare
a
meniului,
care

poate
fi
făcută
din
aplica
ț
ia
comerciantului,
urmând

se
modifice
ulterior
ș
i
în
aplica
ț
ia

clien
ț
ilor,
în
momentul
în
care
acesta
are
conexiune
la
internet.
Meniul
se
poate
modifica
în

func
ț
ie
de
categorii.
În
Figura
5.2.4
este
creat
design-ul
pentru
editarea
meniului,
loc
în
care

produsele sunt împăr
ț
ite pe categorii, permi
ț
ând astfel o administrare mai u
ș
oară a meniului.

În
pagina
meniului
se
pot
adăuga,
ș
terge
ș
i
edita
produsele
pentru
toate
restaurantele,

urmând ca în viitor să permitem personalizarea meniului pentru fiecare restaurant.

Următorul
modul
al
aplica
ț
iei
este
cel
de
rapoarte,
un
modul
orientat
spre
comerciant,

unul
de
care
s-a
observat
nevoia
în
momentul
în
care
s-a
discutat
despre
punerea
în
produc
ț
ie

a
acestei
aplica
ț
ii.
În
pagina
de
rapoarte,
dorim

oferim
comerciantului
posibilitatea
de
a

vedea
rapoarte
pe
fiecare
restaurant,
cât
ș
i
la
nivel
de
concern.
Rapoartele
pot
fi
în
func
ț
ie
de

cerin
ț
e,
însă
cele
mai
importante
sunt
cele
care
exprimă
cantitatea
de
produse
vândută
pe

perioade determinate, sau intervalul orar în care se primesc cele mai multe comenzi.

6. Concluzii

Proiectul Food Ordering System este dezvoltat pentru a permite comercian
ț
ilor din

domeniul restaurantelor de tip fast-food
ș
i nu numai, să gestioneze un număr mare de

comenzi utilizând două aplica
ț
ii, una mobila pentru predarea comenzilor,
ș
i una web pentru

gestionarea comenzilor, administrarea meniului
ș
i generarea de rapoarte.

Dezvoltarea acestui sistem de aplica
ț
ii a necesitat o cercetare în ceea ce prive
ș
te

abordarea actuală a comercian
ț
ilor în ceea ce prive
ș
te administrarea comenzilor, punerea în

discu
ț
ie a mai multor solu
ț
ii pentru îmbunătă
ț
irea abordării actuale, însă
ș
i ascultarea nevoilor

din partea comercian
ț
ilor pentru a crea un sistem complex, care să scutească utilizatorii de

apeluri telefonice, să le creeze un sistem de fidelizare, însă prin care sa rezolve nevoile

comercian
ț
ilor.

De asemenea, pentru dezvoltarea acestui sistem, a fost necesar să învă
ț
tehnologii noi,

pentru ca aplica
ț
iile să se poată adapta la noi dezvoltări
ș
i a avea o viteza de procesare a

informa
ț
iilor foarte rapidă . Una din noile tehnologii este Angular pentru aplica
ț
ia Web

destinată comercian
ț
ilor c are rulează în mare parte local, încât doar schimbul de informa
ț
ii

făcându-se folosind internetul. Un framework care se poate găsi atât în server cât
ș
i în

aplica
ț
ia client, este Sprin g care se folose
ș
te pentru inversarea controlului asupra obiectelor

din aplica
ț
ie, mai exact, o biectele pe care le-am creat până acum cu ajutorul operatorului

“new”, acum sunt create automat de către Spring, atunci când sunt folosite.

În
continuare,
ne-am
propus

dezvoltăm
acest
proiect
din
mai
multe
aspecte.
Un

aspect
necesar
ș
i
care
a
fost
cerut
de
posibili
clien
ț
i
a
fost
posibilitatea
de
a
plăti
comenzile

prin
intermediul
aplica
ț
iei,
ceea
ce
implică
un
studiu
avansat
pe
securizarea
informa
ț
ilor

sensibile.

Încă
o
dezvoltare
la
care
se
lucrează
încă
de
acum,
însă
care
este
complexă
ș
i
necesită

un
“business
logic”
complex
este

utilizăm
data-mining
prin
care

generăm
cupoane
de

reducere
pentru
clien
ț
ii
fideli.
Pentru
a
face
asta
este
nevoie
de
foarte
multe
interogări
a
bazei

de
date,
pentru
a
extrage
informa
ț
ii
despre
capacitatea
de
cumpărare
a
unui
anumit
restaurant,

încât,
pe
baza
capacită
ț
ii
de
cumpărare,

extragem
clien
ț
ii
fideli,
iar
dacă
se
încadrează
în

anumite
tipare,
se
pot
genera
cupoane
de
reducere,
sau
în
func
ț
ie
de
for
ț
a
de
cumpărare
de
la

un anumit restaurant, se pot oferi meniuri gratis.

Pentru
viitor,
ne-am
propus

creăm
un
modul
pentru
contorizarea
stocului
de

produse
al
unui
restaurant.
Acest
modul
de
viitor
ar
putea
ajuta
restaurantele
de
dimensiuni

medii
ș
i
mari

ț
ină
o
eviden
ț
ă
a
stocului
mai
rapidă,
portabilă
având
în
vedere

atunci

când merge pentru aprovizionare are aplica
ț
ia aproape și u
ș
or de utilizat.

Aplica
ț
ia
a
fost
propusă
unor
lan
ț
uri
de
restaurante,
iar
în
momentul
de
fa
ț
ă
se

negociază implementarea ei în produc
ț
ie.

7. Bibliografie

[1] Statistici privind utilizarea telefonului mobil,

https://start-up.ro/romanii-si-telefonul-mobil-cum-ne-folosim-smartphone-urile/

/

, (data

accesării: 04.02.2018).

[2] Statistici privind raportul muncă respectiv timp liber,

http://www.mediafax.ro/social/cercetare-privind-utilizarea-timpului-cat-lucreaza-si-cat-timp-l
iber-au-zilnic-angajatii-romani-11799813, (data accesării: 10.02.2018).

[3] Statistici privind utilizarea telefoanelor mobile,

https://start-up.ro/romanii-si-telefonul-mobil-cum-ne-folosim-smartphone-urile/

/

, (data

accesării: 04.05.2018).

[4] Despre Java, https://en.wikipedia.org/wiki/Java_(programming_language), (data

accesării: 02.01.2018).

[5] Despre MySQL, https://dev.mysql.com/doc/refman/5.7/en/what-is-mysql.html (data

accesării: 21.04.2018)

[6] Utilizarea sistemului de operare Android,

http://www.go4it.ro/software/platforma-android-la-inceput-de-2018-android-oreo-creste-incet
-versiunile-vechi-incep-sa-dispara-16921350/ (data accesării: 21.04.2018)

[7] Avantajele librăriei Volley, https://developer.android.com/training/volley/


(data accesării:

03 May 2018)

[8] Despre MySQL,

https://ro.wikipedia.org/wiki/MySQL

, (data accesării: 21.04.2018)

[9] Despre Maven,

https://en.wikipedia.org/wiki/Apache_Maven

(data accesării: 05.05.2018)

[10] Despre activită
ț
i,

https://www.tutorialspoint.com/android/android_acitivities.htm

(data

accesării: 03 May 2018)

[11] Despre fragmente, https://developer.android.com/guide/components/fragments. (data

accesării: 05 May 2018)

[12] Request Servicii REST,

https://www.slideshare.net/busaco/servicii-web-prin-rest

(data

accesării: 03.03.2018)

[13] Limbajul de programare Java,

https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare)

, (data accesării: 06/14/2016)

[14] Despre limbajul de programare Java, https://java.com/en/download/faq/whatis_java.xml,

(data accesării: 21.02.2018).

[15] Despre Hibernate, https://www.tutorialspoint.com/hibernate/hibernate_overview.htm,

(data accesării: 23.02.2018).

[16] Servicii REST, https://www.tutorialspoint.com/restful/index.html, (data accesării:

21.02.2018)

[17] Arhitectura MVC,

https://inkoniq.com/blog/googles-baby-angularjs-is-now-the-big-daddy-of-javascript-framew
orks/, (data accesării: 19.02.2018)

[18] Despre Android,

https://en.wikipedia.org/wiki/Android_(operating_system)

, (data

accesării: 18.02.2018)

Similar Posts