Lucrare de Licență [623433]
Universitatea din București
Facultatea de Matematică și Informatică
Construirea aplica țiilor didactice
online
– Lucrare de Licență –
Absolvent: [anonimizat]: Lector dr. Mihail Cherciu
2018
Cuprins
Scopul aplicației
Site-ul își propune să prezinte materia din programa școlară.
În momentul de față sunt expuse doar câteva capitole exemplificative, important
în acest caz nefiind conținutul în sine, ci produsul software care publică și
gestionează informațiile.
Pe lângã imaginile care însoțesc teoria, site -ul dispune și de applet uri
interactive, cu scopul de a facilita înțelegerea diferitelor concepte.
Se exemplică posibilitățile limbajelor și uneltelor de programare Open Source,
folosind un server de web Apache cu modul PhP, un server de baze de date
MySQL, appleturi Java dezv oltate cu ajutorul mediului de programare NetBeans
și imagini creeate cu utilitarul GiMP.
Ideea aplicației este simplă: cu ajutorul unei secțiuni de administrare, în care se
poate intra doar pe bază de parolă, sunt adăugate și editate capitole și
subcap itole. Atât conținutul cât și numele capitolelor sunt stocate într -o bază de
date. În conținut sunt prezente taguri HTML, ce fac lectura mai ușoară și fac
referință la imagini și appleturi. Pentru ușurința editării, în secțiunea de
administrare este prezen t și un editor de texte implementat în javascript. Acesta
adaugă elementele de HTML și poate fi folosit chiar de o persoană care are doar
cunoștințe minime de HTML.
Ca si tehnologii folosite putem enumera:
HTML: este un acronim care provine de la HyperText Markup
Language și reprezintă un limbaj declarativ ce permite crearea de
documente hipertext, pentru paginile Web, documente care pot fi
vizualizate cu ajutorul navigatoarelor Web (în mediul Internet cel mai
folosit este browserul Internet Explor er).
CSS : este un acronim provenind din Cascading Style Sheets , care
înseamnă “ foi de stil în cascadă ”. Proiectarea limbajului CSS a urmărit,
îndeosebi, separarea dintre conținutului paginii (textul destinat
vizitatorului și imaginile din pagină) și codul -sursă, scris pentru realizarea
paginii Web.
JavaScript : este cel mai des întâlnit limbaj de scriptare folosit în crearea
paginilor web, dar nu numai. Este un limbaj lejer, care nu are reguli foarte
stricte, și care oferă, astfel, destul de multă libertate programatorilor,
fiind, astfel, un limbaj destul de ușor de folosit chiar și de începători.
PHP : este un limbaj de tip scripting pe partea de server, proiectat special
pentru Web. Într -o pagina HTML poate fi încapsulat cod PHP care va fi
executat de fiec are dată când pagina este vizitată. Codul PHP este
interpretat pe serverul web si generează cod HTML(sau un alt output) care
va fi văzut de către vizitator.
MySQL :Baza de date este un ansamblu structurat de date coerente astfel
încât acestea pot fi prelucr ate eficient de mai mulți utilizatori în mod
concurent.
JAVA : este un limbaj de programare orientat pe obiecte care a fost inițial
dezvoltat de către institutul Sun Microsystems și care la ora actuală este
deținut de către Corporația Oracle. Limbajul a f ost lansat în anul 1995 și
are foarte multe componente asemănătoare cu limbajele C și C++
1.HTML
HTML, sau HypertextMarkupLanguage, este folosit de către programatorii
web pentru a descrie conținutul unei pagini Web. Nu este un limbaj de
programare. Pur și simplu utilizați codul HTML pentru a indica ce este o anumită
bucată de text – cum ar fi un paragraf, o rubrică sau un text special formatat.
Toate directivele HTML sunt specificate folosind seturi potrivite de paranteze
unghiulare și sunt de obicei numite etichete. De exemplu, <B> înseamnă că
următorul text trebuie afișat cu caractere aldine. Pentru a opri textul îngroșat, se
utilizeaza directiva </ B>. Majoritatea directivelor HTML vin în perechi și
înconjoară textul afect at.
Documentele HTML trebuie să aibă anumite etichete pentru ca acestea să fie
considerate "corecte". Setul de etichete <HEAD> .. </ HEAD> înconjoară
informațiile despre antet pentru fiecare document. În interiorul antetului, se
poate specifica un tit lu de document cu etichetele <TITLE> .. </ TITLE>.
Etichetele HTML tip sunt insuficiente pentru majuscule. De exemplu, <TITLE>
este același cu <title>. Cu toate acestea, folosind toate literele majuscule din
etichetele HTML, documentele HTML sunt mai ușo r de înțeles, deoarece se
poate alege mai ușor etichetele.
După antetul documentului, trebuie să aveți un set de <BODY> .. </ BODY>
etichete. În interiorul corpului documentului, se specifica titlurile de text
utilizând un set de etichete <H1> .. </ H 1>. Modificarea numărului după H
modifică nivelul de titlu. De exemplu, <H1> este primul nivel. <H2> este al
doilea nivel și așa mai departe. Se poate utiliza eticheta <P> pentru a indica
sfârșitul paragrafelor sau pentru a folosi <BR> pentru a indica o ru pere de linie.
Etichetele <B> .. </ B> și <I> .. </ I> sunt folosite pentru a indica textul cu
caractere aldine și italice. Textul și etichetele întregului document HTML trebuie
să fie înconjurate de un set de etichete <HTML> </ HTML>
HTML este o reco mandare formală a consorțiului World Wide Web
Consortium (W3C) și este în general respectată de browserele majore, Microsoft
Internet Explorer și Netscape's Navigator, care oferă de asemenea și alte coduri
non-standard. Versiunea actuală a HTML este HTML 4 .0. Cu toate acestea,
Internet Explorer și Netscape implementează în mod diferit alte funcții și oferă
extensii non -standard. Dezvoltatorii web care utilizează funcțiile mai avansate
ale codului HTML 4 ar putea fi nevoiți să proiecteze pagini pentru ambele
browsere și să trimită o versiune adecvată unui utilizator. Caracteristicile
semnificative din HTML 4 sunt descrise uneori în general ca HTML dinamice.
Ceea ce este denumit uneori HTML 5 este o formă extensibilă de HTML numită
Extensible Hypertext Markup Language (XHTML).
2.CSS
Fonturile de stil cascadă sunt utilizate pentru a formata aspectul paginilor web.
Acestea pot fi folosite pentru a defini stilurile de text, dimensiunile tabelei și alte aspecte
ale paginilor Web care anterior puteau fi definite numai în HTML -ul unei pagini.
CSS ajută dezvoltatorii Web să creeze o privire uniformă asupra mai multor pagini
ale unui site Web. În loc să definească stilul fiecărui tabel și fiecărui bloc de text din
cadrul HTML -ului unei pagini, stilur ile utilizate în mod obișnuit trebuie definite doar o
singură dată într -un document CSS. Odată ce stilul este definit în foaia de stil cascadă,
acesta poate fi utilizat de orice pagină care face trimitere la fișierul CSS. În plus, CSS
ușurează schimbarea s imultană a mai multor stiluri pe mai multe pagini. De exemplu, un
dezvoltator Web poate dori să mărească dimensiunea implicită a textului de la 10pt la
12pt pentru cincizeci de pagini de pe un site Web. Dacă paginile fac referință la aceeași
foaie de stil, dimensiunea textului trebuie modificată numai în foaia de stil și toate
paginile vor afișa textul mai mare.
În timp ce CSS este excelent pentru crearea de stiluri de text, este utilă și formatarea
altor aspecte ale aspectului paginii web. De exempl u, CSS poate fi folosit pentru a defin i
padding -ul celulelor tabelului, stilul, grosimea și culoarea unei margini , precum și
umplutura în jurul imaginilor sau al altor obiecte. CSS oferă dezvoltatorilor Web mai
mult control asupra modului în care vor ară ta paginile Web decât HTML. Acesta este
motivul pentru care majoritatea paginilor web includ astăzi foi de stil în cascadă.
CSS oferă mai mult control asupra apariției unei pagini Web creatorului de pagini
decât unui designer de browser sau unui vizualizator. Cu CSS, sursele de definiție a
stilului pentru un anumit element de document sunt în ordinea precedentă:
1. Atributul STY LE pe o etichetă element
2.Elementul STYLE care definește o foaie de stil specifică care conține declarații de
stil sau un element LINK care leagă un document separat care conține elementul STYLE.
Într-o pagină Web, elementul STYLE este plasat între instrucțiunea TITLE și
instrucțiunea BODY.
3.O foaie de stil importată, utilizând notația CSS @import pentru a importa și îmbina
automat o foaie de stil externă cu foaia de stil actuală
4.Atribute de stil specificate de browser în browser
5.Fișa de stil implicită asumată de browser
În general, foaia de stil a creatorului paginii web are prioritate, dar este recomandat ca
browserele să ofere modalități pentru ca spectatorul să suprascrie atributele stilului în
anumite privințe. Deoarece este posibil ca diferite browsere să aleagă implementarea
CSS1 într -o oarecare măsură, creatorul paginii Web trebui e să testeze pagina cu diferite
browsere.
CSS conține reguli de stil care sunt interpretate de browser și apoi aplicate elementelor
corespunzătoare din document. O regulă de stil este formată din trei părți: · Selector: Un
selector este o etichetă HTML la care se va aplica un stil. Aceasta ar putea fi orice
etichetă ca <h1> sau <table> etc. ·
Proprietate: O proprietate este un tip de atribut al etichetei HTML. Puneți simplu, toate
atributele HTML sunt convertite în proprietăți CSS. Ar putea fi culori, f rontiere etc. ·
Valoare: Valorile sunt atribuite proprietăților.
Avantajele CSS
– Se poate scrie CSS o dată și apoi se poate reutiliza aceeași
foaie în mai mul te pagini HTML. Se poate defini un stil pentru f iecare element HTML și
îl se poate aplica la cât mai multe pagini web pe care le doriți.
– dacă utilizați CSS, nu este necesar să se scrie atribute
HTML tag -uri de fiecare dată. T rebuie doar să se scrie o regulă CSS a unei etichete și să
se apl ice la toate aparițiile acelei etichete. Deci, mai puțin cod înseamnă perioade de
descărcare mai rapide.
– Pentru a fac e o schimbare globală, se schimba pur și simplu stilul și
toate elementele din toate paginile web vor fi actualizat e automat.
– CSS are o gamă mult mai largă de atribute de cât
HTML, astfel încât se poate da o imagine mult mai bună paginii HTML în comparație cu
atributele HTML.
– foile de stil pe rmit optimizarea conținutului
pentru mai multe tipuri de dispozitive. Prin utilizarea aceluiași document HTML, diferite
versiuni ale unui site web pot fi prezentate pentru dispozitive portabile, cum ar fi PDA –
uri și telefoane mobile sau pentru imprimare.
Standarde web globale – Acum, atributele HTML sunt depreciate și se
recomandă utilizarea CSS.
CSS utilizează valorile culorilor pentru a specifica o culoare. În mod obișnuit,
acestea sunt utilizate pentru a seta o culoare fie pentru elementul primar al unui
element (adică textul acestuia), fie pentru fundalul elementului. Ele pot fi, de
asemenea, folosite pentru a afecta culoarea frontierelor și alte efecte decorative.
JAVASCRIPT
Javascript este un limbaj de programare dinamic al calculatorului. Este ușor și
cel mai frecvent utilizat ca parte a paginilor web, a căror implementare permite
client -side script pentru a interacționa cu utilizatorul și a face pagini dinamice.
Este un limbaj de programare interpretat cu capabilități orientate pe obiect.
JavaScript a fost cunoscut mai întâi ca LiveScript, dar Netscape și -a schimbat
numele JavaScript, posibil din cauza entuziasmului generat de Java. JavaScript
a făcut prima apariție în Netscape 2.0 în 1995 cu numele LiveScript.
Pe partea clientului, JavaScript este cea mai c omună formă de limbaj.
O pagină web nu trebuie să fie un cod HTML static, dar p oate include și
programe care interacționează cu utilizatorul, controlează browse rul și creează
dinamic cod HTML conținut.
Mecanismul clientului JavaScript oferă multe ava ntaje față de cele
tradiționale Scripturi de pe serverul CGI. De exemplu, este posibil să se utilizeze
JavaScript pentru a verifica dacă utilizatorul a introdus o adresă de e -mail v alidă
într-un câmp de formular. Codul JavaScript este executat atunci când utilizatorul
trimite formularul și numai dacă toate intrările sunt valide, acestea vor fi trimise la
serverul Web.
JavaScript poate fi folosit pentru a capta evenimentele inițiate de utilizatori,
cum ar f i clicurile pe butoane, link -ul ,navigarea și alte acțiuni pe care utilizatorul
le inițiază în mod explicit sau implicit.
Mijloacele de utilizare a JavaScript sunt:
· Inter acțiune mai mică a serverului: Se poate valida intrarea util izatorului înainte
de a trimite pagina de pe server. Acest lucru economisește traficul serverului,
ceea c e înseamnă o încărcare mai mica serverului.
· Feedback -ul imediat către vizitatori: Nu trebuie să aștepte sa se
reîncarce pagina pentru a vedea dacă s -a uitat să se introducă ceva.
· Interactivitate sporită: Se poate crea interfețe care reacționează atunci când
utilizatorul se deplasează peste ele cu ajutorul unui mouse sau le activează prin
intermedi ul tastaturii.
· Interfețe mai bogate: Se poate utiliza JavaScript pentru a i nclude elemente
precum drag and drop componente.
Limitări ale JavaScript
Nu putem trata JavaScript ca un limbaj de programare cu drepturi depline. Îi
lipsește următoarel e caracteristici importante:
JavaScript de pe partea clientului nu permite citirea sau scrierea de fișiere.
Acest a fost păstrată din motive de securitate.
JavaScript nu poate fi folosit pentru aplicații de rețea deoarece nu există un
astfel de supor t disponibil.
JavaScript nu are capabilități multithreading sau multiprocesor. Încă o dată,
JavaScript este un limbaj de p rogramare ușor și interpretat ce permite să se
creeze interactivitate în pagini HTML statice altfel.
Instrumente de dezvoltare Jav aScript
Unul dintre punctele forte ale JavaScript este că nu necesită instrumente
scumpe de dezvoltare. Se poate începe cu un editor simplu de text, cum ar fi
Notepad. Deoarece este un limbaj interpretat în contextul unui browser web.
Pentru a ne simplifica viața , diferiții furnizori au venit cu Instrumente de editare
JavaScript. Unele dintre ele sunt listate aici:
Microsoft FrontPage: Microsoft a dezvoltat un editor HTML popular numit
FrontPage. FrontPage furnizează, de asemenea, dezvolta torilor web un număr
de instrumente JavaScript pentru a ajuta la crearea de site -uri interactive.
Macromedia Dreamweaver MX: Macromedia Dreamweaver MX este un foarte
popul ar HTML și JavaScript editor .
Macromedia HomeSite 5: HomeSite 5 este un editor HTML si JavaScript de la
Macromedia care poate fi folosit pentru a gestiona site -uri web în mod eficient.
PHP
PHP a pornit ca un mic proiect open source care a evoluat pe măsură ce tot
mai mu lți oameni au aflat cât de util a fost. Rasmus Lerdorf a creat prima
versiune de PHP în 1994.
PHP este un acronim recursiv pentru "PHP: Hypertext Preprocessor".
PHP este un limbaj de scripting al serverului care este încorporat în HTML.
Este folosit pentru a gestiona conținutul dinamic, bazele de date, urmărirea
sesiunilor, chiar a construi site -uri de comerț electronic întreg.
Este integrat cu o serie de baze de date populare, inclusiv MySQL,
PostgreSQL, Oracle, Sybase, Informix și Microsoft SQL S erver
. PHP este plin de încordare în execuția sa, mai ales când este compilat ca un
modul Apache pe partea Unix. Serverul MySQL, odată pornit, execută chiar și
întrebări foarte complexe, cu seturi de rezultate uriașe în timp de stabilire a
înregistrăril or.
PHP suportă un număr mare de protocoale majore, cum ar fi POP3, IMAP și
LDAP. Suportul PHP4 a adăugat suport pentru arhitecturile Java și arhitecturile
de obiecte distribuite (COM și CORBA), făcând posibilă dezvoltarea n -tier pentru
prima data
Utilizări comune ale PHP
PHP îndeplinește funcțiile sistemului, adică din fișierele dintr -un sistem pe care le
poate crea, deschide, citi, scrie și închide.
Celelalte utilizări ale PHP sunt:
· PHP poate gestiona formulare, adică adună date din fișiere, salvează date într –
un fișier, prin e -mail se poate trimite date, returnează date utilizatorului.
· Adăugați, ștergeți, modificați elemente din baza de date prin intermediul PHP.
· Sa acceseze variabilele cookie -uri și setați cookie -urile.
· Utilizând PHP, se poate restricționa utilizatorii să acceseze anumite pagini ale
site-ului Web.
· Poate cripta datele.
Caracteristicile PHP
Cinci caracteristici importante fac posibilă practica PHP:
· Simplitate
· Eficiența
· Securitate
· Flexibilitate
· Familiaritate
TIPURI
VARIABILE PHP
Principalul mod de a stoca informațiile în mijlocul unui program PHP este prin
utilizarea unei variabile. Iată cele mai importante lucruri pe care trebuie să le
cunoaștem despre variabilele din PHP.
Toate variabi lele din PHP sunt marcate cu semnul de dolar principal ($).
Valoarea unei variabile este valoarea celei mai recente cesiuni.
variabilele sunt atribuite operatorului =, cu variabila din partea stângă și cu
expresia care urmează să fie evaluată în drea pta.
Variabilele pot, dar nu trebuie, să fie declarate înainte de alocare.
Variabilele în PHP nu au tipuri intrinseci – o variabilă nu știe în avans dacă va
fi utilizată pentru a stoca un număr sau un șir de caractere.
Variabilele utilizate înaint e de alocare au valori implicite. PHP face o treabă
bună de conversie automată a tipurilor de la unul la altul când este necesar.
variabilele PHP sunt asemănătoare cu Perl. PHP are un total de opt tipuri de
date pe care le folosim pentru a construi va riabilele noastre:
Integre: sunt numere întregi, fără punct zecimal, cum ar fi 4195.
Doubles: sunt numere în virgulă mobilă, cum ar fi 3.14159 sau 49.1.
Booleani: au doar două valori posibile, fie false, fie false.
NULL: este un tip special care are doar o valoare: NULL.
Corzi: sunt secvențe de caractere, cum ar fi "PHP acceptă operații de șir".
Arrays: sunt numite și indexate colecții de alte valori.
Obiecte: sunt exemple de clase definite de programator, care pot ambala
ambele tipuri de valori și funcții specifice clasei.
Resurse: sunt variabile speciale care dețin referințe la resursele externe
pentru PHP (cum ar fi conexiunile de baze de date). Primele cinci sunt simple
tipuri, iar următoarele două (matrice și obiecte) sunt compuse – tipurile combinate
pot pachet alte valori arbitrare de tip arbitrar, în timp ce tipurile simple nu pot.
MYSQL
O bază de date este o aplica ție separat ă care stocheaz ă o colecție de date. Fiecare
bază de date are unul sau mai multe API -uri distincte pentru crearea, accesarea,
gestionarea, c ăutarea și replicarea datelor pe care le de ține.
Alte tipuri de magazine de date pot fi de asemenea folosite, dar preluarea și scrierea
datelor nu ar fi at ât de rapid ă și ușoară cu acestea tip de sisteme.
În prezent, folosim sisteme de management al bazelor de date rela ționale
(RDBMS) pe ntru a stoca și gestiona un volum mare de date. Aceasta se nume ște bază
de date rela țională deoarece toate datele sunt stocate în diferite tabele și relațiile sunt
stabilite utiliz ând cheile primare sau alte chei cunoscut sub numele de Chei Externe.
Un sistem relațional de management al bazei de date (RDBMS) este un software care:
Permite s ă se implementeze o baz ă de date cu tabele, coloane și indexuri.
Garanteaz ă Integritatea Referinței între rândurile diferitelor tabele.
Actualizeaz ă indexurile în mod automat.
Interpreteaz ă o interogare SQL și combin ă informații din diferite tabele.
RDBMS Terminology
Baza de date: O baz ă de date este o colec ție de tabele cu date aferente.
Tabel: Un tabel este o matrice cu date. Un tabel dintr -o bază de date pare a fi simplu
foaie de calcul.
Coloană: O coloan ă (element de date) con ține date de acela și tip, ca
exemplu : (codul poștal al coloanei. )
Rând: Un rând (= tuple, intrare sau înregistrare) e ste un grup de date conexe. De
exemplu,datele unui abonament.
Redundan ță: stocarea datelor de dou ă ori, redundant pentru a face sistemul mai rapid.
Cheie primar ă: o cheie primar ă este unică. O valoare cheie nu poate ap ărea de dou ă
ori într-un singur ta bel.Cu o cheie, se poate găsi doar un r ând.
Cheie străină: o cheie str ăină este clema de leg ătură între două tabele.
Cheie compus: o cheie compus ă (cheia compozit ă) este o cheie care const ă din
mai multe coloane, deoarece o coloan ă nu este suficient de unic ă.
Index: Un index dintr -o bază de date seam ănă cu un index din spatele unei c ărți.
Integritatea referen țială: Integritatea referen țială se asigura c ă o valoare de cheie
străină indică totdeauna un r and existent.
Folosind MySQL
Bineînțeles, nu exist ă prea multe puncte pentru a putea modifica dinamic outputul
HTML cu excepția cazului în care ave ți, de asemenea, mijloace pentru a urm ări
modificările pe care le fac utilizatorii în timp ce v ă folosesc site-ul web . La prima
aparitie Web, multe site -uri foloseau fi șiere text "plate" pentru a stoca astfel de date
ca nume de utilizator și parole.
Aici devin esen țiale bazele de date rela ționale cu interog ări structurate. Și
MySQL, fiind liber ă să utilizeze și să instaleze pe un num ăr mare de servere de web pe
Internet, cre ște cu deosebit ă ocazie. Este o gestionare robust ă și extrem de rapid ă a
bazelor de date care utilizeaz ă comenzi asem ănătoare englezei.
Cel mai înalt nivel al structurii MySQL este o bază de date, în cadrul c ăreia se
poate avea unul sau mai multe tabele care con țin datele dvs.
Cu toate acestea, JavaScript poate fi, de asemenea, dificil de utilizat, datorit ă unor
diferențe majore între modurile în care de signerii browserului au ales s ă o pună în
aplicare. A venit în principal despre când unii produc ători au încercat să introducă
funcții suplimentare în browserele lor în detrimentul compatibilit ății cu rivalii lor.
JAVA
Limba jul de programare Java a fost ini țial dezvoltat de Sun Microsystems, ini țiat
de James Gosling și lansat în 1995 ca o component ă de bază a platformei Java de la Sun
Microsystems (Java 1.0 [J2SE]).
Cea mai recent ă versiune Java Standard Edition este Java SE 8. Odat ă cu avansarea
Java și popularitatea pe scar ă largă, au fost create mai multe configura ții pentru a se
potrivi diferitelor tipuri de platforme. De exemplu: J2EE pentru aplica ții Enterprise,
J2ME pentru aplica ții mobile.
Noile versiuni J2 au fost redenumite ca Java SE, Java EE și respectiv Java ME..
Java este:
Object Oriented: În Java, totul este un obiect. Java poate fi e xtins cu u șurință,
deoarece se bazeaz ă pe modelul Object.
Platform Independent: Spre deosebire de multe alte limbi de programare, inclusiv C și
C ++, atunci c ând Java este compilat, acesta nu este compilat în mașină specifică
platformei, mai degrab ă în codul de octet independent de platform ă. Acest cod octet este
distribuit pe web și interpretat de Virtual Machine (JVM) pe orice platform ă pe care se
rulează.
Simplu: Java este conceput pentru a fi u șor de învățat. Dacă înțelegeți conceptul
de bază al OOP Java, este usor de stapanit
Secure: cu caracteristica securizat ă a Java permite crearea de sisteme f ără viruși, fără
interferen țe. Tehnicile de autentificare se bazeaz ă pe criptarea cheilor publice.
Neutrală pentru arhitectur ă: compilatorul Jav a genereaz ă un format de fi șier obiect
neutru pentru arhitectur ă, ceea ce face executabilul de cod compilat pe mai multe
procesoare, cu prezen ța sistemului Java runtime.
Portabil: Fiind neutru din punct de vedere al arhitecturii și care nu are aspecte
dependente de implementare a caietului de sarcini, Java este portabil. Compilatorul în
Java este scris în ANSI C cu o limit ă de portabilitate curat ă, care este un subset POSIX.
Robust: Java depune eforturi pentru a elimina situa țiile predispuse la erori, p unând
accentul în principal pe verificarea erorilor de compilare și pe verificarea runtime -ului.
Multithreaded: cu func ția Java multithreaded este posibil s ă se scrie programe care
pot efectua simultan mai multe sarcini. Aceast ă caracteristic ă de proiect are permite
dezvoltatorilor s ă construiasc ă aplicații interactive care pot func ționa fără probleme.
Interpretat: codul de octet Java este tradus în instrucțiunile de zbor la ma șină și nu
este stocat nic ăieri. Procesul de dezvoltare este mai rapid și mai analitic, deoarece
legarea este un proces incremental și ușor.
Performan ță înaltă: Cu ajutorul compila ților Just -In-Time, Java permite o
performan ță ridicată.
-Distribuit: Java este proiectat pentru mediul distribuit al internetului.
Dynamic: Java este considerat mai dinamic dec ât C sau C ++, deoarece este conceput
să se adapteze la un mediu în evoluție. Programele Java pot transporta o cantitate mare
de informa ții despre timpul de execu ție care pot fi folosite pentru a ve rifica și rezolva
accesul la obiecte în timpul execu ției.
Pentru a scrie programele dvs. Java, ve ți avea nevoie de un editor de text. Exist ă și mai
multe IDE -uri sofisticate disponibile pe pia ță. Dar pentru moment, pute ți lua în
considerare una dintre urm ătoarele:
Notepad: În mașina Windows, ave ți posibilitatea s ă utilizați orice editor simplu de
text, cum ar fi Notepad (recomandat pentru acest tutorial), TextPad.
Netbeans: un IDE Java care este open -source și gratuit/
-Eclipse
Când luăm în considerare un program Java, acesta poate fi definit ca o colec ție de
obiecte care comunic ă prin invocarea metodelor reciproce. S ă analizăm pe scurt ce
înseamnă clasa, obiectul, metodele și variabilele de instan ță:
Obiect – Obiectele sau stări și comportamente. Exemplu: Un c âine are stări – culoare,
nume, ras ă, precum și un comportament cum ar fi r ăsucirea coada, l ătratul, mâncarea.
Un obiect este o instan ță a unei clase.
Clasa – Clasa A poate fi definit ă ca un șablon / plan care descrie comporta mentul /
starea pe care o sus ține obiectul de tipul s ău.
Metode – O metodă este în esență un comportament. O clas ă poate con ține mai
multe metode. Este în metode în care sunt scrise logicile, datele sunt manipulate și toate
acțiunile sunt executate.
Variabile de instan ță – Fiecare obiect are un set unic de variabile de instan ță.
Applet -uri
Definiție, descriere și mod de utilizare
Termenul „applet ” desemnează un anumit tip de program Java, de dimensiuni nu
prea mari, care are capacitatea de a gestiona o anumită suprafață de afișare (numită
„container ”) care se poate include în interiorul unei pagini Web. Aceasta este o
facilitate specifică limbajul ui Java.
Rularea unui applet nu se poate face independent. Pentru a fi rulat un applet
necesită un mediu de rulare, care îi este oferit de un browser. În acest scop ap plet-ul
este inclus într -o pagină web și va fi executat de browser -ul care deschide aceas tă
pagină.
În interiorul fișierului HTML care definește pagina web ce conține un applet se
introduc și parametrii applet -ului, aceasta fiind singura modalitate de transmitere a
parametrilor către un applet, proprietate care face și ea diferența dintre ap plet-uri și
alte tipuri de aplicații Java, ce pot primi parametri pe alte căi, de exemplu prin linia de
comandă.
Un applet are asociată o suprafață de afișare dreptunghiulară, este lansat în
execuție la deschidere a paginii web care îl conține, iar compor tamentul său depinde de
evenimentele generate de browser (redimensionarea, minimizarea, maximizarea
ferestrei, deschiderea altei ferestre, etc.) sau de utilizator (acțiuni cu tastatura sau
mouse -ul asupra elementelor din pagină).
Applet -urile sunt instanțe ale clasei Applet, care extinde supraclasa Container,
dat fiind faptul că un applet este suprafață de afișare. Clasa Applet face parte din
pachetul java.applet.
Un applet poate conține o clasă sau mai multe, una dintre acestea fiind clasa
principală, ext ensie a clasei Applet sau a clasei JApplet.
Există anumite metode care nu trebuie invocate explicit în sursa applet -urilor, ci
sunt invocate automat atunci când browser -ul produce anumite evenimente, aceasta
fiind o proprietate importantă specifică applet -urilor. Mai jos sunt indicate aceste
metode, arătându -se modul în care sunt executate.
init() – executată o singură dată, atunci când applet -ul este inițializat; efectuează
adăugarea de componente în applet și stabilește obiectele care tratează eveniment ele;
start() – executată la fiecare vizualizare a applet -ului (la început după executarea
init(), apoi după orice reactivare a applet -ului în urma unei opriri temporare în urma
unui eveniment cu acest efect) ;
stop() – executată la fiecare lipsire de vizi bilitate a applet -ului în urma unui
eveniment (de exemplu minimizarea de către browser a ferestrei ce include applet -ul),
producând oprirea temporară a execuției applet -ului;
destroy() – executată o singură dată, atunci când se inchide ultima instanță a
browser -ului care a încărcat clasa principală (care conține metoda main()) a applet -ului.
Aceste metode sunt definite în clasa Applet.
În scopul efectuării operațiilor cu elemente vizuale și pentru lucrul cu interfețe
grafice a fost elaborat pachetul java. awt (Abstract Window Toolkit). Acest pachet
conține o multitudine de clase, toate derivate din clasa abstractă Component, pentru
desenare, pentru imagini (încărcare, afișare, creare, editare, salvare, etc), ca și pentru
crearea și utilizarea controalelor g rafice (butoane, tabele, casete text etc), care sunt
componente ale interfețelor grafice. Împreună cu clasele care implementează elemente
grafice sunt definite și clase care tratează evenimentele asociate elementelor grafice.
Toate aceste clase sunt utiliz ate și de applet -uri.
O metodă executată automat de către browser este paint(Graphics g), definită în
clasa Component, executarea sa efectuându -se după start() la vizualizarea unui applet,
având ca efect redesenarea acestuia.
În clasa Component există și o metodă care poate fi apelată explicit de către un
applet pentru redesenare, numită repaint().
După elaborarea pachetului java.awt a urmat elaborarea și lansarea pachetului
javax.swing, pentru a fi satisfăcue cerințele tot mai mari pentru dezvoltarea ap licațiilor.
A fost creată și o clasă care extinde clasa Applet, numită JApplet, inclusă în
pachetul javax.swing. Applet -urile create cu utilizarea clasei JApplet au o arhitectură
specială de componente, numită JFC/Swing, JFC fiind prescurtarea denumirii
bibliotecii Java Foundation Classes, iar termenul „swing” desemnează o colecție de
componente speciale de interfață grafică.
Un applet are și posibilitatea redării și creării de sunete, sunetele fiind
implementate cu subclasa AdioClip a clasei Applet. Reda rea se poate face cu utilizarea
metodei play(url), iar pentre creare se poate folosi metoda getAudioClip() care întoarce
o instanță a clasei AdioClip. Pentru a se acționa în timpul redării pot fi folosite diverse
metode, printre care loop() (pentru repetar e) sau stop() (pentru oprire).
Folosirea firelor de execuție
Pentru fiecare applet inclus într -o pagină web un browser care deschide pagina
crează un fir de execuție distinct. Toate firele de execuție asociate applet -urilor dintr -o
pagină rulează concurent.
Applet -urile își pot crea și fire de execuție proprii, acestea fiind în mod în mod
special necesare pentru executarea operațiilor care consumă mult timp. Un fir de
execuție special numit în engleză „event dispatching thread” este creat de browse r
pentru operațiile de desenare și transmiterea evenimentelor produse de componentele
applet -urilor. La acest fir de execuție au acces toate applet -urile dintr -o pagină web.
Includerea într -un document HTML
Pentru includerea unui applet într -un document HTML se poate folosi marcatorul
(tag) special cu numele APPLET, care este un marcator pereche (se încheie cu
</APPLET>). Acesta nu este suportat de versiunea HTML5, în care se pot utiliza în
același scop marcatoarele de includere generale OBJECT și EMBED . Marcatorul
APPLET are două atribute obligatorii: code și object , descrise mai jos.
Valoare Descriere
code Șir se caractere Adresă URL a unui fișier sursă Java care
conține clasa principală a unui applet
object Șir se caractere Nume sub care se face referire la applet în
cadrul documentului HTML
Alte atribute (opționale) ale marcatorului APPLET, cu valori numerice sau șiruri
de caractere declară diverse carcteristici ale applet -ului: height , width (înălțimea și
lățimea), hspace / vspace (spațiu orizontal / vertical în jurul applet -ului) archive (adresa
URL a unei arhive de tip .jar care conține cod sursă și / sau resurse ale applet -ul ) etc.
La întâlnirea unui marcator APPLET, browser -ul începe să încarce codul aflat la
adresa dată de atributul code și, eventual de alte atribute (de exemplu archive ). Ap plet-
ul poate fi rulat numai după ce acest cod a ajuns în în tregime în calculatorul client.
Defi nirea și folosirea parametrilor
Un applet utilizează parametri așa cum o aplicație independentă utilizează
argumente din linia de comandă. Parametrii sunt utilizați pentru schimbarea dinamică a
aspectului și comportamentului unui applet.
În interiorul unui marcator APPLET se poate introduce un marcator (tag ) special
cu numele PARAM., singular (fără sfârșit), ale cărui atribute name și value, amânduă
cu valori șiruri de caractere, definesc un parametru. Astfel, atributul name dă numele,
iar atributul value dă valoarea parametrului. Șirurile de caractere care reprezintă
valorile acestor atribute pot fi incluse sau nu între apostrofuri sau ghilimele.
Un applet poate avea și parametri prestabiliți, cu nume rezervate, care nu pot să
fie utilizate pentru alți parametri. Astfel de parametri sunt definiți prin atrib ute în
cadrul marcatorului APPLET, ca, de exemplu, atributele height , width , etc.
Informațiile applet -urilor, inclusiv numele și valorile parametrilor, pot fi
vizualizate prin diverse procedee, cum sunt:
– în linia de comandă, comanda „appletviewer”, care poate primi ca
argument un nume de document care conține applet -uri și afișează
informațiile acestora;
– diverse comenzi ale browserelor, ca, de exemplu, în Netscape, comanda
„Page Info” din meniul „View”.
În clasa Applet există metode pentru a se regăsi inf ormații privitoare la applet –
uri, inclusiv la parmetrii acestora. Printre acestea sunt:
getAppletInfo() care întoarce informații despre un applet;
getParameterInfo() care întoarce informații despre parametrii unui applet;
getParameter("numele_unui_paramet ru") care întoarce valoarea unui parametru.
1. Descrierea aplicației
I. Modul de utilizare
Prima pagină a site -ului
Web site -ul primeste vizitatorii intr -un cadru placut, avand meniul in partea
stanga si continutul in centrul paginii. Sunt afisate doar subcapitolele (lectiile)
capitolului ales, acestea regasindu -se in meniu.
Conținut al site -ului
Lectiile conțin teorie, imagini și appleturi suggestive care ușoareaza înțelegerea
materiei. Appleturile se pot porni/opri cu un singur click, acestea se opresc la
incarcarea paginii, deoarece poate scădea performanța computerelor mai slabe si nu ne
dorim asta.
Pentru adăugarea capitolelor noi, administratorul trebuie să se autentifice. De la
opțiunea "Adaugă (Sub)Capitol" este sectia de unde se intr oduc noile nume, dupa care
se paote edita opțional si conținutul. Pentru a usura munca, avem un editor de texte,
codat în JavaScript, in care gasim cele mai uzuale marcaje HTML, precum
introducerea imaginilor, appleturilor, tabelelor, diacriticelor sau s chimbarea fontului.
Se pot alege capitolele de sine stătătoare dintr -o lista din meniu pentru ca lectia cea
noua sa apara ca subcapitol. In caz contrar se lăsa nemarcată aceasta optiune.
Interfața de modificare dinamică a conținutului site -ului
Reincarcand pagina, imediat se poate remarca rezultatul. Este interpretat drept
cod HTML continutul subcapitolului si se va afisa in consecinta. Posibilitatea
formatarii textului poate fi posibila multumita legarii paginii de un document CSS. Caz
in care d aca se stabileste schimbarea aspectului, nu mai este necesara schimbarea
continutului subcapitolelor.
Noua pagină creată a site -ului
"Modifică (Sub)Capitol" este butonul de unde ne putem alege capitoul sau
subcapitolul pe care dorim sa -l modificam , dup a care va aparea component textare ce va
cuprinde continutul capitolului sau al subcapitolului ales. Exista posibilitatea unor
modificari precum schimbarea numelui, capitolului parinte dar si posibilitatea de a
stransforma un subcapitol intr -un capitol de sine statator.
Exemplu de ad ăugare de con ținut
"Șterge Capitol" si "Șterge SubCapitol" sunt butoanele de stergere a unui
capitol respectiv subcapitol prin selectarea acestora, lucru care face ca stergerea sa fie
deosebit de simpla . Important de menționat ar fi faptul că un capitol de sine stătător se
poate șterge doar dacă nu conține subcapitole. Măsură luată pentru micșorarea
efectelor unei ștergeri accidentale.
Secțiunea de administrare conține și opțiunea de ieșire din cont, lucru care
asigura închiderea sesiunii. In felul acesta, dacă o terta parte are acces la computer, nu
va putea accesa zona de administrare fara cunoașterea parolei.
Modul utilizari este destul de simplu, ceea ce nu ridică probleme de
administrare perso anelor cu cunoștințe limitate de HTML.
2. Implementarea
Precum majoritatea web site -urilor actuale, site – ul este bazat pe o bază de
date, unde sunt inmagazinate capitolele, subcapitolele și conținutul lor.
Baza de date MySQL conține două tabele, "admin" care este folosit pentru a
pastra numele respectiv parolele administratorilor. Parolele sunt criptate cu algoritmul
md5, pentru a impiedica furtul parolei în cazul în care o terta persoana capata acces in
mod fraudulos la baza de date .
In cel de al doilea tabel "capitole" gasim capitolele și conținutul acestora. La
fiecare în parte avem o coloană de identificare, numele, id – ul unui capitol părinte
(unde este cazul) și o coloană care are ca valoare sursa HTML ce descrie continutul
acestora.
Capitolele fiind clasificate în două categorii: capitole care nu au un capitol
părinte (numite în pagina web "capitole") și capitole care au un capitol părinte dintre
cele din prima categorie (numi te în pagina web "subcapitole").
P H P se poate conecta la baza de date doar atunci când pagina este
deschisă și extrage numele și id -ul capitolelor de sine stătătoare, scriindu -le dupa aceea
numele în meniul din partea stânga. Când un capitol de sine stătător este deschis, se
transmite paginii id – ul capitolului, apoi PHP selecteaza din baza de date toate
subcapitolele ce au la partea de capitol părinte id – ul transmis prin metoda GET.
Implicit, va fi afișat conținutul capitolului respectiv. Sub nu mele capitolului
selectat se vor afișa toate subcapitolele sale. Codul pentru această parte este următorul:
<?php
$comanda ="select nume_capitol, id_capitol from capitole where
capitol_parinte is null" ;
$sql =mysql_query ($comanda ) or die( 'Cererea nu a fost executată:
'.mysql_error ()); ?>
<table >
<tr><td><a class ="altlink" href ="index.php">
Acasă </a></td></tr>
<?php
while($r= mysql_fetch_array ($sql)){ ?>
<tr><td><a class ="altlink"
href ="capitol.php?cap= <?=$r['id_capitol'] ?>"><?=$r['nume_capitol'] ?>
</a></td></tr>
<?php
if($r['id_capitol']== $_GET ['cap' ]){
$comanda_sub ="select nume_capitol, id_capitol, capitol_parinte from
capitole where capitol_parinte=" .$r['id_capitol' ];
$sql_sub =mysql_query ($comanda_sub ) or die( 'Cererea nu a fost
executată: ' .mysql_error ());
if(mysql_num_rows( $sql_sub )!=0){
while( $r_sub =mysql_fetch_array ($sql_sub ))
print( "<tr><td><p class= \"sub \"><img src = \" arrow.gif \" /><a
class= \"submeniu \"href= \"capitol.php?cap="
.$r_sub ['capitol_parinte' ]."&sub=" .$r_sub ['id_capi tol']."\">".$r_sub ['nume
_capitol' ]."</a></td></tr></p> \n");
}
}
}
?>
"Capitol. php" este un fisier care preia un parametru GET, care reprezinta
de fapt id -ul capitolului ce urmeaza a fi afișat, apoi extrage din baza de date conținutul
respectiv.
În secțiunea administratorului , lucrurile nu mai sunt atat de simple. Important
de știut este că sunt mai multe fișiere ce îndeplinesc funcțiile menționate anterior:
adăugarea, modificarea și ștergerea de capitole. Este vital să oprim accesul la aceste
fișiere dacă utilitatorul nu s-a autentificat . Ne vom folosi de sesiuni, cu ajutorul cărora
se seteaza anumite variabile la logare, care nu oferă accesul persoanelor neprivilegiate .
Fisierul"autorizare .php" este inclus in feicare fisier sensibil. Verifica dacă
autentificarea a av ut loc, în cazul unul raspuns negative aceasta afișând un mesaj de
eroare, facand dupa aceea legătură spre pagina de logare. Conținutul fișierului este
următorul:
<?php
session_start ();
if($_SESSION ['key_admin' ]!=session_id ()){
print( "<h1>Acces neauto rizat!</h1><br>" );
print( "<a href= \"index.php \">Autentificare</a>" );
exit();
}
include( "../conectare.php" );
$sql ="select * from admin where nume= '" .$_SESSION ['utilizator' ]."' and
parola='" .$_SESSION ['parola' ]."'";
$res =mysql_query ($sql );
if(mysql_num_rows ($res )!=1){
print( "<h1>Nume sau parolă greșită!</h1><br>" );
print( "<a href= \"index.php \">Autentificare</a>" );
exit();
}
?>
Pentru verificarea numelui de utilizator și a parolei introduse daca sunt
corecte, verificăm baza de dat e, după ce parola este criptata folosind algoritmul md5.
Conținutul fișierului "login. php" este următorul:
<?php
if(($_POST ['nume' ]=="")||($_POST ['parola' ]=="")){
print( "<h1>Trebuie completate ambele câmpuri!</h1>" );
print( "<br><a href= \"index.php \">Înapoi</a>" );
exit();
}
include( "../conectare.php" );
$parolaEncriptata =md5 ($_POST ['parola' ]);
$sql ="select * from admin where nume='" .$_POST ['nume' ]."' and
parola='" .$parolaEncriptata ."'";
$res =mysql_query ($sql );
if(mysql_num_rows ($res )!=1){
print( "<h1>Nume sau parolă greșită!</h1><br>" );
print( "<a href= \"index.php \">Înapoi</a>" );
exit();
}
session_start ();
$_SESSION ['utilizator' ]=$_POST ['nume' ];
$_SESSION ['parola' ]=$parolaEncriptata ;
$_SESSION ['key_admin' ]=session_id ();
header ("location: admin.php" );
?>
Daca există o înregistrare cu nume de utilizator și parola specificata, se
seteaza variabilele sesiunii "utilizator", "parola" și "key_ admin" cu valorile introduce
si cu id -ul sesiunii . In cazul in care cererea SQL nu returnează o înregistrare, se
afiseaza un mesaj de eroare și o legătură către pagina de logare ("index .php") .
Fișierul "capitol _ adauga" face verificarea dacă există variabila POST "capitol
_nou", care se inițializeaza cand se acceseaza butonul "A daugă" . In caz ca există,
introduce în baza de date variabilele POST necesare. Secvența de cod este următoarea:
if(isset( $_POST ['capitol_nou' ])){
if($_POST ['capitol_nou' ]==""){
print( "<h1>Trebuie introdus un nume de capitol!</h1><br> " );
print( "<a href= \"capitol_adauga.php \">Înapoi</a>" );
exit();
}
if($_POST ['capitol_parinte' ]=="0")
$parinte ="null" ;
else
$parinte =$_POST ['capitol_parinte' ];
$sql ="insert into capitole(nume_capitol, capitol_parinte, continut_capitol)
values( \"".$_POST ['capitol_nou' ]."\",". $parinte . ",\"".$_POST ['continut' ]."\")";
print( $sql );
$res =mysql_query ($sql ) or die( 'Cererea nu a fost executată:' .
mysql_error ());
print( "<h3>Capitolul " .$_POST ['capitol_nou' ]." a fost adăugat cu
succes!</h3>" );
}
Este testat dacă s -a specificat un capitol părinte, în cazul in care nu s -a
specificat punându -se în textul de inserare cuvântul "null", astfel încât SGBD – ul să
înțeleagă că înregistrare a nu are capitol părinte .
De menț ionat este si faptul ca editorul de texte din JavaScript, care adauga la
componenta de tip textare a condului HTML respectiv, atunci când este apelat de o
componentă de tip imagine:
<script type ="text/javascript" >
<!–
function adauga(v){
document.getElementById( 'continut' ).value+=v;
document.getElementById( 'continut' ).focus();
}
//–>
</script >
Un exemplu de utilizare ar fi următorul, care adaugă în zona de editare
codul HTML pentru scris îngroșat:
<imgsrc="../img/bold.gif" alt="Îngroșat" id="bold" onclick =
"adauga('<b></b>')" />
Asta ne permite sa punem mai multe imagini de -a lungul timpului cu
ajutorul codului aferent HTML fara sa se faca modificari in cadul precedent.
Fișierul "capitol _ modifica" avand ace eași structură, oferă in plus un sistem de
alegere al capitolelor și subcapitolelor existente, când fiind selectat un capitol, afișează
în zona de editare conținutul . Sistemul de algere presupune folosirea a două liste
derulante (combo – box) și are ur mătorul cod:
<table >
<tr>
<td>Capitole: </td>
<td><select name ="capitol_mod">
<?php
while( $r=mysql_fetch_array ($res )){
?>
<option <?php if( $_POST ['capitol_mod' ]==$r['id_capitol' ]) print( "
selected= \"true \" " )?>
value ="<?=$r['id_capitol' ]?>"><?=$r['nume_capitol' ]?></option >
<?php
}
?>
</select ></td>
</tr>
<?php
if((isset( $_POST ['alege_capitol' ]))||(isset( $_POST ['alege_subcapitol' ]))||(i
sset( $_POST ['capitol_mod' ]))||(isset( $_POST ['subcapitol_mod' ]))){
$subsql ="select id_capitol, nume_capitol from capitole where
capitol_parinte=" .$_POST ['capitol_mod' ];
$subres =mysql_query ($subsql );
?>
<tr>
<td>Subcapitole: </td>
<td><select name ="subcapitol_mod"> <?php
while( $r=mysql_fetch_array ($subres )){
$selectat =null;
if($r['id_capitol' ]==$_POST ['subcapitol_mod' ])
$selectat =' selected=true' ;
print( "<option value= \"".$r['id_capitol']. "\"".$selectat .
">".$r['nume_capitol' ]."</option>" );
}
?>
</select ></td>
</tr>
<?php
}
?>
</table >
Fișierul "sterge .php" este responsabil de ștergerea (sub)capitolelor .
Avand o secțiune ce permite selectarea a ceea ce avem de șters, si încă o secțiune ce
verifică dacă în capitolul ce urmează a fi sters mai există și alte subcapitole. Codul în
cauză este următorul:
if(isset ($_P OST ['sterge_capitol' ])){
$sql ="select nume_capitol from capitole where capitol_parinte=
'".$_POST ['capitol_mod' ]."'";
$res =mysql_query ($sql );
$r=mysql_fetch_array ($res );
if(mysql_num_rows ($res )!=0){
print ("<font size= \"5\" color= \"red \">Capitolul ".$r
['nume_capitol' ]." are cel puțin un subcapitol! Sunteți sigur că doriți sa îl
ștergeți?</font>" );
print( "<form action= \"sterge.php \" method= \"post \"><input
type= \"hidden \" name= \"capitol_mod \" value= \"".
$_POST ['capitol_mod' ]."\"><input type= \"submit \" name= \"sterge \"
value= \"Confirmă ștergerea \"></form>" );
}
else{
$sql ="delete from capitole where id_capitol=
'".$_POST ['capitol_mod' ]."'";
$res =mysql_query ($sql ) or die ( "Capitolul " .$_POST ['capitol_mod' ]." nu
a putut fi șter s: ".mysql_error ());
print( "Capitolul a fost șters!" );
}
}
if(isset( $_POST ['sterge_subcapitol' ])){
$sql ="delete from capitole where id_capitol='" .$_POST
['subcapitol_mod' ]."'";
$res =mysql_query ($sql ) or die ( "Subcapitolul " .$_POST
['subcapitol_mod' ]." nu a putut fi șters: " .mysql_error ());
print( "Subcapitolul a fost șters!" );
}
if(isset( $_POST ['sterge' ])){
$sql ="delete from capitole where id_capitol='" . $_POST ['capitol_mod' ]."'
or capitol_parinte='" .$_POST ['capitol_mod' ]."'";
$res=mysql_query ($sql ) or die ( "Capitolul " .$_POST ['capitol_mod' ]." nu
a putut fi șters: " .mysql_error ());
print( "Capitolul a fost șters!" );
Codul pentru alegerea lecției de șters este asemănător cu cel de la
modificarea capitolelor și este următorul:
<form action ="sterge.php" method ="post">
<table >
<tr>
<td>
Capitol:
</td>
<td>
<select name ="capitol_mod">
<?php
while( $r=mysql_fetch_array ($res )){
$selectat =null;
if($_POST ['capitol_mod' ]==$r['id_capitol' ])
$selectat =" selected= \"true \"";
?>
<option value ="<?=$r['id_capitol' ]?>"<?=$selectat ?>><?=$r['nume_capitol
']?></option >
<?php
}
?>
</select >
</td>
<td>
<input type ="submit" name ="sterge_capitol" value ="Șterge Capitol">
</td>
<td>
<input type ="submit" name ="alege_capitol" value ="Arată Subcapitole">
</td>
</tr>
<?php
if(isset( $_POST ['alege_capitol' ])){
$sql ="select nume_capitol, id_capitol from capitole where
capitol_parinte='" .$_POST ['capitol_mod' ]."'";
$res =mysql_query ($sql );
?>
<tr>
<td>
Subcapitol:
</td>
<td>
<select name= "subcapitol_mod">
<?php
while( $r=mysql_fetch_array ($res )){
?>
<option value ="<?=$r['id_capitol' ]?>"><?=$r['nume_capitol' ]?></option >
<?php
}
?>
</select >
</td>
<td>
<input type= "submit" name= "sterge_subcapitol" value = "Șterge
Subcapitol">
</td>
</tr>
<?php
}
?>
</table >
</form >
Fișierul "sfarsit _sesiune.php", termină sesiunea și ofera posibilitatea
unui alt utilizator să se autentifice. Marindu -se gradul de securitate pentru că este
eliminat riscul ca alta persoana să utilizeze același com puter și să intre tot in acea
sesiune. Codul fșierului este următorul:
<?
include ( "autorizare.php" );
session_unset ();
session_destroy ();
print( "La revedere!" );
print ( "<a href= \"index.php \">Către pagina de logare</a>" );
?>
Pentru formatarea textului website -ul utilizeaza un document CSS. Cu
ajutorul lui seuntdefinite culorile, mărimile, poziționările. Când este necesar, stilul luat
din documentul CSS este suprascris cu ajutorul proprietății "style", pe care majoritatea
tagurilor HTML o au.
body { background -color : white;
color : black}
h1 { color : blue;}
h2 { color : blue;}
h3 { background -color : #7a5ada ;
padding -top: 0.4em ;
padding -bottom : 0.4em ;
padding -left: 1.0em ;
padding -right : 1.0em ;
color : white;
text-align : left;
clear :both;}
h4 { color : blue;}
h5 {color : blue;}
h6 { color : blue;}
a.altlink:link { color : #7a5ada ; text-decoration : none; }
a.altlink:visited { color : #5a3aba ; text-decoration : none; }
a.altlink:hover { color : #7a5ada ; text-decoration : underline; }
a.altlink:active { color : #7a5ada ; text-decoration : underline; }
a.submeniu:link { color : #7a5ada ; text-decoration : none;}
a.submeniu:visited { color : #5a3aba ; text-decoration : none;}
a.submeniu:hover { color : #7a5ada ; text-decoration : underline;}
a.submeniu:active { color : #7a5ada ; text-decoration : underline;}
p.sub { margin -left: 15px ;}
Impartirea in directoare dupa cum urmeaza a fisierelor care s -au folosit la
crearea site -ului pentru o gestionare mai buna: fișiere folosite la pagina principală
(index.php, capitol.php etc.) se gas esc in directorul aplicației; imaginile le gasim în
subdirectorul "img", ce are deasemenea un director pentru diacritice; appleturile se afla
în directorul "applet"; fișierele necesare secțiunii de administrare le gasim în
subdirectorul "admin".
Appletur ile sunt de ajutor prin animații pentru o înțelegere mai buna a materiei.
Sunt programe mici ce executa dierse comenzi intr -o pagina Web, care beneficiaza de
eficienta, robustetea si nu in ultimul rand de portabilitatea limbajului Java.
Se pot obtine efec te spectaculoase, cum ar fi miscarea unei bile de -a lungul unui
vector,cu ajutorul figurilor geometrice desenate afisate pentru o anumita perioada de
timp, de la cateva secunde la miimi de secunde.
Pachetele folosite în appleturi sunt: java.applet – pachet standard ce contine clasa java.applet. Reprezinta o superclasă
pentru programe de felul acesta. Poate oferi instrumente pentru crearea appleturilor
și moștenește metodelele ce se apelează la inițializare, pornire, oprire și distrugere; java.awt – Advanced Window Toolkit, include obiectele și metodele care ajuta
la desenarea textului sau altor figuri geometrice.
java.awt.geom – gasim obiecte și metode care ajuta la crearea și prelucrarea
figurilor geometrice, precum Point, Line, Rectangle,
QuadCu rve2D,CubeCurve2D,Ellipse, Arc, GeneralPath. Exista obiecte ce au
marginile rotunde, sau metode care umplu cotinutul cu culori.
java.awt.event.MouseListener –monitorizeaza acțiunile mouse -ului.
java.awt.event.MouseEvent – clasă standard pentru interfețe și evenimente ce
presupun miscari ale mouse -ului.
Desenarea metodelor pachetului java.awt este importat sa fie
inteleasa. Folosite la apelarea metodei paint() , dupa ce appletul a pornit. Folosindu -se
de coordonate carteziene, avand originea in colt stanga sus, acestea crescand catre
dreapta sau in jos.
Urmeaza prezentarea unei secvente de cod din programul “VectorDefinitie”,
aratand componentele vectorului, precum sensul, modului, sau directia acestuia. Aceste
cadre vor fi vizibile pe ecran doar doua secunde, cand acestea se vor termina, cea din
urma va sta cinci secunde, dupa terminarea caruia ciclul va fi reluat:
public void paint(Graphics g){
Graphics2D g2 = (Graphics2D) g;
intx,y;
metrica = g2.getFontMetrics();
y = inaltime – metrica .getHeight();
if(stadiu >=0){
g2.setColor(Color. blue );
g2.draw( linie );
}
if(stadiu >=1){
g2.draw( linieStanga );
g2.draw( linieDreapta );
}
if(stadiu >=4){
g2.setColor(Color. red);
g2.draw( semiacolada1 );
g2.draw( semiacolada2 );
g2.drawString( "10" , latime /2+16, inaltime /2);
}
if(stadiu >=2){
g2.setStroke( dashed );
g2.setColor(Color. black );
g2.drawLine( latime /2, y-metrica .getHeight(), latime /2, 0);
}
if(stadiu >=3){
g2.drawLine( latime /4, 0, latime /4,
y-metrica .getHeight());
g2.drawLine(( latime *9)/10, 0, ( latime *9)/10,
y-metrica .getHeight());
}
if((stadiu ==0)&&( continua )){
g2.setColor(Color. black );
String text = "Directia vectorului" ;
x = latime /2 – metrica .stringWidth( text)/2;
g2.drawString( text, x, y);
stadiu ++;
dormi(2000);
}
else if ((stadiu ==1)&&( continua )){
String text = "Sensul vectorului" ;
x = latime /2 – metrica .stringWidth( text)/2;
g2.setColor(Color. black );
g2.drawString( text, x, y);
stadiu ++;
dormi(2000);
}
else if ((stadiu == 2)&&( continua )){
String text = "Dreapta suport" ;
x = latime /2 – metrica .stringWidth( text)/2;
g2.setColor(Color. black );
g2.drawString( text, x, y);
stadiu ++;
dormi(2000);
}
else if ((stadiu == 3)&&( continua )){
String text = "Alte drepte suport cu aceeasi directie" ;
x = latime /2 – metrica .stringWidth( text)/2;
g2.setColor(Color. black );
g2.drawString( text, x, y);
dormi(2000);
stadiu ++;
}
else if ((stadiu ==4)&&( continua )){
String text = "Modulul vectorului" ;
x = latime /2 – metrica .stringWidth( text)/2;
g2.setColor(Color. black );
g2.drawString( text, x, y);
stadiu = 0;
dormi(5000);
}
}
private void dormi( intsec){
try{
Thread.sleep( sec);
repaint();
}
catch (InterruptedException e){
}
}
dormi() este o functie care "îngheață" threadul appletului timp de cateva
secunde, fiind transmis ca întreg multiplu de 1000. Funcția Thread.sleep() accepta ca
parametru miimi de secundă. În metoda init() , sunt inițializate multiple câmpuri, printre
care “ stadiu”,” inaltime”, “latime”, “semiacolada1”, “semiacolada2” fiind calculate
astfel încât să deseneze în mijloc, indiferent de dimensiunea appletului.
Câmpul “ stadiu” este inițializat cu 0 și se foloseste ca marcaj pentru a știi
figurile și textul ce trebuie desenate. Threadul appletului îngheța pentru doua secunde,
cand acestea sunt puse pe ecran astfel încât utilizatorul poate citi și observa imaginea.
Dupa care se incrementeaza valoarea varia bilei “ stadiu” , pentru a desenarea secvenței
următore și se apeleaza metoda “ repaint()” , care execută metoda “ paint()” a
appletului. Când ajunge la ultima secvență, câmpul “ stadiu” ia valoarea 0 se aștepta 5
secunde, pentru a diferenția repetările cadrel or.
Mai jos este afișat conținutul metodei “ init()” :
public void init(){
addMouseListener( this);
latime = getSize(). width ;
inaltime = getSize(). height ;
stadiu = 0;
Color fundal = new Color(224, 224, 224);
setBackground( fundal );
continua =false ;
origineVector = new Point2D.Float( latime /2,
(inaltime *3)/4);
varfVector =new Point2D.Float( latime /2,inaltime /4);
varfStanga =new Point2D.Float( latime /2-10,inaltime /4+ 10);
varfDreapta =new Point2D.Float( latime /2+10,
inaltime /4+10);
linie = new Line2D.Float( origineVector ,varfVector );
linieStanga = new Line2D.Float( varfVector ,varfStanga );
linieDreapta = new Line2D.Float( varfVector ,varfDreapta );
this.semiacolada1 = new CubicCurve2D.Float( varfVector .x, varfVector .y,
varfVector .x+15, varfVector .y+15, varfVector .x -10, varfVector .y+20,
varfVector .x+15, inaltime /2);
semiacolada2 = new CubicCurve2D.Float( origineVector .x,
origineVector .y, origineVector .x+15, origineVector .y – 15,
origineVector .x-10, origineVector .y-20, origineVector .x+15,
inaltime /2);
float dash1 [] = {5.0f};
dashed = new BasicStroke(1.0f,
BasicStroke. CAP_BUTT ,
BasicStroke. JOIN_MITER ,
10.0f, dash1 , 0.0f);
}
Metoda “ paint()”va desena doar dacă variabila “ continua” este adevărată.
La început fiind falsă, schimbându -și valoarea când este executat click, eveniment ce
este prins de obiect din clasa “MouseEvent”.
Din procedura de mai sus se paote observa că punctul de origine al vectorului
desenat se afla la jumătatea lățimii, la un sfert de marginea de jos, iar vârful este la
jumătatea lățimii și la sfert de marginea de sus. Linia desenată o sa fie verticală,
jumătate cât lungimea appletului în pagină, situată la mijlocul lățimii. Pentru desenarea
vârfului de săgeată, se aleg două puncte, “ vârfStânga” și “vârfDreapta” la o distanță de
10 pixeli la stânga (respectiv dreapta) și 10 pixeli mai jos față de vâr ful vectorului.
Pentru marcarea modulului vectorului, se folosesc două obiecte din clasa
“CubicCurve”, cer pentru inițializare un punct de origine, două puncte intermediare ce
deformează curba și un punct destinație. Cele doua obiecte, “ semiacolada1” și
“semiacolada2” au ca punct de plecare vârful vectorului.
Mai jos se află un screenshot cu appletul în funcțiune:
Applet -ul modulului unui vector
Appletul "TipuriVectori" foloseste aceeași funcție “ dormi ( )” , singura
diferență o reprezinta faptul ca in loc de a avea un singur vector, va trebui să calculam
din nou pozițiile punctelor deoarece trebuie să deplasăm segmentele, pentru a arăta
diferența dintre vectori
Mai jos este un screenshot al acestui applet :
Applet -ul vectorilor liberi
Appletul "SumaVectori", reprezinta însumarea vectorilor folosind
“Metoda Triunghiului” cu ajutorul miscarii unei bile de -a lungul a două trasee, fiind
diferit de appleturile anterioare prin faptul că nu se bazează pe incrementarea
valorilor, ci pe incr ementarea poziției bilei și a timpului foarte scăzut de "înghețare" a
threadului.
Mai jos este prezentat conținutul acestui program:
public void paint(Graphics g){
Graphics2D g2 = (Graphics2D) g;
g2.draw( vector1 );
g2.drawLine(( int)varf1 .x, (int)varf1 .y, (int)varfStanga1 .x,
(int)varfStanga1 .y);
g2.drawLine(( int)varf1 .x, (int)varf1 .y, (int)varfDreapta1 .x,
(int)varfDreapta1 .y);
g2.draw( vector2 );
g2.drawLine(( int)varf2 .x, (int)varf2 .y, (int)varfStanga2 .x,
(int)varfStanga2 .y);
g2.drawLine(( int)varf2 .x, (int)varf2 .y, (int)varfDreapta2 .x,
(int)varfDreapta2 .y);
g2.setColor(Color. red);
g2.fillOval( xBila , yBila , 16, 16);
if((xBila +8<( int)varf1 .x)&&( stadiu == 0)&&( continua )){
xBila ++;
dormi(15);
}
else i f((yBila +8>( int)varf2 .y)&&( stadiu == 0)&&
(continua )){
yBila –;
dormi(15);
}
else if ((stadiu == 0)&&( continua )){
stadiu ++;
xBila = latime /10-8;
yBila = (inaltime *9)/10 -8;
} if((xBila +8<( int)varf2 .x)&&( yBila +8>( int)varf2 .y)&&( stadiu ==
1)&&( continua )){
xBila ++;
yBila –;
g2.setColor(Color. blue );
g2.drawLine(( int)origine1 .x, (int)origine1 .y,
(int)varf2 .x, (int)varf2 .y);
g2.drawLine(( int)varf2 .x, (int)varf2 .y, (int)varf2 .x-10,
(int)varf2 .y+15);
g2.drawLine(( int)varf2 .x, (int)varf2 .y, (int)varf2 .x-15,
(int)varf2 .y+10);
dormi(15);
}
else if ((stadiu == 1)&&( continua )){
stadiu ++;
repaint();
}
if ((stadiu == 2)&&( continua )){
g2.setColor(Color. blue );
g2.drawLine(( int)origine1 .x, (int)origine1 .y,
(int)varf2 .x, (int)varf2 .y);
g2.drawLine(( int)varf2 .x, (int)varf2 .y, (int)varf2 .x-10,
(int)varf2 .y+15);
g2.drawLine(( int)varf2 .x, (int)varf2 .y, (int)varf2 .x-15,
(int)varf2 .y+10);
stadiu = 0;
xBila = latime /10-8;
yBila = (inaltime *9)/10 -8;
dormi(2000);
}
}
Deși poate parea ceva mai complicat, ideea nu este chiar asa: in primul rand
cand câmpul “ stadiu” are valoarea 0,se deseneaza doi vectori ce urmeaza a fi însumati
și se poziționeaza originea bilei mai la stânga cu opt pixeli și mai sus decât primului
vector, iar bila va avea o rază de 16 pixeli. Atat timp cat coordonata x + 8 o sa fie mai
mică decâ t coordonata x a vârfului primului vector, se incrementeaza valoarea x a bilei,
dupa care se "îngheța" threadul appletului pentru 15 milisecunde. Astfel se produce
iluzia deplasării bilei la dreapta de -a lungul primului vector. Cand se ajunge cu opt
pixel i la stânga de vârful primului vector, incrementăm valoarea câmpului “ stadiu” .
Când câmpul “ stadiu” are valoarea 1,se deseneaza doi vectori ce urmeaza a fi
însumati și se poziționeaza originea bilei cu opt pixeli mai la stânga și mai sus decât
originea c elui de -al doilea vector. Atat timp cat coordonata y + 8 este mai mare decât
coordonata y a vârfului celui de -al doilea vector,se decrementeaza valoarea y a bilei și
se apeleaza funcția “ dormi()” pentru 15 milisecunde. Când se ajunge cu opt pixeli
deasupr a vârfului celui de -al doilea vector, se incrementeaza valoarea câmpului
“stadiu” .
Când câmpul “ stadiu” are valoarea 2, se deseneaza doi vectori ce urmeaza a fi
însumati, dar și vectorul sumă, ce isi are originea în originea primului vector și a vârful
în vârful celui de – al doilea vector. Se deseneaza dupa aceea bila cu originea cu opt
pixeli la stânga și opt pixeli mai sus decât originea vectorului sumă. Atat timp cat
coordonata x + 8 a bilei este mai mică decat coordonata x a vârfului și coordonata y + 8
este mai mare decât coordonata y a vârfului vectorului sumă, se incrementeaza valoarea
coordonatei x și se decrementeaza valoarea coordonatei y. Când se ajunge cu centrul
bilei în vârful vectorului sumă, se apeleaza funcția “ dormi()” pentru 2, încât să se facă
diferența între două succesiuni de secvențe. Dupa care se reinițializeaza valoarea
câmpului “ stadiu” cu 0, prin repetarea primului pas.
Pentru a ușura calculul, cei doi vectori ce urmeaza a fi însumati sunt așezați
perpedicula r și s -a ales o lungime egală pentru ambii. Astfel știm că vectorul sumă o sa
fie pe o diagonală de 45 o. Deplasarea bilei fiind ușor de calculat, deoarece se va mișca
mai întâi orizontal, apoi vertical și în cele din urmă oblic.
Precum cele două appletu ri anterioare, există un eveniment de tip “MousEvent”
ce schimbă valoarea variabilei booleene “ continua” , pornind și oprind appletul.
Mai jos este un screenshot al appletului "SumaVectori":
Applet -ul de calcul a sumei a doi vectori
Secvența de cod comună tuturor appleturilor folosite în site
responsabilă cu pornirea și oprirea cadrelor este următoarea:
public void mouseClicked(MouseEvent event ){
if(continua )
continua = false ;
else
continua = true ;
repaint();
}
Pentru a ne folosi de evenimentele generate de mouse, trebuie ca applet -ul să
implementeze interfața MouseListener. Aceasta conține metode pentru tratarea
acțiunilor mouse -ului, cum ar fi mouseEntered, mouse Exited, mousePressed,
mouseReleased sau mouseCli cked. Este important de remarcat că un click înseamnă
producerea altor două evenimente: apăsarea butonului de la mouse (mousePressed) și
eliberarea lui în spațiul ocupat de applet (mouseReleased). Se poate așadar apăsa
butonul și elibera, dar fără să se fa că click. Pentru ca applet -ul să "asculte"
evenimentele generate de mouse, trebuie ca obiectul instanțiat să fie înregistrat ca
listener, cu ajutorul metodei statice addMouseListener(this); . Apelarea aceastei funcții
se va face în metoda init() , asigurându -se astfel că va "asculta" evenimentele încă de la
bun început.
Concluzii:
În concluzie , aplica ția este foarte u șor de utilizat, iar orice
utilizator al acestei aplica ții trebuie sa aib ă cuno știnte minime pentru a o
putea accesa,at ât pe partea de admin c ât și pe cea de utilizator.
Cu ajutorul aplica ției elevii sunt pu și la curent cu lec țiile predate și
pot avea acces și la lec țiile la care nu au fost prezen ți doar acces ând
aplica ția.
Pentru profesori, aplica ția este util ă în sensul c ă pot ad ăuga, modifica
și sterge lecțiile, doar prin autentificarea cu un username și o parol ă.
Cu ajutorul applet -uri-lor se pot prezenta vizual și dinamic diferite
idei, noțuni, teorii, fapt ce ajut ă la înțelegerea mai u șoara a lor, spre
exemplu , în cazul de fa ță, elevul poate vizualiza calculul sumei a doi
vectori, modulul unui vector sau vectorul liber.
Referitor la partea de securitate , cu ajutorul sistemului de criptare
MD5 adminul poate schimba parola de c âte ori consider ă că este necesar
pent ru a p ăstra un nivel de securitate înalt.
Însă, cel mai mare avantaj al aplica ției este că se poate utiliza pentru
diferite subiecte din orice materie și orice domeniu , pentru a posta
informa ții către toate persoanele interesate .
4.Bibliografie
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: Lucrare de Licență [623433] (ID: 623433)
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.
