Fotomania

CUPRINSUL

1 INTRODUCERE

1.1 SCOPUL

1.2 MOTIVAȚIA

2 CONVENȚII DE REDACTARE

2.1 CERINȚE GENERALE

2.2 STRUCTURA DOCUMENTULUI

2.3 DIMENSIUNILE LUCRĂRII

2.4 ELEMENTE DE TEHNOREDACTARE

2.5 FORMULELE MATEMATICE

2.6 ILUSTRAȚIILE

2.6.1 Figurile

2.6.2 Tabelele

2.6.3 Legenda (unei figuri/tabele)

3 TERMENI DE UTILIZARE

3.1 AUTORII

3.2 LICENȚA DE UTILIZARE

4 CONCLUZII

5 BIBLIOGRAFIE

6 REFERINȚE WEB

A. CODUL SURSĂ

B. SITE-UL WEB AL PROIECTULUI

C. CD / DVD

INDEX

LISTA FIGURILOR

Figura 1. Selectarea prin click dreapta a opțiunii „Update field” 5

Figura 2. Actualizarea întregului tabel 5

LISTA TABELELOR

Tabelul 1. Nume de utilizatori și valorile rezumat ale parolelor acestora 5

❶ Introducere

Scopul

Scopul acestei aplicații web este acela de a pune gratuit la dispoziția utilizatorilor, diverse imagini care pot fi folosite de către aceștia atât în scop personal, cât și în scop comercial. Aplicația poate fi accesată prin intermediul unui browser de către oricine, însă utilizatorii care dețin un cont vor avea la dispoziție mai multe facilități, în funcție de tipul contului.

Principalele funcții ale aplicației sunt: adăugare/ștergere/modificare imagini; gestionarea categoriilor/utilizatorilor; posibilitatea de a adăuga comentarii la imagini; posibilitatea de a vota imaginile; descărcarea unei imagini la una din dimensiunile disponibile; sortarea imaginilor după categorie, data adăugării, etichete, numărul de descărcări sau rating.

Motivația

Motivația alegerii acestei teme de licență constă în dorința de a studia și de a-mi aprofunda cunoștințele în privința dezvoltării aplicațiilor web.

Lucrarea de față se bazează pe tehnologia cea mai des utilizată în domeniul dezvoltării aplicațiilor web, combinația avută în vedere fiind:

• Apache, ca server web;

• MySQL, ca server de baze de date;

• PHP, ca limbaj de procesare la nivelul server-ului.

Orientarea spre aceste aplicații este dată de răspândirea lor, legată in primul rând de gratuitate, transparență mai mare în dezvoltare și maturitate a tehnologiilor, dovedită printr-o istorie destul de îndelungată.

O aplicație web reprezintă un sistem software ce se bazează pe tehnologiile și standardele consorțiului W3C (World Wide Web Consortium), care oferă resurse web specifice (conținut și servicii) prin intermediul unei interfețe utilizator numită browser web. 1

Definiția de mai sus include în mod explicit tehnologiile și interacțiunea cu utilizatorul. De aici putem înțelege că tehnologii precum serviciile web nu sunt aplicații web, dar pot fi o parte componentă a acestora, iar site-urile web care sunt lipsite de componente software (cum ar fi paginile HTML statice) nu sunt considerate aplicații web.

Aplicațiile web moderne sunt sisteme software complexe, iar dezvoltarea lor necesită o abordare metodologică. Similar cu proiectarea aplicațiilor software, proiectarea web implică utilizarea unei abordări sistematice și cuantificabile pentru realizarea specificațiilor, implementării, operațiilor și întreținerii aplicaților web de o calitate superioară. Din punct de vedere al istoricului dezvoltării și complexității, distingem următoarele tipuri de aplicații web: orientate pe documente, interactive, tranzacționale, cu caracteristici ubicue sau trăsături ale web-ului semantic. Cerințele particulare ale proiectării aplicațiilor web rezultă din caracteristicile lor speciale din sfera produselor software, precum și din dezvoltarea și utilizarea lor. World Wide Web are o influență enormă și permanentă asupra vieții noastre. Educația, economia, sănătatea, industria, administrația publică, divertismentul – majoritatea componentelor vieții noastre au fost pătrunse de World Wide Web. Motivul acestei omniprezențe constă în special în natura web-ului, caracterizată prin disponibilitatea globală și permanentă dar și prin accesul omogen la informațiile distribuite la nivel global sub forma paginilor web. 2

Deși inițial web-ul a fost proiectat ca un mediu pur informațional, în prezent acesta evoluează într-un mediu al aplicațiilor. Aplicațiile web de astăzi sunt sisteme software complexe care oferă servicii interactive și personalizabile accesibile prin intermediul diferitelor dispozitive; ele oferă posibilitatea realizării tranzacțiilor între utilizatori și de obicei stochează datele într-o bază de date. Elementul ce distinge aplicațiile web de aplicațiile software tradiționale este modul în care este utilizat web-ul: tehnologiile și standardele sale sunt folosite ca o platformă de dezvoltare, dar și ca o platformă utilizator în același timp.

1 http://biblioteca.regielive.ro/cursuri/limbaje-de-programare/proiectarea-web-dezvoltarea-sistematica-a-aplicatiilor-web-146194.html

2 Berners-Lee, T., WWW: Past, Present, and Future, IEEE Computer, 1996

Aplicațiile web se bazează în principal pe combinarea limbajului de formatare HTML cu limbaje din categoria CSS (Client Side Script), respectiv SSS (Server Side Script). Limbajele CSS sunt imbricate în interiorul unei pagini HTML și codul se rulează pe dispozitivul clientului direct de către browser (de exemplu: JavaScript) sau prin intermediul unui interpretor/mașini virtuale instalate adițional (de exemplu: Flash). Limbajele SSS permit crearea unor aplicații web complexe prin procesarea datelor pe un server și generarea paginilor într-un mod dinamic. Principalele tehnologii folosite pentru dezvoltarea de aplicații web pot fi:

– uneltele pentru crearea de conținut multimedia (Adobe Photoshop, Adobe Premiere, Adobe Fireworks, Adobe Flash, Adobe Dreamweaver, Microsoft Expression Design);

– servere Web: Apache Web Server, Internet Information Services (IIS);

– servere de baze de date (MySQL);

– limbaje CSS (JavaScript, VBScript);

– limbaje SSS – Hypertext Preprocessor (PHP), Active Server Pages (ASP), Java Server Pages (JSP), Perl;

– limbaje pentru formatarea și machetarea conținutului (CSS: Cascading Style Sheets);

– tehnologii specifice: SMIL (cu sintaxă XML) care permite descrierea unui document multimedia format din obiecte sincronizate, AJAX, jQuery.

Figura 1.1 Modul de funcționare al unei aplicații web

• Etapele de dezvoltare ale aplicațiilor web

În privința proiectării aplicațiilor web este necesară urmărirea unor proceduri și standarde de dezvoltare în scopul obținerii unei calități maxime. Etapele (fazele) de dezvoltare specifice cuprind: stabilire obiective, analiză, specificare cerințe, proiectare și implementare aplicație, integrare și testare, evaluare. Acestea sunt reprezentate în figura următoare: 3

Figura 1.2 Etapele dezvoltării unei aplicații web

Analiza va porni de la stabilirea cât mai precisă a grupurilor țintă cărora le este adresată aplicația. Se vor studia tipul și cantitatea de date avute în vedere. În multe situații colectarea datelor poate avea o pondere foarte importantă în timpul total de dezvoltare. Pentru o cât mai bună planificare vor trebui consultați pe lângă beneficiari și programatori, web-designeri și administratori de sisteme.

Specificarea cerințelor va pleca de la consemnarea cerințelor identificate în prima fază. Acestea sunt analizate de echipa de dezvoltare și dacă este necesar sunt discutate individual cu clienții, propunându-le eventual și variante alternative. Având aprobarea tuturor, cerințele sunt trecute explicit în documentul final împreună cu responsabilitățile, termenele de execuție și costurile implicate.

3 http://mihai.cm.upt.ro/Discipline/IES/FundamenteInDezvoltareaDeAplicatiiWeb.pdf

Proiectarea aplicației – la dezvoltarea unei aplicații web se pleacă de obicei de la crearea unui prototip care să prefigureze aranjarea interfeței, aspectele legate de navigare, stocarea datelor (de obicei într-o bază de date), rutinele de afișare/prelucrare a acestora, identificarea unor componente externe care ar putea fi integrate în aplicație.

Implementarea aplicației – o fază inițială presupune conlucrarea responsabililor cu crearea interfeței cu persoanele care se ocupă de editarea conținutului. Urmează apoi scrierea codului utilizând unul sau mai multe limbaje de uz general sau specializate. În această fază atenția este concentrată pe integrarea armonioasă a aspectelor dinamice astfel încât să nu se modifice aspectul creat la proiectarea interfeței. În acest scop se vor folosi extensiv machetele propuse de către designeri. Eventualele elemente de interacțiune necesare suplimentar vor fi create împreună cu responsabilii cu crearea interfeței. În aceasta fază se va scrie și documentația de implementare și cea de utilizare. Implementarea fiecărei funcționalități va fi urmată de un set de teste care să o valideze.

Testarea – se pot folosi metode de testare clasice. Cu toate acestea există și particularități ale fazei de testare. Prima dintre ele se referă la testele relaționate de verificarea ratelor de transfer a datelor și uneori a percepției de calitate din partea unui utilizator uman. O altă particularitate este specifică mai ales aplicațiilor web și se referă la testarea lățimii de bandă a aplicației, care va rula implicit într-un mediu multiutilizator. Acest test de scalabilitate este greu de realizat pentru că numărul de conexiuni care vor apărea în situația reală este greu de estimat. Un alt factor util este testarea aplicației în browsere diferite și a timpului mediu de încărcare completă a unei pagini Web. În acest sens, de un real folos este utilizarea unor tehnologii contemporane (de exemplu: AJAX) pentru evitarea unor eventuale probleme.

Instalarea, rularea și întreținerea – instalarea aplicației necesită încărcarea pe un server și eventual instalarea bazei de date aferente. În cazul aplicațiilor web trebuie avută în vedere copierea tuturor fișierelor care sunt utilizate de respectivul site. Tot în acest caz apare și o operație suplimentară numită „promovare”. Aceasta se referă la înregistrarea adresei pe motoare de căutare, adăugarea unor cuvinte cheie utilizate de roboții de căutare web și eventual plasarea unor bannere pe alte site-uri web. Rularea aplicației implică verificări continue a scalabilității raportate în general la un contor de accese. Operația de întreținere se aplică de obicei la modificarea datelor cuprinse în aplicație, dacă nu cumva acestea sunt preluate în timp real și automat dintr-o bază de date a unei companii, instituții etc. Tot aici trebuiesc făcute și corecții dacă se constată deficiențe la rulare sau modificări dictate de apariția unor noi tehnologii la serverele și browserele web.

• Scurtă prezentare a limbajelor utilizate

Noțiunea de website (sau pur și simplu site, ori „site web”) desemnează o grupă de pagini web multimedia (conținând texte, imagini fixe, imagini mișcătoare și chiar sunete), accesibile în Internet, în principiu oricui, de obicei pe o temă anume, și care sunt conectate între ele prin așa numite hyperlinkuri. Diversele situri web pot fi oferite de către o companie, un proiect, o rețea de utilizatori, o persoană particulară, o administrație publică și multe altele.

Pentru crearea paginilor web s-a impus limbajul HTML (HyperText Markup Language) – un limbaj de marcare, al cărui scop constă în prezentarea într-un anumit format a informațiilor: paragrafe, tabele, fonturi, culori, ș.a.m.d.

Calculatorul pe care se găsește site-ul se numește „server”, iar calculatoarele care accesează

conținutul site-ului se numesc „client”.

Orice calculator client trebuie să dispună de un program specializat, numit „browser” (de exemplu: Google Chrome, Internet Explorer, Mozilla Firefox etc.), cu ajutorul căruia să se poată interpreta și deci vizualiza fișierele HTML.

Pe server trebuie să se găsească un program care răspunde cererilor browser-ului aflat pe calculatorul client. Cererea efectuată de către browser și răspunsul server-ului se fac prin respectarea unui anumit protocol. Acest protocol se numește HTTP (HyperText Transfer Protocol).

• Limbajul HTML

HTML este un limbaj de marcare orientat către prezentarea documentelor text pe o singură pagină.

Ur, Mozilla Firefox etc.), cu ajutorul căruia să se poată interpreta și deci vizualiza fișierele HTML.

Pe server trebuie să se găsească un program care răspunde cererilor browser-ului aflat pe calculatorul client. Cererea efectuată de către browser și răspunsul server-ului se fac prin respectarea unui anumit protocol. Acest protocol se numește HTTP (HyperText Transfer Protocol).

• Limbajul HTML

HTML este un limbaj de marcare orientat către prezentarea documentelor text pe o singură pagină.

Utilizând un software de redare specializat, numit agent utilizator HTML (cel mai bun exemplu de astfel de software fiind browserul web) HTML furnizează mijloacele prin care conținutul unui document poate fi adnotat cu diverse tipuri de metadate și indicații de redare. Indicațiile de redare pot varia de la decorațiuni minore ale textului (cum ar fi specificarea faptului că un anumit cuvânt trebuie subliniat sau că o imagine trebuie introdusă) până la scripturi sofisticate, hărți de imagini și formulare. Metadatele pot include informații despre titlul și autorul documentului, informații structurale despre cum este împărțit documentul în diferite segmente, paragrafe, liste, titluri etc. și informații cruciale care permit ca documentul să poată fi legat de alte documente pentru a forma astfel hiperlink-uri.

HTML este un format text proiectat pentru a putea fi citit și editat de oameni utilizând un editor de text simplu. Totuși, scrierea și modificarea paginilor în acest fel solicită cunoștințe solide de HTML și este consumatoare de timp. Editoarele grafice cum ar fi Adobe Dreamweaver sau Microsoft FrontPage permit ca paginile web sa fie tratate asemănător cu documentele Word, dar cu observația că aceste programe generează un cod HTML care este de multe ori de proastă calitate.

HTML se poate genera direct utilizând tehnologii de codare din partea serverului cum ar fi PHP, JSP sau ASP.

Deși HTML-ul clasic permite redactarea unor documente hypertext de un nivel foarte înalt și elaborat, o dată cu evoluția limbajelor de programare vizuale, a început să devină mai puțin atractiv decât a fost la început.

Din acest motiv, a fost pus la punct ceea ce numim DTHML (Dynamic HTML) – care nu este un limbaj în sine, ci un termen prin care sunt desemnate tehnicile utilizate pentru a face paginile web cât mai dinamice și cât mai interactive.

Pe lângă HTML-ul propriu-zis, noile unelte recunoscute de browserele din ultima generație sunt CSS (Cascading Style Sheets) sau JavaScript.

• CSS (Cascading Style Sheets)

Noțiunea de stil este, pentru un document HTML, asemănătoare cu formatarea documentului, spre exemplu, pentru un document Word. Exisă o mulțime de atribute prin care se pot stabili font-urile, caracteristicile de aliniere a textului, forma elementului, culorile de fond și ale literelor, marginile, poziția elementelor, etc.

Pentru a putea gestiona cât mai eficient stilurile, a fost pus la dispoziția programatorilor de pagini web un limbaj prin care se poate realiza acest lucru. Acest limbaj este cunoscut sub numele de CSS (ultima versiune apărută fiind CSS3).

Legătura dintre HTML și CSS se realizează prin intermediul tag-ului <STYLE>…</STYLE> care trebuie așezat între <HEAD> și </HEAD>.

În cadrul tag-ului STYLE vom stabili modul în care dorim să arate elementele paginii. Fiecare element al HTML-ului pe care l-am studiat este identificat, în cadrul CSS-ului de tag-ul care îl gestionează. Spre exemplu, identificatorul CSS pentru paragrafe este P, pentru table este TABLE, pentru imagini este IMG, ș.a.m.d.

Folosind acești identificatori în cadrul unui <STYLE>…</STYLE>, putem face ca toate elementele de același fel din cadrul unui document să arate la fel. Astfel suntem scutiți de a scrie o grămadă de cod care s-ar repeta în cazul fiecărui element de același fel.

• JavaScript

JavaScript este un limbaj de programare orientat pe obiecte. În ciuda numelui și a unor oarecare similarități în sintaxă, între JavaScript și Java nu există nici o legătură.

JavaScript are o sintaxă apropiată de cea a C-ului; din acest motiv un programator care cunoaște C poate cu ușurință să învețe JavaScript.

Deși acest limbaj are o plajă mai largă de extindere, cel mai des întâlnit este în scriptarea paginilor web. Programatorii web pot îngloba în paginile HTML script-uri pentru diverse activități, cum ar fi verificare datelor introduse de utilizatori, sau crearea de meniuri ori de alte efecte animate.

Browserele rețin în memorie o reprezentare a paginii web sub forma unui arbore de obiecte, punând aceste obiecte la dispoziția JavaScript-ului, care le poate citi și manipula.

• Limbajul PHP

PHP este un limbaj de programare destinat în primul rând Internetului, aducând dinamică unei pagini web. Este unul dintre cele mai importante limbaje de programare web open-source (este gratuit și, în plus, utilizatorii pot acționa liber asupra procesului de dezvoltare) și server-side (codul sursă nu se rulează pe calculatorul celui care vizualizează pagina, ci pe serverul web).

Limbajul PHP, în marea majoritate a cazurilor, se folosește sub formă de secvențe de cod inserate în cadrul unui document HTML. Din acest motiv, vom prefera termenul de „script PHP” celui de program PHP. Structura unui script PHP este foarte asemănătoare cu cea a unui cod scris în limbajul C, mai ales în sensul în care structurile de programare au aceeași sintaxă și aceeași funcționalitate.

Rolurile de bază ale unui script PHP constau în aceea că scipt-ul poate prelua date trimise de către o pagină web de la un client (în general, datele pot fi trimise de către o pagină web prin intermediul formularelor) și de a executa o secvență de program în urma căreia va rezulta un cod HTML, cod pe care clientul îl va primi sub forma unei pagini web. Clientul nu va avea acces la codul efectiv al script-ului, ci, prin faptul că acesta se află pe server și se rulează tot pe acesta, va primi direct HTML-ul generat de script.

Este unul dintre cele mai folosite limbaje de programare server-side. Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor sale caracteristici:

• Familiaritatea – sintaxa limbajului este foarte ușoară, fiind foarte la îndemână în special pentru programatorii care cunosc limbajul C;

• Simplitatea – sintaxa limbajului este destul de liberă. Nu este nevoie de includere de biblioteci sau de directive de compilare, codul PHP inclus într-un document fiind trecut între niște marcaje speciale;

• Securitatea – PHP-ul pune la dispoziția programatorilor un set flexibil și eficient de măsuri de siguranță;

• Flexibilitatea – fiind apărut din necesitatea dezvoltării web-ului, PHP a fost modularizat pentru a ține pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele servere web existente: Apache, IIS, Zeus, etc.

• Gratuitatea – este, probabil, cea mai importantă caracteristică a PHP-ului. Dezvoltarea PHP-ului sub licența open-source a determinat adaptarea rapidă a sa la nevoile web-ului, eficientizarea și securizarea codului.

• Limbajul SQL

Limbajul structurat de interogare SQL (Structured Query Language) este limbajul standard pentru bazele de date relaționale definit de ANSI în 1986 și adoptat ulterior ca standard internațional de către ISO (1992).

Limbajul SQL este utilizat de majoritatea sistemelor de baze de date relaționale (SGBDR) pentru definirea și manipularea datelor. SQL este cel mai frecvent utilizat limbaj de baze de date, folosit cu preponderență de majoritatea creatorilor de aplicații, administratorilor de baze de date, proiectanților de aplicații web sau utilizatorilor de Microsoft Office.

O interogare (query) este o simplă cerere transmisă către baza de date, la care aceasta răspunde într-o anumită formă. SQL este considerat un limbaj neprocedural sau declarativ, ceea ce înseamnă că îi spunem calculatorului ce rezultate vrem fără să-i spunem cum să le obțină. Un limbaj procedural folosește o serie de instrucțiuni executate secvențial. De asemenea, SQL nu trebuie confundat cu limbajele orientate spre obiecte, precum Java sau C++. Simplu spus, SQL este un limbaj pentru gestionarea si întreținerea bazelor de date relaționale, nu un limbaj potrivit pentru programarea generală a aplicațiilor.

SQL este deseori folosit în combinație cu limbajele procedurale sau orientate spre obiecte pentru a manipula stocarea și extragerea datelor, folosind instrucțiuni din limbajul de programare cu destinație generală pentru alte sarcini de programare, precum prezentarea datelor pe o pagină web sau furnizarea răspunsurilor la informațiile introduse de utilizatori. Atunci când este necesară interacționarea cu baza de date, instrucțiunile din limbajul procedural formează instrucțiunea SQL, o transmit către SGBDR în vederea prelucrării, primesc rezultatele returnate de SGBDR și le prelucrează într-un mod corespunzător.

❷ Descrierea și analiza cerințelor

2.1 Potențialul produsului

Produsul software trebuie să ofere o modalitate simplă de a face posibilă navigarea cu ușurință prin conținutul său și, de asemenea, trebuie să fie compatibil cu toate sistemele de operare.

2.2 Funcțiile produsului

Funcțiile produsului software sunt descrise în continuare în detaliu. Orice vizitator poate accesa conținutul aplicației, însă pentru a dispune de mai multe facilități, este necesar să dețină un cont (bazat pe un nume de utilizator și o parolă). În funcție de tipul contului, utilizatorii vor avea la dispoziție următoarele facilități:

• Utilizator normal

– vizualizarea conținutului aplicației;

– posibilitatea de a încărca imagini (este nevoie de aprobarea unui administrator pentru ca acestea să fie publicate);

– posibilitatea de a adăuga imagini la favorite;

– posibilitatea de a descărca imagini la rezoluția dorită;

– posibilitatea de a adăuga comentarii la imagini;

– posibilitatea de a trimite/primi mesaje private.

• Administrator

Pe lângă facilitățile de care dispune orice utilizator înregistrat, administratorul mai dispune în plus și de următoarele chestiuni:

– deține controlul total asupra aplicației, având acces în panoul de control al acesteia;

– vizualizarea statisticilor site-ului (numărul total al utilizatorilor înscriși și al celor online, numărul total de imagini/categorii/comentarii/descărcări);

– gestionarea imaginilor;

– gestionarea categoriilor;

– gestionarea utilizatorilor;

– gestionarea comentariilor;

– poate schimba setările aplicației.

2.3 Caracteristicile utilizatorului

Utilizatorii care nu sunt înregistrați în baza de date, au doar posibilitatea de a vizualiza conținutul site-ului și de a descărca imaginile dorite la una din rezoluțiile disponibile. Însă, cei care dețin un cont, se pot autentifica și vor avea la dispoziție toate acțiunile permise pentru tipul de utilizator din care face parte.

2.4 Constrângeri generale

Capacitatea serverului reprezintă cantitatea de utilizatori care pot accesa în același timp site-ul, cât și spațiul care este disponibil pentru fiecare utilizator. Cu cât numărul utilizatorilor este mai

mare, cu atât mai mult va crește traficul în rețea, aducând serverul în stare de nefuncționare în cele

mai nefericite cazuri. Firewall-ul personal și update-urile sunt sarcini consumatoare de resurse și pot

face sistemul să funcționeze mai lent.

Sistemul trebuie să funcționeze chiar și atunci când traficul este foarte mare.

2.5 Analiza cerințelor

2.5.1 Cerințe pentru interfețe

– interfața cu utilizatorul: posibilitatea clientului de a vizualiza conținutul site-ului;

– interfața software: clientul poate folosi orice sistem de operare și implicit, browser. Există o singură variantă a aplicației care funcționează pe toate sistemele de operare;

– interfața de comunicare: pentru a se face legătura dintre un utilizator și site, este nevoie de o conexiune la Internet.

2.5.2 Cerințe de performanță

Computerele utilizatorilor trebuie să îndeplinească cerințele de sistem pentru a oferi o performanță optimă. În funcție de browser-ul folosit, acestea sunt:

• Google Chrome

Sistem de operare: Windows/Mac/Linux

Procesor: Intel Pentium 4 sau o versiune ulterioară

Spațiu liber pe hard disk: 350 MB

RAM: 512 MB

• Mozilla Firefox

Sistem de operare: Windows/Mac/Linux

Procesor: Intel Pentium 4 sau o versiune ulterioară

Spațiu liber pe hard disk: 200 MB

RAM: 512 MB

• Internet Explorer

Sistem de operare: Windows

Procesor: 1 gigahertz (GHz) sau mai rapid care acceptă PAE, NX și SSE2

Spațiu liber pe hard disk: 16 GB (32 de biți) sau 20 GB (64 de biți)

RAM: 1 gigabyte (GB) (32 de biți) sau 2 GB (64 de biți)

RAM: 1 gigabyte (GB) (32 de biți) sau 2 GB (64 de biți)

2.5.3 Cerințe ale bazei de date

Baza de date corespunzătoare aplicației a fost testată doar pe MySQL, versiunea 5.6.21, fiind parte componentă a pachetului XAMPP, versiunea 5.6.3, ce cuprinde printre altele: Apache 2.4.10, PHP 5.6.3, phpMyAdmin 4.2.11.

❸ SPECIFICAȚII ȘI ASPECTE GENERALE

3.1 Proiectarea arhitecturii unui sistem software

Responsabilitatea unui arhitect software nu constă doar din activitatea de proiectare. Un arhitect software trebuie să:

– Lucreze cu echipa care stabilește cerințele aplicației – în acest context rolul arhitectului este acela de a ajuta la adunarea cerințelor și înțelegerea nevoile sistemului ca ansamblu și de a asigura faptul că indicatorii de calitate sunt expliciți și bine înțeleși.

– Lucreze cu toți cei care vor interacționa cu aplicația – în acest context arhitectul are rolul de pivot, el trebuie să se asigure că toate nevoile celor care vor interacționa cu aplicația sunt înțelese și încorporate în proiect. De exemplu, pe lângă cerințele care se referă la funcționalitate, administratorul de rețea poate să ceară ca aplicația să fie ușor de instalat, configurat și actualizat.

– Conducă echipa tehnică de proiectare – definirea arhitecturii unei aplicații este o activitate de proiectare. Arhitectul conduce echipa de proiectare, compusă din proiectanți de sistem și conducători de echipe de programatori, pentru a realiza schița arhitecturii.

– Lucreze cu managerul de proiect – arhitectul trebuie să ajute la planificarea proiectului, estimarea și alocarea taskurilor.

În figura următoare este ilustrat procesul de proiectare a arhitecturii unui sistem software complex. Procesul constă din parcurgerea iterativă a trei etape:

Figura 3.1 Etapele parcurse în proiectarea unei arhitecturi pentru un sistem software

– Determinarea cerințelor care influențează arhitectura – presupune crearea unui model al cerințelor care va dirija proiectarea arhitecturii.

– Proiectarea arhitecturii – definirea structurii și a responsabilităților componentelor care formează arhitectura.

– Validarea – testarea arhitecturii; de obicei se realizează parcurgând lista de cerințe și eventualele cerințe ulterioare și verificarea faptului că arhitectura proiectată în etapa anterioară permite implementarea cerințelor.

Etapele enumerate mai sus sunt parcurse iterativ până când se obține o arhitectură validă. În continuare vor fi prezentate cele trei etape.

• Determinarea cerințelor care influențează arhitectura

Înainte de a proiecta arhitectura unui sistem software, este important să se obțină o imagine clară asupra cerințelor care influențează arhitectura. De obicei, aceste cerințe sunt cerințe non-funcționale care se referă la calitatea sistemului software.

Procesul de identificare a cerințelor care afectează arhitectura are două tipuri de intrări: pe de o parte, arhitectul trebuie să analizeze cerințele funcționale, iar pe de altă parte, el trebuie să țină cont și de cerințele venite din partea celor care vor interacționa cu aplicația. În urma analizei efectuate asupra celor două tipuri de cerințe rezultă cerințele care influențează arhitectura sistemului software. Procesul de analiză a cerințelor în vederea izolării cerințelor care influențează arhitectura este ilustrat in figura următoare:

Figura 3.2 Analiza cerințelor

Unele cerințe vor acționa ca și constrângeri, ele limitând opțiunile arhitectului.

Un alt aspect care trebuie avut în vedere referitor la cerințele care influențează arhitectura unui sistem software, este faptul că aceste cerințe nu sunt egale, unele fiind mai importante decât altele. De aceea este necesară o prioritizare a acestor cerințe. De obicei se folosesc trei niveluri de prioritizare:

– Ridicată – sistemul software trebuie să implementeze cerințele cu această prioritate. Aceste cerințe au un cuvânt greu de spus în ceea ce privește arhitectura.

– Medie – cerințele cu această prioritate vor trebui implementate la un moment dat, dar nu sunt absolut necesare pentru prima versiune.

– Scăzută – funcționalități dorite, dar care se pot implementa în măsura posibilităților.

Prioritizarea cerințelor se complică atunci când apar conflicte între cerințe, de exemplu: timp scurt până la scoaterea pe piață a produsului vs. dezvoltarea de componente generice și reutilizabile. De cele mai multe ori rezolvarea acestor conflicte nu este ușoară, dar este sarcina arhitectului să le rezolve.

• Proiectarea arhitecturii

Reprezintă cea mai importantă acțiune întreprinsă de către arhitect. Un document de cerințe foarte bine structurate, respectiv o comunicare bună cu restul echipelor implicate în proiect nu însemnă nimic dacă se proiectează o arhitectură slabă. Etapa de proiectare a arhitecturii are ca și intrări cerințele obținute în etapa anterioară, iar ca rezultat, se obține un document care descrie arhitectura sistemului software. Proiectarea arhitecturii se realizează în doi pași: primul pas se referă la alegerea unei strategii globale, iar al doilea constă din specificarea componentelor individuale și a rolului pe care fiecare componentă îl joacă în arhitectura globală.

• Validarea arhitecturii

Scopul etapei de validare este acela de a verifica faptul că arhitectura proiectată este potrivită pentru sistemul software care urmează să fie dezvoltat. Principala dificultate în ceea ce privește validarea unei arhitecturi constă în faptul că în acest moment nu există un produs software “fizic” care să poată fi executat și testat. Există două metode prin care se poate valida arhitectura unui sistem software: testarea manuală utilizând scenarii, respectiv validare prin construirea unui prototip.

• Utilizarea scenariilor

Utilizarea scenariilor pentru validarea arhitecturii unui sistem software presupune definirea unor stimuli care să aibă efect asupra arhitecturii. După care se face o analiză pentru a se determina care va fi răspunsul arhitecturii la un astfel de scenariu. Dacă răspunsul este cel dorit, atunci se consideră că scenariul este satisfăcut de arhitectură. Dacă răspunsul nu este cel dorit sau este greu de calificat, atunci s-a descoperit o zonă de risc în arhitectură. Se pot imagina scenarii care să evalueze oricare din cerințele sistemului.

• Crearea unui prototip

Deși scenariile sunt tehnici foarte utile în vederea testării unei arhitecturi, nu întotdeauna verificarea unui scenariu se poate face doar prin analiza arhitecturii, de aceea în anumite situații se recurge la construirea unui prototip care să permită verificarea anumitor scenarii. Un prototip se poate construi din două motive:

– se verifică dacă se poate implementa arhitectura proiectată astfel încât să satisfacă cerințele.

– se verifică faptul că tehnologia middleware selectată se comportă așa cum se așteaptă.

Odată ce prototipul a fost implementat și testat, răspunsul arhitecturii la stimulii prevăzuți în scenarii se poate obține cu un înalt grad de certitudine.

Deși un prototip poate fi foarte util în ceea ce privește validarea unei arhitecturi, trebuie avut grijă ca dezvoltarea unui astfel de prototip să nu dureze prea mult. De obicei, un prototip este abandonat după ce arhitectura a fost validată, de aceea dezvoltarea unui prototip nu trebuie să dureze mai mult de câteva zile, cel mult 1-2 săptămâni.

3.2 Proiectarea și specificațiile unei baze de date

În ultimii ani, dezvoltarea sistemelor de baze de date reprezintă unul dintre cele mai importante aspecte în domeniul tehnologiei informației, având un impact decisiv asupra modului de organizare și funcționare a numeroaselor instituții și servicii. Acestea sunt companiile de comunicație, întreprinderile de comerț, serviciile bancare, serviciile de transport, asigurările, universitățile etc. Acestea sunt dependente de funcționarea corectă și neîntreruptă a sistemelor de baze de date.

Sistemele de baze de date sunt o componentă importantă a vieții de zi cu zi în societatea modernă. Zilnic, majoritatea persoanelor desfășoară activități care implică interacțiunea cu o bază de date: depunerea sau extragerea unei sume de bani din bancă, rezervarea biletelor de tren sau de avion, căutarea unei cărți într-o bibliotecă computerizată, gestiunea angajaților dintr-o firmă, cumpărarea unor produse etc.

Bazele de date pot avea mărimi (număr de înregistrări) și complexități extrem de variate, de la câteva zeci de înregistrări (de exemplu, baza de date pentru o agendă de telefon a unei persoane) sau pot ajunge la milioane de înregistrări (de exemplu, baza de date pentru cărțile dintr-o bibliotecă, baza de date cu stocarea angajaților unei firme sau baza de date unde se păstrează informații despre situația studenților etc.).

Utilizatorii unei baze de date au posibilitatea să efectueze mai multe categorii de operații asupra datelor stocate aici:

• Introducerea de noi date (insert);

• Ștergerea unor date existente în baza de date (delete);

• Actualizarea datelor stocate (update);

• Interogarea bazei de date (query) pentru regăsirea anumitor informații, selectate după un criteriu ales.

O bază de date este o colecție de date centralizate, creată și menținută computerizat, în scopul prelucrării datelor în contextul unui set de aplicații. Prelucrarea datelor se referă la operațiile de introducere, ștergere, actualizare și interogare a datelor.

Între baza de date și utilizatorii sistemului există un nivel software, numit sistem de gestiune a bazei de date (SGBD). O bază de date computerizată poate fi generată și menținută fie cu ajutorul unui grup de programe de aplicație specifice acestui scop, fie cu acest SGBD.

Figura 3.3 Componente ale sistemului de baze de date

Sistemul de gestiune al bazei de date (SGBD) este un interpretor de cereri, el recepționând de la utilizatori anumite cereri de acces la baza de date, le interpretează, execută operațiile respective și returnează rezultatul către utilizatori.

De fapt, SGBD este un sistem de programe general ce facilitează procesul definirii, construcției și manipulării datelor pentru diverse aplicații.

– Definirea bazei de date presupune specificarea tipurilor de date ce vor fi stocate în baza de date, precum și descrierea detaliată a fiecărui tip de dată.

– Construcția bazei de date reprezintă procesul stocării datelor însăși prin mediul controlat prin SGBD.

– Prin manipulare se înțelege o serie de funcții ce facilitează implementarea cererilor pentru găsirea datelor specificate, adăugarea de noi date ce reflectă modificarea contextului, generarea de rapoarte pe baza conținutului bazei de date. În concluzie, pachetul software ce asigură manipularea datelor, împreună cu datele însăși (conținutul bazei de date) formează ceea ce se numește sistemul de baze de date (DataBase System).

Un SGBD oferă utilizatorilor o viziune a datelor stocate în baza de date, nemaifiind necesară cunoașterea organizării particulare a sistemului, asigură o protecție a datelor față de accese neautorizate și de anumite defecte de funcționare.

Proiectarea unei baze de date constă din proiectarea logică și fizice a acesteia, pentru a corespunde cerințelor utilizatorilor pentru un anumit set de aplicații.

În general, vom considera că proiectarea corectă a unei baze de date trebuie să parcurgă următoarele etape:

– Analiza cererilor și strângerea de informații referitoare la aplicație;

– Proiectarea conceptuală a bazei de date;

– Alegerea unui sistem de gestiune al bazelor de date;

– Proiectarea logică a bazei de date;

– Proiectarea fizică a bazei de date;

– Implementarea bazei de date și a aplicației.

Înainte de a se proiecta efectiv o bază de date, este necesar să se cunoască ce rezultate se așteaptă potențialii utilizatori să obțină de la baza de date respectivă și documentarea asupra informațiilor ce sunt disponibile pentru aceasta. De asemenea, este necesară și definirea cât mai exactă a aplicației (De ex.: aplicație de gestiune a stocurilor, a cărților într-o bibliotecă, aplicație contabilă, aplicație folosită la salarizare, aplicație referitoare la gestiunea studenților, a profesorilor, a

cursurilor, a notelor dintr-o instituție de învățământ etc.).

Având cerințele formulate precis și concis se poate trece la elaborarea schemei conceptuale utilizând un model de nivel înalt. Schema conceptuală reprezintă o descriere concisă a datelor utilizatorului, incluzând descrierea detaliată a tipurilor de date, a relațiilor și restricțiilor acestora. Deoarece până la acest moment nu se includ detalii de implementare, rezultatele pot fi comunicate utilizatorilor, chiar dacă sunt nespecializați în domeniu, și analizate de aceștia pentru eliminarea eventualelor conflicte care pot apărea.

Următoarea etapă este cea de construcție a bazei de date ținând cont de detaliile actuale, cu ajutorul unui sistem de gestiune a bazelor de date (SGBD). Această etapă înglobează etapele de alegere a unui SGBD, de proiectarea logică a bazei de date și cea de proiectarea fizică a bazei de date.

Alegerea SGBD se face în funcție de complexitatea aplicației, de capacitatea de stocare a datelor, de posibilitatea refacerii datelor, de numărul de utilizatori care vor folosi aplicația, dar și de costurile de achiziție ale sistemului, de costurile de întreținere etc.

Următoarea fază, cea de proiectare logică, poate fi realizată în două sub-faze: transpunerea schemei conceptuale în modelul de date al sistemului SGBD ales, dar independent de sistemul de gestiune propriu-zis, sau rafinarea schemei conceptuale și a schemelor externe obținute anterior, astfel încât să se utilizeze mai multe din facilitățile oferite de sistemul SGBD ales (modul de generare a cheilor primare, definirea constrângerilor, etc.). Aceste două sub-faze se pot realiza împreună, folosind unul din instrumentele de proiectare oferite de sistemul SGBD ales. Rezultatul acestei faze de proiectare îl constituie, așadar, schema conceptuală și schemele externe ale bazei de date, dependente

de sistemul SGBD ales și de modelul de date al acestuia.

Proiectarea fizică a bazei de date reprezintă procesul de alegere a structurilor de memorare și de acces la fișierele bazei de date, pentru a obține performanțe cât mai bune pentru aplicația proiectată. Ca parametrii generali de alegere a opțiunilor proiectului fizic al unei baze de date relaționale se pot enumera: timpul de răspuns, utilizarea spațiului de memorare, capacitatea tranzacțională.

Deciziile de proiectare fizică se pot lua numai după o analiză a aplicațiilor care se vor executa și în principal, a interogărilor și tranzacțiilor pe care acestea le vor lansa. În urma analizei, se pot sintetiza informații care să dea imaginea de ansamblu a utilizării atributelor relațiilor bazei de date: care atribute sunt actualizate cel mai frecvent, care atribute sunt folosite cel mai frecvent în selecții ale interogărilor, etc. Aceste informații se folosesc pentru stabilirea indecșilor secundari ai relațiilor.

Ultima etapă este cea de implementare efectivă a bazei de date și a aplicației. Aici se creează pe baza modelului definit obiectele bazei de date, se populează cu date baza de date, se verifică constrângerile, se creează interfețele cu utilizatorul și rapoartele necesare cu datele extrase din baza de date.

3.2.1 Construcția schemelor relațiilor

În proiectarea bazelor de date se definesc relații sau asocieri între mulțimile de entități componente, pentru a reprezenta anumite aspecte ale realității pe care o modelează baza de date.

O relație este o corespondență între entități din una sau mai multe mulțimi de entități. Gradul unei relații este dat de numărul de mulțimi de entități asociate. Relațiile pot fi binare (între 2 mulțimi de entități) sau multiple (între mai mult de 2 entități).

Relațiile binare sunt împărțite în trei categorii, după numărul elementelor din fiecare din cele două mulțimi puse în corespondență de relația respectivă.

Se consideră 2 mulțimi de entități E1 și E2.

• Relația „unul-la-unul” (1-1 sau one to one)

Relația „unul-la-unul” este cel mai simplu tip de relație. Ea este relația prin care unui element din mulțimea E1 îi corespunde un singur element din mulțimea E2 și reciproc.

Figura 3.4 Relația „unul-la-unul”

Această relație este foarte rar folosită în lumea reală. Cel mai des, ea este folosită pentru a reduce numărul de atribute dintr-o entitate, pentru a nu depăși numărul maxim de câmpuri asociate pentru o tabelă, acesta fiind de circa 255. Se mai poate folosi și în cazul în care dorim despărțirea elementelor fixe, a informațiilor care se modifică mai rar față de cele care se modifică destul de des.

• Relația „unul-la-multe” (1-N sau one to many)

Această relație este o relație prin care unui element din mulțimea E1 îi corespund unul sau mai multe elemente din mulțimea E2, dar unui element din mulțimea E2 îi corespunde un singur element din mulțimea E1.

Figura 3.5 Relația „unul-la-multe”

O atenție sporită trebuie să avem la specificarea părților acestui tip de relație.

• Relația „multe-la-multe” (M-N sau many to many)

Această relație este o relație prin care unui element din mulțimea E1 îi corespund unul sau mai multe elemente din mulțimea E2, și reciproc.

Figura 3.6 Relația „multe-la-multe”

Acest tip de relație este foarte des întâlnită, dar nu poate fi implementată în bazele de date relaționale. De fapt, pentru modelarea acestei relații se folosește o relație suplimentară, de tip unul-la-multe pentru fiecare din relațiile inițiale.

3.2.3 Constrângeri de integritate

Constrângerile de integritate sunt reguli care se definesc la proiectarea unei baze de date și care trebuie să fie respectate de-a lungul existenței acesteia.

Entitățiile unei baze de date reflectă realitatea modelată și de aceea valorile pe care le conțin trebuie să respecte anumite reguli, care să corespundă celor din realitate.

Vom folosi în continuare pentru termenul de entitate denumirea tabelă.

Constrângerile se pot clasifica astfel:

– în cadrul tabelei

– sau între tabele.

Constrângerile din cadrul unei tabele sunt reguli care se impun în cadrul unei singure tabele și asigură integritatea datelor acesteia. Ele sunt de 3 categorii:

• constrângeri de domeniu. Aceste constrângeri sunt condiții care se impun valorilor atributelor și asigură integritatea domeniilor atributelor.

• constrângeri de înregistrare din tabelă. Aceste constrângeri sunt condiții care se impun înregistrărilor din tabelă și asigură identificarea corectă a înregistrărilor prin intermediul cheilor primare.

• constrângeri impuse de dependențe de date (dependențe funcționale). Acestea sunt constrângeri prin care valorile unor atribute ale unei entități (câmpuri ale tabelei) determină valorile altor atribute ale aceleiași entități.

Constrângerile între tabele sunt reguli care se impun între două sau mai multe relații. Cele mai importante sunt constrângerile de integritate referențială, care se realizează prin intermediul cheilor străine și asigură asocierea corectă a tabelelor.

• Constrângerile de domeniu

Constrângerile de domeniu sunt condiții impuse valorilor atributelor pentru ca acestea să corespundă semnificației pe care o au în realitatea modelată. În reprezentarea unei entități printr-un tabel, valorile atributelor sunt reprezentate pe coloane. Din această cauză aceste constrângeri se mai numesc și constrângeri de coloană.

Vom descrie 3 tipuri de constrângeri de coloană:

– Constrângerea NOT NULL. Valoarea NULL este o valoare particulară, care nu reprezintă valoarea 0, ci lipsă de informație. Această valoare NULL poate apărea când nu se cunosc respectivele informații, însă nu orice atribut poate lua valoarea NULL. În astfel de situații, la definirea relațiilor se impune atributului constrângerea NOT NULL, însemnând că acest atribut nu poate lua valoare NULL în orice înregistrare din tabelă.

– Constrângerea DEFAULT. Această constrângere este folosită pentru stabilirea unei valori implicite (DEFAULT) pentru un atribut al entității. În cazul în care la inserarea unei înregistrări nu se specifică valoarea unui atribut (câmp), atunci acesta primește valoarea implicită (dacă a fost definită) sau valoarea NULL (dacă nu a fost definită o valoare implicită pentru atributul respectiv, dar sunt admise valori NULL). Dacă nu a fost definită o valoare implicită și nici nu sunt admise valori NULL, se generează o eroare.

– Constrângerea CHECK. Constrângerea CHECK este, după cum îi spune și numele, o constrângere de verificare. În limbajul SQL, domeniile în care pot lua valori atributele se pot stabili ca tipuri de date predefinite. Pentru fiecare atribut se pot adăuga constrângeri de verificare la definirea tabelului.

• Constrângerile referitoare la înregistrările din tabelă – Cheia primară

O entitate este definită ca o mulțime de înregistrări. Deci, înregistrările entității trebuie să fie distincte, acest lucru însemnând că într-o entitate nu pot exista două sau mai multe înregistrări care să

conțină aceeași combinație de valori pentru fiecare atribut.

O cheie primară a unei entități (tabele) este o submulțime de atribute ale entității care are următoarele proprietăți:

– este unică, adică orice combinație de valori ale atributelor acestei chei este unică pentru orice stare a relației;

– este stabilă, adică informația corespunzătoare ei nu se modifică niciodată prin operații de actualizare a datelor;

– nu se admit valori NULL pentru nici unul din atributele cheii respective.

În concluzie, o cheie primară reprezintă unul sau mai multe câmpuri ale tabelei care identifică unic fiecare înregistrare din tabela respectivă.

• Constrângeri între tabele

Relațiile dintre tipurile de entități definite în modelul conceptual al unei baze de date se realizează în modelul relațional prin intermediul cheilor străine.

O cheie străină este o submulțime de atribute ale unei entități E1 care referă entitatea E2 și îndeplinește următoarele condiții: atributele cheii străine din E1 sunt definite pe domenii compatibile cu cele ale atributelor cheii din entitatea E2, iar cheia din entitatea E2 este cheie primară în această relație.

Această cheie străină determină o asociere între câmpurile unor tabele cu cele ale altei tabele și creează abilitatea de realizare a unirii tabelelor respective prin intermediul operațiilor JOIN.

Integritatea referențială este proprietatea bazei de date care garantează că oricare valoare a unei chei străine se regăsește printre valorile cheii corespunzătoare din relația respectivă, sau cheia străină are valoarea NULL (dacă atributele acesteia nu sunt supuse constrângerii NOT NULL).

• Dependențe funcționale

Dependența funcțională definește relația dintre un atribut sau un grup de atribute ale unui tabel și un alt atribut sau grup de atribute ale altuia. După cum am specificat, atributele se referă la

câmpurile tabelei. Prin urmare, trebuie observat ce câmpuri depind de alte câmpuri.

În orice tabelă pot exista două categorii de dependențe funcționale:

• Dependențe funcționale determinate de cheile tabelei; astfel de dependențe funcționale nu produc redundanța datelor și nici anomalii de actualizare a relației;

• Dependențe funcționale în care atributul determinat nu este o cheie a tabelei; astfel de dependențe funcționale produc redundanța datelor și anomalii de actualizare a tabelei.

Constrângerile de cheie sunt constrângeri implicite, conținute în definiția relației și sunt verificate și impuse automat de sistemul de gestiune; proiectantul bazei de date nu trebuie să prevadă nimic suplimentar pentru ca aceste constrângeri să fie satisfăcute de orice stare a relației.

În schimb, dependențele funcționale în care atributul determinant nu este o cheie a relației sunt constrângeri explicite, care nu sunt verificate și nici impuse de sistemul de gestiune. Verificarea și impunerea acestor dependențe funcționale se poate face numai procedural, prin triggere, proceduri stocate sau funcții impuse în programele de aplicație.

❹ PROIECTAREA APLICAȚIEI

Proiectarea sistemului va ține cont de nevoile utilizatorilor care se pot schimba. Astfel, va trebui să ținem cont de acest lucru și să facem sistemul ușor de modificat.

Arhitectura de bază a unei aplicații web este ilustrată în figura de mai jos:

Figura 4.1 – Arhitectura unei aplicații web

Există mai multe tipuri de proiectare în cadrul dezvoltării unui sistem software:

– proiectarea arhitecturală

– proiectarea interfeței cu utilizatorul

– proiectarea bazei de date

Fazele proiectării:

– Proiectarea arhitecturală – identifică subsistemele

– Specificarea abstractă – specifică subsistemelor

– Proiectarea interfeței – descrierea interfețelor subsistemelor

– Proiectarea structurilor de date

• Proiectarea arhitecturală

– reprezintă cel mai abstract nivel al fazei de proiectare

– presupune identificarea subsistemelor și a legăturilor dintre ele

FotoMania

Figura 4.2 – Identificarea subsistemelor aplicației „FotoMania”

• Proiectarea bazei de date

Baza de date „fotomania” are în componența sa următoarele tabele:

• fotomania_categorii

• fotomania_comentarii

• fotomania_etichete

• fotomania_etichete_relatii

• fotomania_favorite

• fotomania_imagini

• fotomania_incarcari

• fotomania_mesaje

• fotomania_rating

• fotomania_seo

• fotomania_utilizatori

• fotomania_utilizatori_online

În continuare, vor fi prezentate, pe rând, tabelele din baza de date a aplicației.

• Tabelul „fotomania_categorii” – în acest tabel sunt stocate toate categoriile.

Structura tabelului este formată din următoarele câmpuri:

id – fiecare categorie are propriul său id;

name – reprezintă denumirea fiecărei categorii;

cat_order – reprezintă numărul de ordine al fiecărei categorii;

description – reprezintă descrierea categoriei;

keywords – reprezintă cuvintele cheie (etichetele) ale fiecărei categorii;

seo_url – reprezintă URL-ul optimizat;

parent_id – reprezintă id-ul categoriei părinte.

• Tabelul „fotomania_comentarii” – în acest tabel sunt stocate toate comentariile.

Structura tabelului este formată din următoarele câmpuri:

id – fiecare comentariu are propriul său id;

user – reprezintă id-ul utilizatorului care a adăugat comentariul;

comment – reprezintă comentariul propriu-zis;

link_id – reprezintă id-ul imaginii la care a fost adăugat comentariul;

date – reprezintă data și ora la care a fost adăugat comentariul.

• Tabelul „fotomania_etichete” – în acest tabel sunt stocate toate etichetele.

Structura tabelului este formată din următoarele câmpuri:

id – fiecare etichetă are propriul său id;

tag_name – reprezintă denumirea fiecărei etichete;

seo_url – reprezintă URL-ul optimizat.

• Tabelul „fotomania_etichete_relatii” – în acest tabel sunt stocate relațiile dintre etichete și imagini.

Structura tabelului este formată din următoarele câmpuri:

id – fiecare categorie din baza de date are propriul său id;

wallpaper_id – reprezintă id-ul imaginii;

tag_id – reprezintă id-ul etichetei.

• Tabelul „fotomania_favorite” – în acest tabel sunt înregistrate toate imaginile favorite ale utilizatorilor.

Structura tabelului este formată din următoarele câmpuri:

user_id – reprezintă id-ul utilizatorului;

wallpaper_id – reprezintă id-ul imaginii favorite.

• Tabelul „fotomania_imagini” – în acest tabel sunt stocate toate imaginile.

Structura tabelului este formată din următoarele câmpuri:

id – fiecare imagine are propriul său id;

name – reprezintă denumirea imaginii;

description – reprezintă descrierea imaginii;

file – reprezintă fișierul de tip imagine;

category – reprezintă categoria/subcategoria din care face parte imaginea;

category_parent – reprezintă categoria părinte din care face parte imaginea;

date_added – reprezintă data adăugării imaginii;

published – arată dacă imaginea este publică sau nu;

rating – reprezintă media voturilor acordate de către utilizatori unei imagini;

featured – arată dacă imaginea este adăugată sau nu de către un utilizator la favorite;

seo_url – reprezintă URL-ul optimizat;

submitter – reprezintă id-ul utilizatorului care a încărcat imaginea;

hits – reprezintă numărul total de vizualizări/accesări ale unei imagini;

align – reprezintă modul în care se va face decuparea pe orizontală a imaginii;

valign – reprezintă modul în care se va face decuparea pe verticală a imaginii;

downloads – reprezintă numărul total de descărcări ale unei imagini;

filename – reprezintă denumirea fișierului de tip imagine;

display – reprezintă modul de afișare al imaginii;

original_width – reprezintă lățimea originală a imaginii;

original_height – reprezintă înălțimea originală a imaginii;

tags – reprezintă etichetele unei imagini.

• Tabelul „fotomania_incarcari” – în acest tabel sunt înregistrate toate categoriile

Structura tabelului este formată din următoarele câmpuri:

id – fiecare imagine încărcată primește un id;

name – reprezintă denumirea imaginii încărcate;

description – reprezintă descrierea imaginii;

tags – reprezintă etichetele imaginii;

file – reprezintă calea fișierului de tip imagine;

category – reprezintă id-ul categoriei în care a fost încărcată imaginea;

user – reprezintă id-ul utilizatorului care a încărcat imaginea.

• Tabelul „fotomania_mesaje” – în acest tabel sunt înregistrate toate categoriile

Structura tabelului este formată din următoarele câmpuri:

id – fiecare categorie din baza de date are propriul său id;

name – reprezintă denumirea fiecărei categorii;

cat_order – reprezintă numărul de ordine al fiecărei categorii;

description – reprezintă descrierea categoriei;

keywords – reprezintă cuvintele cheie (etichetele) ale fiecărei categorii;

seo_url – reprezintă URL-ul optimizat;

parent_id – reprezintă id-ul categoriei părinte.

• Tabelul „fotomania_rating” – în acest tabel sunt înregistrate toate voturile utilizatorilor acordate imaginilor.

Structura tabelului este formată din următoarele câmpuri:

wallpaper_id – reprezintă id-ul imaginii votate de către un utilizator;

user_id – reprezintă id-ul unui utilizator;

rating – reprezintă votul (numărul de steluțe) pe care l-a primit o imagine;

• Tabelul „fotomania_seo” – în acest tabel sunt înregistrate toate categoriile

Structura tabelului este formată din următoarele câmpuri:

id – fiecare categorie din baza de date are propriul său id;

name – reprezintă denumirea fiecărei categorii;

cat_order – reprezintă numărul de ordine al fiecărei categorii;

description – reprezintă descrierea categoriei;

keywords – reprezintă cuvintele cheie (etichetele) ale fiecărei categorii;

seo_url – reprezintă URL-ul optimizat;

parent_id – reprezintă id-ul categoriei părinte.

• Tabelul „fotomania_utilizatori” – în acest tabel sunt înregistrate toate categoriile

Structura tabelului este formată din următoarele câmpuri:

id – fiecare utilizator are propriul său id;

username – reprezintă numele utilizatorului;

email – reprezintă email-ul utilizatorului;

active – reprezintă descrierea categoriei;

about – reprezintă informațiile despre utilizator;

location – reprezintă localitatea din care este utilizatorul;

interests – reprezintă interesele utilizatorului;

website – reprezintă website-ul personal al utilizatorului;

admin – arată dacă utilizatorul are drepturi de administrator sau nu;

joined – reprezintă data când s-a înregistrat utilizatorul;

favourites – reprezintă id-urile imaginilor favorite ale fiecărui utilizator;

avatar – reprezintă poza de profil a utilizatorului;

ratings – reprezintă numărul de voturi acordate imaginilor de fiecare utilizator;

comments – reprezintă numărul de comentarii adăugate de fiecare utilizator;

messages – reprezintă numărul de mesaje al fiecărui utilizator;

last_comment – reprezintă data și ora ultimului comentariu adăugat de către un utilizator;

seo_url – reprezintă URL-ul optimizat;

last_activity – reprezintă ultima dată când a fost activ un utilizator;

banned – arată dacă un utilizator are sau nu accesul restricționat în cadrul aplicației;

last_pm – reprezintă data și ora ultimului mesaj privat.

• Tabelul „fotomania_utilizatori_online” – în acest tabel sunt înregistrate toate categoriile

Structura tabelului este formată din următoarele câmpuri:

session_id – reprezintă id-ul sesiunii;

time – reprezintă durata de timp cât este activ utilizatorul;

user_id – reprezintă id-ul utilizatorului.

• Modelul relațional al bazei de date

Figura 4.3 – Modelul relațional al bazei de date

❺ dezvoltarea aplicației

În momentul accesării aplicației, prin intermediul unui browser, utilizatorul poate vizualiza și naviga prin conținutul site-ului, iar dacă acesta dispune de un cont, se poate autentifica, și astfel are acces la toate facilitățile disponibile pentru tipul contului pe care îl deține. În cadrul aplicației există două tipuri de utilizatori, după cum urmează:

• Utilizator normal

– vizualizarea conținutului aplicației;

– posibilitatea de a încărca imagini (este nevoie de aprobarea unui administrator pentru ca acestea să fie publicate);

– posibilitatea de a căuta imagini;

– posibilitatea de a adăuga imagini la favorite;

– posibilitatea de a descărca imagini la rezoluția dorită;

– posibilitatea de a adăuga comentarii la imagini;

– posibilitatea de a trimite/primi mesaje private.

• Administrator

Pe lângă facilitățile de care dispune orice utilizator înregistrat, administratorul mai beneficiază în plus și de următoarele chestiuni:

– deține controlul total asupra aplicației, având acces la panoul de control al acesteia;

– vizualizarea statisticilor site-ului (numărul total al utilizatorilor înscriși și al celor online, numărul total de imagini/categorii/comentarii/descărcări);

– gestionarea imaginilor;

– gestionarea categoriilor;

– gestionarea utilizatorilor;

– gestionarea comentariilor.

Implementarea aplicației s-a făcut în PHP, versiunea folosită fiind PHP 5.6.3. Pentru realizarea bazei de date a aplicației am utilizat MySQL, versiunea 5.6.21, iar ca server, Apache 2.4.10.

5.2 Modulul de interfață

• interfață al aplicației – oferă multiple modalități de acces la informațiile și datele din cadrul site-ului, punând de asemenea la dispoziția utilizatorului o serie de facilități speciale

Figura 5.1 – Pagina de start a aplicației

În continuare, sunt expuse capturi de ecran cu funcționalitățile de bază din cadrul aplicației.

• Autentificarea unui utilizator se poate face prin intermediul formularului specific. Este nevoie de introducerea unui nume de utilizator și a unei parole, ca în figura următoare:

Figura 5.2 – Formularul de autentificare a unui utilizator

• Utilizatorii se pot înregistra prin completarea formularului din figura de mai jos. Este nevoie de introducerea unui nume de utilizator, unei adrese de email și a unei parole. Această funcționalitate poate fi accesată apăsând pe opțiunea „Înregistrare” din meniul din dreapta.

Figura 5.3 – Formularul de înregistrare a unui utilizator

• Încărcarea unei imagini se face foarte simplu, accesând opțiunea „Încărcare imagine” din meniul principal, iar apoi se vor completa câmpurile formularului. Această acțiune este disponibilă doar utilizatorilor autentificați în contul lor. Funcționalitatea este prezentată în figura de mai jos:

Figura 5.4 – Încărcarea unei imagini

• În figura următoare este prezentată o listă a utilizatorilor înregistrați în cadrul aplicației. Aceștia pot fi ordonați crescător sau descrescător după nume, data înregistrării sau locație. Pentru a face acest lucru trebuie apăsat un simplu click pe săgețile din dreptul fiecărui câmp (verde = ordine crescătoare; roșu = ordine descrescătoare).

Lista poate fi vizualizată accesând opțiunea „Lista membrilor” din meniul din stânga.

Figura 5.4 – Lista membrilor

• Pentru a vizualiza profilul unui utilizator, trebuie accesată opțiunea „Lista membrilor” din meniul din stânga, iar mai apoi se apasă click pe numele utilizatorului dorit.

Pe profilul unui utilizator se pot vedea detalii despre acesta, imaginile încărcate de către acesta și imaginile favorite ale acestuia.

Figura 5.5 – Profilul unui utilizator

• Utilizatorii conectați au la dispoziție și facilitatea de a trimite mesaje private altor utilizatori. Pentru acest lucru este nevoie să se acceseze profilul utilizatorului căruia se dorește să îi fie transmis mesajul și mai apoi se dă click pe butonul „Trimite un mesaj”. Un astfel de exemplu este prezentat în figura următoare:

Figura 5.6 – Trimiterea unui mesaj privat altui utilizator

• În figura de mai jos sunt prezentate alte funcționalități care stau la dispoziția utilizatorilor. Aceștia pot vizualiza detaliile unei imagini (de către cine a fost încărcată imaginea, denumire, data adăugării, descriere, etichete, numărul de vizualizări și de descărcări), pot adăuga imaginea la imagini favorite și nu în ultimul rând, o pot vota.

Figura 5.7 – Vizualizarea detaliilor unei imagini și alte opțiuni disponibile

• În cadrul secțiunii de comentarii, utilizatorii pot adăuga comentarii și le pot vizualiza pe cele deja publicate. Un exemplu este prezentat în figura următoare:

Figura 5.8 – Secțiunea de comentarii

5.2 Modulul de administrare

• În figura următoare este prezentat panoul de control al aplicației, locul din care se poate gestiona întregul conținut. Acesta poate fi accesat doar de către administrator, cel care deține controlul total asupra aplicației; pentru a face acest lucru, el trebuie să acceseze pagina de start a aplicației, apoi să se conecteze și să aleagă opțiunea „Administrare” din meniul utilizatorului (din partea dreaptă).

Pe prima pagină a panoului, sunt afișate statisticile aplicației, cât și un formular de încărcare rapidă a unei imagini. Administratorul poate naviga prin conținutul panoului accesând opțiunile disponibile din cadrul meniului și în plus poate căuta cu ajutorul formularului specific orice utilizator sau imagine din baza de date.

Figura 5.9 – Panoul de control al aplicației „FotoMania”

• Secțiunea „Imagini”

În această secțiune, administratorul poate încărca imagini; poate vizualiza toate imaginile încărcate în baza de date; poate căuta imagini; poate vizualiza comentariile adăugate la o anumită imagine; poate bloca orice imagine dorește (aceasta nu va mai apărea pe site); poate recomanda diverse imagini, apăsând click pe steluța din dreptul unei imagini (acestea vor apărea în secțiunea „Imagini recomandate”, pe pagina de start a aplicației); poate modifica detaliile imaginilor și nu în ultimul rând, poate șterge orice imagine dorește.

Figura 5.10 – Secțiunea „Imagini”

• Secțiunea „Categorii”

Pentru a vizualiza această secțiune, administratorul trebuie să acceseze opțiunea „Imagini – Categorii” din cadrul meniului. Aici, administratorul are la dispoziție următoarele facilități:

poate adăuga diverse categorii și subcategorii;

poate vizualiza toate categoriile existente;

poate schimba ordinea categoriilor (acestea vor fi afișate pe site exact în ordinea aleasă);

poate modifica detaliile categoriilor;

poate șterge orice categorie.

Figura 5.11 – Secțiunea „Categorii”

• Pentru a fi publicate pe site, imaginile încărcate de utilizatori trebuie să primească mai întâi acordul administratorului. Pentru a vizualiza ce imagini au fost încărcate de către utilizatori, administratorul trebuie să acceseze din meniu opțiunea „Încărcări”. Acesta are dreptul a accepta sau de a refuza anumite imagini, iar înainte de publicare, administratorul poate modifica detaliile imaginii. Un astfel de exemplu este ilustrat în figura următoare:

Figura 5.12 – Imagini încărcate de utilizatori

• Secțiunea „Utilizatori”

În această secțiune, administratorul dispune de următoarele facilități:

poate vizualiza toți utilizatorii înregistrați sau numai pe cei online (iconița din fața utilizatorului arată dacă acesta este conectat sau nu în momentul respectiv), cât și ultima oară când a fost activ fiecare utilizator;

poate căuta un utilizator anume;

poate restricționa accesul în cadrul aplicației oricărui utilizator;

poate modifica detaliile utilizatorilor, având la dispoziție chiar și opțiunea de a schimba statutul din utilizator normal în administrator;

poate șterge orice utilizator.

Figura 5.13 – Secțiunea „Utilizatori”

• Secțiunea „Comentarii”

În această secțiune, administratorul dispune de următoarele facilități:

poate vizualiza toate comentariile adăugate de către utilizatori la diverse imagini;

poate căuta un anumit comentariu;

poate șterge orice comentariu (apăsând dublu click pe butonul de ștergere).

Figura 5.14 – Secțiunea „Comentarii”

• Administratorul mai are la dispoziția sa și un grafic care afișează o statistică a celor mai vizualizate 10 imagini din baza de date. Graficul este ilustrat în figura următoare:

Figura 5.15 – Grafic: Cele mai vizualizate 10 imagini

❻ concluzii

Materialul prezentat în această lucrare este rezultatul cunoștințelor dobândite din urmarea cursurilor și laboratoarelor predate la specializarea Calculatoare (cu predare în limba română), din cadrul Facultății de Automatică, Calculatoare și Electronică – Craiova, a consultării a diverse articole și cărți din domeniu.

În partea de introducere sunt prezentate câteva informații generale despre aplicațiile web și etapele de dezvoltarea ale acestora, precum și o prezentare succintă a limbajelor folosite în dezvoltarea aplicației „FotoMania”.

Al doilea capitol descrie potențialul produsului împreună cu funcțiile principale ale acestuia. Tot aici, regăsim informații despre caracteristicile utilizatorului, constrângerile generale și analiza cerințelor.

Capitolul al treilea este destinat prezentării unor aspecte generale despre proiectarea arhitecturii unui sistem software și despre proiectarea unei baze de date.

În capitolul patru sunt prezentate, pe rând, proiectarea arhitecturii aplicației, precum și structura bazei de date.

În capitolul cinci este realizată o selecție a celor mai importante funcționalități ale aplicației, evidențiate printr-o succesiune de capturi de ecran și câteva detalii despre modul de utilizare al acestor funcționalități.

Baza de date proiectată și utilizată este una relațională, tabelele au o structură complexă, între ele existând legături complexe. Am acordat o atenție deosebită proiectării bazei de date, astfel încât organizarea informațiilor sa fie cât mai logică și accesul la date să se facă într-un mod optim.

De asemenea, am acordat atenție aspectului grafic al aplicației, prin folosirea de cod CSS, oferindu-i aplicației un design simplu și plăcut.

Modulul de interfață al aplicației – oferă multiple modalități de acces la informațiile și datele din cadrul site-ului, punând de asemenea la dispoziția utilizatorului o serie de facilități speciale.

Modulul de administrare al aplicației – prin dimensiunile si complexitatea sa – poate fi considerat ca un site web de sine-stătător, fiind implementat prin zeci de scripturi PHP și JavaScript.

Modularizarea aplicației a condus la o structură flexibilă a aplicației, fiind astfel posibil ca și alte componente ale aplicației – secțiuni ale modulelor principale, sa fie adăugate ulterior, în procesul de dezvoltare a aplicației.

Limitele sistemului prezentat sunt date în primul rând de mediul pentru care a fost construit, el nefiind conceput și testat pentru gestionarea unui număr foarte mare de informații. Din acest punct de vedere, este posibil ca serverul de fișiere, în cazul unui flux mare de informații, să genereze o serie de restricții privind volumul de informație care se poate stoca. Sistemul poate fi extins prin introducerea unui grup de servere care să mărească cu mult posibilitățile de stocare.

În ansamblu, aplicația realizată s-a demonstrat a fi stabilă, cu timpi mici de răspuns la testele la care a fost supusă.

❼ Bibliografie

[Ang05] – Traian Anghel, Programarea în PHP. Ghid practic, Editura Polirom, Iași, 2005

[Ull06] – Larry Ullman, PHP și MySQL pentru site-uri web dinamice, Editura Teora, București, 2006

[Mel05] – Julie C. Meloni, Învață singur PHP, MySQL și Apache, Editura Corint, București, 2005

[Wel05] – Luke Welling, Laura Thomson, Dezvoltarea aplicațiilor web cu PHP și MySQL – Ediția a II-a, Editura Teora, București, 2005

[Her03] – Michael J. Hernandez, Proiectarea bazelor de date, Editura Teora, București, 2003

❽ Referințe web

http://www.w3schools.com

http://mihai.cm.upt.ro/Discipline/IES/FundamenteInDezvoltareaDeAplicatiiWeb.pdf

http://www.aut.upt.ro/staff/diercan/data/PSSC/curs-13.pdf

http://www.seap.usv.ro/~valeriul/lupu/html_php_mysql.pdf

http://biblioteca.regielive.ro/cursuri/limbaje-de-programare/proiectarea-web-dezvoltarea-sistematica-a-aplicatiilor-web-146194.html

http://profs.info.uaic.ro/~busaco/teach/courses/wade/presentations/web01Concepte.pdf

Bibliografie

[Ang05] – Traian Anghel, Programarea în PHP. Ghid practic, Editura Polirom, Iași, 2005

[Ull06] – Larry Ullman, PHP și MySQL pentru site-uri web dinamice, Editura Teora, București, 2006

[Mel05] – Julie C. Meloni, Învață singur PHP, MySQL și Apache, Editura Corint, București, 2005

[Wel05] – Luke Welling, Laura Thomson, Dezvoltarea aplicațiilor web cu PHP și MySQL – Ediția a II-a, Editura Teora, București, 2005

[Her03] – Michael J. Hernandez, Proiectarea bazelor de date, Editura Teora, București, 2003

❽ Referințe web

http://www.w3schools.com

http://mihai.cm.upt.ro/Discipline/IES/FundamenteInDezvoltareaDeAplicatiiWeb.pdf

http://www.aut.upt.ro/staff/diercan/data/PSSC/curs-13.pdf

http://www.seap.usv.ro/~valeriul/lupu/html_php_mysql.pdf

http://biblioteca.regielive.ro/cursuri/limbaje-de-programare/proiectarea-web-dezvoltarea-sistematica-a-aplicatiilor-web-146194.html

http://profs.info.uaic.ro/~busaco/teach/courses/wade/presentations/web01Concepte.pdf

Similar Posts