Noţiuni Fundamentale: 1.1. Definiţii
Noţiuni Fundamentale: 1.1. Definiţii
Noţiuni Fundamentale: 1.1. Definiţii
com;
http://scdsd.bluepink.ro/cursuri
Noţiuni fundamentale
1.1. Definiţii
Informaţia reprezintă un mesaj (de orice natură) care aduce o precizare într-o problemă ce
comportă un anumit grad de incertitudine.
O mulţime este informaţională dacă elementele sale sunt informaţii. Ea se poate defini în:
Datele sunt numere, caractere, imagini sau alte reprezentări simbolice, care pot fi folosite de
către om sau pot fi înregistrate în memoria calculatorului şi prelucrate de acesta, sau transmise
pe o linie de comunicaţie.
Datele în sine nu au „semnificaţie”. Atunci când datele sunt interpretate de către un anumit
sistem de prelucrare, ele devin informaţie.
Algoritmul este un sistem de reguli care transformă informaţia iniţială în una finală, trecând
printr-un şir de informaţii intermediare.
1
Noţiuni fundamentale
________________________________________________________________
Calculatorul reprezintă un ansamblu complex de echipamente electronice care, pe baza unor
date de intrare şi a unor programe furnizate şi elaborate de om, generează la ieşire informaţii. El
este în acelaşi timp un mijloc de prelucrare automată a informaţiilor, prelucrându-le sub o
formă cuantificată şi rezolvând problemele în conformitate cu anumiţi algoritmi.
Prelucrarea implică:
1. Culegerea datelor;
2. Prelucrarea propriu-zisă;
3. Distribuirea rezultatelor prelucrării.
Prelucrarea automată a datelor presupune existenţa unui proces de reglare între Introducerea
datelor, Prelucrarea datelor, Extragerea informaţiei:
2
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
1822 - Charles Babbage, inventator englez, proiectează primul motor diferenţial matematic,
în scopul uşurării realizării tabelelor matematice ce erau folosite în industrie, navigaţie şi
domeniul bancar. Babbage nu a putut să realizeze niciodată acest proiect datorită lipsei de
tehnologii care să-i producă piesele componente la precizia dorită. În cinstea sa, la London’s
Science Museum există un exemplar al acestui motor diferenţial realizat în 1990 după proiectul
amănunţit pe care inventatorul l-a lăsat.
1884 - Herman Hollerith, inventator american, realizează prima maşină automată de calculat
pe bază de cartele perforate.
1926 - Dr. Julius Lilienfield creează conceptul primului tranzistor folosit pentru amplificare
(vacuum tubes).
1936 - Alan Turing foloseşte noţiunea de “maşină Turing universală'' pentru a descrie un
calculator universal, care poate executa orice program. Programele erau stocate în memoria
calculatorului, reprezentate ca şiruri de numere.
1939 – Este proiectat primul calculator digital: John Atanasoff, lector la IOWA State
University, împreună cu doctorandul Clifford Berry, au pus bazele primului computer digital.
Pentru prima oară s-a pus problema reprezentării numerelor folosind condensatori pentru a
stoca sarcini electrice.
3
Noţiuni fundamentale
________________________________________________________________
1944 - Este realizat primul calculator de scară mare, Mark I, conceput de Howard Aiken,
profesor la Harvard University. Computerul Mark I a fost cel mai mare calculator realizat până
atunci. Compus din peste 750 000 piese şi cântărind peste 5 tone, el putea să adune, să scadă, să
înmulţească sau să împartă două numere (până la 23 digiţi) în numai câteva secunde.
1945 - John von Neumann analizează starea de fapt a calculatoarelor şi scrie un raport intitulat
``First Draft of a Report on the EDVAC'' (Prima ciornă a unui raport despre EDVAC), în care
sugerează o arhitectură revoluţionară: programul nu mai este reprezentat de felul în care sunt
cuplate unităţile funcţionale, ci este stocat în memorie, fiind descris folosind un limbaj numit
cod-maşină. În cod-maşină, operaţiile de executat sunt codificate sub forma unor numere
numite instrucţiuni. Programul de executat este descris printr-un şir de instrucţiuni, care se
execută consecutiv. Caracteristica principala a masinii von Neuman este ca functionarea ei este
un proces secvential: la un moment dat se executa o singura instructiune, iar executarea unei
instructiuni poate sa inceapa numai dupa ce s-a incheiat executarea celei precedente. In toate
operatiile participa unitatea centrala si registrii acesteia.
1946 – Este realizat calculatorul EDVAC (the Electronic Discrete Variable Computer), mai
puternic. Arhitectura acestui calculator şi modul de stocare a programelor sunt asemănătoare
cu cele ale calculatoarelor de astăzi.
1954 - Apare primul limbaj de programare - limbajul FORTRAN, inventat de John Backus,
angajat al IBM.
1958 - Jack Kilbz (angajat laTexas Instruments) inventează primul circuit integrat.
1964 - Tom Kurtz şi John Kemeny (profesori la Dartmouth University) creează limbajul de
programare BASIC (Beginners All Purpose Szmbolic Instruction Language), marcând
începutul programării intuitive.
1974 - Marcian Hoff proiectează primul microprocessor: circuitul 4004, ce opera pe 4 biţi şi
conţinea peste 2.000 de tranzistoare. Proiectul lui Hoff a fost respins de companiile
producătoare de atunci.
1974 - Intel realizează primul microprocesor 8080 ce opera pe 8 biţi. O serie de alte companii
ca Motorola şi Zilog au început să realizeze o serie de cipuri similare.
1975 - Se vinde primul computer Altair. Acesta era un calculator cu procesor 8080 şi putea fi
asamblat de oricine. Costa 439USD. Bill Gates şi Paul Allen au dezvoltat o versiune de BASIC
pentru Altair punându-se astfel bazele companiei Microsoft
4
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
1981 - IBM lansează primul PC (Personal Computer). Costa 1365USD. Urmează calculatoarele
286 (1982); 386 (1985); 486 (1989); Pentium (1993); Pentium Pro (1995); Pentium II (1997);
Pentium III (1999); Pentium IV (2000).
1.3.1. Clasificare
5
Noţiuni fundamentale
________________________________________________________________
• Cele mai cunoscute calculatoare numerice neprogramabile sunt obişnuitele calculatoare
de birou sau de buzunar cu un număr fix de operaţii, în care introducerea datelor
numerice şi a operaţiilor se face direct de către utilizator, de la tastatură. Există însă şi
numeroase alte dispozitive de calcul numeric neprogramabile, majoritatea fiind
încorporate în diferite echipamente electrocasnice (telefoane, televizoare, maşini de
spălat, maşini de gătit cu microunde etc) sau în echipamentele de automatizare
industriale şi din alte domenii.
• Calculatoarele numerice programabile sunt cele care funcţionează pe baza unui
program introdus în memoria calculatorului şi care poate fi modificat. Această ultimă
caracteristică este esenţială pentru a le distinge de cele neprogramabile. În realitate,
calculatoarul neprogramabil funcţionează şi el pe baza unui program, dar acesta este
impus de fabricant şi nu poate fi modificat.
În prezent, când se foloseşte cuvântul calculator fără a se specifica din ce categorie face
parte şi această categorie nu rezultă din context, se subînţelege că este vorba de un
calculator numeric programabil.
În funcţie de mărime, posibilităţi de prelucrare, preţ şi viteză de operare, există patru categorii
de sisteme de calcul: supercalculatoare, sisteme principale (mainframe), minicalculatoare şi
microcalculatoare.
6
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
Observaţii:
UCC + UAL alcãtuiesc UCP (unitatea centralã de prelucrare = procesorul central).
UCP + MEM = UC (unitatea centralã).
Observaţie:
“ Calculatoarele electronice nu sunt supraomeneşti. Ele se strică. Fac greşeli – periculoase
uneori. Nu au nimic magic şi cu siguranţă nu sunt spirite sau suflete din mediul înconjurător.
Cu aceste rezerve ele rămân însă una din cele mai uimitoare şi tulburătoare realizări ale
omului, pentru că ne amplifică capacitatea intelectuală,…şi nu ştim unde ne vor duce până la
urmă propriile noastre minţi. ” Toffler, A., Al treilea val, Ed.Politică, Bucureşti, 1983, p.236.
7
Noţiuni fundamentale
________________________________________________________________
2.BAZELE MATEMATICE ALE CALCULATOARELOR
Informaţiile prelucrate prin sistemele de calcul sunt de diverse tipuri dar ele sunt
reprezentate la nivel elementar sub formă binară. O informaţie elementară
corespunde unei cifre binare (0 sau 1) numită bit. O informaţie mai complexă (un
caracter, un număr etc.) se exprimă printr–o mulţime de biţi.
Datele sunt operanzii asupra cărora acţionează operaţiile (prelucrările), sau sunt
produse de către acestea. O adunare, de exemplu, se aplică la doi operanzi, furnizând
un rezultat care este suma acestora.
• BCD - Binary Coded Decimal, prin care un caracter este codificat pe 6 biţi;
• ASCII - American Standard Code for Information Interchange (8 biţi).
Rezulta 256 de caractere codificate cu numere intre 0 si 255;
• UNICODE – 16 biti; 2 la a 16-a; 65536 caractere cuprinse intre 0 si 65535;
8
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
9
Noţiuni fundamentale
________________________________________________________________
Codificarea se realizează cu ajutorul unui algoritm de conversie asociat tipului de
dată corespunzător. Operaţiile aritmetice (adunare, scădere, înmulţire, împărţire) care
se pot aplica asupra acestor date se efectuează de regulă în aritmetica binară. Figura
de mai jos arată regulile operaţiilor binare.
a) Zecimal - Binar
Conversia se efectuează prin împărţiri întregi succesive cu 2, până când câtul devine
nul. Numărul binar se obţine scriind resturile în ordinea inversă.
Exemplu: Conversia lui 238:
238 : 2 = 119 rest 0
119 : 2 = 59 rest 1
59 : 2 = 29 rest 1
29 : 2 = 14 rest 1
14 : 2 = 7 rest 0
7:2 = 3 rest 1
3:2 = 1 rest 1
1: 2 = 0 rest 1
Considerând resturile de jos în sus se obţine 23810 = 111011102
b) Binar - Zecimal
10
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
c) Zecimal - Octal
Conversia se efectuează prin împărţiri întregi succesive cu 8, până când câtul devine
nul. Numărul octal se obţine scriind resturile în ordinea inversă.
Exemplu: Conversia lui 238:
238 : 8 = 29 rest 6
29 : 8 = 3 rest 5
3 : 8 = 0 rest 3
Considerând resturile de jos în sus se obţine 23810 = 3568
d) Octal - Zecimal
Conversia se reduce la însumarea puterilor lui 8: 3*82+5*81+6*80= 238
e) Zecimal - Hexazecimal
Conversia se efectuează prin împărţiri întregi succesive prin 16. Testul de oprire
corespunde situaţiei câtului nul. Numărul hexazecimal obţinut considerând resturile
obţinute de la ultimul către primul. OBS: 0,1,2,3,4,5,6,7,8,9, A(10), B(11).....F(15).
e) Hexazecimal - Zecimal
Conversia se reduce la însumarea puterilor lui 16.
f) Binar - Octal
Conversia se realizează înlocuind de la dreapta la stânga, grupele de 3 biţi prin cifra
octală corespunzătoare. Dacă numărul de biţi nu este multiplu de 3 se completează
configuraţia binară la stânga cu zerouri.
Exemplu: 101011111= 537 in octal
g) Octal - Binar
Conversia corespunde dezvoltării fiecărei cifre octale în echivalentul ei binar pe 3
biţi.
Exemplu:
278 = 010’1112 deoarece 28 = 0102 si 78 = 1112.
h) Binar - Hexazecimal
Conversia se realizează înlocuind de la dreapta la stânga, grupele de 4 biţi prin cifra
hexazecimală corespunzătoare. Dacă numărul de biţi nu este multiplu de 4 se
completează configuraţia binară la stânga cu zerouri.
Exemplu: 1010112= 2B16 .
11
Noţiuni fundamentale
________________________________________________________________
i) Hexazecimal - Binar
Conversia corespunde dezvoltării fiecărei cifre hexazecimale în echivalentul ei binar
pe 4 biţi.
Exemplu:
3A16 = 0011’10102 deoarece 316= 00112 si A16=10102.
Tema: Numerele 7456; 559; 339; 4541 se vor reprezenta (manual!!!!) in binar,
octal si hexazecimal iar rezultatele obtinute vor fi trecute inapoi in zecimal,
conform exemplelor de mai sus din curs. Verificarea se va face cu start;
programs,accessories; calculator pe scientific.
12
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
Se poate remarca faptul că bitul cel mai din stânga (bitul de semn) este întotdeauna 0
pentru numere pozitive şi 1 pentru cele negative şi aceasta pentru fiecare din cele trei
reprezentări, conform tabelului următor.
13
Noţiuni fundamentale
________________________________________________________________
Reprezentarea în complement faţă de 1 recunoaşte două zerouri (+0 si –0), dar este
simetrică, deoarece aceleaşi numere pozitive şi negative sunt reprezentabile, iar
această situaţie se poate uşor realiza electronic.
• In complement faţă de 1 sau faţă de 2, operaţiile aritmetice sunt avantajoase,
deoarece operaţia de scădere se realizează prin adunarea complementului.
• Intr-o adunare în complement faţă de 1, o cifră de transport către ordinal superior
generată de bitul de semn trebuie adăugată la rezultatul obţinut,
• Spre deosebire de complementul faţă de 2, când această cifră de transport se ignoră.
• In complement faţă de 1 sau 2 nu se produce depăşire de capacitate decât în cazul în
care cifrele de transport generate de bitul de semn şi de bitul anterior acestuia sunt
diferite.
Bitul de semn
0 1 1 1 1 1 1 1 = 127
0 0 0 0 0 0 1 0 = 2
0 0 0 0 0 0 0 1 = 1
0 0 0 0 0 0 0 0 = 0
1 1 1 1 1 1 1 1 = −1
1 1 1 1 1 1 1 0 = −2
1 0 0 0 0 0 0 1 = −127
1 0 0 0 0 0 0 0 = −128
Numere ntregi reprezentati in complement fata de 2, pe 8 biti
14
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
Sistemul de calcul prelucrează datele numai dacă este programat. Programul constă dintr-o
succesiune de instrucţiuni care converg, pe baza unui algoritm, către soluţia problemei ce
urmează să se rezolve. Calculatorul este privit ca un instrument folosit pentru rezolvarea
problemei respective, efectuând anumite acţiuni asupra unor date. Fiecare sarcină pe care o
indeplineşte se caracterizează printr-un set de date specific sarcinii respective şi printr-un
algoritm care indică acţiunile ce trebuie efectuate asupra datelor pentru îndeplinirea acestei
sarcini. Ca urmare, programul trebuie să conţină două categorii de informaţii:
a. Descrierea datelor de intrare, de ieşire şi auxiliare care vor fi prelucrate;
b. Descrierea algoritmului aplicat pentru prelucrarea acestor date.
În anul 1973, John Wirth a enunţat că programul poate fi caracterizat prin relaţia:
Relaţia pune în evidenţă legătura strânsă dintre date şi algoritm şi subliniază importanţa care
trebuie să li se acorde ambelor componente la elaborarea unui program.
Observaţie:
Programele de sistem sunt specifice unor anumite tipuri de sisteme de calcul (există o
corespondenţă hard–soft).
15
Noţiuni fundamentale
________________________________________________________________
• Sintaxa - reprezintă ansamblul regulilor prin care pornind de la simboluri de bază se construiesc
structuri compuse. Se defineşte gramatica ca fiind mulţimea regulilor sintactice;
• Semantica – indică sensul construcţiilor sintactice şi corespunde unui set de reguli care determină
semnificaţia instrucţiunilor limbajului;
• Pragmatica – este capacitatea de a utiliza construcţiile sintactice şi semantice.
Există limbaje generale ( Pascal, C), de prelucrare a bazelor de date ( COBOL, dBASE, SQL), orientate spre
obiect ( SmallTalk, C++, Java), editoare de texte şi hiper-texte ( HTML, TeX, PostScript ), de nivel scăzut (
Assembler ), folosite în inginerie, matematică, fizică ( Fortran, Matlab, Mathematica) şi lista poate
continua.
Fiecare limbaj are avantaje şi dezavantaje, însă se remarcă tendinţa de apropiere de limbajul natural
formalizat, de simplificare a construcţiilor foarte des folosite, de a structura în mod logic diverse secţiuni ale
programelor scrise în limbajul respectiv, de modularizare şi de a pune la dispoziţia programatorului
biblioteci vaste ( de exemplu Borland VCL - Visual Component Library, ierarhia de clase de la IBM -
VisualAge sau MFC - Microsoft Foundation Classes , Java API – Java Aplication Programming Interface).
a. Procedurale sau neprocedurale - utilizatorul descrie pas cu pas algoritmul de rezolvare; unitatea
de bază este procedura sau funcţia; se aplică principiul programării structurate prin care, orice
procedură poate fi reprezentată prin cele trei structuri fundamentale din algoritmică: secvenţială
(liniară), alternativă (de selecţie), ciclică (repetitivă). Exemple: Algol60, Fortran,Pascal, C, PL/1,
Ada etc.
b. Modulare - Programul se descompune în module. Acestea sunt independente (atomice). Principiul
de bază este încapsularea. Modulul are două componente: interfaţa şi implementarea. Exemple:
Modula, Ada etc.
c. Orientate spre obiect - Obiectul este o entitate care conţine stare (informaţie) şi comportament şi
poate reprezenta orice entitate din lumea reală sau virtuală. Programul este un ansamblu de obiecte
în interacţiune. Exemple: Ada 95, boo, C++ , C#, ColdFusion, Common Lisp, CorbaScript, COOL
(Object Oriented COBOL), D, Delphi, ECMAScript (JavaScript), Eiffel, F-Script programming
language, Fortran 2003, Gambas, IDLscript, incr Tcl, J, Java, JavaScript, Lexico, Objective-C, Perl
5, PHP, Simula, Smalltalk, Visual Basic / VB.NET etc.
d. Specifice programării funcţionale: Programul este un ansamblu de funcţii şi apeluri recursive;
funcţiile sunt folosite la descrierea datelor şi codului; nu există instrucţiuni de atribuire.
Fundamentul matematic este dat de expresiile lambda. Exemple: Lisp, ML etc
e. Specifice programării logice - În programarea logică programul constă din fapte şi reguli.
Limbajele sunt declarative - se indică modul cum trebuie să arate soluţia problemei. Fundamentul
matematic este asigurat de sistemele logice formale: logica predicatelor de ordinul 1 precum şi logici
modale, temporale sau monotonice. Exemplu: Prolog, Mercury, Visual Prolog, Oz, Metaphor etc.
f. Specifice programării concurente şi distribuite – Ada, Alef, ChucK, Cilk, Comega, Concurrent
Pascal, E, Erlang, Java, Joule, Limbo, Mozart/Oz, Occam, Pict, Promise, SR etc.
16
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
g. Specifice bazelor de date: SQL, dBase, FoxPro, MS SQL, MySQL, MS Access etc.
h. Specifice programării Web: ASP, ASP.NET, PHP, JSP; Limbaje de scripting pe server/client:
VBScript, JavaScript, JavaBeans, EJB, Cold Fusion, PERL, PHP etc.
i. Specifice programarii bazate pe agenţi: Telescript, Agents, AgentTcl etc.
Limbajul maşină:
Limbajul de asamblare:
• a apărut începând cu anul 1950 şi reprezintă o formă mai prietenoasă a limbajului maşină;
• programele se scriu în mod text (mnemonice) pentru ca apoi să fie traduse într-o formă binară,
corespunzătoare limbajului maşină;
• limbajul de asamblare este tradus în limbaj maşină de către assembler;
• limbajele de asamblare încă solicită programatorului cunoaşterea de multe detalii hardware;
• este specific anumitor tipuri de calculatoare;
Observaţie:
Limbajul de asamblare împreună cu limbajul maşină formează categoria limbajelor de nivel scăzut (low-
level languages).
• permit formularea soluţiilor problemei de rezolvat în termeni mai apropiaţi de cei folosiţi de oameni;
sunt mult mai apropiate de limbajul uman;
• au fost concepute pentru a permite programării să fie mult mai uşoară şi cu mai puţine erori ;
• programatorul nu trebuie să cunoască detalii cu privire la structura internă a unui anumit tip de
calculator;
• după modul cum se face transpunerea programelor evaluate, există două tipuri de astfel de
componente software specializate:
1. interpretor: traduce succesiv instrucţiunile de nivel înalt într-o formă intermediară care este
apoi executată; poate execută un program imediat.
2. compilator: traduce instrucţiunile de nivel înalt direct în limbaj maşină. Compilatorul
necesită mai mult timp. Programele produse de compilator rulează mul mai rapid decât cele
produse de interpretor.
17
Noţiuni fundamentale
________________________________________________________________
• majoritatea programelor evolute au la dispoziţie atât compilator cât şi interpretor: interpretorul se
foloseşte în timpul realizării unui program pentru testarea unor mici secţiuni ale programului. Unele
limbaje evoluate sunt concepute să lucreze numai cu interpretor (BASIC, LISP).
• dacă limbajele sunt standardizate, atunci fiecare producător de calculatoare (procesoare) va putea să
realizeze compilatorul care să respecte standardele şi să traducă programele în limbajul maşină
specific producătorului: devine posibil ca un program, respectându-se aceste standarde, să poată fi
compilat pe diverse calculatoare şi apoi executat.
Prin scrierea unui program într-un limbaj evoluat se face o economie imensă de timp. Programatorul pierde
mai puţin timp pentru scrierea într-un limbaj mult mai apropiat de cel uman decât dacă acelaşi program ar fi
scris în limbaj maşină. Timpul de compilare al programului este de ordinul secundelor.
În figura 1.1. sunt prezentate primele trei generaţii de limbaje de programare şi modul cum interacţionează
acestea cu calculatorul.
În ultimii ani, limbajul Java dezvoltat de compania americană Sun Microsystems (SUN - Standford
University Network – www.sun.com) a devenit unul dintre cele mai populare limbaje de programare.
Principalele sale calităţi sunt uşurinţa de învăţare, existenţa unor instrumente de dezvoltare puternice care
permit programatorilor să realizeze rapid şi eficient aplicaţii complexe şi posibilitatea de a rezolva un număr
vast de probleme atât din sfera comercială cât şi din cea ştiinţifică.
Primii paşi în realizarea limbajului Java au fost făcuţi în aprilie 1991 de către o echipă de cercetare de la Sun
Microsystems condusă de James Gosling (autor al editorului emacs şi al sistemului de ferestre grafice
NeWS). Iniţial, scopul echipei era să creeze software destinat produselor electronice comerciale. Aceste
echipamente se definesc ca mici, portabile, distribuite şi lucrând în timp real. De la aceste aparate se cer în
general fiabilitate şi uşurinţă în exploatare. Foarte curând, echipa a constatat că un produs software destinat
unei astfel de pieţe poate avea succes doar dacă este dezvoltat într-un mediu independent de platforma
hardware. Grupul de cercetare a încercat să extindă instrumente de dezvoltare bazate pe limbajul C++ dar
aceste încercări s-au soldat cu un eşec datorită complexităţii acestui limbaj. Confruntaţi cu această problemă,
membrii echipei au decis să realizeze un limbaj care să posede caracteristicile de care aveau nevoie: mai
flexibil, mai simplu şi mai portabil. Aşa s-a născut Java, limbaj de programare capabil să ruleze pe orice
18
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
dispozitiv conectat la o reţea: staţii de lucru Sun, PC-uri, calculatoare MacIntosh, PDA-uri (Personal Digital
Assistant), telefonie mobilă şi chiar frigidere, aparate de prăjit pâine etc.
Numele iniţial al limbajului a fost Oak (stejar), copac care creştea în faţa biroului lui James Gostling.
Ulterior, s-a descoperit că numele fusese deja folosit în trecut pentru un alt limbaj de programare aşa că a
fost abandonat şi înlocuit cu Java.
Pe data de 23 mai 1995, după patru ani de cercetare şi dezvoltare, firma Sun Microsystems a lansat oficial
prima versiune a limbajului Java, când a făcut publică şi specificaţia noului limbaj, la SunWorld, în San
Francisco.
În aceeaşi perioadă, Marc Andreessen, student care lucra la National Center for Supercomputing
Applications (NCSA), a creat primul browser pentru World Wide Web, Mosaic 1.0. Pe la mijlocul anului
1994, creatorii lui Java au găsit World Wide Web-ul ca fiind foarte promiţător din punctul de vedere al
limbajului pe care îl dezvoltau. Tehnologia dezvoltată de Java era perfect pregătită pentru acest mediu, în
special datorită capacităţilor sale de a rula pe mai multe platforme şi facilităţilor de comunicare prin reţele.
Cel mai important lucru este că a introdus ceva ce nu mai fusese posibil până atunci: posibilitatea de a rula în
siguranţă aplicaţii de pe serverele Web pe calculatoarele utilizatorilor.
În Noiembrie 1995 a fost făcută disponibilă, pe site-urile firmei Sun Microsystems, prima versiune de Java
(beta), fiind căutată de zeci de mii de persoane şi sute de firme. Prima versiune populară de Java a fost Java
1.02, care a apărut în 1996, distribuită de Sun sub forma JDK1.02 (Java Development Kit). Aceasta conţinea
compilator şi interpretor Java precum şi alte unelte utile programatorilor (depanator, generator de
documentaţie, dezasamblor). Iniţial au existat versiuni pentru sistemele de operare Sun, Windows 3.x/95 şi
MacOS. Ulterior au apărut versiuni şi pentru alte sisteme de operare (alte UNIX-uri, Linux etc).
În 1997 a apărut JDK1.1, beneficiind de multe îmbunătăţiri şi extensii. Unele programe compilate cu
versiuni 1.02 ale compilatorului nu sunt compatibile cu Java1.1 decât dacă sunt recompilate. Un program sau
applet Java 1.1 nu va rula într-un mediu Java1.02. Java 1.1.5. a adus îmbunătăţiri în interfaţa utilizator,
tratarea evenimentelor şi o mai mare consistenţă a limbajului.
În decembrie 1998 a fost lansată noua versiune Java 2, care introduce câteva facilităţi avansate: Swing – noi
funcţii care permit crearea unei interfeţe utilizator grafice, fie în stilul unui anumit sistem de operare, fie în
noua prezentare grafică Java, numită Metal; drag and drop – posibilitatea de a transfera interactiv
informaţii între diferite aplicaţii sau dintr-o parte a interfeţei programului în alta; revizuirea completă a
funcţiilor din Java, în sensul alinierii acestora la posibilităţile audio ale altor limbaje etc.
Partea de control nu a fost neglijată: cu toate că versiunea principală nu este concepută pentru uz industrial
sau în dispozitive cu capacităţi restrânse, Sun a lansat două linii paralele de Java, PersonalJava, pentru
dispozitive limitate ca şi capacităţi dar cu posibilităţi de afişare şi EmbeddedJava, pentru dispozitive limitate
ca şi capacităţi sau resurse şi fără nici un mijloc de afişare:
19
Noţiuni fundamentale
________________________________________________________________
coduri); este printre primele limbaje care aduce tehnologia orientată spre obiect în astfel de
dispozitive. Java îsi menţine portabilitatea şi în acest domeniu, tocmai datorită faptului ca el rulează
în interiorul unei maşini virtuale. PersonalJava include o maşină Java virtuală, un set de librării de
bază şi un set de librării opţionale, care pot fi folosite după preferinţă. Pachetele sunt concepute
modular şi scalabile, permiţând, de exemplu, folosirea unor dispozitive diferite de afişare sau
protocoale diferite de reţea.
Din 1995 şi până în prezent, lumea Java trăieşte într-o continuă agitaţie, apărând alte şi alte inovaţii şi
modificări ale limbajului. Alături de JDK - Java Development Kit (http://java.sun.com/j2se/1.5.0/index.jsp),
pus la dispoziţie de compania Sun Microsystems, au apărut noi medii de dezvoltare a aplicaţiilor Java: Sun
ONE Studio 5 (http://wwws.sun.com/software/sundev/jde/); JCreator (http://www. jcreator. com/); BlueJ
(http://www.bluej.org/); Borland JBuilder (http://www. borland. com/products/downloads/
download_jbuilder. html); RealJ (http://www.realj. com/); DrJava (http://drjava. sourceforge. net/);
NetBeans IDE (http://www.netbeans.org/); JIPE (http://jipe.sourceforge.net/); Visual Age for Java
(http://www7b.software. ibm.com/ wsdd/zones/vajava /) etc.
O caracteristică particulară a programelor Java este că sunt în acelaşi timp interpretate şi compilate.
Compilarea constă în traducerea programelor scrise în limbajul Java într-un limbaj intermediar numit
bytecode (cod de octeţi). Acest limbaj intermediar este indepenent de platformă şi este interpretat de un
interpretor Java (Java Virtual Machine – JVM). Interpretorul execută fiecare instructiune din bytecode pe
calculatorul ţintă. Compilarea are loc o singură dată, pe când interpretarea este un proces care se repetă de
fiecare dată când un program Java este lansat în execuţie. Instructiunile bytecode sunt de fapt instrucţiunile
în cod maşină pentru Maşina Virtuală Java (Java Virtual Machine). Orice interpretor Java, fie el java.exe sau
un browser Web capabil să ruleze appleturi, este de fapt o implementare a maşinii virtuale Java.
Java bytecode face posibilă filozofia “scrie odată, execută oriunde - write once, run anywhere” care a fost şi
este, scopul urmărit de către dezvoltatorii limbajului. Un program Java poate fi compilat pe orice calculator
pe care este instalat un compilator Java, după care fişierele bytecode pot fi executate sub orice implementare
a maşinii virtuale Java.
O platformă este definită drept contextul software sau hardware în care rulează un program. Exemple de
platforme sunt Windows 2003 Server, Windows XP, Linux, Sun Solaris etc. Majoritatea platformelor pot fi
20
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
descrise ca o combinaţie de componente hardware şi software. Platforma Java este o platformă exclusiv
software care rulează pe diverse platforme hardware.
Aceste componente asigură legătura dintre un program scris utilizând limbajul Java şi o platformă harware
oarecare. Rolul platformei Java este să asigure independenţa programului de platforma hardware pe care
acesta rulează, aşa cum se poate vedea în figura 1.2.
Maşina virtuală Java (JVM) este un calculator abstract, care stă la baza realizării limbajului de programare
Java şi reprezintă componenta tehnologiei Java pe care se bazează posibilitatea rulării unui program pe o
multitudine de platforme hardware. Prima variantă a JVM a fost concepută de James Gosling în anul 1992,
după care a fost dezvoltată de o echipă de la firma Sun Microsystems, cu contribuţii de la colaboratori din
întreaga lume. In prezent JVM a fost implementată pe o mare varietate de platforme: Windows , Linux ,
MacOS , Solaris etc.
Ideea de bază a autorilor limbajului Java a fost ca acesta să fie independent de platformă, adică independent
de tipul calculatorului pe care lucrează şi de sistemul de operare al acestuia.
Pentru a se realiza portabilitatea unui program (posibilitatea de transfer de pe o platformă pe alta) există
două metode clasice:
1. Programul este scris într-un limbaj de nivel superior (de exemplu în C, C++, Pascal etc.), care nu
depinde de tipul de calculator folosit şi apoi este compilat, adică este tradus într-un program binar,
21
Noţiuni fundamentale
________________________________________________________________
destinat pentru un anumit tip de calculator. Acest program poate fi executat direct de către
procesorul calculatorului respectiv, deoarece foloseşte setul de instrucţiuni specific acestuia.
Compilarea se face de către un program special, numit compilator. Trebuie să existe câte un
compilator separat pentru fiecare limbaj şi pentru fiecare tip de calculator destinaţie, iar programele
binare rezultate din compilare nu pot fi transmise între calculatoare de tipuri diferite. În cazul
programelor compilate, în timpul execuţiei acestora, în memoria calculatorului nu se găseşte
programul sursă, scris în limbaj de nivel superior, ci doar programul binar rezultat după compilare.
2. În loc ca programele să fie compilate, ele pot fi interpretate: în timpul execuţiei programului, în
memoria calculatorului se găseşte chiar programul sursă în limbaj de nivel superior, împreună cu un
program binar numit interpretor. Acesta parcurge instrucţiunile programului sursă şi le
interpretează, adică le traduce în instrucţiuni binare, aparţinând setului de instrucţiuni al
procesorului şi le transmite pe rând procesorului pentru a fi executate. Exemple de limbaje
interpretate sunt: limbajul Basic, limbajele de comandă ale sistemelor de operare, limbajele de
comandă ale unor sisteme de gestiune a bazelor de date etc. Limbajele interpretate prezintă unele
avantaje (programele sunt mai uşor de exploatat şi depanat), dar prezintă şi dezavantajul că
executarea programelor se face mai lent decât în cazul celor compilate. Din această cauză, atunci
când viteza de execuţie este esenţială, se preferă programele compilate.
În cazul limbajului Java, portabilitatea este asigurată la nivelul codului de octeţi (byte-code-ului) rezultat
în urma compilării. Aceasta s-a obţinut prin adoptarea unei soluţii de compromis între cea a programelor
compilate şi a programelor interpretate.
Maşina virtuală Java, este un calculator abstract pentru care s-au specificat setul de instrucţiuni al
procesorului, setul de regiştri şi organizarea memoriei. Limbajul Java în sine este un limbaj de nivel
superior, asemănător lui C++.
Procesul de execuţie a unui program Java este descries in Figura 1.3: Programul scris în Java este compilat.
Compilatorul Java generează un program binar numit cod de octeţi (bytecode) care este destinat maşinii
virtuale Java, adică foloseşte setul de instrucţiuni şi organizarea memoriei specifice acestei maşini. În cazul
general, maşina fizică pe care se execută programul are alt set de instrucţiuni şi altă structură decât maşina
virtuală Java. Deoarece codul de octeţi destinat maşinii virtuale Java trebuie interpretat, în timpul execuţiei,
în memoria calculatorului se vor găsi codul de octeţi al programului care trebuie executat şi interpretorul
Java, adică un program care interpretează acest cod de octeti. Avantajul este că interpretarea codului de
octeţi este mult mai rapidă decat cea a programului sursă, deşi totuşi ceva mai lentă decât executarea unui
program binar compilat special pe maşina pe care se execută.
Observaţii:
1. Deoarece maşina virtuală Java este un calculator abstract universal, nu este deloc obligatoriu ca
programele pentru această maşină să fie scrise în limbajul Java. Pentru orice limbaj de nivel superior
se pot realiza compilatoare care să genereze cod de octeţi pentru maşina virtuală Java, acest cod
putând fi apoi executat pe orice calculator pe care există un interpretor Java. Astfel de compilatoare
există deja pentru diferite limbaje, ceea ce crează perspectiva ca maşina virtuală Java să devină un
mijloc general de asigurare a portabilităţii programelor la nivel de cod de octeţi, indiferent de
limbajul în care ele au fost scrise.
22
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
2. Unii fabricanţi de microprocesoare (în frunte cu firma Sun Microsystems) au trecut deja la realizarea
hardware a maşinii virtuale Java, precum calculatoare a căror structură şi cod de instrucţiuni respectă
specificaţiile maşinii virtuale Java. Ele pot executa direct codul de octeţi, fără a mai avea nevoie de
un interpretor, ceea ce măreşte viteza de execuţie a programului.
23
Noţiuni fundamentale
________________________________________________________________
3.3.4. Terminologie
24
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
JDK – Java Development Kit conţine instrumentele folosite pentru dezoltarea de software, în el fiind inclus
şi un mediu de execuţie JRE (Java Runtime Environment). Pe lângă maşina virtuală Java, JDK mai conţine
compilatorul de Java, un instrument de vizualizare a applet-urilor, un generator de documentaţii, utilitare
specifice mediului de dezvoltare Java şi exemple de programe Java.
SDK – este o altă denumire pentru JDK, deoarece, începând cu lansarea lui Java 2, compania Sun s-a referit
la acesta cu numele de Java Software Development Kit.
JRE - Java Runtime Environment este un mediu de execuţie Java care conţine toate bibliotecile de rulare
necesare la executarea oricărui program Java precum şi o maşină JVM.
Există trei ediţii de JDK, fiecare din ele fiind livrată cu câte o maşină JVM şi cu toate instrumentele standard
necesare dezvoltării de aplicaţii:
• J2SE – Java 2 Standard Edition – este livrată cu setul standard de biblioteci de rulare dezvoltate
pentru scrierea şi distribuirea de aplicaţii Java de uz general. Această ediţie conţine o maşină Java
optimizată pentru partea de client; (www.sun.com....downloads....j2se with netbeans…)
• J2ME - Java 2 Micro Edition – este o versiune livrată cu un set restrâns de biblioteci de rulare şi cu
o maşină Java optimizată pentru dispozitive integrate sau portabile. Are două linii paralele de
dezvoltare, PersonalJava şi EmbeddedJava.
• J2EE - Java 2 Enterprise Edition – este o versiune care conţine tot ceea ce se află în J2SE, la care
se adaugă un set de interfeţe API (Application Program Interface) şi biblioteci de dezvoltare şi
distribuire a aplicaţiilor la nivel de întreprindere (sisteme de prelucrare de tranzacţii, servere Web,
servicii de mesagerie etc. Maşina JVM este aceeaşi cu cea de la J2SE dar există şi o versiune de
JVM optimizată pentru server, care poate fi descărcată separat (HotSpot Server VM -
http://www.softpile.com /Development /Java/Review_03157_index.html ). J2EE simplifică
aplicaţiile tip întreprindere prin construirea lor pe baza unor componente modulare standardizate,
prin oferirea unui set complet de servicii acelor componente şi prin preluarea multor detalii a
comportamentului automat al aplicaţiei, fără o programare complexă. Prin automatizarea multor
sarcini ale procesului de dezvoltare a aplicaţiilor care sunt dificile şi care ar necesita timp,
tehnologia J2EE permite dezvoltatorilor de sisteme de tip întreprindere să se concentreze asupra
îmbunătăţirii strategiei de afaceri, decât să creeze infrastructura acesteia.
JVM - Java Virtual Machine – este software-ul care execută toate aplicaţiile Java. Constă din câteva fişiere
care sunt plasate în directoarele din JDK sau JRE, unul din fişiere fiind o interfaţă care instanţiază JVM-ul şi
face posibil ca aceasta să lucreze pe sistemul de operare nativ din calculator. Pentru utilizator, numele
maşinii JVM este java, nume standard al comenzii necesare pentru a rula JVM, nume ce trebuie urmat de
numele programului. Există două semnificaţii pentru termenul JVM:
1. Fişierul binar care există în sistemul de fişiere, instalat pe calculator când s-a instalat JDK sau JRE;
2. Instanţă particulară care se încarcă în memoria calculatorului când se execută un program, fiind
executată ca un proces din sistemul de operare. Fişierul binar nu este încărcat şi nici nu se schimbă,
ceea ce permite ca să fie rulate în acelaşi timp mai multe instanţe ale maşinii JVM.
.jar – este extensia ce corespunde unui fişier arhivă Java, creat cu utilitarul jar din Java. Folosind opţiunea –
jar, comanda java permite lansarea în execuţie a unui program Java care este stocat într-un fişier jar.
.class – este extensia fişierului obţinut (numit de clase), după compilarea de către compilatorul de Java a
unui fişier cu cod sursă Java (care are extensia .java). Fişierele de clase reprezintă forma executabilă a
programelor Java. Codurile de octeţi sunt coduri de dimensiunea unui octet pentru JVM.
25
Noţiuni fundamentale
________________________________________________________________
JavaBeans – numele componentelor de cod Java reutilizabile. Orice program Java sau orice bloc de program
Java poate fi scris ca o clasă JavaBean.
Java API este o colecţie de componente software care pot fi utilizate în realizarea de programe. Elementele
acestei colecţii sunt grupate în biblioteci de clase şi interfeţe numite pachete (packages). Gruparea
elementelor se face în funcţie de funcţionalitatea pe care acestea o oferă. O implementare completă a
platformei Java oferă printre altele următoarele:
• Elemente de baza : Obiecte, şiruri de caractere, numere, structuri de date, date calendaristice,
timp , intrare/ieşire etc;
• Appleturi: Un set de standarde utilizate în realizarea programelor care rulează în interiorul unui
navigator Web;
• AWT/Swing : Set de instrumente pentru realizarea de interfeţe grafice (GUI);
• Servleturi : Un set de standarde utilizate în realizarea servleturilor;
• Programarea retelelor : URL , TCP , UDP , sockets, adrese IP;
• Procesarea documentelor XML : Simple XML Parsing (SAX) , Document Type Definition
(DTD) , Document Object Model (DOM);
• Securitate : Semnături digitale, controlul accesului, managementul cheilor publice şi al celor
private;
• Componente Software : Cunoscute sub numele de JavaBeans, acestea pot fi utilizate în cadrul
altor arhitecturi de componente;
• Serializarea obiectelor : Asigură persistenţa şi comunicarea prin intermendiul tehnologiei RMI
(Remote Method Invocation).
• Java Database Connectivity : Standardizează accesul la sistemele de baze de date relaţionale;
• Internaţionalizarea aplicaţiilor : Setarea localizării, formatări texte.
În plus, există un API pentru grafica 2D şi 3D, mesagerie electronică, animaţie, telefonie, sunet şi multe alte
domenii. Figura 1.4. prezintă componentele care sunt incluse în Java 2 SDK.
26
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
Cu ajutorul API, Java suportă o varietate mare de aplicaţii. Principalele tipuri de programe Java sunt:
1. Applet-uri Java - sunt cele mai răspândite programe Java. Toate appleturile urmează o serie de
convenţii care le permit să ruleze în interiorul unui navigator (browser) Web care încorporează o
maşină virtuală Java. Appleturile sunt incluse în pagile Web la fel ca şi imaginile şi adaugă
dinamism acestora.
2. Aplicatii Java - limbajul Java poate fi folosit şi pentru dezvoltarea de aplicaţii, fiind o puternică
platformă software. Aplicaţiile pot rula independent de un navigator web şi au caracteristicile
oricăror alte programe, cu deosebirea că, pentru a le rula, în sistem trebuie să existe instalat un
intepretor Java (JVM - Java Virtual Machine sau JRE -Java Runtime Environment).
3. Servlet-uri Java - sunt programe Java care pot interacţiona cu diferiţi clienţi şi care se execută
numai pe partea de server, ca efect al unei cereri primite. Acestea afişează numai rezultatul
procesării, sub forma unui fişier HTML (HyperText Markup Language). Implementarea de tip
cerere/răspuns se face pe baza protocolului HTTP (HyperText Transfer Protocol).
• Simplu
• Orientat spre obiecte
• Portabil
• Dinamic
• Robust
• Distribuit
• Concurent
• Sigur
• Independent de platformă
• Performant
Aceşti termeni nu sunt doar pentru “reclamă” - ei îşi găsesc justificarea în implementarea limbajului.
1. Simplitate: Deşi împrumută multe aspecte din limbajele C şi C++, limbajul Java renunţă la unele
trăsături, considerate neesenţiale, ale acestora. Aparent, limbajul are mai puţine grade de libertate
decât C si C++, dar în realitate poate realiza aceleaşi lucruri, cu un plus de claritate. Au fost
eliminate acele facilităţi care, în opinia experţilor, produceau mai mult confuzie decât să aducă
beneficii:
• supradefinirea operatorilor (Java oferă un puternic suport pentru supradefinirea metodelor);
• moşteniri multiple;
• conversii automate a tipurilor de date;
• pointeri la date.
27
Noţiuni fundamentale
________________________________________________________________
Pointerii reprezintă un mecanism deosebit de “periculos” din punctul de vedere al posibilelor
probleme pe care le pot genera (erori foarte dificil de găsit şi corectat) şi o potenţială problemă de
securitate, dată de nerestricţionarea accesului lor: este deosebit de uşor să se facă scrierea/citirea
dintr-o zonă de date interzisă, ceea ce va conduce la coruperea datelor, în mod intenţionat sau nu.
Mecanismul folosit la Java este cel al handler-elor şi al tablourilor reale de date, nefiind permisă
modificarea unui tip întreg de date într-un handler şi, prin aceasta, accesarea necontrolată a unei
zone de memorie. S-au adăugat facilitãţi de ultimă oră, dintre care cea mai importantă este
managmentul automat al memoriei. Aceasta simpifică imens munca programatorului, în schimbul
complexităţii mai ridicate a sistemului. O sursă comună, generatoare de complexitate şi probleme,
este gestionarea memoriei, alocarea şi eliberarea ei, la momente bine specificate de timp. Prin
facilitatea oferită, de creare a unui mecanism automat de gestionare a memoriei a carui funcţie
primară se poate descrie prin dealocarea resurselor nefolosite în mod automat, s-a reuşit nu numai
înlesnirea muncii programatorului, dar şi reducerea imensă a timpului necesar finalizării unui
proiect, deoarece, eliminând problema gestionării memoriei, se elimină automat cea mai mare sursă
generatoare de “scame” (bug-uri). Dealocarea memoriei se face în mod uniform, fără intervenţia
programatorului. Există un “colector de gunoaie” (garbage collector) a cărui implementare în Java
este făcută inteligent şi eficient, folosind un fir separat de execuţie. Astfel, colectarea “gunoaielor”
se face de obicei în timp ce un alt fir de execuţie aşteaptă o operaţie de intrare-ieşire sau pe un
semafor. Se marchează obiectele care nu mai sunt folosite şi se eliberează spaţiul ocupat de ele.
Eliberarea nu se face neapărat imediat, ci atunci când spaţiul disponibil curent nu mai poate satisface
o nouă cerere.
Un alt aspect al faptului de a fi simplu este dimensiunea mică a limbajului, conceput special penru
dispozitive cu capacităţi reduse (microcontrolere etc), deci capabil de a rula în astfel de dispozitive.
Interpretorul limbajului şi librăriile acestuia au dimensiuni foarte reduse.
2. Orientare spre obiect (object-oriented): Ca şi C++, Java foloseşte clase pentru organizarea logică a
codului. La executare, programul creează obiecte de tipul claselor. Este admisă şi larg utilizată
moştenirea claselor, dar nu este permisă moştenirea multiplă. Aceasta este suplinită de o altă
facilitate, numita interfaţă. Modelul orientat spre obiect oferă mecanismul pentru a defini cum
modulele se interconectează între ele. Folosind modelul programării orientate spre obiect se pot
elabora programe mult mai clare, mai curate şi mai apropiate de modul de gândire uman şi se
permite reutilizarea codului. Facilităţile, din puncul de vedere al orientării spe obiect, sunt cele
oferite de limbajul C++, extinse cu facilităţile oferite de Objective C, pentru a oferi o dinamică mult
mai mare metodelor sale.
3. Portabilitate: Limbajul Java este independent de platformă. Programele Java sunt mai întâi
compilate întru-un cod intermediar, numit bytecode, şi apoi sunt interpretate de către mediul de
execuţie Java (Maşina Virtuală Java, “creată” la instalarea limbajului Java) în instrucţiuni maşină
asociate platformei sistem. Fişierele bytecode (care au extensia .class) pot fi copiate şi executate pe
orice platformă indiferent că ea este Windows, Unix, Solaris etc. Applet-urile pot rula direct într-un
navigator Web (Internet Explorer, Netscape etc). Anumite aplicaţii încorporează tehnologie Java
tocmai pentru a face mai uşoară portarea lor între diverse sisteme de operare. Câteva exemple ar fi
Corel Word Perfect sau Netscape Communicator.
4. Claritate: Eliminarea unor facilităţi neesenţiale din C şi C++ conduce la programe mai uşor de
înteles. În plus, se consideră că limbajul Java este uşor de înteles, cu condiţia ca cel care îl prezintă
să fi înţeles el însuşi foarte bine mecanismele puse la dispoziţie.
5. Robusteţe: Robusteţea limbajului este asigurată de o serie de mecanisme de înaltă performanţă, cum
ar fi verificarea timpurie a programelor pentru posibile probleme, verificarea dinamică târzie
(runtime) şi forţarea programatorului să elimine situaţiile care sunt presupuse că ar putea genera
probleme la rulare. Unul dintre avantajele limbajelor puternic tipizate (cum ar fi C++) este că asigură
un puternic suport pentru verificarea programelor în timpul compilării, în ideea de a elemina un
număr cât mai mare de erori. Din păcate, limbajul C++ moşteneşte din C o serie de probleme la
verificarea în timpul compilării şi acesta doar pentru a păstra compatibilitatea în jos. Deoarece Java
28
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
nu are ce compatibilitate în jos să menţină, nu este nevoit să suporte consecinţele unor implementări
sau specificaţii vechi, greşite sau incomplet făcute.
7. Depanare uşoară: Datorită fluxului de cod binar al cărui proprietar este sistemul Java, mai multă
informaţie este stocată în format binar, ceea ce face operaţia de depanare (debugging) mult mai
facilă. Un dezansamblor, este în măsură să restabilească codul în procent de aproape 100% la forma
sa iniţială, lucru care la alte limbaje este practic imposibil. La conceperea formatului byte-code-ului
s-a ţinut cont de faptul că acesta uremază să fie intrepretat şi transformat direct în cod maşină
specific platformei pe care se lucreză. S-a obţinut cod puternic optimizat, optimizările necesare
realizându-se în timpul conversiei.
8. Tipizare statică: Obiectele folosite într-un program Java trebuie obligatoriu declarate înainte de a fi
folosite. În acest mod se uşurează sarcina compilatorului de a detecta conflicte de tip.
9. Limbaj concurent: Java are capacitatea de a executa mai multe secvenţe de cod simultan. Aceste
secvenţe de cod se numesc fire de execuţie (thread-uri).
10. Limbaj distribuit: Java oferă posibilitatea dezvoltării de aplicaţii pentru Internet capabile să ruleze
pe platforme distribuite şi eterogene. Java este un limbaj distribuit care are implementate biblioteci
pentru lucrul în reţea şi are inclus suportul nativ pentru aplicaţii care lucrează cu mai multe fire de
execuţie. Există primitive de sincronizare independente de sistemul de operare şi mecanisme bazate
29
Noţiuni fundamentale
________________________________________________________________
pe metode de monitorizare şi condiţionare. Integrând toate aceste mecanisme în nucleul limbajului,
acesta a devenit mult mai simplu, robust şi mai uşor de folosit. Limbajul oferă un răspuns mult mai
interactiv şi un comportament în timp real. Acesta este limitat de platforma care asigură tot suportul
pentru aplicaţie. Mediul Java are un bun răspuns în timp real, rulând “deasupra” unor sisteme de
operare. Răspunsul sistemului şi modul de tratare al task-urilor este cel care determină răspunsul în
timp real al aplicaţiei scrise în Java.
11. Suport pentru reţele de calculatoare: Modul în care acest suport este integrat în limbaj şi uşurinţa
cu care se implementează mecanisme deosebit de complexe, fac ca Java să fie unic în domeniul
reţelelor de calculatoare. Librăriile şi rutinele implementate asigură suport pentru protocoale TCP/IP
(Transmission Control Protocol/Internet Protocol) precum şi pentru HTTP (HyperText Transfer
Protocol) şi FTP (File Transfer Protocol). Se poate afirma că este mult mai simplu şi uşor să se
realizeze o conexiune în reţea utlilizând limbajul Java decât limbajele C sau C++, programatorul
reuşind să aceseze obiecte din reţea aproape la fel de simplu şi uşor de parcă s-ar lucra cu sistemul
local de fişiere.
12. Securitate ridicată. Java asigură un grad de securitate ridicat, uneori cu un plus de efort din partea
programatorului. Accesul la memorie este posibil numai prin verificarea prealabilă a drepturilor de
acces. Lipsa pointerilor face ca accesarea unor zone de memorie pentru care accesul nu este autorizat
să nu fie posibilă. De asemenea, este asigurată nepătrunderea viruşilor pe timpul executării unei
aplicaţii. Securitatea a fost deasemenea un punct vizat pe parcusul elaborării limbajului, cu atât mai
mult cu cât a fost vizat să atingă mediile orientate pe reţele şi programare disribuită, permitându-se
construirea de medii eliberate de viruşi sau programe cu intenţii obscure, implementând de asemenea
şi librării de funcţii avansate de criptografie, majoritateta bazate pe tehnologii de ultimă oră (chei
publice). Există o puternică interdependenţă între robusteţe şi securitate: eliminându-se pointerii se
elimină practic orice metodă de a forţa accesul la structurile de date al altor aplicaţii sau la accesarea
membrilor protejaţi sau privaţi la care, în mod normal, nu au acces din cadrul programului, aceasta
eliminând majoritatea căilor de acces a viruşilor.
13. Extensibilitate. Limbajul Java permite includerea de metode native, adică de funcţii scrise în alt
limbaj (de obicei C++). Metodele native sunt legate dinamic la programul Java la momentul
executării, rolul lor fiind în principal de a mări viteza de execuţie pentru anumite secvenţe din
program.
Observatie:
30
Informatica aplicata-note de curs constructii20092010@gmail.com;
http://scdsd.bluepink.ro/cursuri
Pentru a testa daca totul este configurat corespunzator, se va deschide o fereastra MS-DOS si se va
tasta java-version sau javac –help. Rezultatul comenzilor un trebuie sa fie un mesaj de eroare legat
de comanda necunoscuta (ex mesaj eroare: ‘javac’ is not recognized as an internal or external
command, operable program or batch file)
Probleme organizatorice:
Disciplina: Informatica aplicata
Observatii
• Materiale in format electronic: http://scdsd.bluepink.ro, sectiunea cursuri, informática
aplicata
• Caiet(dosar) – laborator/curs
31
Noţiuni fundamentale
________________________________________________________________
Colocviu:
Nota finala (NF) se calculeaza pe baza unui punctaj obtinut ca 0.5 *Punctaj test grila (PTG)
+0.3 *Punctaj activitate laborator (PAL) (prezenta activa, rezolvare teme etc)+0.2 *Punctaj
evaluare la laborator(PVL)
Conform programarii de mai sus, la Testul grila participa numai studentii din seria
respectiva, care au sustinut activitatea la laborator conform programarii, pe parcursul
semestrului I.
32