2. Programare. Fundamente Teoretice 9 2.1 Introducere în programare 9 2.2 Programare orientată pe obiecte 10 3. Proiectarea și implementarea… [307192]
Cuprins
Cuprins 7
1. Introducere 8
2. Programare. Fundamente Teoretice 9
2.1 Introducere în programare 9
2.2 Programare orientată pe obiecte 10
3. Proiectarea și implementarea aplicației 11
3.1 Specificații 12
3.2 Arhitectura aplicației 12
3.2.1 Schema generală 13
3.2.2 Proiectare UML 14
3.2.3 Modulul Client 24
3.2.4 Modulul Server 27
3.2.5 Modulul traducere automată 29
3.2.6 [anonimizat] 30
3.2.7 Tehnologii folosite 35
4. Utilizarea aplicației 43
4.1 Interfața grafică 43
4.1.2 Modulul Server 43
4.1.2 Modulul Client 44
5. Concluzii 56
6. Bibliografie 58
1. [anonimizat] o [anonimizat]. [anonimizat] a devenit tot mai complicată.
[anonimizat] a face posibilă comunicarea între persoane care vorbesc limbi diferite.
[anonimizat], aplicația traduce mesajul în mod automat.
Aplicația se numește World Wide Messenger (WWM) [anonimizat]. [anonimizat], [anonimizat] a omului.
[anonimizat], urmate de o serie de concluzii și o listă de referințe bibliografice.
Capitolul 2 conține o [anonimizat], după care urmează fundamentele teoretice despre programarea orientată pe obiecte.
Capitolul 3 se referă la proiectarea și implementarea aplicației. [anonimizat]: specificațiile, schema generală a aplicației și proiectarea cu ajutorul diagramelor UML. La sfârșitul acestui capitol am prezentat tehnologiile si aplicațiile folosite în cadrul aplicației.
Capitolul 4 prezintă utilizarea aplicației și toate interfețele grafice ale acesteia.
Această lucrare prezintă aplicația care poate reprezenta o soluție în orice domeniu pentru comunicarea persoanelor care nu cunosc o limbă. [anonimizat], aspecte teoretice și practice ale modalităților de concepere și implementare a aplicației.
2. Programare. Fundamente Teoretice
2.1 Introducere în programare
Programele de calculator sunt constituite dintr-o serie de instrucțiuni executate de calculator. La crearea unui program trebuie avute în vedere aceste instrucțiuni pentru realizarea operațiilor dorite. Procesul de definire a instrucțiunilor executate de calculator este numit programare.
Instrucțiunile utilizate de calculator sunt așa numite grupuri 1 și 0, [anonimizat]. Pentru programarea primelor calculatoare (în anii 1940-1950) trebuia înțeleasă modul de interpretare a diferitelor combinații 0 și 1, unde programatorii scriau toate programele utilizând cifrele binare. Acest mod de lucru a [anonimizat]. În acest sens cercetătorii au creat limbaje de programare care au dat acces la o exprimare mai accesibilă a instrucțiunilor pentru om.
Un limbaj de programare este un set de expresii și reguli (sau tehnici) de formulare a instrucțiunilor pentru un calculator. Acesta face posibilă programatorului specificarea în mod exact acțiunilor executate de calculator. Pentru executarea unui program scris într-un limbaj anume, există două abordări: compilarea sau interpretarea. Compilarea constă în faptul că programul-sursă este transformat de compilator în totalitate într-un program echivalent scris în limbaj, care la urmă va fi executat. La interpretare, interpretorul va lua prima instrucțiune din programul-sursă și o va transforma într-un limbaj pe care la urmă o execută, după care trece la următoarea instrucțiune.
Limbajele moderne combină aceste două abordări, adică codul sursă este compilat într-un limbaj binar numit bytecode care la rulare este interpretat de către o mașină virtuală.
2.2 Programare orientată pe obiecte
Programarea orientată pe obiecte este o paradigmă de programare care folosește obiecte și interacțiuni pentru modelarea arhitecturii unui program.
Programarea orientată pe obiect este un pas important în evoluția limbajelor de programare spre o puternică abstractizare a implementării programelor. Acesta a apărut din necesitatea exprimării problemei într-un mod natural a ființei umane. Astfel unitățile care alcătuiesc un program se apropie de modul de gândire a omului mai mult decât la modul de lucru al calculatorului. Până la apariția acestui tip de programare, programele au fost puse în aplicare cu ajutorul programelor procedurale (C, Pascal) sau în limbaje care nu oferă o modalitate de grupare a instrucțiunilor în unități logice (funcții, proceduri), ca de exemplu în cazul limbajului de asamblare (assembler).
Conceptul de bază al programării orientate pe obiecte este Clasa. Aceasta grupează datele și unitățile de prelucrare a acestora într-un modul.
Clasele sunt grupate în module, pachete, programe, etc., care vor stabili legături între ele. Legăturile prezintă relațiile care sunt stabilite între clasele sau obiectele problemei care sunt preluate din natură.
Principiile de bază a programării orientate pe obiecte sunt:
Abstractizarea – este procesul de transformare a obiectelor reale în concepte virtuale;
Încapsularea – garantează faptul că obiectele nu pot modifica starea internă a altor obiecte în mod direct (ci doar prin metode implementate de obiectul respectiv), aceste transformări pot fi realizate doar de metodele proprii ale obiectului;
Polimorfismul – reprezintă capacitatea obiectelor de a conține funcționalități diferite sub același nume. Aceeași metodă poate executa acțiuni diferite în funcție de locul în care este implementat;
Moștenirea – permite definirea și crearea unor clase specializate, plecând de la clase generale. Clasele particularizate pot extinde comportamentul claselor generale, fără a fi nevoie de a le redefini.
3. Proiectarea și implementarea aplicației
Există o mulțime structurată de activități necesare pentru a dezvolta o aplicație, și anume: definirea specificațiilor și analiza, proiectarea și implementarea, verificarea, testarea și evoluția.
Definirea specificațiilor și analiza fac parte din procesul de stabilire a serviciilor necesare, specificarea detaliată a funcționalităților ce trebuie să fie suportate de către sistemul informatic. La sfârșitul procesului, se analizează și se realizează identificarea caracteristicilor esențiale tuturor soluțiilor corecte posibile.
Proiectarea și implementarea aplicației este un proces în care programatorii convertesc specificațiile definite într-un sistem executabil. Proiectarea în sine înseamnă realizarea unei structuri de aplicație care trebuie să rezolve specificațiile, iar implementarea este translatarea acestei structuri de aplicație într-o aplicație executabilă.
În etapa de testare se validează faptul că implementarea respectă specificațiile și cerințele clientului, presupune execuția sistemului într-un caz de utilizare cu date reale.
Ultima etapă de dezvoltare este evoluția aplicației, care a devenit tot mai importantă în ultima vreme. Cerințele se schimbă foarte repede și aplicația trebuie să fie cât mai flexibilă față de aceste schimbări. Chiar dacă a existat o separare între dezvoltare și evoluție, aceasta este tot mai slabă, deoarece tot mai puține aplicații sunt complet noi. Figura 01 reprezintă modelul de dezvoltare a unei aplicații.
3.1 Specificații
Aplicația prezentată în această lucrare este un chat care poate ușura comunicarea între persoane care vorbesc limbi diferite.
Limba utilizată în intermediul aplicației este selectată înainte de autentificare și este cunoscut de partenerii de comunicare pe tot parcursul sesiunii. Utilizatorul are posibilitatea de a schimba limba folosită pentru comunicare după deconectare.
Autentificarea nu poate fi realizată fără înregistrarea utilizatorului, această funcționalitate fiind disponibilă în fereastra de autentificare. După autentificare, clientul primește lista utilizatorilor conectați la sistem. Din această listă poate selecta partenerul de convorbire.
Fereastra de comunicare cu partenerul selectat, afișează limba aleasă de ambii utilizatori care participă la convorbire. Prin intermediul acestei ferestre se realizează comunicarea în timp real, mesajele fiind traduse și afișate atât în limba selectată de fiecare utilizator, cât și în limba originală în care mesajul a fost trimis.
3.2 Arhitectura aplicației
În acest capitol am să prezint faza de proiectare și implementare a aplicației. Ea are în vedere activitatea de convertire a specificațiilor și cerințelor sistemului într-un sistem executabil. Proiectarea și implementarea unei aplicații sunt strâns legate și deseori se suprapun.
Acest subcapitol este structurat în șapte subcapitole.
Subcapitolul (3.2.1) conține schema generală care prezintă pe scurt modul de funcționare a aplicației.
Subcapitolul (3.2.2) tratează proiectarea aplicației cu diagrame UML. În cadrul proiectării am folosit patru tipuri de diagrame.
În subcapitolele (3.2.3) și (3.2.4) am prezentat modulul client și modulul server, iar în subcapitolul (3.2.6) comunicarea între aceste două module.
Subcapitolul (3.2.5) prezintă modulul de traducere automată de la Microsoft, mai precis API-ul. Acest serviciu reprezintă un element foarte important în cadrul aplicației.
Subcapitolul (3.2.7) se referă la tehnologiile și aplicațiile folosite în realizarea programului (Java, Eclipse, XAMPP și MySQL).
3.2.1 Schema generală
Figura 02 prezintă pe scurt modul de funcționare a aplicației.
Utilizatorii selectează limba în care doresc să desfășoare convorbirea pe parcursul sesiunii de comunicare, în momentul autentificării. Partenerul de convorbire astfel, va fi informat pe tot parcursul sesiunii, despre limba selectată de restul utilizatorilor.
În acest exemplu concret, după autentificare începe convorbirea între cei doi utilizatori. Primul utilizator trimite un mesaj în limba română către partenerul de discuții. Pentru el totul este transparent, dar în spate, mesajul – care pe lângă textul care trebuie tradus, conține numele utilizatorului expeditor și al utilizatorului destinatar – ajunge la server.
Serverul trimite mai departe informațiile – textul și limba în care acesta trebuie tradus (de exemplu engleză) – către serviciul nor de traducere automată.
Când traducerea s-a desfășurat, serviciul nor trimite mesajul tradus la server, iar acesta redirectează, pe baza numelui de utilizator destinatar, textul original și cel tradus către utilizatorul numărul 2.
Când utilizatorul 2 răspunde la mesaj, totul se întâmplă în același mod, doar în direcția inversă (traducere din engleză în română).
3.2.2 Proiectare UML
Limbajul de modelare (UML – The Unified Modeling Language) reprezintă un sprijin semnificativ în analiza și proiectarea aplicațiilor software, deoarece exprimă grafic structura și comportamentul aplicației care urmează să fie implementată. Acest mod de reprezentare ajută la înțelegerea funcționalităților, este un limbaj potrivit pentru specificarea, vizualizarea, construirea și documentarea software. Modelarea se realizează prin combinarea notațiilor UML în cadrul elementelor principale ale acestora, numite diagrame.
Aceste diagrame sunt prezentate și explicate în foarte multe moduri, deoarece, și UML-ul – în concordanță cu toate sistemele informatice – continuă să fie actualizat și îmbunătățit în funcție de necesitățile pieței.
Cea mai răspândită reprezentare, împarte diagramele în două categorii mari, și anume: diagrame care reprezintă informații de structură sau de comportament. Cele de comportament pot conține și informații legate de interacțiune cu alte elemente ale sistemului.
Figura 03 prezintă diagramele UML cele mai folosite după modalitatea de reprezentare specificată mai sus.
La proiectarea acestei aplicații am utilizat 4 tipuri de diagrame UML (folosind programul StarUML 2.4.0:
diagrama cazurilor de utilizare (use case) prezintă funcțiile sistemului din punct de vedere al utilizatorului, având ca arce relațiile dintre grafurile de actori și cazurile de utilizare;
diagrama de secvență arată șirul evenimentelor care apar în timpul unei interacțiuni a utilizatorului cu sistemul;
diagrama de activități prezintă comportamentul unei operațiuni în termeni de acțiuni, acestea fiind cazuri particulare ale diagramelor de stare. Acestea însă nu arată un flux de control bazat pe evenimente, ci o procedură, unde toate tranzițiile sau o mare parte a lor se efectuează automat, la terminarea acțiunilor în interiorul stării;
diagrama de clase reprezintă structura statică în termeni de clase și relații, aceste diagrame fiind grafuri având ca noduri în general clase, dar putând conține și pachete, interfețe sau chiar obiecte, iar ca arce relațiile dintre aceste elemente.
Figura 04 reprezintă așa numita diagramă use case sau diagrama cazurilor de utilizare și ilustrează modurile de utilizare a sistemului. Utilizatorul se poate înregistra și autentifica la sistem, are posibilitatea de a trimite și a primi mesaje, după care se poate deconecta.
În timpul înregistrării, serverul verifică validitatea datelor în concordanță cu conținutul bazei de date (de exemplu, nume de utilizator existent), după care – în cazul în care datele sunt valide – salvează informațiile în baza de date.
Autentificarea se poate face doar după o înregistrare reușită cu datele de autentificare stabilite în urma înregistrării. În mod asemănător cu procedura de înregistrare, și în cazul autentificării se verifică corectitudinea datelor în baza de date. Dacă numele de utilizator sau parola nu corespunde, autentificarea nu se poate efectua.
Este important de menționat faptul că, limba folosită pe tot parcursul sesiunii de convorbire, se selectează înainte de autentificare.
După o autentificare reușită, utilizatorii pot trimite și recepționa mesaje. Orice mesaj, va fi transmis prima dată către server împreună cu numele de utilizator destinatar. Serverul – precum la autentificare toți utilizatorii au selectat limba în care doresc să comunice – cunoaște limba folosită de destinatar și cere de la API-ul Translator traducerea mesajului în limba respectivă.
Mesajul tradus, este trimis către destinatar împreună cu mesajul original. Acest lucru este necesar, deoarece nu toate cuvintele existente au varianta corespunzătoare în baza de date a translatorului și se pot crea confuzii.
Ultima funcționalitate prezentată în diagramă este deconectarea. Utilizatorul poate părăsi chat-ul prin apăsarea butonului Sign-Out.
Pentru cazurile mai complexe, cum ar fi înregistrarea, autentificarea și trimitea/recepționarea mesajelor am pregătit câte o diagramă de secvență (sequence diagram), care are ca scop prezentarea șirului de evenimente care apar în timpul interacțiunii utilizatorului cu sistemul.
Diagrama de mai sus reprezintă procesul de înregistrare al unui utilizator (Fig. 05). După deschiderea aplicației și înainte de autentificare, utilizatorul apasă butonul de înregistrare și se deschide fereastra cu formularul de înregistrare. Câmpurile care trebuie completate în mod obligatoriu de către client sunt: nume utilizator, parolă, nume, prenume și adresă e-mail. Numărul de telefon, țara și data nașterii sunt câmpuri opționale.
Majoritatea formularelor de înregistrare, conțin încă două câmpuri care au un rol semnificativ în selectarea numelui de utilizator și a parolei, deoarece obligă utilizatorul să introducă același nume de utilizator și aceeași parolă de două ori. Astfel șansele de a introduce o informație nedorită scad. Pentru această dublă-verificare se folosesc câmpurile confirmare nume utilizator și confirmare parolă.
Datele completate sunt verificate parțial direct de către modulul client (câmpurile obligatorii, reverificarea mai sus menționată și formatul adresei de e-mail), respectiv de către server în baza de date (nume utilizator existent).
După terminarea procesului de verificare, în caz de eșec, toate greșelile constate sunt afișate într-un singur mesaj și utilizatorul este rugat să corecteze datele necesare înregistrării.
În cazul în care toate informațiile introduse sunt corecte, modulul client trimite datele completate către server, care încearcă salvarea lor în baza de date.
Având ca premisă faptul că baza de date există, conexiunea între server și bază de date este activă, datele se vor salva și utilizatorul va fi informat cum că înregistrarea s-a făcut cu succes. În diagrama de mai sus este prezentat și cazul contrar.
A doua diagramă de secvență prezintă procesul de autentificare (Fig. 06). După deschiderea aplicației, apare fereastra de autentificare. Presupunând că utilizatorul a trecut de procesul de înregistrare, el poate introduce numele lui de utilizator și parola selectată anterior.
Asemănător cu validarea din procesul de înregistrare, unele informații sunt verificate doar de către modulul client: utilizatorul trebuie să completeze în mod obligatoriu câmpurile nume utilizator și parolă.
Înainte de autentificare, serverul verifică în baza de date numele de utilizator și parola introduse de client. Dacă informațiile introduse se găsesc printre înregistrările bazei de date, utilizatorul se poate conecta.
În cazul în care condițiile de mai sus nu sunt îndeplinite (câmpuri obligatorii necompletate sau date de autentificare incorecte), serverul trimite un mesaj de eroare către client, el având posibilitatea de a corecta datele.
Dacă utilizatorul a introdus toate datele corect va primi mesajul de autentificare cu succes de la server și va apare fereastra principală de WWM.
Ultima diagramă de secvență prezintă procesul de convorbire (Fig. 07). În cadrul ferestrei principale, din lista utilizatorilor conectați, Utilizatorul 1 selectează partenerul de comunicare și apare fereastra de convorbire pentru cei doi. După introducerea textului și apăsarea butonului Trimite, Utilizatorul 1 trimite mesajul către server împreună cu numele utilizatorului destinatar (Utilizator 2).
După căutarea limbii selectate de către Utilizatorul 2 în structurile interne, server-ul înaintează translatorului textul, împreună cu limba în care acesta trebuie tradus.
Translatorul efectuează traducerea și răspunde serverului. Mesajul original și cel tradus va fi transmis, pe baza numelui de utilizator destinatar, către fereastra de convorbire aferentă Utilizatorul 2.
După ce mesajele apar în fereastra de convorbire, Utilizatorul 2 are posibilitatea de a răspunde în timp real, iar procedura va fi identică și în direcție opusă.
După diagramele de secvență am pregătit o diagramă de activitate (activity diagram), care arată fluxul de lucru în cadrul aplicației (Fig. 08). Acest tip de diagramă este caracterizat prin încadrarea activităților aplicației între punctele start și stop.
În fereastra de autentificare trebuie luată decizia, dacă utilizatorul este unul nou sau a fost înregistrat deja. În cazul în care este vorba de un utilizator nou, în prima etapă trebuie să se înregistreze; iar în cazul în care este vorba de un utilizator înregistrat, acesta cunoaște numele de utilizator și parola și se poate autentifica. În urma completării incorecte apare un mesaj de eroare, iar în caz contrar se poate desfășura autentificarea.
După o autentificare cu succes, utilizatorul poate alege o persoană din lista utilizatorilor conectați la sistem și se va începe convorbirea între cei doi.
În urma trimiterii mesajului de expeditor către destinatar, server-ul verifică dacă convorbirea este multi- sau mono-lingvă. În cazul convorbirii mono-lingve mesajul nu trebuie tradus și va apare direct în fereastra de convorbire a utilizatorului destinatar. Dacă convorbirea este multi-lingvă, serverul trimite textul care trebuie tradus la MS Translator API și așteaptă răspunsul. Mesajul tradus ajunge la server, după care se transmite utilizatorului destinatar.
Partenerul de discuții are posibilitatea de a răspunde și în acest caz, acțiunile se vor desfășura în același mod, doar în direcția inversă.
În cazul în care un client nu mai dorește să comunice cu utilizatorii conectați la sistem se poate deconecta și sesiunea de lucru se sfârșește.
Întregul program Java este împărțit în 7 pachete și anume:
server.communication și client.communication – sunt pachetele care conțin toate clasele folosite de modulul server, respectiv client pentru comunicare;
server.gui și client.gui – includ clasele care se folosesc pentru crearea interfeței grafice în modulele server și client;
tools – conține clasele care comunică cu baza de date, respectiv cu serviciul nor de traducere automată;
dataStructures – acest pachet cuprinde clasele care sunt folosite ca și structuri de date specifice aplicației;
constants – în acest pachet sunt definite toate constantele ce se utilizează în timpul comunicării între server și client.
În continuare am să prezint structura claselor folosite în cadrul aplicației cu ajutorul diagramelor de clase (class diagram).
O diagramă de clasă modelează structura unui program, surprinde conexiunile semantice sau interacțiunile care se stabilesc între elementele componente.
Componentele acestor diagrame conțin informații importante despre o anumită clasă, cum ar fi numele clasei, variabilele, metodele și vizibilitatea datelor.
În realizarea diagramei de clase din Figura 09 am folosit plug-in-ul ObjectAid UML Explorer pentru Eclipse.
Clasele, după cum arată și diagrama de mai sus, sunt împărțite – pe baza tehnicii folosite – în două categorii: partea de server, respectiv partea de client. Cele mai importante clase din subsecțiunile prezentate, sunt fișierele de bază ServerSide-, respectiv ClientSideCommunicator, care asigură comunicarea între cele două module. Restul claselor sunt legate de aceste două clase de bază.
În continuare voi prezenta în detaliu cele două module.
3.2.3 Modulul Client
În ultima vreme aplicațiile folosite devin tot mai complexe, nevoia de resurse și numărul utilizatorilor crește. Din acest motiv, majoritatea aplicațiilor sunt împărțite în două module: client și server. Introducerea și afișarea datelor nu necesită performanță mare, astfel poate fi efectuată și de o platformă mai slabă – în modulul client. Server-ul în schimb trebuie să fie mai performant, deoarece menținerea diferitelor relații între obiecte, stocarea și prelucrarea datelor au nevoie de surse mai puternice. În anumite cazuri modulul server și modulul client rulează pe același calculator.
În acest subcapitol voi prezenta modulul client. După cum se poate observa în diagrama de clasă pentru modulul client (Figura 11), punctul de pornire pentru client este clasa LoginScreen. Această clasă construiește interfața grafică pentru accesarea ferestrei de autentificare în metoda buildContentPane().
Tot din această fereastră se pornește înregistrarea unui utilizator nou. Clasa care se ocupă de această funcționalitate se numește RegistrationScreen. După introducerea datelor folosite pentru înregistrare (nume de utilizator, parolă, date personale), acestea vor fi verificate de către sistem. Pe lângă verificarea existenței numelui de utilizator în baza de date, se validează și adresa de e-mail introdusă de către utilizator.
Formatul valid a unei adrese de e-mail este prezentat în Figura 10, orice adresă de e-mail fiind împărțită în partea locală și partea de domain.
O adresă de e-mail validă trebuie să corespundă următoarelor cerințe:
trebuie să conțină în mod obligatoriu un simbol ”@”
după simbolul ”@ ” nu poate apare imediat simbolul “.”
după ultimul simbol ”.” trebuie să se afle minim două caractere
primul caracter din adresă nu poate fi simbolul ”.”
partea locală poate conține oricare dintre următoarele caractere:
litere latine mici și majuscule
numere între 0 și 9
următoarele caractere speciale: #-_~!$&‘()*+,;=:
caracterul . nu poate fi primul sau ultimul și nu poate apărea în mod consecutiv
caracterele speciale sunt permise cu restricții: Space și “(),:;<>@[\]
În continuare am să prezint clasa principală al modulului client, și anume ClientSideCommunicator. Funcționalitatea acestei clase este invizibilă de către client, dar vitală din punct de vedere a aplicației. Aceasta conține mai multe metode importante, care au ca scop crearea și menținerea relației între client și server. În afară de acest lucru mai sunt prezente metode care servesc la înregistrare, autentificare/deconectare și trimiterea mesajelor (connect(), login(), logout(), register(), sendMessage()).
Clasa MessengerMainScreen conține din nou o interfață grafică, este fereastra principală a World Wide Messenger-ului, care apare după o conexiune stabilită cu succes între client și server, în momentul autentificării. Încarcă lista utilizatorilor conectați la sistem și cu ajutorul metodelor accountLoggedIn(), respectiv accountLoggedOut() actualizează această listă în momentul în care un alt utilizator intră în camera de chat, respectiv se deconectează de la sistem.
AccountForList este o clasă care joacă un rol foarte important în cadrul aplicației, reprezintă o structură de date stabilită pentru lista de utilizatori din cadrul ferestrei principale. Această structură conține informațiile necesare despre un utilizator în cadrul interfeței grafice: nume de utilizator, limba selectată, nume și prenume.
Rolul clasei MessageReceiverThread este de a rula un fir de execuție care ascultă după mesaje asincrone (mesaje de notificare, care pot veni în orice moment, fără cererea clientului), cum ar fi: primirea unui mesaj de la un alt utilizator sau notificări în momentul în care un utilizator se conectează la sistem, respectiv se deconectează.
După trimiterea sau recepționarea unui mesaj, din fereastra principală se deschide MessengerMessageDialogScreen pentru fiecare pereche de utilizatori. Numărul ferestrelor ce se poate deschide este limitat de numărul utilizatorilor conectați la sistem. Metoda buildContentPane() construiește interfața grafică pentru această fereastră de convorbire.
3.2.4 Modulul Server
Datorită faptului că o aplicație de tip messenger prelucrează multe informații, este necesară implementarea unui modul server, care se ocupă de sarcinile mai complexe, cum ar fi în cazul nostru: traducerea mesajelor utilizând un translator API înainte de expediere și salvarea datelor utilizatorilor într-o bază de date.
Modulul server stă la baza funcționării aplicației, fără pornirea acestuia, partea de client nici nu are la ce să se conecteze.
Pornirea modului server se face din fereastra de administrator. Interfața grafică este construită în clasa AdminScreen, metoda buildContentPane().
În Figura 12 se poate observa clasa de bază a acestui modul, și anume ServerSideCommunicator. Având implementate metodele initServer(), stopServer() și manageClient() este responsabil pentru funcționalitățile de bază a unei aplicații de tip client-server, și anume: pornirea și oprirea server-ului și administrarea conexiunilor pentru fiecare client în parte.
ManageClientThread este o clasă care are un rol important, creează un fir de execuție pentru fiecare utilizator conectat în parte. Pe acest fir trimite mesajele sincrone și așteaptă răspuns pentru ele, cum ar fi: cererea de autentificare, de deconectare sau de înregistrare.
Clasa SingletonHashMap folosește șablonul de design (o soluție generală și reutilizabilă a unei probleme comune în design-ul software) numit Singleton, care este utilizat pentru restricționarea numărului de instanțieri ale unei clase la un singur obiect. Cu ajutorul acestei soluții m-am asigurat de faptul că lista de utilizatori care sunt online este unică (onlineAccsThreadMap) și orice modificare asupra ei va avea un rezultat corect.
Clasa MySQLConnector reprezintă un instrument care ajută la conectarea server-ului la baza de date. Prin intermediul metodei addUserAtRegistration() implementate serverul salvează datele utilizatorului în baza de date în urma înregistrării clientului. Metodele usernameAlreadyExists() și isValidUserAndPass() sunt folosite pentru verificări ulterioare, cum ar fi: în momentul autentificării se verifică dacă numele de utilizator și parola există în baza de date (înregistrarea s-a efectuat cu succes), iar în cazul procesului de înregistrare se verifică existența numelui de utilizator selectat.
Cel mai important instrument în cadrul modulului server, sau chiar și în cadrul aplicației poate fi numit translatorul. Clasa MSTranslator asigură comunicarea între modulul server și serviciul de nor de traducere automată și efectuează prin metoda translateFromTo() traducerea mesajelor primite de la server în limba solicitată.
Ultima clasă din modulul server reprezintă structura de date stabilită pentru un obiect de tip utilizator. Account grupează datele de utilizator: nume utilizator, parolă, limba selectată, nume, prenume și starea conexiunii într-o variabilă de tip boolean, care poate fi conectat (adevărat) sau deconectat (fals).
3.2.5 Modulul traducere automată
Microsoft Translator APIeste un serviciu nor de traducere automată care suportă peste 95% din limbile existente din lume. Poate fi folosit pentru a dezvolta aplicații, web site-uri și instrumente, sau când este nevoie de o soluție care necesită un sprijin multilingvă (vezi Figura 13).
Acest API este o soluție dovedită, scalabilă și personalizabilă pentru o traducere automată. Se poate integra în orice platformă, se poate folosi sub orice sistem de operare pentru a efectua o traducere sau alte operațiuni legate de limbă, cum ar fi detectarea limbii, text to speech sau dicționar. Funcționează atât în traducerea în web, desktop sau aplicații mobile. Oferă o funcționalitate bogată pentru orice dezvoltator, are o gamă largă de interfețe: AJAX, HTTP, SOAP, OData și traducător WebWidget.
Sistemele de traducere automată sunt aplicații sau servicii online care utilizează tehnologia “machine-learning” pentru a traduce o cantitate mare de text, având ca text de intrare și ieșire orice combinație între limbile suportate.
Deși conceptul și interfețele pentru utilizarea acestor sisteme sunt relativ simple, știința și tehnologia în spatele lor sunt extrem de complexe și îmbină mai multe tehnologii de vârf, cum ar fi pe lângă machine-learning, big data, lingvistică, cloud computing și web API-uri.
3.2.6 Comunicare Client-Server
La baza majorității aplicațiilor care comunică prin rețea stă arhitectura Client-Server (Fig. 14). Aceasta presupune un mod de implementare distribuită a aplicațiilor destinate lucrului în rețea: există doi actori implicați în procesul de comunicație precum și un set comun de reguli.
Clientul și serverul folosește același mediu de comunicație, mai precis un canal de comunicație care permite circulația informației de la server către client și invers. Acest canal de comunicație este rețeaua.
Setul de reguli care este cunoscut și aplicat de actorii implicați în procesul de comunicare, se numește protocol.
Protocolul creat pentru comunicarea în cadrul aplicației World Wide Messenger va fi prezentat în acest capitol cu ajutorul Figurii 15. Diagrama care prezintă clasa CommunicationConstants, conține tipurile de mesaje, separatorii folosiți în timpul comunicării, precum și elementele mesajelor.
Primele trei constante din imaginea de mai sus sunt folosite pentru inițierea și stabilirea conexiunii între client și server. Acestea reprezintă adresa de IP (COMMUNICATION_HOST) și port-ul (COMMUNICATION_PORT) server-ului la care se va conecta client-ul și numărul maxim de conexiuni (MAX_CONNECTION_NUMBER) ce suportă server-ul. Acest număr, în momentul de față este 10, dar după testarea și optimizarea aplicației poate crește.
Mesajele transmise între client și server pot fi împărțite în mesaje sincrone și asincrone. În cazul mesajelor sincrone, după ce clientul trimite o cerere (request) către server așteaptă un răspuns (response) de la acesta (de exemplu, în cazul înregistrării, autentificării sau a deconectării). Mesajele asincrone sunt trimise către client și conțin de obicei notificări, de exemplu: conectarea sau deconectarea unui alt utilizator la sistem sau primirea textului tradus de la partenerul de convorbiri.
Mesajele sincrone (perechile de cerere și răspuns) utilizate pentru comunicarea între client și server în cadrul aplicației prezentate sunt următoarele: MSG_TYPE_REQUEST_LOGIN și MSG_TYPE_RESPONSE_LOGIN sunt folosite pentru autentificare, MSG_TYPE_REQUEST_LOGOUT și MSG_TYPE_RESPONSE_LOGOUT pentru deconectare, respectiv MSG_TYPE_REQUEST_REGISTER și MSG_TYPE_RESPONSE_REGISTER pentru înregistrarea utilizatorului la sistem.
Mesajele asincrone care apar și în Figura 15 sunt MSG_TYPE_SEND_MESSAGE, MSG_TYPE_READ_MESSAGE – folosite pentru trimiterea textului către server pentru traducere și redirecționarea textului tradus către destinatar, respectiv MST_TYPE_ACC_LOGIN și MST_TYPE_ACC_LOGOUT – utilizate pentru notificarea partenerilor de comunicare după conectarea sau deconectarea unui utilizator.
În cadrul oricărui protocol de comunicare între client și server (vezi Figura 16), mesajele sunt împărțite cu ajutorul unor separatori (TAG_SEPARATOR, FIELD_SEPARATOR și ITEM_SEPARATOR), care delimitează informațiile concrete transmise și etichetele folosite (USERNAME, PASSWORD, LASTNAME, FIRSTNAME, PHONE, EMAIL. COUNTRY, BIRTHDATE, LANGUAGE, FROM, TO și TEXT).
Majoritatea etichetelor de mai sus se folosesc pentru înregistrarea clientului la sistem. USERNAME și PASSWORD sunt refolosite și în mesajul de autentificare, iar FROM, TO, TEXT se utilizează în timpul convorbirii între clienți.
Am ales ca și exemplu concret mesajul de cerere pentru înregistrare la sistem, prin care am să prezint protocolul de comunicare folosit în cadrul aplicației World Wide Messenger.
În urma completării formularului de înregistrare, datele introduse de client, sunt trimise ca și parametrii către metoda register() din clasa ClientSideCommunicator – aceasta făcând parte din modulul client al aplicației. În cadrul acestei metode se construiește – pe baza protocolului definit – mesajul de cerere (request), care ulterior va fi trimis către server.
Ultima parte a Figurei 17 prezintă mesajul construit înainte de trimiterea acestuia către server.
Fragmentul de cod din Figura 18 face parte din clasa ManageClientThread din cadrul modului server a aplicației.
Dacă tipul de mesaj primit de la client este o cerere de înregistrare (REQ_REG), serverul descompune mesajul primit – cu ajutorul protocolului definit – pentru a accesa informațiile transmise. Dacă aceste date sunt salvate cu succes în baza de date, serverul pregătește răspunsul pentru client (RESP_REG). În cadrul Figurii 17 se poate observa cum că înregistrarea utilizatorului s-a efectuat cu succes și serverul pregătește răspunsul pentru a trimite clientului.
3.2.7 Tehnologii folosite
3.2.7.1 Java. Caracteristicile limbajului
Java este un limbaj de programare orientat pe obiecte. Acest limbaj s-a înființat în anul 1991, când compania Sun Microsystems (în zilele noastre filială Oracle) a finanțat un proiect, numit Green, condus de James Gosling.
Caracteristicile limbajului Java:
este un limbaj compilat și interpretat. Limbajul este compilat dacă programul scris în acel limbaj de programare este tradus într-un cod pe care un calculator îl poate executa mai ușor. De asemenea, putem vorbi de un limbaj interpretat dacă instrucțiunile unui program sunt efectuate linie cu linie.
este un limbaj independent de platformă. În momentul instalării limbajului Java, va fi creată o mașină virtuală Java (Java Virtual Machine – JVM) care are drept țintă traducerea instrucțiunilor unui byte code Java în instrucțiuni-mașină pentru platforma curentă. Astfel fișierele pot fi copiate și executate pe orice platformă.
este un limbaj orientat pe obiecte. Cea mai importantă proprietate a limbajului Java. Acest limbaj pune în evidență toate aspectele legate de programare orientată pe obiecte, mai exact: trimiterea parametrilor, obiecte, încapsulare, clase, biblioteci, moștenire și modificatori de acces.
este un limbaj concurent. Concurența (multithreading) – este abilitatea unui program de a executa mai multe secvențe de cod deodată. O secvență de cod în limbajul Java se numește fir de execuție (thread).
este un limbaj distribuit. Java permite folosirea obiectelor locale și la distanță, astfel putem afirma că este distribuit. Respectă standarul IEEE (Institute of Electrical and Electronics Engineers) pentru structurile de date, ca de exemplu folosirea întregilor, numerelor în virgulă flotantă și a șirurilor de caractere. Java se poate utiliza în aplicații de rețea, fiindcă respectă protocoalele de rețea, cum ar fi FTP, HTTP, SOAP, etc.
este un limbaj performant. Are posibilitatea să lucreze cu fire de execuție multiple și astfel este capabil să execute un byte code aproape la fel de repede ca pe un cod compilat. Un program Java poate să aștepte citirea unor date, în timp ce un alt fir de execuție poate aloca sau elibera memoria necesară programului.
este un limbaj dinamic și robust. Java este dinamic, deoarece întârzie până la momentul execuției alocarea obiectelor și legarea claselor. Astfel se evită erorile de alocare, chiar dacă mediul s-a modificat de la ultima compilare a programului. Java este un limbaj robust, fiindcă a fost eliminată utilizarea pointerilor, care a fost generatoarea de erori în alte limbaje de programare. Java verifică memoria dinamic, înainte de alocare.
este un limbaj sigur. Java alocă memoria doar la execuție și nu folosește pointeri, nu poate accesa memoria heap, stack sau alte secțiuni protejate de memorie. Înainte de executare, programul verifică dacă este un cod valid Java, prin intermediul cercetării accesului la date.
Limbajul Java poate fi instalat pe calculatoare cu diverse sisteme de operare, cum ar fi Windows, Linux sau Solaris. Un program Java nu se execută direct de către microprocesor, ci folosește o mașină virtuală (Java Virtual Machine – JVM).
Pentru crearea și editarea programului Java se poate utiliza orice editor de texte, dar totuși este recomandat folosirea unui editor specializat, pentru că acestea reduc semnificativ timpul de dezvoltare a aplicațiilor. Unele dintre cele mai importante medii de programare pentru Java este Eclipse și NetBeans.
3.2.7.2 Eclipse
În cazul utilizării unui editor de text simplu, dezvoltarea aplicațiilor complexe Java pot deveni foarte dificile. În aceste condiții programatorul trebuie să aleagă și să instaleze o aplicație care să-l ajute în dezvoltarea aplicațiilor. O astfel de aplicație poartă numele de IDE (Integrated Development Enviroment).
Un mediu de dezvoltare (IDE) este un set de programe care ajută programatorul în scrierea codului unei aplicații. Un mediu de dezvoltare combină pașii necesari creării unui program (de exemplu: editarea codului sursă, compilare, rulare, depanare) într-un singur soft, care oferă o interfață grafică cu utilizatorul.
Eclipse este un mediu de dezvoltare open-source scris preponderent în Java. Acesta este folosit pentru dezvoltarea aplicațiilor Java. Eclipse cuprinde o mașină virtuală și un set de funcționalități de bază, la care se pot adăuga ulterior diverse unelte de dezvoltare sub forma unor plugin-uri. Mediul de dezvoltare pentru Java este prezentată în Figura 19.
3.2.7.3 XAMPP
XAMPP este un pachet de software și open source cross-platform (rulare identică pe platforme diferite) folosit pentru crearea paginilor web dinamice în mod localhost (modulul client și server fiind pe același calculator). Pachetul interpretează scripturi scrise în limbajele PHP și PERL, constând în principal din server de web Apache. XAMPP a fost creat pentru a pune la dispoziția dezvoltatorilor un instrument eficient de testare. Pachetul de aplicații simulează comportamentul unui server conectat la Internet, astfel permițând testarea aplicațiilor scrise înainte de copierea acestora pe serverul real al firmei care va deține produsul software lansat.
Caracteristicile principale sunt ale acestui pachet software sunt:
este un server web folosit pentru implementarea aplicațiilor în mod localhost;
instalează aplicațiile Apache, MySQL, PHP, Perl, phpMyAdmin, FileZilla FTP Server, etc.;
este stabil, sigur, rapid și eficient;
are o interfață simplă și intuitivă, astfel este ușor de folosit.
Din aplicațiile instalate de pachetul software XAMPP, am folosit în cadrul implementării aplicației World Wide Messenger, serviciul MySQL pentru conectarea la baza de date. Figura 20, prezintă interfața grafică al pachetului XAMPP având serviciul MySQL pornit.
3.2.7.4 Baze de date. MySQL
Baza de date este o colecție de date, creată și menținută computerizat, pentru prelucrarea datelor în contextul unui set de aplicații. Prelucrarea datelor constă din operațiuni de culegere, memorare, organizare, regăsire, prelucrare și administrare a unui volum mare de date. Arhitectura unei baze de date reprezintă modul de organizare a datelor, între calculatorul care operează asupra datelor sub forma de biți și utilizatorul bazelor de date. Nivelele de independență și de abstractizare a datelor sunt caracteristice arhitecturii unei baze de date.
Pentru asigurarea independenței datelor se impune adoptarea unei arhitecturi organizate pe cel puțin trei nivele. În funcție de nivelul de abstractizare se pot identifica următoarele nivele:
nivelul intern (baza de date fizică);
nivelul conceptual (modelul conceptual sau schema conceptuală);
nivelul extern (modelul extern, subschemă, vedere).
Figura 21 reprezintă arhitectura unei baze de date.
Nivelul intern, numit și baza de date fizică este o colecție de fișiere care conține date fizice la care sunt adăugate diverse structuri auxiliare care asigură accesul operativ la aceste date. Baza de date fizică este prezentă în memoria permanentă a calculatorului. Modul de organizare al acesteia depinde de configurația echipamentelor hardware care suportă baza de date și sistemul de operare.
Modelul conceptual constă din descrierea structurii logice a datelor în baza de date. Fiecare bază de date are un model conceptual propriu prin care sunt numite toate unitățile logice și legăturile dintre acestea. Acest model integrează viziunile utilizatorilor asupra datelor și amintește ce poate face parte din baza de date și ce anume nu poate fi memorat de aceasta.
Modelul extern poate fi privit ca o descriere a bazei de date, care corespunde fiecărui utilizator în parte. Acest model cuprinde o parte a unităților logice din modelul conceptual, la care se mai adaugă un număr de unități virtuale care nu au corespondent în baza de date fizică.
Conceptul de vedere se definește la nivel extern, ca fiind o viziune individualizată și simplificată asupra bazei de date, corespunzând unui anumit utilizator sau grup de utilizatori.
În cadrul unei baze de date transformările care definesc interfața între două nivele succesive se desfășoară prin trecerea de la un nivel la altul.
Un sistem de gestionare a bazelor de date (SGBD) este un software specializat în stocarea și prelucrarea unui volum mare de date. Pentru realizarea obiectivului, un SGBD utilizează toate nivelele de abstractizare ale bazei de date și toate interfețele dintre acestea.
Cele mai importante avantaje sunt:
dacă fiecare aplicație lucrează cu fișierele proprii este posibil ca aceeași date să apară de mai multe ori în fișiere diferite;
duplicarea datelor în fișiere poate cauza probleme la actualizare;
partajarea datelor – mai multe aplicații utilizează același fișier;
introducerea standardelor oferă posibilitatea transferului de date de la o bază de date la alta;
datele se consideră corecte dacă ele sunt consistente și valide prin proceduri specifice aplicației.
Pentru exploatarea bazelor de date este utilizat SQL (Structured Query Language), adică limbajul de interogare structurat. SQL este cel mai utilizat limbaj standardizat pentru accesul la baza de date, permițând stocarea, regăsirea și modificarea datelor din baza de date.
Cel mai popular SGBD cu sursă deschisă este MySQL. MySQL este un sistem de gestiune a bazelor de date relaționale foarte rapid. Serverul MySQL controlează accesul la datele utilizatorului pentru posibilitatea utilizării acestora simultan de către mai mulți utilizatori și pentru a oferi un acces rapid la ele, dar și pentru a garanta faptul că au acces la ele doar utilizatorii autorizați. Astfel, MySQL se poate numi un server multiuser (cu mai mulți utilizatori) și multithread (cu mai multe fire de execuție).
MySQL utilizează ca și alte SGBD-uri arhitectura client-server (Fig. 22). Această arhitectură este utilizată și în alte sisteme de baze de date, cum ar fi: Oracle, Microsoft SQL Server, etc.
Serverul MySQL ”așteaptă” posibilele cereri de conexiune ale clienților. Prin client MySQL se înțelege orice aplicație capabilă să trimită interogări serverului MySQL.
MySQL are multe puncte forte, printre care:
performanță ridicată, adică MySQL este foarte rapid;
cost scăzut, deoarece este disponibil gratuit sub o licență Open Source sau la un preț mic sub o licență comercială dacă aceasta este necesară pentru aplicația dezvoltată;
ușurință în configurare și învățare, pentru că majoritatea bazelor de date moderne utilizează SQL. Deasemnea, MySQL este mai ușor de configurat decât multe produse asemănătoare;
portabilitate, fiindcă MySQL poate fi folosit pe multe sisteme de operare;
disponibilitatea codului sursă, deoarece codul sursă al bazei de date se poate modifica.
Există numeroase interfețe de acces la bazele de date MySQL din diverse limbaje și medii de programare. Între acestea se pot aminti aplicația phpMyAdmin, care poate fi utilizat cu mare eficiență și ușurință, pentru gestionarea bazelor de date, a tabelelor și a drepturilor de acces, dar și pentru execuția instrucțiunilor SQL. Programatorul își poate crea propriile interfețe de acces la bazele de date MySQL.
Cum am amintit și în subcapitolul precedent, am ales interfața pachetului software XAMPP pentru a beneficia de serviciul MySQL.
4. Utilizarea aplicației
4.1 Interfața grafică
Interfața grafică (Graphical User Interface – GUI) ajută la crearea relației între utilizator și o aplicație prin diferite ferestre, elemente grafice și text, butoane sau imagini.
Pentru prezentarea informațiilor și acțiunilor disponibile, un GUI oferă pictograme și indicatori vizuali, în contrast cu interfețele bazate pe text, care oferă doar nume de comenzi sau navigația text.
În continuare am să prezint interfața grafică utilizată în cadrul aplicației de chat World Wide Messenger. Cele două module ale aplicației, având două ferestre principale distinse, vor fi prezentate în capitole separate.
4.1.2 Modulul Server
Fereastra principală utilizată de modulul server, poartă denumirea WWM Admin. Pe bara de titlu apare numele aplicației și al modulului: WWM este prescurtarea denumirii aplicației (World Wide Messenger), iar Admin-ul indică faptul că această interfață este pentru Administrator (Figura 23).
Această fereastră are un rol important în cadrul aplicației, deoarece cu ajutorul acesteia se poate porni (sau la nevoie, a opri) modulul de server. În cazul în care acest modul nu funcționează, clientul nu se poate conecta la sistem.
După apăsarea butonului START pornește server-ul și aplicația client are posibilitatea de a stabili o conexiune cu acesta. Textul de pe buton se schimbă pe STOP și administratorul, prin reapăsarea butonului, poate opri serverul.
4.1.2 Modulul Client
Prima fereastră din modulul client este cea de autentificare (Login to World Wide Messenger) prezentată în Fig. 24. Această fereastră apare în momentul pornirii modulului client și se poate împărți în două: secțiunea de înregistrare și secțiunea de autentificare.
În partea stângă a ferestrei, prin apăsarea butonului Sign Up, utilizatorul se poate înregistra la sistem. Este foarte important de menționat faptul că un client se poate conecta la sistem, doar daca în prealabil a trecut cu succes de procedura de înregistrare. Această procedură va fi prezentată în următoarea secțiune.
Partea dreaptă a ferestrei este folosită pentru introducerea datelor de autentificare și pentru conectare prin apăsarea butonului Sign In.
În cazul completării eronate sau a altor probleme ce pot apărea pe parcursul autentificării, utilizatorul se poate întâlni cu multiple mesaje de eroare. Aceste mesaje sunt prezentate în Fig. 25.
Primul mesaj („You are not connected to the server.”) apare în cazul în care serverul nu funcționează și clientul nu se poate conecta la aceasta.
Mesajul („Empty username or password field. Please fill in the blanks.”) apare în cazul în care numele de utilizator și/sau parola nu au fost introduse de loc.
Ultimul mesaj („Invalid username or password.”) este răspunsul server-ului în cazul în care numele de utilizator și/sau parola introdusă sunt greșite.
În cazul în care nu intervine nici o problemă pe parcursul autentificării și utilizatorul introduce date de autentificare existente și valide, va apărea mesajul (Fig. 26) care informează clientul cum că a avut loc autentificarea cu succes („You have been successfully logged in.”).
În continuare am să prezint fereastra de înregistrare (Registration) care se deschide din fereastra principală prin apăsarea butonului Sign Up. După cum se observă și în cadrul Figurii 27, fereastra de înregistrare este împărțită în trei secțiuni, și anume, partea de informații, partea principală de formular de înregistrare și cea de butoane.
Prima parte, afișează informații pentru utilizatorul care urmează să se înregistreze la sistem. Mesajul („The information you supply will be used for registration purposes only. It will not be given to a third party.”) înseamnă ca datele clientului vor fi utilizate doar în scopul înregistrării și nu vor fi transmise altora (Fig. 28).
A doua secțiune, oferă funcționalitatea de bază a acestei ferestre, deoarece conține formularul de înregistrare (Fig. 29). Utilizatorul, pentru efectuarea înregistrării, trebuie să își aleagă un nume de utilizator și o parolă, după care să introducă datele personale cerute (nume, prenume, număr de telefon, adresă electronică, țară și data nașterii). Câmpurile de confirmare nume de utilizator și parolă sunt folosite, ca și la majoritatea formularelor, pentru a obliga utilizatorul să introducă numele de utilizator și parola de două ori, eliminând posibilitatea greșelilor de scriere.
După introducerea datelor, sistemul va efectua validarea acestora: verifică dacă s-au introdus informații în câmpurile obligatorii sau dacă numele de utilizator este deja folosit de un alt client, compară conținutul câmpurilor nume de utilizator și confirmare nume de utilizator (respectiv parolă și confirmare parolă) și validează formatul adresei de e-mail.
În continuare voi prezenta tipurile de mesaje în cazul în care validarea datelor eșuează.
Mesajele din cadrul Figurii 30 („Empty field. … is required.”) apar dacă utilizatorul nu completează câmpurile obligatorii. În acest exemplu toate câmpurile obligatorii sunt lăsate necompletate, dar dacă utilizatorul ratează un singur câmp, sistemul va indica doar acel câmp gol.
În imaginea următoare se pot observa mesajele „Usernames do not match.” și „Passwords do not match.”, care apar în cazul în care utilizatorul introduce valori diferite pentru câmpurile: nume utilizator și verificare nume utilizator, respectiv parolă și verificare parolă (Fig. 31).
Ultima verificare ce se face în cadrul acestui formular este validarea adresei de e-mail. În cazul în care aceasta nu are un format corespunzător, utilizatorul v-a primi mesajul „Invalid e-mail address.” reprezentat în Figura 32.
Dacă înregistrarea s-a desfășurat cu succes va apare următorul mesaj care informează clientul despre acest lucru: „Your account has been created successfully and is ready to use.” (Fig. 33).
A treia parte din cadrul ferestrei de înregistrare reprezintă secțiunea butoanelor prezentate și în cadrul Figurei 34.
La apăsarea butonului Save sistemul va efectua verificările necesare, iar în cazul în care va găsi orice problemă, va afișa mesajele de eroare mai sus menționate. Dacă procedura s-a desfășurat cu succes, datele vor fi trimise la server, care le va salva în baza de date.
Butonul Clear șterge din formularul de înregistrare toate datele completate de client până în momentul respectiv.
Ultimul buton, Cancel închide fereastra de înregistrare, procedura de înregistrare se întrerupe și clientul se poate întoarce la fereastra de autentificare.
Dacă procesul de autentificare s-a efectuat cu succes și utilizatorul a primit mesajul din Figura 26, va apare fereastra principală WWM (Fig. 35).
Fereastra principală se poate împărți în trei secțiuni: partea de informații, lista de contacte și secțiunea folosită pentru căutare.
Partea de informații (Fig. 36), în bara de titlu al ferestrei, afișează prescurtarea WWM (World Wide Messenger) și numele de utilizator al clientului. Un pic mai jos, deja în cadrul ferestrei, se afișează informația despre limba. În exemplul nostru, utilizatorul folosește limba română („You Speak Romanian”), astfel sistemul îi va traduce întotdeauna mesajele primite în română.
Partea din mijloc conține lista de contacte (Contact List) și butonul Sign Out (Fig. 37). Această listă conține toți utilizatorii care sunt conectați la sistem în momentul de față. Aplicația arată numele și prenumele acestora, informații care au fost furnizate de către client în momentul înregistrării.
Prin apăsarea butonului Sign Out utilizatorul poate ieși din aplicația messenger și sistemul va face posibil reîntoarcerea lui în orice moment. Dacă deconectarea s-a efectuat cu succes apare mesajul „You have been successfully logged out.” reprezentat în Figura 38.
Ultima parte a ferestrei principale este secțiunea de căutare (Search) (Fig. 39). Această funcționalitate va fi implementată în următoarea versiune a aplicației. Această parte va ajuta în găsirea unui utilizator anume din lista de contacte, folosindu-se de numele lui de utilizator, de nume sau de prenume.
Ultima fereastră care va fi prezentată în acest capitol este fereastra de convorbire (Fig. 40) în care se desfășoară comunicarea în sine între partenerii de discuții.
În bara de titlu a acestei ferestre, pe lângă denumirea aplicației, apare numele utilizatorului curent.
Asemănător ferestrelor prezentate în prealabil, și fereastra de convorbire se poate împărți în trei componente: secțiunea de convorbire, cea cu informații și cea folosită pentru trimiterea mesajelor.
În secțiunea de convorbire apare discuția în sine. Mesajele trimise și primite apar în timp real. Fiecare rând începe cu numele utilizatorului care a trimis mesajul respectiv, iar după caracterul “:” apare mesajul tradus și în paranteze mesajul original.
În exemplul din Figura 41 clientul curent a primit mesajul “Hi! How are you?”, care a fost tradus în limba selectată de el: “salut! ce mai faci?”
În partea dreaptă, apar informații despre convorbirea curentă (Fig. 42).
Sub icoana aplicației World Wide Messenger, apare numele utilizatorului cu care clientul curent desfășoară o convorbire (Your Friend) și o secțiune care oferă informații despre limbile folosite de către clienții care participă la această convorbire. În exemplul de față (Fig. 42), utilizatorul curent vorbește limba română, pe când, partenerul de discuții a ales limba engleză înainte de a se autentifica.
Câmpul mai mic din partea de jos a ferestrei se folosește pentru trimiterea mesajelor de către clientul curent la clientul cu care acesta comunică. După introducerea mesajului în acest câmp, dacă utilizatorul apasă butonul Send, mesajul lui va fi trimis către partenerul de discuții (Fig. 43).
Dacă în timpul discuției partenerul se deconectează de la sistem, în secțiunea de convorbire, printre mesaje, apare un rând care indică acest lucru: „Your friend signed out at 20:53”. Figura 44 prezintă un exemplu pentru acest caz, mesajul indică ora și minutul la care celălalt utilizator a ieșit din program.
5. Concluzii
În acest capitol aș vrea să rezum și să apreciez tehnologiile folosite în proiectarea programului și messengerul în sine.
Deoarece fiecare limbă are norme de ortografie proprii, crearea unei aplicații care suportă toate limbile și în același timp să se adapteze la aceste norme reprezintă o problemă majoră. Multe cuvinte sunt polisemantice, se poate întâmpla că din cauza contextului trebuie utilizată o altă structură a cuvintelor ca propoziția în sine să fie corectă. Ca să nu mai vorbim despre faptul că în lumea noastră accelerată oamenii sunt obișnuiți să prescurteze cuvintele, chiar și doar la 2-3 litere, pentru a transmite cât mai scurt și repede mesajele. Din această cauză pot apare erori în fiecare program de traducere. Aceste greșeli sunt întotdeauna corectate periodic și în mod automat de către Translator API, deoarece acesta se adaptează independent la regulile variabile.
Aplicația este disponibilă pentru orice utilizator care are conexiune la Internet și are Java instalat pe calculator. Dacă aceste aspecte nu reprezintă o problemă, tehnologiile folosite fiind portabile, aplicația se poate instala pe orice calculator.
Pentru atingerea obiectivelor propuse și prezentate în Introducere, am folosit tehnologiile UML, Java, MySQL, XAMPP și MSTranslator de la Microsoft. Motivele pentru care am ales aceste tehnologii sunt:
Proiectarea programului este ușurată prin utilizarea diferitelor tipuri de diagrame UML. Aceste diagrame ușurează implementarea aplicației, deoarece ajută la înțelegerea relațiilor între clase și module sau a comportamentului aplicației.
Java este cel mai răspândit limbaj de programare orientată pe obiect, larg utilizată în zilele noastre. Un program Java nu se execută direct de către microprocesor, ci folosește o mașină virtuală (Java Virtual Machine – JVM), astfel acesta poate fi instalat pe calculatoare cu diverse sisteme de operare.
Volumul mare de date care stă la baza aplicației în cazul în care are mulți clienți înregistrați la sistem, necesită un sistem de gestionare a bazelor de date. Acest aspect a fost acoperit de serviciul MySQL cu ajutorul pachetului de software XAMPP.
MSTranslator este o soluție dovedită, scalabilă și personalizabilă pentru o traducere automată. Se poate integra în orice platformă, se poate folosi sub orice sistem de operare pentru a efectua o traducere sau alte operațiuni legate de limbă, cum ar fi de exemplu detectarea limbii.
Compatibilitatea perfectă între aceste componente.
Fac parte din categoria aplicațiilor freeware.
În momentul actual programul World Wide Messenger este la versiunea 1.0.1, ceea ce înseamnă că acesta este prima ediție. Deoarece am folosit tehnologii care oferă posibilitatea dezvoltatorului de a extinde aplicația în viitor, se dorește adăugarea unor noi funcționalități atât în modulul client, cât și în modulul server.
În lista funcționalităților pe care va trebui să le suporte serverul în următoarele versiuni sunt:
posibilitatea de adăugare de clienți noi;
modificarea datelor salvate în baza de date;
ștergerea clienților existenți.
Modulul client oferă mult mai multe posibilități, astfel lista ideilor mele poate fi extins oricând:
posibilitatea de a schimba limba selectată în timpul sesiunii;
după traducere – la bifarea unei opțiuni – sistemul să și citească textul clientului
posibilitate de adăugare/modificare/ștergere utilizatori într-o listă salvată pentru fiecare utilizator în parte
căutare în lista utilizatorilor
poză customizabilă pentru fiecare utilizator.
Este important de menționat faptul că această listă se poate modifica, în funcție de necesități și posibilități pe parcursul proiectării și implementării.
Consider că am oferit o soluție care ușurează și eficientizează munca în orice activitate ce necesită o convorbire între două persoane care nu cunosc o limbă comună.
6. Bibliografie
Dr. Kris Jamsa & Lars Klander, Traducere de Eugen Dumitrescu, Totul despre C și C++ Manualul fundamental de programare în C și C++, Editura Teora, București, 2007
Ștefan Tanasă & Ștefan Andrei, Cristian Olaru, Java de la 0 la expert Ediția a II-a, Editura Polirom, 2011
Luke Welling & Laura Thomson, Traducere de Ioan Bledea, Dezvoltarea aplicațiilor Web cu PHP și MySQL, Ediția a II-a, Editura Teora, București, 2005
Mariana Nagy, Mihaiela Vizental, Baze de Date, Material de studiu pentru învățământ la distanță, Editura Universității Aurel Vlaicu, Arad, 2010
Vasile Topac, Ingineria Sistemelor de Programare, Note de curs, 2015
Vasile Topac, Programarea Sistemelor Automate Distribuite, Note de curs, 2015
Cristina Băla, Tehnologii Web, Note de curs, 2015
***https://docs.oracle.com/javase/tutorial/
***https://ro.wikipedia.org/wiki/Programare_orientat%C4%83_pe_obiecte
***https://en.wikipedia.org/wiki/Unified_Modeling_Language
***http://software.ucv.ro/~aion/ip/Laborator4/Diagrame%20de%20clase.pdf
***https://en.wikipedia.org/wiki/Email_address
***https://www.microsoft.com/translator/api.aspx
***http://www.objectaid.com/
***https://code.google.com/p/microsoft-translator-java-api/
***https://eclipse.org/
***https://www.apachefriends.org/ro/index.html
***http://staruml.io/
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: 2. Programare. Fundamente Teoretice 9 2.1 Introducere în programare 9 2.2 Programare orientată pe obiecte 10 3. Proiectarea și implementarea… [307192] (ID: 307192)
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.
