Descrierea Aplicatiei Plan Your Trip

Introducere

De la calatorie la turism – un pas in istorie

“In Evul Mediu oamenii erau turisti deoarece erau indrumati de religie sa se mute. In zilele noastre oamenii sunt turisti pentru ca a devenit modul lor de viata”, spunea Robert Runcie. In secolul 21, cand atat de multe lucruri se schimba, traiul de zi cu zi a devenit uneori o provocare. Tehnologia a conturat modul in care traim, iar dorintele noastre pentru viitor au dus tehnologia la urmatorul nivel. Referindu-se la prezent Hassan Gleik spunea ca traim intr-o lumea in care totul este rapid, avand o credinta a vitezei – lucru care in mare parte este cauzat de aparitia Internetului si a calculatoarelor. Intr-o lume in continua schimbare industriile se intrepatrund si se completeaza. Acesta este si cazul turismului, unde inovatiile tehnologice au schimbat liniile traditionale.

In zilele nostre toata lumea poate calatori, devenind astfel turist. Desigur lucrurile stateau cu totul altfel in trecut. Turismul, asa cum il stim noi astazi, isi regaseste radacinile in Imperiul Roman, unde sistemul de drumuri si comunicatii facilitau calatoriile. Mai mult decat atat, in acea vreme se punea mare accent pe literatura, multe publicatii avand ca tema calatoriile. Atunci au aparut primele forme de ghiduri de calatorie – publicatii in care se specificau traseele, durata acestora si denumirea drumurilor.

De-a lungul timpului multe lucruri au contribuit la dezvoltarea turismului, dar unul dintre cei mai importanti factori este introducea notiunii de “concediu anual” sau “vacanta anuala” in Europa, predecesorul concediului platit care a fost instaurat in secolul al XX-lea. Pentru prima data, in 1552 Regele Edward VI al Angliei a acordat oamenilor dreptul de a nu munci in zilele de sarbatoare si cele religioase.

Calatoritul a fost intotdeuna unul dintre “sporturile” preferate al celor care si-l puteau permite. Motivele erau diferite – un nou loc, o noua limba, o noua cultura, o noua afacere – dar in acea perioada, doar cei instariti isi putea permite acest “moft”. Chiar si in zilele noastre inca se face diferenta intre “a calatori” (termen care este de obicei rezervat activitatii elegante a clasei sociale privilegiate de a se plimba in alte locuri) si “turism” (termen care se refera de obicei la tursimul de masa – mult mai ieftin).

Revolutia Industriala a schimbat modul inc are oamenii calatoreau – aparitia cailor ferate a pus bazele turismului de masa. Daca la inceput trenurile erau dedicate doar transporturilor de marfa si bunuri, in scurt timp acest lucru s-a schimbat. In 1841 Thomas Cook organizeaza prima “escapada”: o excursie dus-intors de 12 mile, cu trenul care costa un siling. Experimentul a fost un succes, trenul avand la bord peste 500 de pasageri. Incurajat de acest lucru, 4 ani mai tarziu, organizeaza prima excursie profitabila: o calatorie cu trenul de la Leicester, Nottimghm si Derby la Liverpool.

Secolul al XX-lea a adus mari schimbari in industria turismului, in mare parte datorate schimbarii de mentalitate a oamenilor. Dorinta de a cunoaste, de a descoperi locuri noi, invatarea prin calatorii, notiunea de recreere – toate acestea au crescut numarul de turisti. Cu toate aceste turismul dedicat destinderii si recreerii era inca rezervat clasei sociale privilegiate si locuri precum Orient Express (inspirat de vagoanele Pullman) sau Queen Mary (bogat in istorie, eleganta si gradoare) inca sustinea stadarde ridicate pentru calatorii.

O data cu izbucnirea Razboaielor Mondiale totul s-a schimbat, inclusiv industria turismului. Desi Primul Razboi Mondial a lasat in urma o lume caracterizata de saracie, anii ’30 aduc dorinta de evadare din cotidian, de schimbare, de inovatii in viata de zi cu zi, de mai multa mobilitate si individualitate. Din cauza necesitatilor din timpul Razboiului infrastructurile, comunicatia si tranportul se dezvolta rapid, ceea ce faciliteaza calatoriile. Curand Marea Britanie si Germania deschid noi rute de calatoriile dedicate turistilor care vor sa viziteze “lumea noua”.

Dupa cel de-al Doilea Razboi Mondial, desi inca sub semnul distrugerii, lumea se reface rapid si turismul creste vertiginos. Onu raporteaza ca intre 1955 si 1965 numarul turistilor in 65 de tari a crescut de la 51 milioane la 157 milioane. In prezent peste 671 milioane de turisti sunt inregistrati annual, iar in 2012 turismul este recunoscut ca unul dintre factorii economici de baza in economie.

Noua era – Turismul si aplicatiile mobile

Uitandu-ne in urma in istorie, putem obesrva cu usurinta ca modul inc are omenirea s-a dezvoltat nu a fost unul liniar, ci ca din contra au existat perioade de inovatie (de exemplu Revolutia Industriala) si perioade de relativa stagnare. In zilele noastre, dezvoltarea tehnologiei a produs schimbar in toate sectoarele, influentand modul in care traim. O data cu introducerea tehnologiei in diferite sectoare, modul in care gandim si actionam s-a schimbat. Dorim sa stim mai multe, mai repede, mai bine – mentalitate care se reflecta inclusiv in turism.

Trecerea de la comunicare 1 la 1 la comunicarea in masa a schimbat modul in care lumea relationeaza cu mediul exterior. Dezvoltarea cumunicarii digitale permite crearea unei experiente individuale, aspect important in industria turismului. In prezent in tari precum Australia, Anglia, Suedia, Norvegia, Arabia Saudita sau Emiratele Arabe peste jumatate din populatie detine un smartphone, iar SUA, Noua Zeelanda, Danemarca, Irlanda, Olanda, Spania si Elvetia ajung la un procent de peste 40%. In Statele Unite peste 80% dintre cei care au un smartphone sustin ca nu pleaca de acasa fara acesta. Mai mult decat atat, numarul persoanelor care detin un astfel de telefon creste de la an la an, pe masura ce astea devin tot mai accesibile.

Unul dintre cele mai folosite moduri de comunicare in zilele noastre sunt aplicatiile mobile (smart phone applications)., care pot avea multiple functionalitati. Insa atuul acestora nu este reprezentat neaparat de functionalitatile in sine pe care le ofera si de faptul ca acestea sunt generate intr-un timp rapid, real si accesibile oriunde prin intermediul unui obiect mic, usor de purtat si manevrat. Datorita vitezei secolului in care traim si a avalansei de informatii care ne inconjoara acest lucru a devenit esential in viata oamenilor.

Datorita dimensiunii lor reduse, telefoanele mobile sunt usor de luat la purtator in orice loc in care acesta calatoreste. Multitudinea de aplicatii care s-a dezvoltat de-a lungul timpului pentru acestea, fac ca ele sa fie folositoare in aproape orice imprejurare din viata unui om, turismul fiind una dintre acestea.

O organizare mai buna a unei vacante face ca aceasta sa fie mai placuta. Aplicatile mobile pot ajuta la planificarea timpului liber si la optimizarea acestuia. Astfel utilizatorii se pot bucura mai mult de timpul lor liber, fara a mai pierde irosi timp cu planuirea in detaliu a vacantei pentru a se asigura ca totul merge bine.

Aplicatile mobile pentru turism pot avea atat scop informativ cat si practic. Ele pot oferi date despre locurile de vizitare, cum ar fi locatia fizica a acestora , ora inchiderii sau descrierea lor in detaliu, pot ajuta utilizatorii in alegerea unei destinatii sau pot chiar sa ofere un mod practic de rezolvare a unor pasi premeargatori unei vacante, cum ar fi rezervarea biletelor pentru un mijloc de transport. Ele pot fi folosite chiar si ca busola. Pe langa acestea ele pot fi un mediu de stocare rapid al amintorilor sau un mijloc de impartasire a momentelor petrecute in vacanta, alaturi de cei dragi.

Descrierea succinta a aplicatiei si a lucrarii

Lucrarea de fata isi propune descrierea aplicatiei Plan Your Trip din cadrul licentei din care face parte si documentatia, atat prin prezentarea conceptelor si a elementelor teoretice ce stau la baza acesteia cat si a programului efectiv.

Aplicatia isi doreste sa fie una destinata turismului. Ea isi propune imbunatatirea calitatii experientei unei vacante, avand la baza un scop practic, si anume generarea unor itinerarii pe baza mai multe elemente cum ar fi:

Perioada sejurului si destinatia

Prietenii de calatorie

Atractile turistice pe care isi doreste utilizatorul sa le viziteze

Atractile turistice pe care isi doresc cei care il insotesc sa le viziteze

Distanta dintre acestea

Ora inchiderii

Timpul mediu de vizitare

Perioadele in care acesta este ocupat cu altceva si zona in care are treaba

Aplicatia ia in considerare faptul ca intr-o vacanta pleaca de obicei un grup de prieteni si nu un singur individ. Avand in vedere ca suntem cu totii diferiti, probabil nu toti vor dori sa viziteze acelasi lucru. Fapt pentru care programul ia in considerare optiunile fiecaruia si genereaza un itinerariu pentru fiecare membru al grupului cu puncte comune cu al altora sau un program comun incercand sa gaseasca o solutie de compromis. Mai mult decat atat aplicatia ofera o experienta unica din punct de vedere a vizitatorului oferiindu-I alternative customizate in fuctie de preferintele acestuia.

De la “Alo” la Smartphone

Desi azi pare aproape de neconceput sa nu ai un telefon mobil, acesta nu a existat dintotdeauna. Inventarea telefonului mobil a adus cu sine schimbarea modului in care traim. O data cu acesta putem vorbi oricand si cu orice, rupand astfel barierele comunicarii.

De la inventarea telefonului de catre Bell, pana la aparitia celui mobil au exista mai multe perioade de dezvoltare. In 1910 apare pentru prima data ideea de telefonie mobile cand suedezului Lars Magnus Ericson, cu ajutorul unei antene bifilare, reuseste sa se conecteze la reteaua de telefonie nationala din masina. In 1947 sovieticii G. Saphiro și I. Zaharcenko, reusesc sa faca un dispozitiv ce se poate conecta la o retea locala ape o raza de 20 km. In acelasi an Bell Laboratories lanseaza ideea de releu, iar 10 ani mai tarziu Leonid Kuprianovici inventeaza radiofonul. Acesta avea 3 kg si o raza de actiune de 20-30 km, prin intermediul lui putandu-se comunica cu o statie-baza.

In 1956 Ericsson dezvolta primul telefon complet automat, iar in 1960 este creat primul sistem de telefonie pentru masina. Bazele telefonului mobil asa cum il stim noi astazi au fostpuse de catre Motorola, primul apel telefonic de pe mobil fiind facut de catre unul dintre managerii companiei pe 3 aprilie 1973. Insa de abia 10 ani mai tarziu a fost lansat pe piata Motorola DynaTAC, care cantarea aproape 1kg si costa 3995$ (in valoare banilor de astazi costa aprox. 19300$).

Statul aplicatiilor a fost dat de catre Nokia, care s-a remarcat la inceput prin jocuri precum Snake. Avand un succes rasunator, cererea de astfel de aplicatii a crescut. Astfel a aparut WAP (Wireless Application Protocol). Primul smartphone a aparut in 1992 la salonul de tehnologie Comdex. Acesta se chema Simon si a fost proiectat de IBM. O data cu aparitia acestora aplicatile au inceput sa se dezvolte din ce in ce mai mult, iar telefoanele sa nu mai fie doar un simplu mod de comunicare

Totusi de la telefonul mobil clasic pana la smartphone-ul din zilele noastre au existat mai multe etape de dezvoltare, asa cum sustin Kent Wertime si Ian Fenwick:

Mobilul pentru toti

Adaugarea functiilor la telefon

Aparitia 3G-ului – intensifcarea traficului de internet pe telefon

Programe prioritare pentru telefonie

Dezvoltarea site-urilor pentru mobib si a aplicatilor

Implementarea posibilitatii de tranzactionare de pe telefon

Comunicarea pe platfomarme sociale de tip “social media”

Multi spun ca smartphone-urile sunt simple aparate care inglobeaza o camera si un calculator. Cu toate acestea, device-ul se poate metamorfoza in multe lucruri, de la lanterna la consola de jocuri, in functie de aplicatia folosita. Smartphone-urile functioneazafolosind sisteme de operare complete care ofera o interfata stardardizata pentru dezvoltatorii de aplicatii. Practic, acestea sunt telefoane construite pe o platforma mobila.

Aparitia telefoanelor de tip smartphone a produs multe schimbari in viata noastra – de la modul in caregandim pana la modul in care actionam sau ne folosim corpul. Un studiu global sustine ca smartphone-urile au modificat modul inc are folosim degetele de la mana, cel mare devenind degetul principal in locul aratatorului.

Apple si noua era a telefoanelor

Istoria umana ne-a surprins in repetate randuri, omul fiind stalpul si creatorul tehnologiei. Viata este in continua schimbare si modul in care noi traim astazi este diferit de cel pe care il aveau bunicii nostri. Ritmul alert in care totul se schimba este datorat in mare parte inovatilor din tehnologie.

O data cu trecerea anilor lumea s-a schimbat si modul in care noi relationam cu lumea din jurul nostru s-a modificat, apropiindu-ne tot mai mult de latura tehnologica. Omenirea a inaintat cu pasi repezi spre ceea ce astazi folosim in viata de zi cu zi – smartphone-urile. De la telefonul lui Bell pana la smartphone s-au scurs multi ani si multi oameni si-au adus de-a lungul timpului aportul in inovarea industriei telecomunicatilor. Si atunci cand ne gandim la smartphone, un nume sta pe buzele tuturor: Steve Jobs.

In 1977 doi prieteni, Steve Wozniak si Steve Jobs, au inceput intr-un garaj din Cupertino, California, sa construiasca cateva calculatoare. Compania, care inca de atunci se chema Apple Computer a dezvaluit publicului primul sau model de PC, Apple I, la targul Homebrew Computer Club. Timp de doua decenii compania a continuat sa produca si sa vanda calculatoare, inovand si fascinandu-si cumparatorii de fiecare data. In 1985 Steve Jobs este inlaturat de la conducerea Apple. Cateva luni mai tarziu, Jobs fondeaza compania NeXT, c are isi lanseaza primul model de calculator in 1988 si prima statie in 1990. Desi modelele sunt aduc elemente noi, compania nu se bucura de un succes rasunator.

In anii 90’ Apple cunoaste cel mai mare declin de la infiintare, vanzarile scazand vertiginos. Steve Jobs revine la Apple in 1996 dupa ce compania sa, NeXT este cumparata si absorbita de Apple. In urmatorul an devine CEO si instaureaza o noua filozofie corporatista: Apple se axeaza acum pe simplitatea design-ului, performanta produselor si inovatie. In 1998 este lansat primul iMac care uimeste prin linile de design elegante si frumusetea lui.

Istoria smartphone-ului Apple isi gaseste radacinile in inventia iPod-ului. Desi toata piata electronicelor se focusa pe device-uri de tip PDA, Steve Jobs a considerat ca viitorul tehnologiei va consta in utilizarea telefonului in viata de zi cu zi si inglobarea mai multor functii intr-un singur aparat. Mai mult decat atat, la Conferinta Executiva “All things digital” din 2003, Steve Jobs a afirmat ca telefonul mobil va deveni modul in care oamenii vor avea acces la informatii si o vor stoca, considerand ca soft-ul care va facilita sincronizarile dintre device-uri va juca un rol important in dezvoltarea acestora. Ca urmare, sub indrumarea lui, compania Apple si-a concentrat urmatorii ani toate resursele pentru a investiga si inova ecranul de tip touch si programul prin care aceste aparate se pot sincroniza in timp real.

Ca urmare, in 2001 Apple lanseaza iPod, un dispozitiv care reda muzica, iar in 2003 se lanseaza iTunes, programul prin care iPod-ul se poate sincroniza cu magazinul de muzica Apple. O data cu acestea Apple redevine leader de piata in industria electronicelor de larg consum. In septembrie 2005, Apple si Motorola lanseaza ROKR E1, primul telefon mobil care poate folosi iTunes. Desi lansarea a fost privita ca un succes, Jobs nu este pe deplin multumit, considerand ca design-ul poate fi imbunatatit. La un an de la lansare Apple intrerupe colaborarea cu Motorala si lanseaza o versiune de iTunes care face referire la un nou model de telefon care poate reproduce imagini si videoclipuri – dar care inca nu exista pe piata.

Pe 9 ianuarie 2007, Steve Jobs anunta la Conventia MacWorld lansarea noului telefon iPhone, iar la sfarsitul lunii iunie a aceluiasi an iPhone este lansat pe piata, bucurandu-se de vanzari uriase si de toata atentia presei. Ca si predecesorul sau, PDA-ul Apple, iPhone-ului are la baza ideea de touch-screen (ecran tactil), fiind aproape in totalitate ecran. Design-ul simplu si elegant poarta semnatura lui Jonathan Ive, seful departamentului de design al Apple.

Pe 11 iunie 2007 la conferinta Apple’s Worldwide Developers, eveniment dedicat dezvoltatorilor de programe IT, Apple anunta ca va sustine aplicatile dezvoltate de terti care vor folosi programul Safari al telefonului. Dezvoltatorii vor putea crea aplicatii web 2.0, iar utilizatorii le vor putea folosi accesandu-le de pe internet. Bucurandu-se de un succes rasunator, aplicatile de acest tip au aparut chiar inainte de lansarea pe piata a telefonului, prima fiind “One Trip”, program prin care utilizatorul putea tine evidenta listei de cumparaturi. O data cu lansarea primului iPhone, Apple lanseaza si iTunes versiunea 7.3, care oferea facilitatea de sincronizare si oferea suport pentru activarea iPhone-ului. Folosind sistemul de operare iOS, iPhone sustine si in prezent dezvoltarea aplicatilor de catre terti.

Lansarea iPhone-ului duce Apple pe culmile succesului. In 2012 Apple devine cea mai mare companie listata vreodata la bursa, fiind estimata la o valoare de 626 miliarde $ (conform datelor din septembrie 2012), depasind Microsoft si Google.

Lumea in care traim se schimba in fiecare zi, tehnologia lasandu-si amprenta pe tot ceea ce facem. De-a lungul timpul oameni cu viziune au conturat si au construit inovatiile pe care noi astazi le folosim in viata noastra cotidiana. Pana la urma cine nu recunoaste marul muscat si cati dintre noi nu au fost macar o data cuceriti de simplitatea, eleganta si performanta produselor Apple?

Aplicatii de telefon

Una dintre cele mai frecvente moduri de folosire a smartphone-urile este prin folosirea aplicatiilor. Dar ce sunt acestea? Aplicatiile sunt grupuri de programe proiectate pentru a fi folosite de catre utilizatorul final. Practic, acestea sunt mici programe create special pentru acest tip de telefoane. Acestea se pot gasi pe platforme de tipul Appstore, care a fost lansat in iulie 2008 cu 500 de aplicatii. Doi ani mai tarziu, in 2010 pe Appstore se regaseau peste 225 000 de aplicatii, inregistrandu-se peste 3 milioane de descarcari. Acestea aduc un plus de valoare device-ului, oferindu-I mai multe functii decat cele de baza.

Asa cum reiese din graficul de mai jos (Figura 1) exista 4 mari platforme pentru dezvoltarea programelor pentru smartphone-uri: symbian (Nokia: 47.9%), Windows Mobile (Microsoft), Android(in 2008 Google lanseaza Android care se claseaza in prezent dupa iPhone cu o crestere de 886% pe an si iOS (Apple).

Figura 1

In concluzie, o aplicatie de telefon este un program proictat sa functioneze pe dispositive mobile, tablete sau pe smartphone-uri. Ele sunt pot fi luate de pe platformele de distributie, fiind operate de obicei de catre propietarul sistemului de mobil.

Aplicatiile de telefon pot fi de trei feluri:

native

web

hibrida

Aplicatii native

Aplicatiile native se afla numai in telefon, comunicand numai cu acesta. Astfel, ele pot functiona si offline, neavand nevoie de conexiunea de internet. Ele pot folosi functionalitatile telefonului: camera, accelerometru, GPS, compasul, lista de contacte etc. Acestea pot fi procurate din “magazinele de aplicatii”, cum ar fi cel de la Apple.

Aplicatii Web

Acestea sunt de fapt site-uri web, care ii dau senzatia utilizatorului de aplicatie. Acestea se pot “instala” prin crearea unui bookmark la o pagina URL speciala.

Aplicatii hibride

Aplicatiile hibride sunt o combinatie de aplicatie web si aplicatie native, browserul fiind inclus in aplicatie. De obicei acestea incorporeaza o pagina de web existent. Astfel, nu se depune effort pentru crearea unei aplicatii ce corespunde paginei de internet respective.

Mediu de programare

Platforma IOS

IOS este un sistem de operare creat de Apple Inc. Acesta functiona numai pe produse hardware de la Apple: iPhone, iPad, iPod Touch, Apple TV. Frameworkul pentru creare a programerol software ce merg pe sisteme de operare IOS este Cocoa Touch. Objective c sta, de asemenea, la baza sistemului de operare IOS.

Kitul iPhone sdk

Kitul iPhone sdk include componente ce stau la baza mediului de dezvoltare al aplicatilor dedicate, cum ar fi: Xcode, Instruments, Simulator, Interface Builder

Xcode

Scode este un IDE ce contine facilitati software pentru crearea de software pentru OS X si IOS.

Simulator

Simulatorul este o component ce permite testarea aplicatilor direct pe calculator.

Interface Builder

Interface Builder este o component ce permite programatorului sa creeze partea grafica a aplicatiei cu drag and drop. Componentele grafice se conecteaza la codul sursa, de unde pot fi accesate.

Instruments

Aceasta component identifica momentele in care aplicatia foloseste cele mai multe resurse sau are pierderi de memorie, analizand memoria si monitorizand performantele.

Cocoa Touch

Cocoa Touch este o librarie sub forma de framework-uri ce corespund componentelor grafice din interfata.

Objective c

Objective C este un limbaj exclusiv de programare orientat pe obiecte folosit de catre dezvoltatorii Apple pentru a crea aplicatii pentru iPhone, iPad si Mac.

Acesta a apaqrut la inceputul anilor ‘80, fiind limbajul principal folosit de sistemele de operare NeXT si NeXTSTEP. Deoarece IOS provine din aceste sisteme de operare, in urma achizitiei NeXT in 1996 de catre Apple Computer, acesta are la baza tot Objective C. De aici a derivat si Cocoa, denumit “Objective-C fara C”

Functii si concepte elementare

Afisare

Afisarea se face cu functia NSLog:

NSLog(@“Buna! Numele meu este Oana”);

Se observa ca sirurile de caractere sunt puse in ghilimele si precedate de “@”.

Crearea unei variabile

Variabilele memoreaza date, pentru ca acestea sa poata fi accesate direct prin scrierea acestora, si nu prin specificarea continutului lor de fiecare data. De exemplu o variabila cu un nume scurt, de exemplu “a” poate tine minte un sir lung de caractere, greu de scris de programator de fiecare data cand acesta are nevoie de el.

NSString *prezentare1=”@Buna, numele meu este Oana. Am 21 ani si locuiesc in Bucuresti”;

NSString *prezentare2=”@Buna, numele meu este Alina. Am 21 ani si locuiesc in Iasi”;

Un alt mod de a declara o variabila de tip NSString este:

Variabila prezentare1 definita mai sus se poate folosi direct cu NSLog pentru a afisa continutul acesteia:

NSLog(prezentare1);

Continutul unei variabile poate fi afisat si in combinatie cu alte siruri de caractere. In locul pe care il ocupa in text se scrie %@. Semnul %@ urmeaza apoi a fi inlocuit de continutul variabile aflate dupa virgule ce se afla dupa inchiderea ghilimelor.

NSLog(@”prezentare 1: %@ , prezentare 2: %@”, prezentare1, prezentare2);

Pe langa NSString se mai pot declara si alte tipuri de obiecte, cum ar fi NSNumber sau NSUInteger:

NSNumeber *varsta=@21;

NSLog(“Oana are %@ ani”, varsta);

NSString *cuvant=@”floare”;

NSLog(“Cuvantul %@ are %lu caractere”,[cuvant length]);

A se observa ca pentru afisarea unui NSUInteger se foloseste “%lu” in loc de “%@”.

Vectori

Vectori sunt variabile ce retin colectii de date de acelasi tip. Acestea fac ca programul sa nu aiba o colectie prea numeroasa de variabile. Aestia se pot declara si initializa astfel:

NSArray *nume=@[@”Oana”,@”Andreea”,@”Alin”];

Datele “mutable” dintr-un vector pot fi accesate usor prin specificarea pozitiei in vector: nume[2]. Acestea pot fi, de asemenea modificate: nume[2]=@”Ana”;

NSDictionary

NSDictionary este un tip de variabile ce asociaza unei chei, de exemplu “nume”, o valoare, cum ar fi varsta. Perchile cheie-valoare sunt delimitate de catre virgule, iar asocierea dintre o cheie si o valoare se face cu semnul “:”.

NSDictionary *nume_varsta=@{@”Oana”: @21, “Alin”: @22};

Datele dintr-un dictionary pot fi afisate cu ajutorul cheii. De exemplu pentru afisarea varstei lui Alin se foloseste:

NSLog(@”%@”, nume_varsta[@“Alin”]);

Crearea metodelor

Crearea metodelor este utila pentru a evita scrierea unui set de instructiuni de mai multe ori intr-un program. De fiecare data cand se vrea ca un set de instructiuni sa fie apelat,se poate chema direct metoda creata ce inmagazineaza toate aceste instructiuni. Astfel, codul nu devine greu de urmarit, iar programatorul castiga timp util nemai fiind nevoit sa sa rescrie tot setul de instructiuni ori de cate ori are nevoie de acesta.

O metoda are forma:

tip_returnat (^nume_metoda)(tip_argument_1, tip_argument_2,…,tip_argument_n)=

^(tip_argument_1 nume_argument_1,tip_argument 2 nume_argument_2,…, tip_argument_n nume_argument_n)

{set_instructiuni;};

Exemplu_1:

void(^salut)(void)=^{NSLog(@”Buna din interiorul metodei ”);}

Aest exemplu este unul simplist neavand niciun fel de argument sau tip returnat. Acest lucru este evidentiat de cuvantul “void”. De fiecare data cand metoda este apelata se va afisa mesajul: “Buna din interiorul metodei”.

Exemplu_2:

Void(^suma)(NSUInteger, NSUInteger)=^(NSUInteger nr1, NSUInteger nr2)

{NSLog(@“Suma argumentelor este %lu”,nr1+nr2);}

Acest exemplu descrie o metoda cu doua argumente de tip NSUInteger ce afiseaza suma acestora de fiecare data cand este apelata, specificanduse cei 2 parametrii.

Exemplu_3:

void(^cate)(NSArray *)=^(NSArray *vector)

{NSLog(@”In vector sunt %lu obiecte”, [array count]);}

Aceasta metoda primeste ca parametru un obiect, si anume un vector. Deoarece este vorba de un obiect se foloseste “*” dupa specificarea tipului de data si inaintea denumirii argumentului. Apelarea returneaza numarul obiectelor din “vector”.

Pentru a returna un obiect in cadrul unei metode se foloseste “return”:

Exemplu_4:

NSString *(^cont_mail) (NSString *, NSString *)

=^(NSString *a,NSString *b)

{return [NSString stringWithFormat:@”%@ are cont de %@”,b,a];

};

Apelarea metodelor

Prin apelarea unei metode “i se zice” unui obiect sa realizeze o anumita actiune sau sa trimita anumite informatii. Pentru a apela o metoda este nevoie de cel putin doua elemente: un obiect si un nume de masaj: [nume_obiect nume_mesaj]. De exemplu apelarea: NSLog(@”%@”,[nume description]); va reda continutul vectorului “nume”, description fiind o functie predefinita in Objective C. Sau pelarea metodei [NSString stringWithString: anotherString], unde anotherString este parametru. Va returna o copie a obiectului anotherString.

Apelarea unei metode se poate face foarte simplus specificand numele metodei si parametrii transmisi. Numele acestora nu trebuie sa coincida cu numele pe care le detin argumentele functiei.

Pentru exemplele de la “Crearea metodei” avem urmatoarele modele de apelare:

Exemplu_1

Salut();

Exemplu_2

Suma(3,4);

Exemplu_3:

NSArray *nume=@[@”Oana”,@”Andreea”,@”Alin”];

cate(nume);

Exemplu_4:

NSLog(@”%@”,cont_mail(@”gmail”,@”Ana”));

Concatenarea a doua siruri de caractere

Concatenarea a doua siruri de caractere se face cu semnul “+”:

NSString nume=@”Mancu”;

NSString prenume=@”Oana”;

NSString nume_intreg=nume+prenume.

Acelasi rezultat se poate obtine si prin apelarea functiei “stringByAppendingString”:

nume_intreg=[nume stringByAppendingString: prenume];

“Alloc” si “Init”

Alloc si init sunt metode valabile pentru toate clasele din Objective C. Cu ajutorul lor se poate crea un obiect gol.

Alloc aloca un spatiu in memorie pentru a stoca un obiect. Obiectul stocat nu este insa valabil pana cand nu este apelata si metoda init pentru el.

Astfel, creare unui obiect gol se realizeaza ca in exemplul:

NSString *string_gol=[[NSString alloc] init];

Metoda “stringWithFormat”

stringWithFormat este o metoda ce formateaza stringurile. Aceasta se foloseste ca in exemplul urmator:

NSString *nume_intreg=[NSString stringWithFormat: @”%@ %@”, nume, prenume];

Instructiunea “if – else if – else”

Instructiunea “if” este o instructiune de decizie. Aceasta are forma:

if (conditie) {instructiuni;}

Cand compilatorul intalneste instructiunea “if” verifica daca conditia din paranteze este adevarat. In caz afirmat acesta executa instructiunile din accolade. In caz contrar trece de instructiunile incluse in accolade, executandu-le pe cele ce urmeaza.

Instructiunea “if” poate fi urmata de “else {instructiuni}”. In acest caz daca conditia din parantezele associate lui “if” nu e este adevarata sunt execute direct instructiunile ce se afla in accolade dupa “else”.

Instructiunea poate devein si mai complexa prin adaugarea: “else if(conditie) {instructiuni}” de ori cate ori intre intre “if(conditie) {instructiuni}” si “else {instructiuni}”:

if(conditie) {instructiuni}

else if(conditie) {instructiuni}

……..

else if(conditie) {instructiuni}

else {instructiuni}

In acest caz compilatorul executa numai blocul de instructiuni precedate de prima conditie care este adevarata. Dupa executie acesta iese din bloc continuand sa interpreteze codul ce urmeaza.

Metoda “switch”

Metoda “switch” este echivalenta cu blocul de instructiuni “if – else if – else” prezentat mai sus. In cadrul acesteia toate conditile depind de variabila precedata de “switch”. Compilatorul compara valoarea acestei variabile cu toate valorile precedate de “case”. In cazul in care acestea coincide, se executa instructiunile aflate dupa “:” intre accolade ce corespund cazului ce cuprinde valoarea identica. “break” semnalizeaza iesirea din blocul de instructiuni asociat unui caz. Dupa gasirea unei valori egale, compilatorul continua cautarea, verificand si celalalte case-uri.

Exemplu:

switch(numar)

{case 1: {NSLog(@”unu”); break;

case 2: {NSLog(@”doi“); break}

case 3: {NSLog(@”trei“); break}

}

In cazul in care in exemplu variabila“numar” este egala cu 3, programul va afisa “trei”.

Metoda isEqualToString

Metoda isEqualToString compara 2 stringuri, returnand valoarea booleana “YES” daca acestea sunt egale sau “NO” in caz contrar. De exemplu, apelarea : [@”rosu” isEqualToString: @”rosu”] va intoarce “YES”, in timp ce [@”rosu” isEqualToString: @”alb”] va intoarce “NO”.

Instructiunea “for”

Instructiunea for permite parcurgerea unei colectii intregi de date, cum ar fi un vector. Aceasta poate fi folosita pentru orice tip de date.

Exemplu:

NSArray *zile=@[@”luni”,@”marti”,@”miercuri”,@”joi”,@”vineri”];

for(NSString *zi in zile)

{NSLog(@“%@”,zi);}

In instructiunea “for” de mai sus este parcurs tot vectorul “zile”, fiind afisata fiecare valoare a acestuia. In cadrul ei “zi” din “for” ia pe rand fiecare valoare din vector. Prin intermediul variabilei “zi” se pot face operatii ce afecteaza valoarea vectorului pe care o reprezinta la momentul in care acestea se executa.

Clase

Fiind un limbaj de programare orientate pe obiecte, Objective C ofera programatorilor si posibilitatea de a lucre cu clase. Acestea permit definirea de tipuri de date noi complexe. Dupa crearea acestora, se pot define obiecte de aceste tipuri definite de programator.

Clasele pot contine la randul lor atat obiecte si tipuri de date, cat si metode. Fiecarui obiect de tipul desemnat de clasa ii corespunde un set unic de obiecte definite in clasa. Obiectele ce apartin aceleiasi clase nu partajeaza intre ele obiectele si valorile definite in clasa, ele fiind diferite de la un obiect al clasei la altul. Acest lucru se intampla numai in cazuri speciale definite de programator.

In dezvoltarea aplicatilor pe telefon de obicei fiecarui ecran ii corespunde o clasa. In aceasta sunt definite toate functionalitatile acestuia: toate operatile pe care le face utilizatorul, rezultatul vizibil al acestora si “bucataria din spate” a aplicatiei, cum ar fi lucrul cu baze de date.

Extensia fisierului ce implementeaza o clasa este “.m”.

Interfata

Fiecare clasa are asociata o interfata. Prin aceasta se specific ace trebuie sa faca o clasa, nu ce face efectiv, fiind un fel de sablon. In cadrul unei interfete nu pot fi implementate efectiv metode, insa acestea pot fi specificate, urmand sa fie implementate in clasele asociate. Metaforic o interfata este “un meniu al unui restaurant”, acesta specificand tipurile de mancare existente, care se afla defapt in bucatarie. Ne putem imagina ca meniul cuprinde o lista de metode si propietati, iar bucataria unde “se gatesc” acestea este clasa.

O clasa nu poate exista fara interfata. Acest lucru se datoreaza faptului ca o clasa nu implementeaza “alloc” si “init”, fara de care nu ar putea fi instantiate obiecte ale ei.

Extensia unei interfete este “.h”. Pentru a se specifica faptul ca o clasa implementeaza o interfata se adauga “@implementation nume_clasa_implementata” la inceputul acesteia.

Mostenirea

Atunci cand o clasa mosteneste o alta, ea preia toate functionalitatile acesteia. Astfel, partile commune nu mai trebuies rescrise. Plecand de la clasa mostenita, ea se poate dezvolta cu noi functii si propietati. Un exemplu ce poate fixa termenul de mostenire se poate gasi si in matematica: deoarece multimea numerelor naturale este inclusa in multimea numerelor intregi, putem spune ca multimea numerelor intregi mosteneste multimea numerelor naturale. Z=N+Z\N, unde N e partea mostenita din “clasa N”, iar Z\N este partea adaugata in “clasa Z”.

“Clasa mama” in Objective C este NSObject. Aceasta contine propietati esentiale pentru toate celalte clase predefinite in program sau definite de catre utilizator. De aceea, toate clasele trebuie sa o mosteneasca pentru a putea fi functionale:

@interface Nume_Clasa: NSObject

@end

Mai sus se poate observa modul de declarare a unei interfete si cum se precizeaza faptul ca o clasa mosteneste o alta.

Propietati

Adaugarea unei propietati la o intefata

Prin adaugarea unei propietati la o interfata se poate adauga o propietate caracteristica obiectelor ce apartin claselor ce o implementeaza , insa aceasta nu poate fi instantiata. Acest lucru se face astfel:

@interface Personaj: NSObject

@property NSString *nume;

@property NSString *poveste;

@end;

In exemplul de mai sus se specifica faptul ca fiecare obiect de tip Personaj are un nume si o poveste. Se observa ca propietatile se scriu intre declararea interfatei: “@interface” si “@end”, fiind precedate de cuvantul “@property”.

Initializarea unei obiect al clasei

Initializarea unui obiect al unei clase se face astfel:

Personaj *Alice=[[Person alloc] init];

Adaugarea unei valori la o propietate a unui obiect

Adaugarea unei valori la o propietate a unui obiect se face astfel: nume_variabila.nume_propietate=valoare;

Exemplu:

Alice.poveste= @”Alice in Tara Minunilor”;

Alice.nume=@”Alice”;

Se observa faptul ca nu mai trebuie specificat faptul ca “poveste” este de tip NSString deoarece acest lucru a fost facut in interfata la declararea propietatii “poveste”.

Obtinerea unei valori detinute de o propietate a unui obiect

Obtinerea unei valori detinute de o propietate a unui obiect se poate face cu sintaxa: nume_obiect.propietate. Exemplu:

NSLog(@”%@ face parte din cartea %@”,Alice.nume, Alice.poveste);

Metode si clase

Un exemplu de metoda definite intr-o clasa este: -(void)salut {NSLog(“Salut”);} Aceasta metoda poate fi apelata de catre un obiect al clasei astfel: [Alice salut]. Metoda poate sa fie precizata si in interfata astfel: -(void) salut;.

Un exemplu de meteoda care face parte dintr-o clasa si returneaza un rezultat:

-(NSString *)nume_complet

{return [NSString stringWithFormat: @”%@ %@”, self.nume, self.prenume];}

Un exemplu de metoda ce accepta argumente dintr-o clasa este:

-(NSString *)poarta:(NSString *)culoare

{NSString *prop=[NSString stringWithFormat:@”%@ poarta o palarie %@”,self.nume,culoare];}

Aceasta se poate apela astfel: [Alice poarta:@”alba”]; Se observa ca apelarea functiei se face dupa modelul: [obiect nume_functie: argument_1 :argument_2:…: argument_n];

Cuvantul cheie “self”

Cuvantul cheie “self” se refera la propria entitate a obiectului care apeleaza o functie intr-o clasa. Acesta poate apela proprietatile obiectelor ce executa functile intr-o clasa.

Exemplu:

-(void)viseaza {NSLog(@“%@ viseaza ca tu visezi in timp ce tu visezi ca ea viseaza”,self.nume);}

Daca functia este apelata de Alice: [Alice viseaza] se va afisa: “Alice viseaza ca tu visezi in timp ce tu visezi ca ea viseaza.” In timp ce daca functia este apela de Palarierul_Nebun se va afisa: “Palarierul_Nebun viseaza ca tu visezi in timp ce tu visezi ca ea viseaza”. Se observa ca se va afisa mereu valoare propietatii “nume” corespunzatoare obiectului apelant.

Propietate read-only

O propietate read-only se defineste adaugand “(readonly)” dupa “@property”. Procedand astfel propietatea nu mai poate fi setata din afara clasei. Aceasta insa se poate schimba in continuare din interioarul clasei plasand “_” inaintea ei:

@property (readonly) NSString *poveste;

-(void) schimbaPoveste : (NSString *) poveste_noua

{_poveste=poveste_noua;}

Suprascrierea functiei “init”

Functia “init” este mostenita de la NSObject, de aceea ea poate fi suprascrisa de orice clasa. Ea poate fi privita ca un constructor, descriind ce se intampla la momentul initializarii unui obiect. Form a acesteia este: -(nume_clasa*) init{instructiuni}

Elemente specifice IOS pentru aplicatii

Label

Eticheta permite afisarea unui text in mod static, fara a lasa utilizatorul sa schimbe continutul ei. Textul acesteia poate fi schimbat din cod.

Button

Butonale receptioneaza atingerea de catre utilizator a ecranului pe portiunea pe care o ocupa, daca sunt bineinteles active. Ele pot fi si dezactivate, ramanand active doar in anumite conditii.

Text Field

Un Text Field ii permite utilizatorului sa introduca un text care poate fi interceptat apoi de aplicatie si folosit in diferite scopuri pentru functionalitatile aplicatiei. De exemplu pot folosi sirul de caractere introdus pentru a efectua o cautare la o baza de date. Pentru a prelua continutul acestuia se foloseste: nume_variabila_corespunzatoare_TextField.text.

Utilizarea unui text Field face ca tastatura sa apara automat atunci cand utilizatorul apasa pe el, pentru a-I permite acestia sa scrie. Lucrul cu tastatura in IOS necesita implementarea unor functii prin care e posibila disparitia acesteia deoarece aceasta ar putea sa ascunde anumite campuri ale aplicatiei. Exista mai multe feluri de a aborda problema. Unul din ele este ascunderea tastaturii cand se apasa pe “done”, altul presupune tot ascunderea tastaturii insa de data aceasta generatea de apasarea oriunde in afara campurilor pe ecranul telefonului si ultimul, dar nu sic el din urma, presupune mutarea continutului aplicatiei in functie de pozitia tastaturii. Aceste variante folosite in combinatie redau o experienta placuta privirii utilizatorului.

O metoda de implementare a dinamicii tastaturii este prezentata in capitolul in care este prezentata aplicatia.

UIAlertView

Un UIAlertView este un mesaj ce atentioneaza utilizatorul asupra anumitor evenimente. Acesta poate sa dispara numai dup ace acesta a luat la cunostinta mesajul transmis, fiind oblicat sa apese neaparat pe un buton al cestuia pentru ca el sa dispara de pe ecran.

Un exemplu de implementare pentru un UIAlertView este:

<code>

Navigation Controller

Navigation Controller este un element ce permite atat schimbarea ecranelor din interfata aplicatiei cat si clasele associate acestora. Astfel, se poate programa schimbarea unui ecran cu oricare altul, si totodata a claselor corespunzatoare acestora.

UIImageView

UIImageView permite afisarea de imagini conferind un aspect ploacut aplicatiei.

NSUserDefaults

NSUserDefaults permite salvarea anumitor date direct pe telefon care nu se pierd atunci cand se inchide aplicatia. Acestea pot fi spre exemplu numele utilizatorului current, sau ultimul ecran deschis inainte de iesirea din aplicatie.

Table View si Table View Cell

Acestea permit lucrul cu tabele. Cu ajutorul lor se pot afisa in mod dinamic date dintr-o baza de date, sau colectie de date in general. Pentru lucrul cu acestea exista anumite functii specifice:

<cod plus blabla>

Prezentarea aplicatiei

Pagina principala

Acesta este ecranul cu care se deschide aplicatia. Aici utilizatorul poate accesa: Account, Friends, Trips. Acestea duc la meniurile corespunzatoare numelor de pe butoane, unde se intalnesc optiuni corespunzatoare.

Componente interfata:

View Controller

Image View

Buttons

Componente cod mai speciale:

NSUserDefaults – este declara o variabila de tip NSUserDefaults denumita logged ce tine minte daca a ramasa sau nu cineva logat pe telefon la utima logare, pentru a intra direct pe contul lui. Daca nu exista niciun utilizator logat deja, butoanele friends si trips sunt inactive, noul utilizator fiind obligat sa se autentifice sau sa-si creeze un nou cont.

NSUserDefaults *logged =[NSUserDefaults standardUserDefaults];

if([[logged stringForKey:@"logged"] isEqualToString:@""])

{

btnFriends.enabled=false;

btnTrips.enabled=false;

}

Clasa corespunzatoare: Meniu1.h , Meniu1.m

Account

Din meniul principal se poate ajunge in meniul cu optiune pentru cod, apasand pe Account. Optiunile acestui ecran sunt:

Create Account

Sign In

Change Password

Sign Out

Forgot Password

Change Hat

Delete Account

Componente interfata:

*View Controller

*Image View

*Buttons

Clasa corespunzatoare cod: Account.h , Account.m

Account. Create Account

Acesta este ecranul corespunzator butonului Create Account din meniul prezentat anterior.

Aici, utilizatorul este nevoit sa complete campurile cerute. In cazul in care acestea sunt incomplete sau gresite ( de exemplu password si retype password nu coincid) apare pe ecran un UIAlertView ce atentioneaza utilizatorul.

UIAlertView *message=[[UIAlertView alloc] initWithTitle:@"Account not created!"

message:@“wrong or incomplete information

delegate:self

cancelButtonTitle:@"OK"

otherButtonTitles:nil];

In acest ecran se vede foarte bine si controlul tastaturii in aplicatile pentru Iphone. Tastatura apare de fiecare data automat atunci cand utilizatorul vrea sa introduca date intr-un camp, selectandu-l. Daca in cod nu exista functii speciale aceasta ramane fixa, acoperand eventuale alte campuri sau butoane. In acest ecran sunt folosite 3 modalitati de a lucra cu tastatura. Acestea impreuna rezolva intr-un mod placut problemele ce apar din cauza aparatiei tastaturii. Una din ele face ca tastatura sa dispara apasand pe Done, iar alta face ca aceasta sa dispara cand se apasa cu degetul in afara campurilor sau a tastaturii. Ultima face completarea campurilor cursiva pentru utilizator. In mod normal cand tastatura apare, campurile de sub ea nu se vad si utilizatorul poate complete numai campurile care se vad. Aceasta abordare misca ecranul, lasand tastatura fixa, astfel incat atunci cand se apasa pe campul de completat corespunzator parolei ecranul arata ca in poza de mai sus.

Cod pentru manipularea tastaturii:

{[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];

}

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];

[scroller setScrollEnabled:YES];

[scroller setContentSize: CGSizeMake(320,700 )];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]

initWithTarget: self

action: @selector(dismissKeyboard)

];

[self.view addGestureRecognizer:tap];

txtUserName.returnKeyType = UIReturnKeyDone;

[txtUserName setDelegate:self];

txtEmail.returnKeyType = UIReturnKeyDone;

[txtEmail setDelegate:self];

txtPassword.returnKeyType = UIReturnKeyDone;

[txtPassword setDelegate:self];

txtRetypePassword.returnKeyType = UIReturnKeyDone;

[txtRetypePassword setDelegate:self];

-(void) dismissKeyboard

{ [txtUserName resignFirstResponder];

[txtEmail resignFirstResponder];

[txtPassword resignFirstResponder];

[txtRetypePassword resignFirstResponder];

}

-(IBAction)doneEditing:(id) sender {[sender resignFirstResponder];}

-(void) textFieldDidEndEditing:(UITextField*)textField

{ [scroller setContentOffset:CGPointZero animated: YES];

if ([[UIScreen mainScreen] bounds].size.height == 568) { [self.view setFrame:CGRectMake(0,20,320,560)]; } else { [self.view setFrame:CGRectMake(0,20,320,460)];

}

}

-(void) textFieldDidBeginEditing:(UITextField *)textField

{

if(txtRetypePassword.editing || txtPassword.editing)

{if ([[UIScreen mainScreen] bounds].size.height == 568)

{ [self.view setFrame:CGRectMake(0,-35,320,560)]; }

else { [self.view setFrame:CGRectMake(0,-35,320,460)]; }

}

}

– (void)keyboardDidShow:(NSNotification *)notification {

if(txtRetypePassword.editing || txtPassword.editing)

{if ([[UIScreen mainScreen] bounds].size.height == 568)

{ [self.view setFrame:CGRectMake(0,-35,320,560)]; }

else { [self.view setFrame:CGRectMake(0,-35,320,460)]; }

}

}

-(void)keyboardDidHide:(NSNotification *)notification

{ if ([[UIScreen mainScreen] bounds].size.height == 568) { [self.view setFrame:CGRectMake(0,20,320,560)]; } else { [self.view setFrame:CGRectMake(0,20,320,460)]; }

}

– (BOOL) textView: (UITextView *) textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

{if ([text isEqualToString:@"\n"])

{[textView resignFirstResponder ];

return NO;

}

return YES;

}

-(BOOL)textFieldShouldReturn:(UITextField *)textField

{

[textField resignFirstResponder];

return TRUE;

}

Daca toate informatile au fost completate in mod correct, in urma apasarii butonului Create Account v-a aparea un UIAlertView care v-a atentiona utilizatorul ca are un cont nou creat, insotit de un salut urmat de username-ul sau. Insa procesul de creare cont nu se incheie aici. Aceast ecran fiind urmat de unul nou.

Clasa asociata: CreateAccount

Noul ecran contine o scurta informatie despre regina Elisabeta a 2-a si obiceiul ei de a purta palarii. La sfarsitul acesteia utilizatorul este invitat sa-I ia exemplul si sa-si aleaga o palarie – imagine care il va reprezenta in cadrul aplicatiei. O data aleasa o palarie va aparea pe ecran un UIAlertView ce complementeaza noul look. Apasarea “OK” face numai ca UIAlertView-ul sa dispara, in prim plan ramanand acelasi ecran. Acest lucru reda posibilitatea de a realege palaria. Odata aleasa o palarie exista optiunea de intoarcere “Go Back” sus.

Componente grafice:

Navigation Controller

table view

table view cell

UIImageView

UIButton

Clase asiciate: chooseHat.m, chooseHat.h, TableCell.m, TableCell. UIAlertView

Account. Sign In

Acesta este ecranul de acces la aplicatie pentru cineva care are deja un cont existent. Daca UserName-ul sau adrsea de mail corespunde parolei introduse si ambele se regasesc in baza de date, atunci v-a aparea unul din urmatoarele UIAlertViews:

In primul ecran utilizatorul este atentionat ca alta persoana este deja logata,fiind precizat si numele acesteia. El este intrebat daca vrea sa se logeze ca un nou user sau sa ramana pe contul respectiv.

Verificarea existentei unui user se face cu:

<code>

In cazul in care user-ul precedent a dat loog out inainte si nu mai este nimeni logat, apare un UIAlertView de intampinare.

De asemenea, daca userul logat anterior corespunde cu cel care vrea sa se logheze, apare un UIAlertView ce zice ca persoana este deja logata.

Clasa asociata: SignIn.m SignIn.h

Account. ChangePassword

In cazul in care vechea parola se regaseste in baza de date si este asociata utilizatorului actual si New Password coincide cu Retype New Password pe ecran apare un UIAlertView ce wsemnaleaza succesul operatie de schimkbare a aprolei.

Clase associate: ChangePassword.m, ChangePassword.h

Account.SignOut

In cazul selectarii optiunii “Sign Out” din meniul Account apare un UIAlertView ce descrie succesul operatiei: “You have signed out!”.

La nivel de cod variabila de tip NSUserDefaults ce retine numele utilizatorului curent este setata la null.

<code>

Account.Change Hat

Selectarea optiunii “Change Hat”, duce la ecranul in care exista o gama de palarii in care utilizatorul poate sa-si realeaga poza care il reprezinta in cadrul aplicatiei. Ecranul si clasele asociate coincid cu cele descries la Account.CreateAccount. Astfel, este evitata redundanta in cod.

FRIENDS

Acesta este meniul ce coresounde optiunii “Friends” din meniul principal:

In acdrul acestuia exista optiunile:

Add Friend

Friends Requests

See Friends

Friends.AddFriend

Daca este solicitata optiunea “Add Friend”, din cadrul meniului Friends, apare ecranul de mai sus. Acesta ii permite utilizatorului sa caute posibili noi prieteni in baza de date dupa nume. Daca numele e incomplet aplicatia va intoarce toti utilizatorii ce contin sirul de caractere introdus astfel:

In acest ecran sunt prezentate rezultatele cautarii. Userii cu care utilizatorul current este deja priten au in dreptul lor o fata zambitoare care indica acest lucru, in timp ce restul au un buton cu plus.

Optiunea de cautare ramane valabila, utilizatorul putand sa continue procesul de adaugare prieteni.

In urma apasarii butonului plus apare un UIViewAlert ce specifica ca cererea de prietenie a fost trimisa, iar butonul respectiv, ce corespunde persoanei catre care a fost trimisa cererea, devine inactiv.

Elemente interfata:

Button

TextField

ImageView

Label

TableView

TableViewCell

Clase associate: AddFriend.m, AddFriend.h, TableCellAddFriend.m, TableCellAddFriend.h

Friend Requets

Astfel persoana care a primit cererea de prietenie va vedea pe ecranul principal de la “Friends”, in sectiunea “Frined Requests” numarul de cereri de priteni neacceptate sau nerefuzate intr-un cerc. Daca numarul este 0 butonul “Friends Requests” este inactive. In caz contrar prin apasarea acestuia apare lista cu noile cereri de prietenie.

Daca utilizatorul apasa pe plus apare un UiViewAlert ce il instinteaza pe acesta ca el persoana caruia ii corespunde butonul sunt prieteni. Intre timp butoanele plus si minus devin inactive.

Componente interfata:

Navigation Controll

Button

TextField

ImageView

Label

TableView

TableViewCell

Friends.SeeFriends

Optiunea “See Friends” din meniul Friends afiseaza prietenii utlizatorului current:

TRIPS

Meniul de la “Trips” ii permite utilizatorului sa aleaga din 3 optiuni: “New”, “Requests” si “Your Trips”. Optiunea “New” permite initierea unei noi excursii. La “Requests” se gasesc exxcursile initiate de altii ce includ si utilizatorul actual ca si amic de calatorie. In cadrul acestora utilizatorul current trebuie sa completeze optiunile cu proprile preferinte. “Your Trips” asiseaza vacantele si itinerariile deja confirmate sau initializate de utilizatorul actual. Itinerariile iau in considerare si optiunile prietenilor de calatorie, avand puncte commune cu acestia. Ele sunt optimizate si in functie de distanta dintre atractile turistice si ora inchiderii a acestora.

Trips.New

In cadrul optiunii New utilizatorul trebuie sa completeze date despre calatorie. Primul ecran ii cere acestuia un nume pentru calatoria ce urmeaza sa o faca.

Urmatoarele doua ecrane ii cer utilizatorul sa aleaga prietenii de calatorie si locurie pe care vrea sa le viziteze. Daca una din optiuni este aleasa, semnul butonului corsepunzator optiunii isi schimba valoarea: din plus devine minus si invers. Astfel, optiunile pot fi revocate. Este permisa si cautarea prietenilor sau a locurtilor. Aceasta genereaza toate atractile turistice sau toti prieteni ce contin sirul de caractere cautat. Astfel, utilizatorul nu este nevoit sa faca scroll inutil atunci cand stie ce cauta.

Baza de date

Baza de date este componenta care tine minte informatile din conturile utilizatorilor: numele, parolele, adresele de mail ale acestora. In ea sunt retinute si relatile de prietenie dintre utilizatori. Aceasta salveaza si modificarile facute din aplicatie de catre un utilizator, pentru partea ce-I corespunde, bineinteles. Tot aici sunt tinute si preferintele pentru excursii ale utilizatorilor. Astfel este posibila gestionarea intregii aplicatii si crearea functionalitatii principale a acesteia: generarea unor itinerarii pe baza preferintelor utilizatorilor, grupulurilor de prieteni care calatoresc si a informatilor legate de punctele turistice.

<diagrama conceptuala>

Similar Posts