message:Completați toate cîmpurile de pe pagina delegate:nil cancelButtonTitle:OK otherButtonTitles:nil, nil show [311697]
Introducere
Boomul industriei de aplicații mobile din toată lumea în ultima perioadă a dus însă la apariția unor platforme care să ofere practic o scurtătură pentru dezvoltarea complicată a [anonimizat].
Cu o cotă de piață de 69% (pentru iPhone și iPad) [anonimizat]. Dezvoltarea Apps iOS rămâne o metodă bună pentru atingerea unei largi audiențe de utilizatori mobili. [anonimizat] o [anonimizat].
iOS ar putea fi apreciat mai mult de utilizatorii care preferă aplicații și utilități preinstalate care își fac realmente lucrul de bază. Deși există o [anonimizat]. [anonimizat] a [anonimizat]. [anonimizat], [anonimizat] o directionare către un scop precis de funcționalitate.
Dezvoltarea aplicațiilor native (App) permite obținerea celor mai bune performanțe (funcționare locală și implicit o navigare rapidă și fluidă) și oferirea unei experiențe mai plăcute pentru utilizator.
iPhone oferă numeroase funcționalități printre care: [anonimizat], alerte, [anonimizat], iMessage, GPS, geolocalizare, accelerometru și giroscop. Fiecare dintre aceste funcționalități necesită anumite competențe și experiență pentru a fi dezvoltate.
Cu o [anonimizat], iPad si iPod Touch. Dezvoltarea de aplicatii native pe o astfel de platforma ramîne o modalitate utilă de a [anonimizat] a oferi vizibilitate mărcii sau să ofere o soluție inovatoare partenerilor. [anonimizat].
1 Analiza domeniului de cercetare
Orice sistem interacționează cu mediul pe trei paliere: substanțial, energetic și informațional. [anonimizat], iar altele subliniate.
Concepția teoriei generale a [anonimizat], care de obicei este legată cu această teorie. [anonimizat] a [anonimizat], și formularea cunoștințelor în spațiul ei se referă la toată clasa teoriilor sistemelor specifice. Într-[anonimizat]ntată în metateoria sistemică într-o formă teoretică specifică, metateoria este unul din tipurile cunoașterii teoretice și la construcția ei trebuie să fie îndeplinite toate cerințele pentru astfel de teorii.
Totodată teoria generală a sistemelor ca metateorie nu pune în fața sa nici problemele creării concepției sistemice universale tehnico-științifice, nici problemele creării teoriilor concrete a sistemelor reale. Ca rezultat concepția teoriei generale a sistemelor ca metateorie este în stare/capabilă să înlăture dificultățile și contradicțiile, apărute la tratarea teoriei generale a sistemelor ca concepție sistemică generalizată tehnico-științifică.
Ca și în cazul construcției metalogicii și metamatematicii, așa și la elaborarea metateoriei sistemice într-o formă evidentă se disting două tipuri principale a cercetărilor metateoretice. În primul caz e vorba despre construcția metateoretică a teoriilor sistemice specializate, iar în al doilea caz despre analiza proprietăților metateoretice teoriilor corespunzătoare, formalismele. Soluționarea problemelor cazului al doilea într-un sens cunoscut precede realizarea construcțiilor metateoretice a teoriilor sistemice.
Analiza metateoretică a proprietăților teoriei sistemelor reprezintă o problemă importantă, soluționarea căreia permite precizarea granițelor și posibilităților teoriile sistemice, însă spre un astfel de caz nu se reduce toată problematica metateoriei sistemice. Construcția sistematică a metateoriei a teoriilor sistemice specialzate trebuie să devină produsul finit a studiului în această direcție. Conturile generale a metateorie sistemice (caracterul afirmațiilor formulate în spațiul ei și evidențierea principalelor compartimente a astfel de teorii) într-o măsură considerabilă depinde de presupunerile inițiale admise și formularea definițiilor principalelor noțiuni cercetărilor sistemice. În legătură cu aceasta o importanță majoră are discernământul dintre concepțiile mulțimilor teoretice și celor sistemice generalizate.
1.1 Analiza sistemică a elaborării produselor soft
Analiza sistemică își concentrează atenția la aspectele metodologice ale soluționării problemelor.
Deci, metodele analizei sistemice prevăd numai implementarea anumitor modele în procesul analizei sistemice și în felul acesta metodele se reduc la modelare și simulare.
Aceste discipline sunt reunite în studierea fenomenelor și soluționarea problemelor prin abordarea sistemică. Însă dacă în cercetările operaționale abordarea sistemică e orientată în principiu spre analiza legăturilor în interiorul sistemului, orientată spre soluționarea unei probleme particulare concrete, apoi în analiza sistemică este orientată pentru evidențierea legăturilor externe a sistemului dat cu cele vecine care influențează soluționarea problemei date.
Analiza sistemică constă în apropierea succesivă de rezultatele necesare și conține următoarele etape:
formalizarea sarcinii;
cercetarea;
analiza;
rațiuni anteriore (concordanța);
confirmare (verificare experimentală);
rațiune definitivă și implementarea rezultatelor obținute.
Analiza studiul unui sistem presupune printre altele:
stabilirea legăturilor colecției, considerată ca un tot, cu mediul, legături care odată stabilite și cunoscute în comportare permit desprinderea colecției de mediu și studiul ei separat;
evidențierea relațiilor dintre obiectele colecției, precum și a evoluției acestor relații în timp;
determinarea evoluției sau evoluțiilor posibile ale colecției în timp, vom spune a traiectoriei acesteia, evoluții urmărite în condiționarea lor externă (comportamentală) sau internă (structurală).
Teoria dinamică al sistemelor se preocupă cu schimbările sistemelor în timp și se folosesc două modalități principiale de descriere: internă și externă.
1.2 Metodele de concepție și de realizare a produselor informaționale
Metodele de concepție se pot clasifica în trei mari categorii: metode structurate; metode sistemice; metode orientate obiect [1].
Metodele structurate folosesc descompunerea progresivă descendentă „top-down”; ele fiind în fapt carteziene. Concepția constă în crearea, pornind de la specificațiile, unui ansamblu unitar în interacțiune având fiecare o funcție clar definită. Diagramele de fluxuri de date descriu prelucrările logice ale datelor și arată maniera în care datele intrate sunt modificate printr-o suită de transformări funcționale pentru a ajunge la datele de ieșire. Cele mai cunoscute metode aparținând acestei prime generații sunt: SADT (Structured Analisys and Design Technique), JSD (Jackson System Development), Yourdon etc. Toate au la bază analiza funcțională a întreprinderii. Diagramele de structură permit vizualizarea structurii ierarhice, descrierea programului sau a unui modul fiind stabilite pe mai multe niveluri, prin rafinări succesive.
Metoda SADT propune un ansamblu de diagrame ordonate ierarhic în care fiecare poate fi considerată fie ca o diagramă – părinte (sinteză a diagramelor sale fiu), sau ca o diagramă – fiu (dezvoltare a unei părți a celei părinte). În cazul metodei SADT, datele și prelucrările sunt examinate împreună definindu-se actigrame (sau diagrama activităților) și datagrame (diagrama datelor).
Avantajele metodelor ierarhice constau în simplitate și o bună adaptare la cerințele formulate de utilizator. Dezavantajele pornesc de la conceperea sistemelor informatice conform cerințelor analizei funcționale, ceea ce determină concentrarea efortului de analiză și proiectare asupra prelucrărilor în condițiile în care acestea sunt cele mai supuse modificări în timp, modelarea datelor căzând pe un plan secund.
Proliferarea aplicațiilor creează propriile lor fișiere ducând la redundanțe și mai ales incoerență a datelor în sistemele de informare a organizațiilor.
Metodele structurate au fost integrate în S.G.B.D. prin limbajul de descriere a datelor.
Metodele sistemice permit vizualizarea și înțelegerea organizării datelor. Aceste metode se compun din abstractizări care prezintă lumea reală ca pe o colecție de entități și de legături, stabilite între acestea. Majoritatea permite definirea de restricții descriind aspectele statice, dinamice sau chiar temporare ale entităților. În această calitate ele constituie formalisme lizibile în cadrul specificațiilor de nevoi. Două metode constituie referința de reprezentare semantică: metoda individuală care va fi integrată și metoda entitate–relație.
Amintesc printre metodele sistemice pe cele de concepție în timp real care asigură funcționarea corectă în funcție de rezultatele produse prin sistem și de momentul la care ele sunt produse. Acestea reprezintă oarecum un sistem de stimuli/răspuns; stimulii fiind generați de captatori sau de acționari. Atunci când stimulii sunt aperiodici se poate concepe un sistem ca un ansamblu de procese paralele care cooperează de o manieră în care transferă controlul componentei apropiate, de la recepția unui stimul. Se disting două clase active în timp real [2]:
sistemele de urmărire-control;
sistemele de cumulare de date.
Sistemele de urmărire și control cercetează în permanență numărul de captatori, și în funcție de valoarea lor, declanșează acțiuni care eficientizează acționarii (de exemplu sistemele de alarmă antifurt din imobile).
Sistemele de cumulare de date culeg datele captate pentru procesare și analiză. Perioadele procesului de achiziție și cele ale procesului de procesare nu sunt în armonie. Astfel apar diferențe de viteză dictate de recurgerea la un mijloc de stocare (tampon). Sistemul este organizat după modelul producător–consumator cu mecanisme de excludere mutuală, pentru a evita cazul unde producătorul și consumatorul de date acced, în același timp, la elementul tampon. Aceste metode recurg la diverse formalisme, de remarcat fiind cele din rețele Petri pentru aspectul dinamic care au fost dezvoltate de formalizări specifice.
Metodele sistemice cuprind de o manieră globală sistemul informațional și reprezintă a doua generație a metodelor de proiectare. Reprezentative sunt metodele Information Engeneering, MERISE, AXIAL etc. Apropierea se realizează la nivel conceptual și se disting patru nivele de abstractizare:
nivelul conceptual exprimă opțiunile de gestiune;
nivelul organizațional exprimă alegerile întreprinderii legate de resurse umane și materiale. Se integrează la acest nivel noțiunile de timp, loc, de actori;
nivelul logic permite alegerea mijloacelor și a resurselor informatice făcând abstracție de caracteristicile lor tehnice precizate;
nivelul fizic este reprezentat prin alegerile tehnice urmărind specificitatea lor. La fiecare nivel de abstractizare sistemul de informare este reprezentat prin trei modele: datele, prelucrările, comunicările [3].
Ceea ce este specific acestor metode este utilizarea teoriei sistemelor în analiza întreprinderii. Sistemul informatic este abordat sub două aspecte complementare, datele și prelucrările analizate-modelate independent cu reunirea lor cât mai târziu posibil. Spre deosebire de metodele ierarhice, metodele sistemice acordă „prioritate datelor față de prelucrări și respectă cele trei nivele de abstractizare introduse de raportul ANSI/SPARC: conceptual, logic și fizic”. Avantajele metodelor sistemice apar din promovarea tehnologiei bazelor de date. Dezavantajele sunt datorate deficiențelor care pot apărea în modelarea prelucrărilor și a discordanțelor posibile între modelele datelor și prelucrărilor [4].
Metoda orientată obiect este caracterizată prin atenția deosebită acordată concomitent structurii datelor și structurii funcționale. Această viziune permite construirea unei baze stabile în procesul de dezvoltare a modelului și utilizarea conceptului obiect, unitar de-a lungul întregului ciclu de viață. Toate celelalte concepte: funcții, asocieri, evenimente gravitează în jurul obiectelor, astfel încât nu este necesară trecerea la alte notații sau interpretări de semantică în diferite etape de dezvoltare. Metoda orientată obiect se caracterizează prin definirea a trei modele:
modelul obiectelor are rolul de a descrie obiectele care intervin în problema de rezolvat și relațiile dintre ele. Modelul obiectual reprezintă descrierea structurii statice a obiectelor, claselor de obiecte, a operațiilor și atributelor, precum și a legăturilor și a relațiilor dintre ele.
modelul dinamic are rolul de a descrie stările pe care le poate avea un obiect și evenimentele la trecerea dintr-o structură în alta. Modelul dinamic descrie interacțiunea dintre obiecte și este focalizat pe aspecte ce se schimbă în timp, deoarece orice obiect are un ciclu de viață cu un punct de pornire și unul de sfârșit. Modelul dinamic descrie acest ciclu de viață, ce se întâmplă de-a lungul său și cum este influențat obiectul.
modelul funcțional are rolul de a descrie prelucrările și fluxurile de date. Modelul funcțional prezintă transformările valorilor datelor precizând sursa și destinația lor.
Avantajele oferite de metoda OMT sunt valorificate pe deplin în proiectarea și realizarea de sisteme informatice care trebuie să răspundă unor noi cerințe și anume:
reprezentarea complexă a realității (firmă, clienți, produse, servicii, etc.);
informația gestionată în cadrul unui sistem informatic are tendința de creștere în complexitate, iar manipularea ei trebuie să fie într-o formă ușor de perceput de către utilizatorul final.
sistemele informatice realizate trebuie să fie flexibile în raport cu modificarea structurilor de date și trebuie să evolueze natural în timp, urmând astfel evoluția organismului economic, bancar, financiar pe care îl deservește.
sistemele informatice evoluează spre abordări multimedia care combină text cu foi de calcul, grafice, animație și voce.
Majoritatea metodelor orientate obiect utilizează reguli sau operații semantice: generalizarea/specializarea, agregarea/descompunerea, combinate cu moștenirea și încapsularea. [5]
1.3 Concepțiile abordării sistemice
Orice sistem este alcătuit din alte subsisteme. Spre exemplu un student este element al sistemului grupa, aceasta la rândul ei face parte dintr-un sistem mai complex – facultatea. Deoarece schimbările din anumite sisteme pot influența alte sisteme, persoana ce ia deciziile trebuie să țină cont de această interinfluență. Anume în aceste cazuri este necesară o abordare sistemică, care este o metodologie generală tuturor științelor.
Abordarea sistemică – metodologie de proiectare, este bine știut faptul că persoanele ce ocupă posturi de conducere în domeniul comerțului, industriei, educației etc. întâmpină mari greutăți în procesul de administrare din cauza multitudinii problemelor cu care se confruntă. Astfel fiecare problemă trebuie studiată sub toate aspectele, iar la căutarea soluțiilor trebuie de ținut cont că aceasta (soluția) influențează într-o măsură oarecare asupra întregului sistem.
Abordarea sistemică are mai multe aspecte și anume:
metodologie de proiectare;
bază conceptuală de proiectare;
metodă științifică;
metodă de analiză a organizării;
metodă de reglare sistemică;
metodă legată de proiectarea sistemelor, cercetarea operațiilor și aprecierea economică;
TGS aplicativă.
Abordarea sistemică – bază conceptuală generală, sistemele din diferite domenii au multe însușiri comune. Una din problemele abordării sistemice este găsirea unor astfel de structuri, însușiri și fenomene care să fie valabile pentru sisteme din diferite domenii. Acestea ar permite mărirea nivelului de generalitate a legilor, a căror domeniu de valabilitate este limitat. În cazul abordării sistemice generalizarea se face luând în considerație:
modul de organizare a sistemului;
mijloacele de obținere, păstrare, prelucrare și extragere a informației de către sisteme;
modul de funcționare, comportate, reacționare și adaptare la primirea semnalelor din mediul extern.
Nivelul de generalitate poate fi ridicat, dacă vom folosi notații și termeni generali. Spre exemplu matematica prin notațiile sale servește drept punte între celelalte științe.
După părerea lui Emeri, nu trebuie să ne grăbim să creăm o bază conceptuală generală, pentru a permite prevalarea multitudinii ideilor în procesul formării unei noi discipline. Acoff, din contra, tinde să introducă noțiunea de „sistem de sisteme”.
Metode de soluționare și modele. Ridicarea nivelului de generalitate poate fi obținută prin găsirea domeniilor, în care aceleași modele descriu fenomene diferite. Spre exemplu noțiunea de lanțuri Marcov, a aparatului statistic de determinare a probabilității apariției evenimentelor succesive, poate servi la descrierea:
deteriorărilor și defectelor mecanismelor;
diferitelor încălcări;
cozilor în magazinele cu autodeservire.
Trebuie de remarcat că metodele generale spre deosebire de cele speciale au posibilități limitate. Atunci când lărgim domeniul de utilizare a metodei ar trebui să păstrăm și posibilitățile ei. Una din problemele abordării sistemice este găsirea legăturilor dintre diverse metode, ceea ce ar permite lărgirea sferei lor de aplicabilitate și facilitarea înțelegerii noilor fenomene. Ori de câte ori este posibil aceasta (găsirea legăturilor), noi trebuie să renunțăm la specializare și divizare.
Abordarea sistemică – metodă științifică, cu ajutorul cărora s-au obținut rezultate considerabile în fizică, nu pot fi aplicate în cazul sistemelor vii. Lumea e compusă din sisteme fizice și vii. Acestea două posedă o mulțime de calități și particularități care sunt atât de diferite încât utilizarea în ambele cazuri a acelorași metode duce la confuzii și erori. Metoda științifică, care ne-a dat posibilitatea de a descoperi natura fizică, trebuie completată cu noi metode care ar explica fenomenele în sistemele vii.
Abordarea sistemică și ceea ce a determinat apariția ei, teoria sistemelor, stimulează dezvoltarea paradigmei științifice a noii metode, care are de a face cu așa procese precum: viața, moartea, nașterea, dezvoltarea, adaptarea, cunoașterea, cauzalitatea și interacțiunea. Această metodă nouă de gândire ce poate fi aplicată în așa domenii ca biologia și psihologia comportamentului, este creată cu ajutorul abordării sistemice.
Abordarea sistemică asigură noi căi de soluționare a problemelor în care avem de a face cu noțiuni instabile precum: convingerile, sentimentele, judecățile etc.
Abordarea sistemică – metodă de analiză a organizării, se utilizează pentru cercetarea organizării, precum și sistemelor ce au un anumit scop și sunt create de om pentru satisfacerea necesităților sale. Abordarea sistemică ca metodă nouă de analiză a organizării este o completare a metodelor anterior folosite. Ea permite examinarea organizării ca un tot întreg, cu scopul obținerii eficienței întregului sistem în pofida tendințelor contradictorii a componentelor.
Abordarea sistemică trebuie să privească organizarea ca un sistem, acțiunea căruia se descrie în așa termeni ca: „cibernetica”, „cicluri închise și deschise”, „autoreglare”, „echilibru”, „cercetare”, „stabilitate” și „dezintegrare”. Ea completează alte abordări utilizate în teoria organizării și conducerii.
Abordarea sistemică – metodă de reglare sistemică, organizațiile mari, precum corporațiile internaționale, organizațiile militare întâlnesc probleme a căror amploare și interconexiune necesită o abordare complexă. Aceste organizații trebuie să aibă posibilitatea de a planifica, introduce și conduce eficient cu tehnologiile moderne. În orice situație concretă trebuie luate în seamă destinația și structura organizației, privită ca un întreg, iar conducătorul să caute să ridice eficiența organizației (proiectarea sistemică) și nu a unei componente aparte a ei (îmbunătățirea subsistemelor). Astfel abordarea sistemică și reglarea sistemică pot fi privite ca una și aceeași modalitate de gândire, cu metodologie comună, bazată pe aceleași principii.
Abordarea sistemică – metodă legată de proiectarea sistemelor, cercetarea operațiilor și aprecierea economică, metodele proiectării sistemice și evaluării economice sunt apropiate abordării sistemice, ele având o bază comună. Nu poate fi neglijată legătura abordării sistemice cu cercetarea operațiilor și știința metodelor de conducere, care au o bază teoretică și scopuri comune.
1.4 Dezvoltarea aplicațiilor
Majoritatea aplicațiilor utilizează platformele Java și .Net. În continuare vom clasifica aplicațiile pe categorii.
Aplicații desktop. Deși bibliotecile AWT (Abstract Window Toolkit) și Swing nu duc lipsă de caracteristici, Java s-a chinuit să se stabilizeze pe piața aplicațiilor desktop. Unele opinii spun că Sun Microsystems nu a promovat corespunzător Java dezvoltatorilor și utilizatorilor ca o soluție viabilă pentru aplicațiile desktop. Lansarea versiunii 6.0 în Decembrie 2006 a reînnoit atenția pentru aplicațiile desktop introducînd un nou set de instrumente pentru integrare pe desktop.
.Net este mai populară în zona aplicațiilor desktop oferind Windows Forms, Windows Presentation Foundation și Silverlight. Aplicațiile .Net sunt de prim rang în mediul Windows oferind o senzație de apartenență comparativ cu Java Swing.
Aplicații web. Acest tip de aplicații reprezintă zona cu cea mai mare concurență între cele două platforme. Java prin intermediul Java EE și .Net prin ASP.Net concurează în a oferi conținut dinamic web și aplicații. Ambele platforme sunt utilizate și sunt bine reprezentate în piața prin seturi mari de instrumente și produse adiacente. Cu toate acestea soluțiile software la scară largă de tipul „high-end” tind să opteze pentru platforma Java datorită unei stabilități crescute, caracteristici cum ar fi JMS, JCA, dar și abilitatea de a rula pe orice sistem de operare sau platformă hardware.
Aplicații mobile. În acest domeniu este cunoscut faptul că platforma Android pentru aplicații mobile aparținînd Google se bazează pe platforma Java, Google creînd o nouă mașină virtuală personalizată denumită Dalvik pentru a optimiza execuția codului Java pe dispozitivele mobile.
Oracle pune la dispoziție Java ME o implementare de referință pentru distribuitorii de telefoane mobile. Java ME este alcătuită din diverse profile ce sunt subseturi ale mediului de dezvoltare Java desktop la care se adaugă biblioteci adiționale ce vizează dispozitivele mobile și o dezvoltare de aplicații de tipul set-top-box. Chiar daca multe telefoane includ o mașina virtuală Java, aceasta nu este mereu folosită de utilizatori. Inițial aplicațiile Java pe cele mai multe telefoane constau în meniuri, mici jocuri, software pentru download-ul de ringtone-uri, la acestea se adaugă aplicații preîncărcate pe telefon cum ar fi dicționare, ora pe glob sau calculatoare.
Microsoft oferă în acest domeniu .Net Compact Framework ce rulează pe Windows CE și dispozitive mobile și pe XBOX 360, dar și .Net Micro Framework folosită pentru dezvoltarea cu resurse limitate.
1.5 Analiza aplicațiilor similare
În urma cercetărilor efectuate pe piața aplicațiilor mobile ce țin de disponibilitatea informațiilor despre spălătoriile auto putem spune că este o nișă destul de îngustă, în sensul că nu există pe piață o multitudine de aplicații de acest gen.
În continuare vom prezenta căteva aplicații ce sunt disponibile.
În figura 1.1 este prezentată aplicația Drupe, care permite vizualizarea sopălătoriilor disponibile.
Figura 1.1 – Aplicația Drupe
Aplicația dată permite doar vizualizarea spălătoriilor și posibilitatea de deplasare către ele. De asemenea, ea permmite introducerea comentariilor despre o spălătorie.
O altă aplicație disponibilă este aplicația de la compania Daac Hermes. Imagini ale aplicației sunt prezentate în figura 1.2.
Figura 1.2 – Aplicația Daac Hermes
Spre deosebire de prima, aici există posibilitatea de a face o înscriere în prealabil pentru servicii de spălătorie.
În urma analizei pieței s-a hotarât elaborarea unei aplicații ce va permite înbinarea posibilităților acestor două aplicații.
În primul rând, indicarea adresei spălătoriei selectate, și bronarea unui loc pentru servicii ca în a doua aplicație.
1.6 Specificarea cerințelor
În această parte se analizează cerințele utilizatorului, care reprezintă o etapă din ciclul de viață a aplicației și va fi descrisă în etapa de planificare.
Aplicația proiectată va permite afișarea spălătoriilor disponibile în raza aflării proprietarului automobilului și posibilitatea de a se înscrie în prealabil pentru prestarea serviciilor.
Cerințele puse fața de aplicație sunt:
crearea unei interfețe comode pentru utilizator;
flexibilitatea accesării elementelor;
vizualizarea rezultatului introducerii datelor;
posibilitatea de anulare a bronării prealabile.
Cerințe și restricții privind documentația proiectului
Proiectul va conține atât o documentație a codului sursă cât și o documentație a modului de utilizare a produsului (manual de utilizare, asistent de utilizare).
De asemenea, documentația va mai cuprinde:
fișa de specificare a cerințelor clientului;
diagramele UML;
planul de dezvoltare al produsului informatic;
descrierea funcționalităților produslui realizat.
2 Analiza și modelarea sistemului informațional
Modelele construite pe parcursul dezvoltării unui sistem sunt reprezentări abstracte ale sistemului. Fiecare model reflectă o anumită vedere asupra sistemului și corespunde unui nivel de detaliu.
În etapa de analiză se construiesc modele care exprimă cerințele impuse sistemului. Modelele de analiză corespund unei vederi externe asupra sistemului. Se folosesc de către client, viitorii utilizatori ai sistemului, experti ai domeniului aplicației, analiști, echipa de verificare și validare a sistemului.
În etapa de proiectare se construiesc modele care redau arhitectura sistemului, alocarea cerințelor pe subsisteme, distribuția proceselor în sistem, sincronizarea lor, stările și tranzițiile între stări. Alte modele descriu realizarea fizică a sistemului, echipamentele din componența sa și repartiția componentelor program.
Fiecare vedere asupra unui sistem poate avea aspecte structurale și aspecte comportamentale. În funcție de natura sistemului, unele modele pot fi mai importante decat altele. De exemplu, pentru unele sisteme sunt mai importante aspectele structurale și functionale, pentru altele aspectele temporale.
În continuare vom descrire fiecare model aparte.
2.1 Descrierea comportamentală a sistemului
2.1.1 Imaginea generală asupra sistemului
Diagrama cazurilor de utilizare reprezintă interacțiunea dintre variantele de utilizare, care sunt funcțiile sistemului și persoanele în acest sistem. Adică prezintă persoane sau sisteme, care primesc sau transmit informația în sistemul dat. Diagrama reflectă cerințele către sistem din punct de vedere al utilizatorului. Acest tip de diagramă descrie funcționarea sistemului la general. Utilizatorii, managerii proiectării, analiticii, specialiștii în domeniu și toți cei care sunt cointeresați în sistemul dat pot să înțeleagă ce poate face sistemul în cauză.
Avantajul principal a variantelor de utilizare este că folosindu-le separăm implementarea sistemului de descrierea funcțiilor sale. Acest fapt ajută concentrarea atenției pe așa întrebări ca satisfacerea cerințelor către sistem fără a avea nevoie de a defini cum sistemul va fi implementat. Diagramele variantelor ne arată ce sistemul va face și cum poate fi utilizat încă la începutul proiectului.
Metoda diagramelor variantelor de utilizare nu este cea standard și diferă de ea foarte mult. Separînd proiectul în diagramele variantelor noi atragem atenția mai mult procesului de percepere a sistemului, nu și felului de implementare a lui. Decompoziția funcțională are ca scop devizarea poiectului în subprobleme cu care se va confrunta sistemul, apoi diagramele variantelor atrag atenția asupra aspirațiilor utilizatorului către sistem.
Este necesar de adus la cunostință ca sistemul creat nu se va limita doar la aceste funcții reprezentate în diagramă, însă pe baza lor se va baza sistemul, vor fi bazele de funcțiune a softului. Aceste funcții ale soft-ului pot fi vizualizate în figurile ce urmează
În figura 2.1 este prezentată diagrama Use case a utilizatorului.
Figura 2.1 – Posibilitățile utilizatorului
În această figură putem urmări acțiunile pe care le poate efectua utilizatorul aplicației. Principalul scop al aplicației este rezervarea locurilor de parcare.
În figura 2.2 este prezentată diagrama Use Case pentru rezervarea locului de parcare.
Figura 2.2 –Rezervarea locului de parcare
După cum se vede din figură utilizatorului i se afișează lista cu parcările. După selectarea unei parcări utilizatorul poate vizualiza informația generlă despre parcare și la necesitate rezervarea unui loc în parcare.
În figura 2.3 este prezentată diagrama de utilizare pentru procesul de vizualizare a informației despre parcare.
Figura 2.3 – Vizualizarea informației despre parcare
În cazul alegerii opțiunii de vizualizare a informației generale despre parcare, utilizatorului i se va deschide o fereastră în care va fi afișată toată informația despre parcare:
vizualizarea locurilor libere;
vizualizarea prețului pentru o oră;
vizualizarea prețului pentru o zi;
vizualizarea prețului petru o lună.
În figura 2.4 este prezentată diagrama de utilizare la bronarea locului.
Figura 2.4 – Bronarea locului
Pentru a putea rezerva un loc în parcare este necesar de a indica datele:
nume;
număr de telefon;
modelul auto;
numărul automobilului;
perioada de staționare.
În figura 2.5 este prezentată diagrama Use case a dispozitivului de citire a informației.
Figura 2.5 – Posibilitățile Reade-ului
După cum se vede din diagramă, el are două funcții de bază – citirea datelor și retransmiterea datelor în baza de date în cazul cînd datele automobilului vor fi validate pentru rezervare.
2.1.2 Descrierea scenariilor de utilizare a aplicației
Diagramele de secvență prezintă interacțiunile care au loc între diverse obiecte ale unui sistem, ordonate cronologic. Ele determină obiectele și clasele implicate într-un scenariu și secvențele de mesaje transmise între obiecte necesare îndeplinirii funcționalității scenariului. Diagramele de secvență sunt asociate unui caz de utilizare. În figura 2.6 am descris diagrama de secvențe pentru instalarea aplicației.
Figura 2.6 – Secvențele la instalarea aplicației
La început vom determina pași care sunt executați în cadrul cazului:
utilizatorul descarcă aplicația;
utilizatorul instalează aplicația;
vizualizarea rezultatului instalării.
În figura 2.7 este prezentată diagrama de secvențe la rezervarea unui loc în parcare.
Pentru a putea rezerva un loc este necesar de a indica datele:
nume;
număr de telefon;
modelul auto;
numărul automobilului;
perioada de staționare.
Figura 2.7 – Rezervarea locului în parcare
Odată ce datele au fost introduse în cîmpurile corespunzătoare, locul în parcare va fi rezervat.
În figura 2.8 este prezentată diagrama de secvențe la gestionarea informației. Aceste date sunt gestionate numai de către administrator. După cumse vede din diagramă, la gestionare, utilizatorul acreditat (administratorul) execută operațiile necesare asupra informației din baza de date, apoi la cererea utilizatorului datele gestionare se înscriu în baza de date a aplicației. După efectuarea tuturor operațiilor asupra datelor, utlizatorului îi este afișată informația gestionată la ecran.
Figura 2.8 – Gestionarea informației
În figura 2.9 este prezentată diagrama de secvențe la editarea datelor. După cum se vede din desen, utilizatorul selectează întegistrarea și alege opțiunea de modificare. Sistemul informațional deschide forma de editare, unde modifică datele necesare. După editare, datele prin intermediul modulului de conectare sunt transmise modulului de procesare unde se verifică veridicitatea tipurilor de date. Daca toate datele sunt introduse corect, atunci ele se vor stoca în baza de date și utilizatorului vor fi afișate rezultatele.
Figura 2.9 – Editarea datelor
Cazul de utilizare pentru funcția de înregistrare, editare și vizualizare a unei cereri.
Pașii care sunt executați în cadrul cazului:
caută datele pentru editare;
caută;
returneză lista cererilor căutate;
selectează cererea spre modificare;
salvează modificările;
salvează în baza de date modificările făcute.
2.1.3 Fluxurile de mesaje și legăturile dintre componentele aplicației
O diagramă de colaborare reprezintă o colaborare, care este un set de obiect rolurile asociate într-un anumit context și o interacțiune, care este setul de mesajelor schimbate între obiecte pentru a obține o operațiune sau rezultat. Aceasta este o interacțiune diagramă care afișează, pentru un sistem eveniment definit de o caz de utilizare, cum un grup de obiecte colabora unul cu altul.
Spre deosebire de o diagramă de secvență, o diagramă de colaborare Arată relațiile dintre obiect roluri și nu exprimă timp ca dimensiune separată. Prin urmare, mesajele într-o diagramă de colaborare sunt numerotate pentru a indica secvență lor.
În figura 2.10 sunt prezentate diagrama de colaborare pentru instalarea aplicației.
Figura 2.10 – Fluzurile de mesaje pentru procesul de instalare
În figura 2.11 sunt prezentate fluxurile de mesaje pentru procesul de rezervare a unui loc în spălătoria auto.
Figura 2.11 – Fluxurile de mesaje pentru rezervarea unui loc în spălătorie
2.1.4 Stările de tranzacție a sistemului
O diagramă de stări modelează viața unui obiect prin stările sale și schimbările de stare care au loc pe parcursul vieții. Schimbările de stare sunt determinate de evenimente.
În figura 2.12 este prezentată diagrama de stare la instalarea aplicației.
Figura 2.12 – Setarea aplicației
Diagrama reflectă cazul cînd utlizatorul instalează pe dispozitivul mobil aplicația.
2.1.4 Modelarea vizuală a fluxurilor
Diagramele de activități sînt cazuri particulare ale diagramelor de stări. În ele sînt reprezentate trecerile fluxului de control de la o activitate la alta în cadrul sistemului.Acest tip de diagrame este folosit pentru a modela dinamica unui proces sau a unei operații. Spre deosebire de diagrama de interacțiune care evidențiază controlul execuției de la obiect la obiect, diagramele de activități scot în evidență controlul execuției de la o activitate la alta. Aceste diagrame pot conține:
stări-activități sau stări-acțiune;
tranziții;
obiecte.
Există posibilitatea ca mai multe activități să se execute în paralel. Pentru sincronizarea acestora se folosește așa-numita bară de sincronizare. Aceasta poate fi de 2 tipuri:
fork – are o tranziție de intrare și una sau mai multe tranziții de ieșire, fiecare tranziție de ieșire prezentînd un flux de control independent;
join – poate avea 2 sau mai multe tranziții de întrare și una singură de ieșire, în acest caz fiecare flux de control așteaptă pînă cînd toate celelalte fluxuri de întrare ajung în acel punct.
În figura 2.13 este prezentată diagrama activităților pentru cazul de rezervare a locului în parcare.
Figura 2.13 – Rezervarea locului în parcare
În această diagramă sunt arătate acțiunile ce trebuie să fie îndeplinite pentru rezervarea unui loc în parcare. După cum se vede din diagramă la rezervarea unui loc în parcare de către utilizator, aplicația procesează datele introduse și apoi ele sunt transmise în baza de date. Acolo are loc memorarea datelor și apoi datele sunt transmise serverului pentru stocare.
2.2 Descrierea structurală a sistemului
2.2.1 Descrierea structurii statice a sistemului
Clasa – este o oarecare esență care încapsulează datele și acțiunile. Diagrama claselor reprezintă colaborarea dintre clasele sistemei. Clasele se pot analiza ca tipuri de obiecte. Clasele conțin date și acțiuni care acționează asupra acestor date. Diagrama claselor se creează pentru fiecare tip de obiect din diagrama succesiunilor și din diagrama interacțiunilor. În diagrama claselor este arătat legăturile dintre clase.
În figura 2.14 este prezentată diagrama clase lor sistemului informațional.
Figura 2.14 – Clasele sistemului informațional
În diagrama claselor am construit cîte o clasă pentru fiecare tip de obiect și am arătat atributele specifice fiecarei clase, operațiile precum și relațiile dintre clase.
În figura 2.15 sunt reprezentate clasele pentru întroducerea datelor.
Figura 2.15 – Clasele pentru introducerea informației
Unul din avantajele CASE-ului Rational Rose este posibilitatea generării carcasului preventiv al sistemului soft din modelul static (în unele cazuri pentru sistemele distribuite se permite generarea codului și din alte tipuri de diagrame), la generare se iau în considerație proprietățile proiectului în întregime, dar și proprietățile claselor, rolurile, atributelor, operațiile, etc. Pe lângă proprietățile ce reglementează caracteristicile proiectului propriu zis, există și denumirile fișierelor proiectului, denumirea claselor container, parametrii ce indică deosebirile limbajelor în parte. Pentru fiecare clasă se generează codul clasei generate împreună cu funcțiile și operațiile definite în Rational Rose.
2.2.2 Relatiile de dependență între componentele sistemului
Diagrama componentelor reprezintă modelul la nivel fizic. În ea se reflectă componentele de întreținere a programului, a sistemului și legăturile dintre ele. Se cunosc două tipuri de componente: fișiere executabile și bibliotecile codului inițial.
În figura 2.16 este prezentată diagrama componentelor simplificată a sistemului informațional. În diagrama componentelor am arătat legăturile din cadrul sistemului. Aici este arătat sistemul în întregime. În programul principal se va putea de identificat utilizatorii sistemului. Aici sunt arătate componentele ce alcătuiesc sistemul în întregime. Programul principal conține fișierul executabil cît și fișierele *.cs cât și cele *.dll, care participă la funcționarea sistemului.
Figura 2.16 – Componentele aplicației
Diagrama de componente prezintă dependențele existente între diverse componente ale sistemului (administrație, angajați, contabilitate, clienți, baza de date etc) ce compun întreprinderea în ansamblu.
3 Documentarea produsului realizat
3.1 Platforma IOS
iPhone-ul este o realizare impresionantă în domeniul de design industrial și de inginerie hardware. Cînd sa dezvolta aplicații pentru iPhone, cu toate acestea, Apple nu ne permite accesul direct la orice de acest hardware. De fapt, toate interacțiune hardware-ul are loc exclusiv printr-o serie de straturi diferite de software care acționează ca intermediari între codul de aplicație și hardware-ul dispozitivului. Aceste straturi alcătuiesc ceea ce este cunoscut ca un sistem de operare. În cazul iPhone, acest sistem de operare este cunoscut sub numele de iOS.
În scopul de a obține o mai bună înțelegere a mediului de dezvoltare iPhone, acest capitol va arata în detaliu la diferitele straturi care cuprind sistemul de operare iOS și cadrele care ne permit, în calitate de dezvoltatori, pentru a scrie aplicatii pentru iPhone.
3.1.1 iPhone OS devine iOS
Înainte de lansarea iPad în 2010, sistemul de operare care rulează pe iPhone a fost, în general, menționată ca iPhone OS. Având în vedere că sistemul de operare utilizat pentru iPad este în esență aceeași cu cea de pe iPhone-ul nu a făcut prea mult sens pentru a numi iPad OS. În schimb, Apple a decis să adopte un nume specific mai generic și non-dispozitiv pentru sistemul de operare. Având în vedere predilecție Apple pentru nume prefixate cu litera "i" (iTunes, iBookstore, iMac, etc), alegerea logică a fost, desigur, iOS. Din păcate, iOS este, de asemenea, numele folosit de către Cisco pentru sistemul de operare de pe routerele sale (Apple, se pare, de asemenea, are o predilecție pentru ignorarea mărci). Atunci când se efectuează o căutare pe internet pentru iOS, prin urmare, să fie pregătit pentru a vedea un număr mare de rezultate pentru iOS Cisco, care nu au absolut nimic de-a face cu iOS Apple.
3.1.2 O privire de ansamblu a iOS 6. Arhitectura
Așa cum am menționat anterior, iOS constă dintr-un număr de diferite straturi de software, fiecare dintre care prevede cadre de programare pentru dezvoltarea de aplicații care rulează pe partea de sus a hardware-ul subiacent.
Aceste straturi de sistem de operare poate fi prezentată schematic după cum este ilustrat în Figura 3.1
Figura 3.1- Straturi de sistem
Unele diagrame concepute pentru a descrie grafic software stiva iOS arată un box suplimentar poziționat deasupra stratului de Cocoa Touch pentru a indica aplicațiile carerulează pe dispozitiv. În diagrama de mai sus, nu am făcut acest lucru, deoarece acest lucru ar sugera că singura interfata de care dispune aplicația este Cocoa Touch. În practică,o aplicatie poate apela direct pe oricare dintre straturile de stiva de a efectua sarcini de pe dispozitivul fizic.
Asta a spus, cu toate acestea, fiecare strat sistem de operare oferă un nivel tot mai mare de abstractizare departe de complexitatea de a lucra cu hardware-ul. Ca un dezvoltator iOS ar trebui, prin urmare, uita-te întotdeauna pentru soluții pentru obiectivele de programare în cadrele situate în straturile de nivel superior iOS înainte de a recurge la scrierea de cod, care ajunge până la straturile de nivel inferior. În general, nivelul ridicat de strat programa sa, mai puțin efort și mai puține linii de cod, va trebui să scrie pentru a atinge obiectivul tău. Și, ca orice programator veteran vă va spune, mai puțin cod trebuie să scrie mai puțin posibilitatea de va trebui să introducă bug-uri.
Acum, că am identificat diferitele straturi care cuprind iOS , putem privi acum mai în detaliu la serviciile furnizate de fiecare strat și cadrele corespunzătoare care fac aceste servicii disponibile pentru noi, în calitate de dezvoltatorii de aplicații.
3.1.3 Cocoa Touch Layer
Stratul de cacao Touch se află în partea de sus a stivei iOS și conține cadrele care sunt cel mai frecvent utilizate de către dezvoltatorii de aplicații pentru iPhone. Cocoa Touch este scris în Objective-C în primul rând, se bazează pe standardul API-ul Mac OS X de cacao (așa cum se găsește în computere desktop și laptop) și a fost extins și modificat pentru a satisface nevoile de hardware-ul iPhone.
Stratul de cacao Touch oferă următoarele cadre pentru dezvoltarea iPhone app.
Cadru UIKit (UIKit.framework). Cadrul UIKit este un vast și bogat de caracteristici bazate pe interfață de programare Objective-C. Este, fără îndoială, cadrul cu care veți petrece cel mai mult timp de lucru. Cărți întregi ar putea, și, probabil, va fi scris, cu privire la cadrul de UIKit singur. Unele dintre caracteristicile cheie ale UIKit sunt după cum urmează:
utilizator de crearea și gestionarea interfață (câmpuri text, butoane, etichete, culori, fonturi, etc);
managementul ciclului de viață de aplicare;
de manipulare eveniment de aplicare (de exemplu, ecran tactil interacțiune cu utilizatorul);
multitasking;
imprimarea fără fir ;
de protecție a datelor prin criptare ;
cut, copy, paste și funcționalitate;
web și de conținut a textului de prezentare și de gestionare a;
push notificare în legătură cu Serviciul Push Notification ;
notificări locale (un mecanism prin care o aplicație care rulează în fundal poate câștiga atenția utilizatorului);
accesibilitate;
accelerometru, baterie, senzor de proximitate, camera foto și interacțiune bibliotecă;
touch screen gest de recunoaștere;
partajarea de fișiere (capacitatea de a face dosare stocate pe dispozitiv disponibil prin iTunes);
la egal la egal albastru dinte bazat la egal la egal conectivitatea între dispozitive;
conectarea la ecrane externe.
Harta Kit Framework (MapKit.framework). Sunt șanse ca avem nevoie pentru a utiliza aplicația Hărți de mai multe ori, fie pentru a obține o hartă a unei anumite zone sau pentru a genera direcții de conducere pentru a ajunge la destinația dvs. destinate.Harta Framework Kit oferă o interfață de programare, care vă permite să construiască hartă pe baza capacități în propriile aplicații. Acest lucru ne permite afișa hărți derulant pentru orice locatie, afișa harta corespunzătoare localizarea geografică actuală a dispozitivului și adnota pe hartă într-o varietate de moduri.
Push Notification Service. Push Notification Service permite aplicații pentru a notifica utilizatorii unui eveniment, chiar în cazul în care cererea nu se execută în prezent pe dispozitiv. De la introducerea acestui serviciu a fost cel mai frecvent utilizate de către aplicațiile bazate pe știri. De obicei, atunci când nu este o veste de rupere serviciul va genera un mesaj de pe dispozitivul cu titlul de știri și oferă utilizatorului opțiunea de a încărca aplicația de știri corespunzător pentru a citi mai multe detalii. Această alertă este de obicei însoțit de o alertă audio și vibrații ale dispozitivului. Această caracteristică ar trebui să fie utilizate cu moderație, pentru a evita enervant utilizatorului cu întreruperi frecvente.
Mesajul UI Framework (MessageUI.framework). Mesajul UI Framework oferă tot ce ai nevoie pentru a permite utilizatorilor pentru a compune și a trimite mesaje e-mail din cadrul aplicației dumneavoastră. De fapt, cadrul prevede chiar și elementele de interfață de utilizator prin care utilizatorul intră e-mail adresare informații și conținutul mesajului. Alternativ, aceste informații pot fi pre-definit în cererea dumneavoastră și apoi afișat pentru utilizator să editeze și să aprobe înainte de a trimite.
Agenda UI Framework (AddressUI.framework). Avînd în vedere că o funcție cheie de iPhone este ca un dispozitiv de comunicare și asistent digital nu ar trebui să vină ca prea mult de o surpriză faptul că un cadru întreg este dedicat pentru integrarea datelor de agendă în propriile aplicații. Scopul principal al cadrului este de a vă permite să acces, afișare, edita și introduceți informațiile de contact din agenda iPhone de la în propria aplicație.
Joc Kit Framework (GameKit.framework). Joc Kit Framework oferă conectivitate egal la egal de comunicații de voce între mai multe dispozitive și utilizatori care să permită celor care rulează în același aplicație pentru a interacționa. Când această funcție a fost introdusă pentru prima dată a fost anticipat de Apple, care ar fi în primul rând utilizate în jocuri multi-player (prin urmare, alegerea numelui), dar aplicațiile posibile pentru această caracteristică se extind în mod clar dincolo de dezvoltare de jocuri.
iAd Framework (iAd.framework). Scopul Cadrului IAD este de a permite dezvoltatorilor de a include publicitatea banner în cadrul aplicațiilor lor. Toate anunțurile sunt deservite de serviciu de anunțuri proprii Apple.
Event Kit UI Framework (EventKit.framework). Event Kit UI Framework a fost introdus în iOS 4 și este prevăzut pentru a permite calendar și memento evenimente pentru a fi accesate și editate dintr-o aplicație.
Accounts Framework (Accounts.framework). iOS 5 a introdus conceptul de conturi de sistem. Acestea permit, în esență, informațiile de cont pentru alte servicii pentru a fi stocate pe dispozitivul iOS și accesate de la codul aplicație. În prezent, conturile de sistem sunt limitate la conturi de Twitter, cu toate că alte servicii, cum ar fi Facebook va apărea probabil în viitoarele versiuni iOS. Scopul Cadrului de Conturi este de a oferi un API care permite aplicațiilor să acceseze și să gestioneze aceste conturi de sistem.
Social Framework (Social.framework). Cadrul Social permite integrarea Twitter, Facebook și Sina Weibo pentru a fi adăugate la aplicații. Cadrul funcționează împreună Cadrul de Conturi pentru a avea acces la informațiile de cont de rețea socială a utilizatorului.
3.1.4 IOS Media Layer
Rolul stratului de mass-media este de a oferi iOS cu audio, video, animație și capabilități grafice. Ca și în alte straturi care cuprinde stiva iOS, stratul de mass-media cuprinde un număr de cadre care pot fi utilizate în dezvoltarea de aplicații pentru iPhone. În această secțiune ne vom uita la fiecare una, la rândul său.
Core Video Framework (CoreVideo.framework). Cadrul Video Core oferă suport buffer pentru cadrul Core Media. În timp ce acest lucru poate fi utilizată de către dezvoltatorii de aplicații, nu este de obicei necesar să se utilizeze acest cadru.
Core Text Framework (CoreText.framework). Core Text Framework este un API C bazate pe concepute pentru a facilita manipularea cerințelor avansate de aspect de text și de randare font.
Image I/O Framework (ImageIO.framework). Image I/O Framework al cărui scop este de a facilita importul și exportul de date de imagine și de metadate imagine, a fost introdus în iOS 4. Cadrul suportă o gamă largă de formate de imagine, inclusiv PNG, JPEG, TIFF și GIF
Assets Library Framework (AssetsLibrary.framework). Activele Biblioteca oferă un mecanism pentru localizarea și recuperarea fișierelor video și foto aflate pe dispozitivul iPhone. În plus față de accesul la imagini și clipuri video existente, acest cadru ne permite, de asemenea, noi fotografii și clipuri video pentru a fi salvate în albumul aparatului foto standard.
Core Graphics Framework (CoreGraphics.framework). Cadrul iOS Core Graphics (altfel cunoscut ca API Quartz 2D) oferă un ușor de două motor de randare dimensional. Caracteristici ale acestui cadru se numără crearea de documente PDF și de prezentare, vector pe bază de desen, straturi transparente, bazate pe cale desen, randare anti-alias, manipulare de culoare și de management, de redare a imaginii și degradeuri. Cei familiarizați cu API-ul Quartz 2D care rulează pe MacOS X vor fi încântați să afle că punerea în aplicare a acestui API este aceeași pe iOS.
Core Image Framework (CoreImage.framework). Un nou cadru introdus cu iOS 5 oferă un set de filtrare video și de imagine și de manipulare capabilități pentru dezvoltatorii de aplicații.
Quartz Core Framework (QuartzCore.framework). Scopul cadrului de cuarț de bază este de a oferi functionalitate de animație de pe iPhone. Acesta oferă fundamentul pentru majoritatea efectelor vizuale și animație folosite de către cadrul UIKit și oferă o interfață de programare Objective-C pe baza pentru crearea de animație specializat în aplicații pentru iPhone.
OpenGL ES framework (OpenGLES.framework). Timp de mulți ani, standardul industriei pentru 2D și 3D de înaltă performanță grafică de desen a fost OpenGL. Inițial dezvoltat de acum defunct Silicon Graphics, Inc (SGI), în anii 1990, în formă de GL, versiunea deschisa a acestei tehnologii (OpenGL), este acum în grija unui consorțiu non-profit care cuprinde o serie de companii importante, inclusiv la Apple , Inc, Intel, Motorola și ARM Holdings.
OpenGL pentru Embedded Systems (ES) este o versiune mai usoara a caietului de sarcini complet OpenGL conceput special pentru dispozitive mai mici, cum ar fi iPhone. iOS 3 sau mai suportă atât OpenGL ES 1.1 și 2.0 pe anumite modele de iPhone (cum ar fi iPhone 3GS și iPhone 4). Versiunile anterioare de iOS și modele de aparate mai vechi sprijini numai OpenGL ES versiunea 1.1.
GLKit Framework (GLKit.framework). Cadrul GLKit este un API Objective-C pe baza proiectat pentru a ușura sarcina de a crea aplicații bazate pe OpenGL ES.
NewsstandKit Framework (NewsstandKit.framework). Cererea standul de ziare este o caracteristică nouă de iOS 5 și este conceput ca o locație centrală pentru ca utilizatorii să aibă acces la ziare și reviste. Cadrul NewsstandKit permite dezvoltarea de aplicatii care utilizeaza acest nou serviciu.
iOS Audio Support. iOS este capabil de a susține audio in AAC, Apple Lossless (ALAC), A-lege, IMA / ADPCM, Linear PCM, μ-law, DVI / Intel IMA ADPCM, Microsoft GSM 6.10 și formate AES3-2003, prin sprijinul acordat de către următoarele cadre.
3.1.5 The iOS Core Services Layer
Stratul de iOS Core Services furnizează o mare parte din temelia pe care straturile referire anterior sunt construite și este format din următoarele cadre.
Address Book Framework (AddressBook.framework). Cadrul Address Book oferă acces programatic la baza de date de contact iPhone Address Book permite aplicații pentru a prelua și modifica intrările de contact
CFNetwork Framework (CFNetwork.framework). Cadrul CFNetwork oferă o interfață bazată pe C la TCP / IP stiva de protocoale de rețea și acces de nivel scăzut la prize BSD. Acest lucru permite cod aplicație să fie scris că lucrează cu HTTP, FTP și servere de nume de domeniu și de a stabili conexiuni securizate și criptate folosind Secure Sockets Layer (SSL) sau Transport Layer Security (TLS).
Core Data Framework (CoreData.framework). Acest cadru este prevăzută pentru a facilita crearea de modelare a datelor și de stocare în aplicații Model-View-Controller (MVC) bazate pe. Utilizarea cadrului de date de bază reduce semnificativ cantitatea de cod care trebuie să fie scrise pentru a efectua sarcini comune atunci când se lucrează cu date structurate în cadrul unei aplicații.
Core Foundation Framework (CoreFoundation.framework). Cadrul Fundația Core este un cadru C-based, care oferă funcționalitatea de bază, cum ar fi tipurile de date, manipulare șir, prime de gestionare a datelor de bloc, manipularea URL-ul, fire și bucle alerga, data și ori, manipulare XML de bază și de port și socket comunicare. Capabilități XML suplimentare față de cele incluse în acest cadru sunt furnizate prin intermediul bibliotecii libxml2.Deși acest lucru este o interfață C-based, cele mai multe dintre capacitățile cadrul Fundației Core sunt de asemenea disponibile cu Objective-C ambalaje prin Cadrul Foundation.
Core Media Framework (CoreMedia.framework). Cadrul Core Media este temelia nivel inferior pe care este construit stratul de Fundația AV. În timp ce majoritatea sarcinilor audio și video poate, și într-adevăr ar trebui să fie efectuate, folosind nivelul superior cadru Fundația AV, accesul este, de asemenea, prevăzut pentru situațiile în care se cere un control de nivel mai scăzut de aplicație dezvoltator iOS.
Core Telephony Framework (CoreTelephony.framework). Este prevăzută cadrul iOS Core de telefonie pentru a permite aplicații pentru a interoga dispozitivul pentru informații despre furnizorul de servicii de telefon mobil curent și de a primi notificări de evenimente legate de telefonie.
EventKit Framework (EventKit.framework)
Un API concepute pentru a oferi aplicații cu acces la calendar, memento-uri și alarmele de pe dispozitiv.
3.2 Descrierea codului aplicației
Pentru vizualizarea datelor:
@implementation MainMenuViewController
– (void)viewDidLoad {
[super viewDidLoad];
_adminButton.layer.cornerRadius = 10.0;
_adminButton.layer.borderColor = _clientButton.titleLabel.textColor.CGColor;
_adminButton.layer.borderWidth = 1.0;
_clientButton.layer.cornerRadius = 10.0;
_clientButton.layer.borderColor = _clientButton.titleLabel.textColor.CGColor;
_clientButton.layer.borderWidth = 1.0;
Pentru rezervare:
(IBAction)rezervare:(id)sender
{
if ([_numeTextField.text isEqualToString:@""] ||
[_model.text isEqualToString:@""] ||
[_telefonTextField.text isEqualToString:@""] ||
[_numarTextField.text isEqualToString:@""]
)
{
[[[UIAlertView alloc] initWithTitle:@"" message:@"Completați toate cîmpurile de pe pagina" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
return;
}
if ([_endDate timeIntervalSince1970] – [_beginDate timeIntervalSince1970] < 3600)
{
[[[UIAlertView alloc] initWithTitle:@"" message:@"Perioada de timp incorectă. Rezervarea poate fi efectuată pentru minim 1 oră" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
return;
}
Pentru scanarea codului rezerării:
(IBAction)showRezervationsList:(id)sender
{
ListaDeRezervariAdministrareViewController * rezervationList = [ListaDeRezervariAdministrareViewController new];
rezervationList.parcId = _parcId;
rezervationList.titleString = @"Rezervări";
[self.navigationController pushViewController:rezervationList animated:YES];
}
– (IBAction)showInregistrariList:(id)sender
{
ListaDeRezervariAdministrareViewController * rezervationList = [ListaDeRezervariAdministrareViewController new];
rezervationList.CarWashId = _CarWashId;
rezervationList.titleString = @"Înregistrări";
[self.navigationController pushViewController:rezervationList animated:YES];
}
Pentru vizualizarea codului QR:
@implementation QRCodeReaderView
– (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame])) {
[self addOverlay];
}
return self;
}
– (void)drawRect:(CGRect)rect
{
CGRect innerRect = CGRectInset(rect, 50, 50);
CGFloat minSize = MIN(innerRect.size.width, innerRect.size.height);
if (innerRect.size.width != minSize) {
innerRect.origin.x += (innerRect.size.width – minSize) / 2;
innerRect.size.width = minSize;
}
else if (innerRect.size.height != minSize) {
innerRect.origin.y += (innerRect.size.height – minSize) / 2;
innerRect.size.height = minSize;
}
CGRect offsetRect = CGRectOffset(innerRect, 0, 15);
_overlay.path = [UIBezierPath bezierPathWithRoundedRect:offsetRect cornerRadius:5].CGPath;
}
Pentru vizualizarea listei rezervărilor:
@implementation ListaDeRezervariViewController
-(void)removeRezervareFromList:(int)tag
{
NSMutableArray * arr = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"toateRezervarile"]];
[arr removeObjectAtIndex:tag];
[_rezervariArray removeObjectAtIndex:tag];
[[NSUserDefaults standardUserDefaults] setObject:arr forKey:@"toateRezervarile"];
[[NSUserDefaults standardUserDefaults] synchronize];
[_photosTableView reloadData];
}
– (IBAction)back:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
– (void)viewDidLoad {
[super viewDidLoad];
NSArray * arr = [[NSUserDefaults standardUserDefaults] objectForKey:@"toateRezervarile"];
if (arr == nil)
{
_rezervariArray = [NSMutableArray new];
}
else
{
_rezervariArray = [NSMutableArray new];
[_rezervariArray addObjectsFromArray:arr];
}
[_photosTableView registerNib:[UINib nibWithNibName:@"RezervariPersonaleCell" bundle:nil] forCellReuseIdentifier:@"RezervariPersonaleCell"];
// Do any additional setup after loading the view from its nib.
}
– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)viewDidAppear:(BOOL)animated
{
PFQuery *query = [PFQuery queryWithClassName:@"ListaCarWash"];
NSArray * objectsArray = [query findObjects];
[objectsArray enumerateObjectsUsingBlock:^(PFObject *obj, NSUInteger idx, BOOL *stop)
{
NSArray * totalRezervari = obj[@"rezervari"];
NSArray * totalInregistrari = obj[@"inregistrari"];
for (int i = 0; i < _rezervariArray.count; i++)
{
NSString* rezervareStr = _rezervariArray[i][@"infoText"];
NSString * CarWashName = [rezervareStr componentsSeparatedByString:@"\n"][0];
if ([CarWashName isEqualToString:obj[@"name"]])
{
if([totalRezervari containsObject:rezervareStr] == NO && [totalInregistrari containsObject:rezervareStr] == NO)
{
NSMutableDictionary * rezervareDict = [NSMutableDictionary dictionaryWithDictionary:_rezervariArray[i]];
rezervareDict[@"expirat"] = @(YES);
[_rezervariArray replaceObjectAtIndex:i withObject:rezervareDict];
}
}
}
}];
[_photosTableView reloadData];
}
4 Descrierea aplicației
Aplicația CarWash este destinată tuturor doritorilor care doresc să rezerveze un loc în spălătoriile de automobile a municipiului Chișinău.
În figura 4.1 este pretentat logo-ul aplicației.
Figura 4.1 – Logo-ul aplicației
Aplicația "CarWash" este o aplicație care permite deservirea clienților care au nevoie de o spălătorile de automobile în apropiere ed locul unde se află sau de locul unde se va deplasa. Aceasta presupune de a rezerva din timp un loc în spălătorie, cît și administrarea unității economice din punctul de vedere a înregistrării unităților de transport sau a clienților care au rezervat loc.
În figura 4.2 este prezentată interfața aplicației.
Figura 4.2– Interfața aplicației
În continuare vom descrie aplicația pe compartimente, adcă modulele aplicașiei.
Compartimentul rezervare. În acest compartiment este arătată harta cu parcările amplasate pe teritoriul orasului, cît și poziția curentă a utilizatorului. Utilizatorii pot cu ușurință să aleagă un loc de parcare selectînd una din acest parcări.
În figura 4.3 sunt reprezentate spălătoriile auto disponibile.
Figura 4.3 – Lista cu spălătoriile disponibile
După selectarea unei spălătorii se descrie situația la moment. Aceasta presupune locurile libere, preț. Pe lîngă aceasta se prezintă adresa la care se afla parcarea în cauză, și denumirea ei.
În figura 4.4 este prezent un exemplu.
Figura 4.4 – Informația despre spălătoria selectată
De asemenea, se poate de vizualizat și datele despre alte spălătorii disponibile în raza aflării utilizatorului.
Butonul “Rezervare”. Butonul “Rezervare” are funcția de a rezerva un loc în unitatea selectată anterior. Acesta deschide o pagina nouă în care este nevoie de a completa un blanc cu diferite date despre utilizator, automobil.
În figura 4.5 este prezentat modelul de rezervare a unui loc.
Figura 4.5 – Rezervarea unui loc
După ce a fost introdusă informația în pagină, apăsam iarăși butonul rezervare pentru a trimite confirmarea despre rezervarea la baza de date a parcării. Totodată aceasta presupune și achitarea rezervării (aceasta ramine pe viitor). Programul generează un QR cod care va fi salvat în compartimentul lista de rezervări de la pagina anterioară și va fi prezentat la intrarea în spălătorie pentru a confirma ca rezervarea a fost efectuată.
În figura 4.6 este prezentat modelul QR codului de rezervare.
Figura 4.6 – Confirmarea rezervării
Odată ajunși la locul destinației, prin intermediul unui QR-scanner, codul generat este scanat pentru a confirma că anume utilizatorul dat a rezervat un loc în spălătorie și are dreptul să îl utilizeze conform datelor prezentate anterior.
Butonul “Detalii”. Butonul “Detalii” din figura 4.7 ne arată ce centre sau alte locul de destinație publică se află în apropiere de parcarea dată pentru a fi găsită mai ușor în teritoriu.
Figura 4.7 – Amplasarea edificiilor în apropierea spălătoriei
Butonul “Lista de rezervări”. Butonul “Lista de rezervări” din figura 3.8 ne arata toate rezervările efectuate pînă la moment de către utilizator și presupune prezentarea lor sub forma QR cod la intrare în parcare . Rezervările care au fost deja utilizate sau expirate se vor însemna cu culoarea roșie și nu vor mai putea fi utilizate. Utilizatorul le poate păstra pentru orice eventualitate, sau să le șteargă dacă nu are nevoie de ele.
În figura 4.8 sunt prezentate rezervările ale utilizatorului.
Figura 4.8 – Rezervările utilizatorului
Compartimentul administrator. În acest compartiment este arătată harta cu spălătoriile amplasate pe teritoriul orașului (2), cît și poziția curenta a utilizatorului (1). Administratorul poate sa selecteze parcarea pe care o administrează și să efectueze înregistrări în baza QR codului prezentat de utilizator la sosire.
În figura 4.9 este prezentată interfața aplicației pentru modulul administratorului.
Figura 4.9 – Administrarea parcărilor
La selectare apare forma de logare ca administrator al parcării care presupune o parola de acces și detaliile info ale CarWash.
Pentru a putea accesa datele unei unități este necesar de a utiliza datele de administrator.
În figura 4.10 este prezentat un exemplu de administrare a parcării.
Figura 4.10 – Logarea la baza de date cu parcări
După logare se deschide pagina de administrare care este presupusa cu un scaner , care va scana QR codurile clienților care au efectuat rezervarea. Pentru a porni scanerul apăsăm butonul „Verifică rezervarea”.
În figura 4.11 este prezentată interfața aplicației pentru verificarea rezervărilor.
După scanare pagina de administrare verifică validitatea rezervării și cere înregistrarea mașinii în baza de date a parcării.
Figura 4.11 – Verificarea rezervărilor
Figura 4.12 – Administrarea datelor
Dacă această rezervare a fost deja înregistrată în baza de înregistrări (locuri ocupate) programul va presupune că clientul vrea să părăsească teritoriul parcării și este nevoie de eliberat automobilul cît și ștergerea înregistrării din baza de date .
După apăsarea butonului de eliberare a locului, înregistrarea și QR codul clientului devin nevalide. Dacă ne uităm în lista de rezervări a clientului observam că rezervarea dată nu mai poate fi folosită (figura 4.13).
Figura 4.13 – Anularea rezărvării
5 Argumentarea economică
Dezvoltarea aplicațiilor native (App) permite obținerea celor mai bune performanțe (funcționare locală și implicit o navigare rapidă și fluidă) și oferirea unei experiențe mai plăcute pentru utilizator.
Cu o interfață ușor de folosit și funcții surprinzătoare, iOS este fundația dispozitivelor iPhone, iPad și iPod Touch. Dezvoltarea de aplicații native pe o astfel de platforma ramîne o modalitate utilă de a ajunge la clienți, de a oferi vizibilitate mărcii sau să ofere o soluție inovatoare partenerilor. Aplicațiile profită la maxim de caracteristicile hardware și este un plus atît pentru funcținalitate calitativă cît și cantitativa, iOS este platforma pentru un milion de aplicații mobile.
Aplicația proiectată va permite afișarea spălătoriilor disponibile în raza aflării proprietarului automobilului și posibilitatea de a se înscrie în prealabil pentru prestarea serviciilor.
5.1 Planul calendaristic
Printre obiectivele principale ale produsului sunt:
contrbuirea la formarea deprinderilor de gestionare și administrare a finanțelor personale;
planificarea și controlul fluxului de numerar în cadrul bugetului personal;
evidențierea noilor surse de venit și punctelor critice ale bugetului;
evidența împrumuturilor;
evidența surselor de venit și cheltuieli;
planificarea bugetului personal;
urmărirea plăților recurente;
organizarea cumpărăturilor;
evidența termenilor de garanție.
Volumul de lucru este stabilit în dependență de cerințele față de sistem, acestea arată prinicpalele activități necesare de implementat la etapa de realizare a sistemului. În cadrul tabelului 5.1 sunt prezentate în aspect temporal aceste activități. Executantul acestora fiind programatorul (P).
Tabelul 5.1- Activitățile necesare pentru realizarea sistemului
Continuare tabel 5.1
Timpul destinat realizării sistemului
Pentru realizarea și dezvoltarea sistemului se prevede o perioadă de 145 de zile (24.10.17 -12.05.18) inclusiv 5 zile de rezervă. Conform tabelului 5.2 au fost estimate temporal activitățile necesar de implementat în decursul perioadei prestabilite.
Tabelul 5.2- Timpul necesar pentru dezvoltarea sistemului
Continuare tabel 5.2
În cadrul tabelului 5.2 notația P semnifică inginer-programator.
5.2 Analiza SWOT
Analiza SWOT prezintă o viuziune în ansamblu a potențialului produsului (tabelul 5.3). Odată cu stabilierea punctelor slabe, punctelor forte, oportunităților și riscurilor la care poate fi expus produsul, se poate de prevăzut apariția unor eventuale obstacole sau dificultăți care ar putea influența la dezvoltarea produsului.
Tabelul 5.3- Analiza SWOT
Există foarte multe resurse care facilitează utilizarea celor mai noi tehnologii la dezvoltarea produsului. La fel, este o documentație detaliată privind modul de aplicare a acestor tehnologii, care se află în continuă dezvoltare. Promovarea acestui produs va asigura un viitor acestuia și un număr mare de beneficiari, deoarece sunt tendințe favorabile de dezvoltare.
Aspectele negative ale produsului pot fi eliminate odată cu întreprinderea următoarelor măsuri de prevenire:
organizarea și planificarea procesului de dezvoltare a produsului;
extinderea și diversificarea funcționalităților și serviciilor propuse.
5.3 Calculul indicatorilor economici
Pentru a implementa un produs sunt necesare active materiale pe termen lung pentru a realiza activitățile corespunzătoare la etapa analiză, proiectare, implementare și testare (tabelul 5.4). Activele nemateriale pe termen lung nu au o formă materială, de obicei presupun niște produse software licențiate necesare pentru implementarea funcționalităților produsului, analiza și proiectarea acestuia (tabelul 5.5). Aceste active au o perioadă de exploatare limitată în dependență de gradul de uzură.
Tabelul 5.4- Active materiale pe termen lung
Tabelul 5.5- Active nemateriale pe termen lung
Consumuri directe de materiale reprezintă consumul unor resurse materiale primare necesare la etapa de dezvoltare și ele sunt raportate la valoarea produsului final (tabelul 5.6).
Tabelul 5.6- Consumuri directe de materiale
Consumuri directe privind retribuirea muncii prevăd cheltuieli care includ în sine salariile celor care au contribuit la realizarea, mentenanța produsului în conformitate cu termenii stabiliți (tabelul 5.7). În dependență de timpul efectiv lucrat salarizarea va fi în regie.
Tabelul 5.7- Consumuri directe privind retribuirea muncii
Pentru implementarea aplicației este nevoie de personal calificat. Printre cerințele care trebuie să le posede inginerul-programator angajat, sunt:
studii în domeniu;
cunoștințe tehnice privind programarea iOS;
cunoștințe și abilități de practicare a șabloanelor de proiectare;
experiență de lucru cu baze de date;
cunoașterea platformei iOS;
experiență de lucru cu mediul de dezvoltare Xcode;
8 ore de lucru zilnic pentru implementarea aplicației.
Salariu pentru acest post este stabilit în valoare de 480 lei pe zi. Pentru perioada de timp stabilită fondul de salarizare este de 69600 de lei. Responsabilitățile de bază pentru acest post sunt următoarele:
să efectueze o analiză de marketing privind potențialul produsului;
să stabilească cerințele față de produs;
să proiecteze sistemul și baza de date;
să realizeze funcționalitățile sistemului și să testeze produsul final;
să raporteze despre toate etapele de dezvoltare a produsului.
În anul 2018 sunt prevîzute următoarele taxe și scutiri la veniturile persoanelor fizice:
pentru venituri anuale până la 33000 lei, se aplică cota de impozitare de 7%;
pentru venituri anuale mai mari de 33000 lei, se aplică cota de impozitare de 18%;
fondul de pesionaree reprezintă 6% din venit;
fondul de asigurare medicală reprezintă 4,5% din venit;
fiecare contribuabil are dreptul la o scutire personală în sumă de 11280 lei pe an;
contribuabilul are dreptul la o scutire în sumă de 2520 lei anual pentru fiecare persoană întreținută;
suma scutirii majore este de 16800 lei anual.
Fondul social este stabilit conform formulei (5.1).
FAS = FRM × Cfs(%) (5.1)
unde:
FAS reprezintă fondul de asigurări sociale;
FRM reprezintă fondul de retribuire a muncii,
Cfs reprezintă cota contribuțiilor de asigurări sociale de stat obligatorii 6% .
FAS = 69600 × 23% = 16008 (lei)
Fondul de asigurare medicală este stabilit conform formulei (5.2).
FAM = FRM × Cam(%) (5.2)
unde:
FAM reprezintă fondul de asigurări medicale;
FRM reprezintă fondul de retribuire a muncii,
Cam(%) reprezintă cota primei de asigurare obligatorie de asistență medicală 4.5%.
FAM = 69600 × 4.5% = 3132 (lei)
Fondul de pensionare este stabilit conform formulei (5.3).
FP = FRM × Cp(%) (5.3)
unde:
FP reprezintă fondul de pensionare;
FRM reprezintă fondul de retribuire a muncii,
Cp(%) reprezintă cota contribuțiilor de pensionare.
FP = 69600 × 6% = 4176 (lei)
Venitul impozabil se calculează conform formulei (5.4).
VI = VB – FP – FAM – SP – SiP – SM (4)
unde:
VI reprezintă venitul impozabil;
VB reprezintă venitul brut;
FP reprezintă fondul de pensionare (asigurări sociale);
FAM reprezintă fondul de asigurare medicală;
SP reprezintă scutirea personală;
SiP reprezintă scutirea pentru persoană întreținută;
SM reprezintă scutirea personală majoră.
VI = 69600 – 4176 – 3132 – 5973.5 = 55318.5 (lei)
Suma impozitului pe venit se calculează după formula (5.5).
IV = VI – I (lei) (5.5)
Unde I reprezintă cota de impozitare a persoanei fizice.
IV = 33000 × 7% + (69600 – 33000) × 18% = 2179.8 + 6922.8 = 9102.6 (lei)
În conformitate cu formula (5.6) se calculează suma venitului net, aplicând cotele de impozitare în vigoare.
VN = VB – IV – FP – FAM (5.6)
Unde:
VN reprezintă venitul net;
VB reprezintă venitul brut;
VI reprezintă venitul impozabil;
FP reprezintă fondul de pensionare (asigurări sociale);
FAM reprezintă fondul de asigurare medicală.
VN = 69600 – 9102.6 – 4176 – 3132 = 53189.4 (lei)
La etapa de implementare există consumuri indirecte care nu depind de volumul de producție, acestea sunt reprezentate în tabelul 5.8.
Tabelul 5.8- Consumuri indirecte
Uzura mijloacelor fixe și amortizarea activelor pe termen lung
La diferite etape ale dezvoltării produsului pentru perioada stabilită de timp sunt utilizate anumite resurse atât de natură materială, cât și de natură nematerială. Uzura mijloacelor fixe și amortizarea activelor pe termen lung sunt niște aspecte care își are aportul în cadrul costului de producție și permite evaluarea funcționării utile ale acestor active.
Uzura mijloacelor fixe și amortizarea activelor pe termen lung au fost evaluate utilizând metoda casării liniare. Pentru activele valoarea cărora depășește 1000 lei se va calcula uzura acumulată și se va stabili durata de funcțioanare utilă de 5 ani. Iar pentru cele a căror valoare nu depășește 1000 lei se va calcula fondul de amortizare și se va stabili durate de funcțioanare utilă de 2 ani. Uzura acumulată și fondul de amortizare se va calcula conform formulei (5.7).
FA= MFi : DFU × T1 (5.7)
unde:
FA reprezintă fondul de amortizare;
MFi reprezintă valoarea de intrare;
T1 reprezintă durata proiectului;
DFU reprezintă durata de funcționare utilă.
Uzura mijloacelor fixe și amortizarea activelor pe termen lung este evaluată la valoarea de 2994 lei.
Costuri de producție
Evaluând calculele economice efectuate, în tabelul 5.9 se pot evidenția costurile esențiale de producție a produsului.
Tabelul 5.9- Cheltuieli necesare pentru realizarea aplicației
5.4 Calculul indicatorilor economico-financiari
Pentru prima perioadă de timp se prevede ca prețul unei copii să fie de 38 lei. Inițial se stabilește prețul de cost al unei copii de produs care poate fi determinat conform metodei up-down. Prețul mediu de realizare a produseleor similare pe piață se determină conform formulei 5.8.
Prz = Plv + TVA (5.8)
Unde:
Prz reprezintă prețul de realizare;
Plv reprezintă prețul de livrare;
TVA reprezintă taxa pe valoarea adăugată.
Astfel, conform taxei pe valoare adăugată de 20%, a fost obținut un preț de realizare de 45.6 lei.
Prz = 38 + 20% = 45.6 (lei)
Venitul brut din vânzări este stabilit conform formulei 5.9.
VVb = q × Prz (5.9)
Unde:
VVb reprezintă venitul brut din vânzări;
q reprezintă numărul de copii planificate spre comercializare.
VVb = 10000 × 45.6 = 456000 (lei)
Profitul brut la realizarea proiectului se stabilește conform fomulelor 5.10 și 5.11.
Pb =VVn – CT (5.10)
VVn = VVb – 20 % (5.11)
Unde:
Pb reprezintă profitul brut din vânzări;
VVn reprezintă suma netă a venitului din vînzări fără TVA;
CT reprezintă costul total de realizare a proiectului.
Astfel, profitul brut a fost evaluat la suma de 271405.6 lei.
Pb = (456000 – 20%) – 93394.4 = 271405.6 (lei)
Profitul net se calculează prin deducerea taxelor și impozitelor în vigoare din suma impozabilă (5.12).
Pn = Pb – Iv (5.12)
Unde:
Pn reprezintă profitul net din vânzări;
Iv reprezintă impozitul pe venit conform legislației.
Astfel, a fost obținut Pn în valoare de 230694.76 lei.
Pn = 271405.6 – 15% = 230694.76 (lei)
Pentru calculul rentabilității se utilizează formula 5.13.
R = Pb : VVn × 100 (5.13)
Astfel, rentabilitatea produsului este de 74%.
R = Pb : VVn × 100 = 271405.6 : 364800 × 100 = 74 (%)
5.5 Compartimentul organizatoric
Conceptul de management al resurselor umane
Resursele umane sunt un factor important în eficientizarea oricărei activități. Transformările profunde din viața economică, politică și socială sunt expresia concretă a nevoii de schimbare. În aceste evoluții complexe, rolul determinant îl au centrele de decizie, în special intervențiile manageriale profesioniste.
Pornind de la faptul că realizarea deciziilor politice și progresul economico-social general depinde în mare măsură de calitatea înțelegerii dintre conducerea întreprinderii și partenerilor săi, este lesne de înțeles atenția deosebită acordată studierii și poziționării adecvate a resurselor umane de către savanți, ca factor primordial în realizarea deciziilor organizaționale.
Țările exsovietice inclusiv și Republica Moldova, ce au depășit regimul totalitar și pun bazele unei noi sisteme eficiente, doar se apropie de studierea acestei problematici, de conceperea esenței și semnificației ei.
Individul, prin structura sa, prin sentimente, mentalitate, cultura, motivație, dorințe și în special prin conștiința de sine, reprezintă marea necunoscută a unui sistem, putând împiedica sau, dimpotrivă, putând potența o acțiune, un proces, o activitate.
Totodată, prin natura sa de ființă sociabilă, omul trăiește și acționează în colectivitate, face parte din anumite grupuri de care se simte mai mult sau mai puțin atașat, grupuri care la rândul lor interacționează cu alte grupuri, depinzând de unele și exercitând influențe asupra altora. Prin urmare, inițierea și desfășurarea cu succes a activităților diferitelor organizații depind într-o măsură covârșitoare de gradul în care este înțeles, motivat și coordonat factorul uman.
Resursele umane constituie elementul creator, activ si coordonator al activității din cadrul organizațiilor, ele influențând decisiv eficacitatea utilizării resurselor materiale, financiare și informaționale. A descrie oamenii ca fiind “resurse” le subliniază importanța și arată faptul că managementul lor cere nivele înalte de preocupare sinceră față de oameni, atenție și profesionalism [2, pag. 10].
Evoluția practicii și gândirii manageriale a determinat deplasarea atenției specialiștilor de la factorul material către resursa umana. S-a ajuns astfel la concluzia că individul este mai mult decât o simplă componentă a factorilor productivi, iar managementul resurselor umane depășește principiile rigide ale gestionării activelor firmei, trebuind să țină seama de o serie de caracteristici ce scapă calculului economic. Numai luând în considerare toate aspectele ce definesc personalitatea umană, abilitățile, cunoștințele, aspirațiile, trăsăturile de temperament și caracter, managementul poate reuși să conducă resursa cea mai prețioasă, unica resursă dotată cu capacitatea de a-și cunoaște și învinge propriile limite.
Accentuarea rolului resurselor umane nu semnifică însă o subevaluare a celorlalte resurse. Conceperea sistemică a firmei implică abordarea interdependentă a resurselor, pornind de la obiectivele fundamentale la a căror realizare concură împreună, de la conexiunile de esență ce există între ele. Supralicitarea resurselor umane în detrimentul celorlalte afectează echilibrul dinamic al organizației.
Numai prin satisfacerea nevoilor angajatului se va putea obține implicarea acestuia în realizarea obiectivelor organizației și numai contribuind la succesul organizației angajații vor putea să-și satisfacă nevoile legate de munca pe care o desfășoară. Numai atunci când cei implicați înțeleg această relație managementul resurselor umane ocupă o poziție importantă în cadrul organizației și poate contribui la succesului acesteia.
Principiile esențiale ale managementului resurselor umane sunt:
1. Aprecierea factorului uman ca o resursă vitală;
2. Corelarea, într-o manieră integrată, a politicilor și sistemelor privind resursele umane cu misiunea și strategia organizației;
3. Preocuparea susținută de concentrare și direcționare a capacităților și eforturilor individuale în vederea realizării eficiente a misiunii și obiectivelor stabilite;
4. Dezvoltarea unei culturi organizaționale sănătoase.
Obiectivele urmărite de managementul resurselor umane constau în:
1. Creșterea eficienței și eficacității personalului (sporirea productivității);
2. Reducerea absenteismului, fluctuației și a amplorii și numărului mișcărilor greviste;
3. Creșterea satisfacției în muncă a angajaților;
4. Creșterea capacității de inovare, rezolvare a problemelor și schimbare a organizației.
Eficientizarea tranziției la economia de piață, realizarea eficientă a transformărilor din societatea civilă impune constituirea unei noi viziuni asupra angajaților. Mai adecvat pentru organizații ar fi tendința spre reflectarea naturii angajaților ca „capital uman”, deoarece anume capitalul uman include cunoștințele, abilitățile, deprinderile. Noțiunea de „capital uman” desemnează faptul, că angajatul posedă abilități, experiență și cunoștințe, ce au valoare economică la nivel de persoană, organizație, societate. Totodată, crearea și dezvoltarea capitalului uman necesită investiții din partea individului, organizației și statului.
Concluzii
Oamenii preferă din ce în ce mai mult gadget-urile mobile în locul desktopurilor sau laptopurilor. În cazul în care dorim mai multă flexibilitate pentru angajați sau atragerea de clienți prin canale noi, atunci ai nevoie de dezvoltarea unor aplicații mobile. Au aparut gadgeturi mobile cu cele mai diverse forme, rezoluții sau sisteme de operare. Toate acestea nu ar trebui să aibă repercusiuni negative asupra experienței utilizatorilor indiferent sistemul de operare utilizat: iOS, Android, Windows Mobile sau Symbian.
Dacă metodele tradiționale au separat modelarea datelor de modelarea funcțiilor, obținînd astfel două tipuri de structuri distincte, structuri de date și structuri funcționale, metodele orientate obiect propun modelarea concomitentă a datelor și funcțiilor obținînd ierarhii de clase de obiecte care înglobează atît date cît și comportament.
Executând această lucrare de diplomă am încercat să redau cît mai amănunțit ideile de bază ale proiectului ce au fost implementate în modelarea și proiectarea aplicației prin intermediul limbajelor de programare și proiectare alese.
Principala problemă a fost implementarea cerințelor care apăreau spontan fie de la început, fie spre finele realizării viitorului sistem în etapa de proiectare și implementare, pe care le-am parcurs în proiect.
Schemele și diagramele create mi-au ajutat nemijlocit la generarea codului sursă pe baza cărui m-am condus în etapa de codare a proiectului și de implementare, pentru a putea crea mulțimea de pachete și module, care spre fine au fost unite într-un tot întreg.
În concluzie putem menționa că o aplicație trebuie să pună în valoare toate performanțele gadgeturilor mobile: touchscreen, aparat foto, sunet, accelerometru sau senzor de înclinare. Procesul de dezvoltare al unei aplicații mobile împinge limitele principiilor de ergonomie și uzabilitate.
Bibliografie
Modelarea dinamică [resursă electronică]. – Regim de acces: http://inf.ucv.ro/~giurca/courses/CB3105/resources/Modelarea%20Dinamica.pdf
Ticudean Mircea, Obiect Orientarea [Resursă electronică] – Regim de acces: http://www.liis.ro/~doinah/informatica/POO/obiecte.html
Florescu Vasile Fundamente teoretice si practice. – București: Infomega, 2002
Е. Бенькович, Ю.Б. Колесов, Ю.Б.Сениченков Практическое моделирование динамических систем [Text]: Учебное пособие.- СПб.: БХВ-Петербург, 2002 г. – 464 с. – ISBN: 5-94157-099-6
WAP Технологии. [resursă electronică] – Regim de acces: http://www.numeric.ru/m3gate/technology/r_index.htm
В. Бройдо, О. Ильина Вычислительные системы, сети и телекоммуникации [text]. 3-е изд. .- Спб.: Питер, 2008. –768 с.:ил.
Martin Fowler, UML distllied, Addison-Wesley, 2000, 1, 40-317
Benjamin/Cummings Publishing Company, Inc. 1994. 589 p.// Русский перевод: Г.Буч. Объектно-ориентированный анализ и проектирование: с примерами приложений на C++. – Москва: Бином, Невский диалект, 1998, 560 с., ил.
J. Rumbaugh, M. Blacha, W.Premerlani, Eddy F. Lorensen Object-Oriented Modeling and Design. Prentice-Hall, Inc., 1991
A Rational Approach to Software Development Using Rational Rose 4.0 [resursă electronică]. – Mod de accesare: http://www.rational.com/support/techpapers/ roseapproach/. 1997
G. Booch, Jim Rumbaugh, Ivar Jacobson The Unified Modeling Language User Guide: Addison-Wesley Publishing Co., 1999, 512 p.
Ivar Jacobson, G. Booch, Jim Rumbaugh The Unified Software Development Process: Addison-Wesley Publishing Co., 1999, 512 p
Învățăm objective C. partea I [resursă electronică] – Regim de acces: http://imotuts.com/ro/view/Invatam__Objective__C_Partea_1
Învățăm objective C. partea II [resursă electronică] – Regim de acces: http://imotuts.com/ro/view/Invatam__Objective_C__Partea_2_
Programarea în Mac OS X. [resursă electronică] – Regim de acces: http://www.macuser.ro/index.php/wiki/Programare/
Anexa A
Codul sursă
#import "AdministratorViewController.h"
#import "DataLoader.h"
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
#import "DetailsViewController.h"
#import "RezervareViewController.h"
#import "ScanViewController.h"
#import <Parse/Parse.h>
@interface AdministratorViewController ()<CLLocationManagerDelegate,MKMapViewDelegate,UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UILabel *adressLabel;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UITextField *passwordTextField;
@property (weak, nonatomic) IBOutlet UIButton *logareButton;
@property (weak, nonatomic) IBOutlet MKMapView *placeMap;
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (nonatomic,strong) NSString* selectedParcDetails;
@property (weak, nonatomic) IBOutlet UIView *logareView;
@property (assign, nonatomic) NSString* parcId;
@property (assign, nonatomic) BOOL mapLoaded;
@end
@implementation AdministratorViewController
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
textField.text = @"";
[textField resignFirstResponder];
[self administreaza:nil];
return YES;
}
– (IBAction)closeLogView:(UIButton*)sender
{
_passwordTextField.text = @"";
[_passwordTextField resignFirstResponder];
_logareView.hidden = YES;
}
– (IBAction)back:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
– (void)viewDidLoad
{
[super viewDidLoad];
MKCoordinateRegion region = _placeMap.region;
region.span.longitudeDelta = 0.1;
region.span.latitudeDelta = 0.1;
[_placeMap setRegion:region animated:YES];
_logareButton.layer.cornerRadius = 5.0;
_logareButton.layer.borderColor = _logareButton.titleLabel.textColor.CGColor;
_logareButton.layer.borderWidth = 1.0;
// Do any additional setup after loading the view from its nib.
}
-(void)viewDidAppear:(BOOL)animated
{
}
– (IBAction)administreaza:(id)sender
{
ScanViewController * scan = [ScanViewController new];
scan.parcId = _parcId;
[self.navigationController pushViewController:scan animated:YES];
[_passwordTextField resignFirstResponder];
}
-(void)viewWillAppear:(BOOL)animated
{
if (_locationManager == nil)
{
_locationManager = [CLLocationManager new];
}
_locationManager.delegate = self;
[_locationManager stopUpdatingLocation];
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
{
[_locationManager requestAlwaysAuthorization];
}
_logareView.hidden = YES;
[_locationManager startUpdatingLocation];
}
– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
– (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
[self locationManager:manager didUpdateLocations:@[newLocation]];
}
– (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation * location = [locations firstObject];
_locationManager.delegate = nil;
CLLocationCoordinate2D coordinates = location.coordinate;
[self loadVenueInfo:coordinates];
}
– (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
}
– (IBAction)handleMap:(UITapGestureRecognizer *)sender
{
// CGPoint touchPoint = [sender locationInView:_placeMap];
// CLLocationCoordinate2D coordinates = [_placeMap convertPoint:touchPoint toCoordinateFromView:_placeMap];
// [self loadVenueInfo:coordinates];
}
-(void)loadVenueInfo:(CLLocationCoordinate2D)coordinates
{
MKCoordinateRegion region = _placeMap.region;
region.center = coordinates;
[_placeMap setRegion:region animated:YES];
}
-(void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
PFQuery *query = [PFQuery queryWithClassName:@"ListaSpalatorii"];
NSArray * objectsArray = [query findObjects];
[mapView removeAnnotations:mapView.annotations];
[objectsArray enumerateObjectsUsingBlock:^(PFObject *obj, NSUInteger idx, BOOL *stop)
{
double latitude = [obj[@"latitude"] doubleValue];
double longitude = [obj[@"longitude"] doubleValue];
CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(latitude, longitude);
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:coordinates];
annotation.title = obj[@"name"];
annotation.subtitle = obj[@"address"];
annotation.accessibilityValue = obj.objectId;
[mapView addAnnotation:annotation];
}];
}
– (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// If it's the user location, just return nil.
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
// Handle any custom annotations.
if ([annotation isKindOfClass:[MKPointAnnotation class]])
{
// Try to dequeue an existing pin view first.
ParcariAnnotationView *pinView = (ParcariAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"ParcariAnnotationView"];
if (!pinView)
{
// If an existing pin view was not available, create one.
pinView = [[NSBundle mainBundle] loadNibNamed:@"ParcariAnnotationView" owner:nil options:nil][0];
pinView.frame = CGRectMake(0, 0, 140, 50);
pinView.annotationTitle.text = [annotation title];
pinView.canShowCallout = YES;
// pinView.image = [UIImage imageNamed:@"pinImage.png"];
pinView.calloutOffset = CGPointMake(0, 0);
// Add a detail disclosure button to the callout.
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
pinView.rightCalloutAccessoryView = rightButton;
// Add an image to the left callout.
} else {
pinView.annotation = annotation;
}
return pinView;
}
return nil;
}
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
MKPointAnnotation *annotation = view.annotation;
NSString *parcId = annotation.accessibilityValue;
PFQuery *query = [PFQuery queryWithClassName:@"ListaSpapatorii"];
_parcId = parcId;
[query getObjectInBackgroundWithId:parcId block:^(PFObject *object, NSError *error)
{
_logareView.hidden = NO;
_nameLabel.text = object[@"name"];
_adressLabel.text = object[@"address"];
}];
}
@end
@implementation QRCodeReader
– (id)initWithMetadataObjectTypes:(NSArray *)metadataObjectTypes
{
if ((self = [super init])) {
_metadataObjectTypes = metadataObjectTypes;
[self setupAVComponents];
[self configureDefaultComponents];
}
return self;
}
+ (instancetype)readerWithMetadataObjectTypes:(NSArray *)metadataObjectTypes
{
return [[self alloc] initWithMetadataObjectTypes:metadataObjectTypes];
}
#pragma mark – Initializing the AV Components
– (void)setupAVComponents
{
self.defaultDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if (_defaultDevice) {
self.defaultDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:_defaultDevice error:nil];
self.metadataOutput = [[AVCaptureMetadataOutput alloc] init];
self.session = [[AVCaptureSession alloc] init];
self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
for (AVCaptureDevice *device in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) {
if (device.position == AVCaptureDevicePositionFront) {
self.frontDevice = device;
}
}
if (_frontDevice) {
self.frontDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:_frontDevice error:nil];
}
}
}
– (void)configureDefaultComponents
{
[_session addOutput:_metadataOutput];
if (_defaultDeviceInput) {
[_session addInput:_defaultDeviceInput];
}
[_metadataOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[_metadataOutput setMetadataObjectTypes:_metadataObjectTypes];
[_previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
}
– (void)switchDeviceInput
{
if (_frontDeviceInput) {
[_session beginConfiguration];
AVCaptureDeviceInput *currentInput = [_session.inputs firstObject];
[_session removeInput:currentInput];
AVCaptureDeviceInput *newDeviceInput = (currentInput.device.position == AVCaptureDevicePositionFront) ? _defaultDeviceInput : _frontDeviceInput;
[_session addInput:newDeviceInput];
[_session commitConfiguration];
}
}
– (BOOL)hasFrontDevice
{
return _frontDevice != nil;
}
#pragma mark – Controlling Reader
– (void)startScanning
{
if (![self.session isRunning]) {
[self.session startRunning];
}
}
– (void)stopScanning
{
if ([self.session isRunning]) {
[self.session stopRunning];
}
}
– (BOOL)running {
return self.session.running;
}
#pragma mark – Managing the Orientation
+ (AVCaptureVideoOrientation)videoOrientationFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
switch (interfaceOrientation) {
case UIInterfaceOrientationLandscapeLeft:
return AVCaptureVideoOrientationLandscapeLeft;
case UIInterfaceOrientationLandscapeRight:
return AVCaptureVideoOrientationLandscapeRight;
case UIInterfaceOrientationPortrait:
return AVCaptureVideoOrientationPortrait;
default:
return AVCaptureVideoOrientationPortraitUpsideDown;
}
}
#pragma mark – Checking the Reader Availabilities
+ (BOOL)isAvailable
{
@autoreleasepool {
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if (!captureDevice) {
return NO;
}
NSError *error;
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];
if (!deviceInput || error) {
return NO;
}
return YES;
}
}
+ (BOOL)supportsMetadataObjectTypes:(NSArray *)metadataObjectTypes
{
if (![self isAvailable]) {
return NO;
}
@autoreleasepool {
// Setup components
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:nil];
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
AVCaptureSession *session = [[AVCaptureSession alloc] init];
[session addInput:deviceInput];
[session addOutput:output];
if (metadataObjectTypes == nil || metadataObjectTypes.count == 0) {
// Check the QRCode metadata object type by default
metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
}
for (NSString *metadataObjectType in metadataObjectTypes) {
if (![output.availableMetadataObjectTypes containsObject:metadataObjectType]) {
return NO;
}
}
return YES;
}
}
#pragma mark – Managing the Block
– (void)setCompletionWithBlock:(void (^) (NSString *resultAsString))completionBlock
{
self.completionBlock = completionBlock;
}
#pragma mark – AVCaptureMetadataOutputObjects Delegate Methods
– (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
for (AVMetadataObject *current in metadataObjects) {
if ([current isKindOfClass:[AVMetadataMachineReadableCodeObject class]]
&& [_metadataObjectTypes containsObject:current.type]) {
NSString *scannedResult = [(AVMetadataMachineReadableCodeObject *) current stringValue];
if (_completionBlock) {
_completionBlock(scannedResult);
}
break;
}
}
}
@end
end
@implementation RezervariPersonaleCell
– (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
– (IBAction)deleteRezervationFromList:(id)sender
{
[_target removeRezervareFromList:self.tag];
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
– (void)drawRect:(CGRect)rect
{
CGRect frame = self.bounds;
frame.origin.x = 10;
frame.origin.y = 10;
frame.size.width = frame.size.width – 20;
frame.size.height = frame.size.height – 20;
_backView.frame = frame;
self.backView.layer.borderColor = _titleLabel.textColor.CGColor;
self.backView.layer.borderWidth = 1.0;
self.backView.layer.cornerRadius = 4.0;
self.clipsToBounds = YES;
}
@end
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: message:Completați toate cîmpurile de pe pagina delegate:nil cancelButtonTitle:OK otherButtonTitles:nil, nil show [311697] (ID: 311697)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
