Sunteți pe pagina 1din 12

PROGRAMARE IN JAVA - Note de curs

Curs 1
Introducere
Incepand cu anul 1977 incepe utilizarea pe scara larga a calculatoarelor personale, pretul acestora facandu-le accesibile tuturor. In 1981 IBM, cel mai mare producator de computere, lanseaza pe piata modelul sau de calculator personal IBM PC (XT). Aproape peste noapte calculatoarele personale patrund in intreprinderi, organizatii si chiar in casele oamenilor. Initial aceste calculatoare erau folosite ca unitati independente, transferul informatiilor de la un calculator la altul se facea prin intermediul dischetelor. Pentru a eficientiza schimbul informatiilor intre calculatoarele personale acestea au fost interconectate fie prin legaturi telefonice fie in retele locale in cadrul aceleiasi cladiri (LANs local area networks). Aceasta a dus la raspandirea aplicatiilor de calcul distribuit (distributed computing). In loc de a fi adunate si prelucrate centralizat, intr-un centru de calcul dotat cu calculatoare foarte performante, datele se procesau distribuit, pe calculatoare personale conectate in retea, amplasate in locurile in care informatia era obtinuta. Puterea de calcul a unui PC era suficienta pentru a asigura cerintele unui utilizator individual si comunicatia in retea. La ora actuala un PC de 1000$ are o putere de calcul impresionanta, fiind la fel de performant ca un calculator mare din anii 70, avand pretul de un milion de dolari. Informatia este distribuita prin retea unde unele calculatoare numite file servere au sarcina principala de a stoca programe si date iar altele numite clienti apeleaza la serviciile serverelor pentru a accesa si procesa distribuit aceste date. Prelucrarea distribuita a datelor presupune cooperarea intre aplicatiile executate pe calculatoarele client si cele executate de servere. Aplicatia client solicita un anumit serviciu aplicatiei server, aceasta din urma efectueaza prelucrarile necesare satisfacerii cererii clientului si ii transmite rezultatele solicitate. O aplicatie data de prelucrare distribuita consta nu dintr-un singur program executat pe un singur calculator ci din mai multe programe executate pe doua sau mai multe calculatoare interconectate in retea. O astfel de aplicatie se numeste aplicatie client/server. In anii 70 si 80 limbajele de programare uzuale in elaborarea sistemelor de operare si a aplicatiilor client /server de prelucrare distribuita in retea erau C si C++. Odata cu interconectarea retelelor locale LAN in retele WAN (wide area network) si dezvoltarea tehnologiilor Internet, limbajul de programare Java castiga rapid teren oferind perspective noi pentru dezvoltarea aplicatiilor bazate pe aceste tehnologii.

Limbaje masina, limbaje de asamblare, limbaje de nivel inalt


Fiecare calculator intelege doar limbajul de programare specific procesorului cu care este prevazut. Acest limbaj natural care consta dintr-un vocabular restrans de comenzi si un set de reguli sintactice de utilizare a comenzilor se numeste limbaj

CURS 1

masina. Fiecare comanda este reprezentata printr-un numar. Operanzii comenzii sunt si ele numere reprezentand fie valori ale datelor prelucrate de comanda fie registrul sau adresa locatiei de memorie in care datele prelucrate se afla sau unde va fi depus rezultatul. O instructiune masina ce poate fi executata de procesor consta deci din numarul asociat comenzii urmat eventual de numere desemnand operanzii comenzii. Programul masina consta dintr-o succesiune de instructiuni masina a caror executie duce la prelucrarea dorita a datelor initiale si obtinerea rezultatelor. Acest program masina, constand deci dintr-un sir de numere cod si date, se poate incarca sub forma binara in memoria calculatorului si executat. Este evident ca un program masina nu poate fi executat decat pe un calculator dotat cu procesorul al carui set de comenzi a fost folosit la scrierea programului. Spunem deci ca programul masina nu este portabil fiind dependent de masina. Odata cu raspandirea calculatoarelor cererea tot mai mare de aplicatii programarea direct in limbaj masina a devenit ineficienta fiind prea greoaie. Din acest motiv, pentru a facilita elaborarea programelor, fiecarei comenzi elementare (numar) a procesorului i s-a asociat o succesiune de litere reprezentand abrevierea din limba engleza a comenzii respective. De exemplu pentru comanda de adunare s-a folosit mnemonica ADD (abreviere de la addition). Folosind mnemonicile programele puteau fi concepute, intelese, corectate si modificate mai usor. Setul de mnemonici ale comenzilor si regulile de constructie a instructiunilor constitue asa numitul limbaj de asamblare. Un program scris in limbaj de asamblare nu poate fi executat direct de calculator. Desi inteligibil pentru om, el nu poate fi inteles de calculator care asa cum am vazut intelege numai limbajul masina al procesorului cu care este echipat. In aceste conditii programul scris in limbaj de asamblare, pentru a putea fi executat, trebuie in prealabil tradus in limbaj masina. Aceasta traducere este o operatie de rutina prin care fiecare mnemonica a unei comenzi este substituita cu codul masina asociat. Fiind o operatie de rutina, aceasta traducere poate fi realizata automat de un program de calculator numit asamblor. Ca si programele masina, programele scrise in limbaj de asamblare se adreseaza unui anumit procesor. Fiecare tip de procesor are propriul sau set de comenzi masina si deci si propriul sau limbaj de asamblare. Mai mult, daca programul apeleaza functii ale sistemului de operare executia sa pe un calculator va fi conditionata nu numai de tipul procesorului ci si de prezenta sistemului de operare ale carui functii le apeleaza programul. Spunem in acest caz ca programul este dependent de platforma (procesor + sistem de operare). Pentru a nu rescrie programele pentru fiecare tip de calculator in parte si pentru a usura elaborarea, depanarea si modificarea lor s-au conceput asa numitele limbaje de nivel inalt. Acestea sunt limbaje artificiale, avand un vocabular si o sintaxa care permit descrierea unor operatii complexe. Primul limbaj de acest tip a fost FORTRAN (FORmula TRANslator). Acesta permitea in principal formularea unor instructiuni de calcul a expresiilor algebrice (formule) continand paranteze, variabile, constante, operatori, functii, intro forma apropiata de cea folosita in algebra. Datele puteau fi scalari numere reale sau intregi - sau structuri similare vectorilor si matricilor. De asemenea limbajul prevedea instructiuni puternice de introducere si afisare a datelor de la si spre diferite echipamente periferice si pentru lucrul cu fisiere. Programele scrise intr-un limbaj de nivel inalt nu sunt dependente de platforma si din acest motiv pot fi usor insusite de nespecialisti in tehnica de calcul (ingineri, fizicieni, economisti, medici, etc.). Pentru a scrie un program intr-un limbaj de nivel inalt nu este necesar sa cunosti detalii despre calculatorul sau sistemul de operare sub care va fi executat acesta. Ca si programele in limbaj de asamblare, programele scrise in limbaj de nivel inalt nu pot fi intelese de calculator trebuind sa fie traduse in cod masina pentru a fi executate. Aceasta traducere se face prin substituirea fiecarei

PROGRAMARE IN JAVA - Note de curs

instructiuni cu codul masina a carui executie duce la realizarea prelucrarii descrise de instructiune. Spre deosebire de instructiunile in limbaj de asamblare instructiunile in limbaj de nivel definesc operatii de calcul complexe fiind substituite la traducere nu cu una ci cu mai multe instructiuni masina. Operatia aceasta de traducere a unui program scris in limbaj de nivel inalt in cod masina se numeste compilare si este realizata de programe specializate numite compilatoare. Codul masina generat de compilator se adreseaza evident unui anumit tip de procesor si unui anumit sistem de operare. Pentru a putea fi executat pe o alta platforma, programul sursa trebuie recompilat cu un alt compilator care genereaza cod masina pentru procesorul si sistemul de operare date. Cu alte cuvinte programul in cod masina obtinut prin compilare nu este independent de platforma. O alta varianta de executie a unui program scris in limbaj de nivel inalt consta in utilizarea unui program numit interpretor. Interpretorul preia succesiv cate o singura instructiune a programului sursa, o interpreteaza si o executa. Programele interpretate se executa mai lent decat programele compilate in cod masina. Pe de alta parte compilarea este un proces care dureaza si atunci in faza de elaborare a programului este preferabil sa folosim daca este posibil un interpretor si abia cand programul a fost definitivat sa il compilam. Primul limbaj interpretat a fost BASIC.

Limbajul C si C++
In anul 1970 la Bell Laboratories s-a inceput dezvoltarea unui nou sistem de operare pentru minicalculatoare, numit UNIX. O prima versiune a acestui sistem a fost scrisa pentru minicalculatorul DEC PDP7 in limbajul B (creat de Martin Richards) orientat pentru programare de sistem. UNIX se dorea sa fie un sistem de operare portabil, scris in limbaj de nivel inalt, putand astfel sa fie compilat si instalat pe orice tip de minicalculator, cu conditia sa fie disponibil un compilator pentru limbajul de nivel inalt folosit. In 1972 pentru elaborarea unei noi versiuni UNIX, Dennis Ritchie pornind de la limbajul B il dezvolta creand limbajul C si compilatorul pentru DEC - PDP11. Odata cu raspandirea in mediul universitar a sistemului de operare UNIX si limbajul C devine din ce in ce mai cunoscut si folosit ca instrument de dezvoltare a UNIX. In prezent compilatorul limbajului C este disponibil pe toate tipurile de calculatoare ceea ce permite scrierea de aplicatii portabile mai ales dupa ce in 1983 limbajul a fost standardizat de American National Standards Committee on Computers and Information Processing. In 1989 standardul este aprobat de ANSI in cooperare cu ISO (International Standards Organization)(ANSI C). In 1980, tot la Bell Laboratories, Bjarne Stroustrup extinde limbajului C adaugandu-i facilitati necesare programarii orientate pe obiecte. Noua versiune a limbajului este numita C++. Conceptul de programare orientata pe obiecte revolutioneaza tehnologia de elaborare aprogramelor. Obiectele sunt componente software refolosibile, modeland obiectele din lumea reala. In aceasta abordare programele se construesc cu ajutorul acestor componente ca intr-un joc cu cuburi. Lucrul in echipa la proiectarea si dezvoltarea programelor folosind aceste componente modulare este mult mai productiva decat in cazul folosirii tehnologiilor utilizate anterior (modularitate, programare structurata). C++ permite scrierea programelor atat in stilul C clasic cat si in stilul orientat pe obiecte. Ulterior au aparut si alte limbaje de programare orientata pe obiecte cum ar fi Smaltalk elaborat de Xerox Palo Alto Research Center (PARC) si limbajul Java elaborat de Sun. Practic toate sistemele de operare aparute dupa 1972 au fost scrise in C/C++.

CURS 1

Limbajul Java
Numarul de calculatoare personale este de sute de milioane in toata lumea si numarul acesta este in crestere. Totodata interconectarea acestora intr-o retea globala (Internet) este tot mai accentuata. Descoperirea microprocesorului a revolutionat si productia de sisteme numerice de conducere cu utilizarea lor in numeroase aplicatii industriale, comerciale sau casnice. Utilizarea microprocesoarelor face posibila aparitia unor utilaje si aparate inteligente casa inteligenta nu mai este o fantezie scifi. Ca si calculatoarele personale si aceste aparate inteligente pentru a functiona eficient vor trebui sa fie interconectate in retea. De exemplu nu este greu de imaginat un sistem inteligent care sa mentina constanta umiditatea pamantului in ghivecele cu flori si sa schimbe apa si sa mentina temperatura la pestisori in timp ce noi suntem plecati in vacanta. Mai mult, prin Internet vom putea de la orice distanta sa intram in legatura cu sistemul si sa aducem corectii la valorile prescrise pentru umiditate si temperatura, sa vedem imaginea acvariului cu pestisori pe displayul PC-ului si chiar sa le vorbim. Intrucat diversele aparate inteligente care vor fi comercializate nu vor fi echipate cu acelasi tip de procesor apare problema elaborarii unor aplicatii independente de platforma. Prevazand aceste evolutii, firma Sun a lansat in anul 1991 un proiect de cercetare numit Green. Rezultatul a fost un limbaj de programare derivat din C si C+ +, botezat de autorul sau James Gosling Oak dupa numele varietatii unui arbore ce crestea in fata geamului biroului sau. S-a descoperit mai tarziu ca un limbaj de programare cu acest nume exista deja si atunci, dupa ce au fost la o cafeanea la o cafea, cercetatorii au ales pentru noul limbaj de programare numele Java. Deoarece piata aparatelor inteligente nu se dezvolta asa de repede si datorita pierderii unui contract pentru care Sun concurase, programul Green a inceput sa aibe dificultati de finantare fiind pe cale sa fie abandonat. Din fericire pentru proiect si Java, in anul 1993 a aparut si a capatat o evolutie exploziva in Internet serviciul WorldWideWeb (WWW). Cercetatorii Sun implicati in proiect au sesizat imediat potentialul oferit de utilizarea limbajului Java in crearea asa numitelor pagini Web cu continut dinamic. Noile perspective au revitalizat proiectul Green astfel ca in Mai 1995 firma Sun face cunoscute rezultatele cercetarilor la o conferinta SunWorld. Aparitia java este imediat sesizata si apreciata de cercurile de afaceri interesate de aspectele utilizarii comerciala a serviciului WorldWideWeb. In aceste conditii Java nu se prezinta ca un limbaj academic cum a fost Pascal si nici ca un limbaj destinat uzului individual sau al unui grup de programatori caum este C. Java este un limbaj promovat de interesul cercurilor de afaceri pentru utilizarea comerciala a Internet in conexiune cu WWW.

Tehnologii de programare
La inceputurile sale programarea se facea dupa ureche in functie de talentul, experienta si de capacitatea de analiza si sinteza a programatorului. La proiectarea programului se pornea de la reprezentare grafica (numita schema logica) a algoritmului de rezolvare a problemei. O astfel de schema logica este de fapt un graf orientat ale carui noduri sunt operatiile de prelucrare a datelor reprezentate prin simboluri grafice adecvate. Nodurile sunt conectate prin arce orientate care stabilesc succesiunea de efectuare a operatiilor. O astfel de abordare ofera prea multa libertate in proiectarea algoritmului. Nu intamplator, in acea vreme cea mai importanta instructiune discutata in manualele de programare era instructiunea de salt GOTO.

PROGRAMARE IN JAVA - Note de curs

Limbajul FORTRAN avea o multime de variante a acestei instructiuni. Datorita acestei lipse de restrictii in proiectarea fluxului de calcul adeseori codul sursa devenea foarte incalcit greu de inteles, de modificat si mai ales nesigur, in special in cazul programelor cu complexitate mare. Activitatea de cercetare a dus la aparitia in anii 60 a conceptelor programarii structurate care introducea o anumita disciplina in elaborarea programelor. Respectand principiile programarii structurate programele capata o structura precisa, sunt mai usor de inteles, de testat, depanat si de modificat. In aceasta abordare, la proiectarea programului nu mai este necesara elaborarea schemelor logice. Deoarece in acea perioada nu existau limbaje de programare care sa ofere suport pentru programarea structurata, Nicklaus Wirth a elaborat in 1971 limbajul de programare Pascal (dupa numele matematicianului Blaise Pascal creator al primei masini mecanice de calcul) pentru a fi folosit la predarea programarii in mediile academice. Cu acest limbaj, Wirth a introdus si conceptul de structura de date indisolubil legat de algoritmul ce sta la baza programului. Pascal a devenit in scurt timp limbajul preferat predat in universitati. Conceput in scopuri didactice limbajul avea o serie de slabiciuni care au facut sa nu fie agreeat pentru dezvoltarea aplicatiilor comerciale, industriale si guvernamentale. In anii 70-80 Departamentul Apararii al S.U.A. (DOD) a lansat o cerere pentru elaborarea unui limbaj de programare ce urma sa inlocuiasca sutele de limbaje de programare folosite la acea data in sistemele sale. Noul limbaj urma sa devina unicul limbaj de programare folosit in sistemele sale de calcul. Limbajul astfel obtinut s-a numit Ada (dupa numele primului programator al unei masini de calcul construita de matematicianul Charls Babbage Lady Ada Lovelace, fica poetului englez Lord Byron). Chiar daca este un urmas al Pascalului, limbajul Ada este mult diferit de acesta. El introduce printe altele mecanismul de multitasking care permite programatorului sa defineasca procesari ale datelor care decurg in paralel. C++ si Java prevad si ele acest mecanism sub denumirea de multithreading. Am vazut ca C++ si Java introduc in plus conceptul de programare orientata pe obiecte oferind si suportul necesar implementarii acestuia. Conceptul de obiect incapsuleaza la un loc datele si procedurile de prelucrare a acestora intr-o singura entitate, extinzand astfel conceptul de structura de date din Pascal.

Mediul de dezvoltare a aplicatiilor Java


Programele Java parcurg cinci faze de dezvoltare: editare, compilare, incarcare, verificare si executie. Schematic aceste etape pot fi reprezentate ca in figura 1.1. Prima faza consta in editarea programului folosind un editor de text (cum ar fi Notepad-ul din Windows sau vi ul din UNIX). Programul sursa va fi salvat intr-un fisier cu extensia java (de exemplu prg1.java) In a doua faza programul java este compilat folosind comanda javac (de exemplu javac prg1.java) pentru a lansa compilatorul. acesta traduce programul sursa in cod binar (byte code) limbaj inteles de interpretor. Acest cod intermediar este salvat intr-un fisier cu extensia class (de exemplu prg1.class). Faza a treia consta in amplasarea codul binar din fisierul class in memorie de catre incarcator. Incarcarea se poate face de pe discul local sau prin retea. Exista doua tipuri de programe java aplicatii si applet-uri. in cazul aplicatiilor java aceasta operatie este initiata de comanda java (de exemplu java prg1). Appleturile sunt destinate executiei de catre o masina virtuala java implementata de un browser (de exemplu Internet Explorer sau Netscape Navigator) in cadrul unui document HTML (

CURS 1

Figura 1.1 mediul de dezvoltare al programelor Java HyperText Markup Language). Un applet poate fi executat si local cu ajutorul programului appletviewer.

Clase si Obiecte Java

In Java un program este constituit dintr-o comunitate de obiecte care interactioneaza intre ele in timpul executiei programului. Fiecare obiect component al programului are propriile sale proprietati si un anumit comportament specific.

PROGRAMARE IN JAVA - Note de curs

Un program este un sistem de procesare a datelor. Putem spune ca este similar unui storcator de fructe. Asa cum introducand portocale si energie electrica in storcator obtinem la iesire suc, tot asa introducand in program datele initiale obtinem la iesire rezultatele. Un program de calculator este o masina de prelucrare a informatiei asemanator storcatorului de fructe dar cu deosebirea ca este mult mai versatil. Un storcator de fructe, oricat de perfectionat, nu stie sa faca decat un singur lucru. Un program de calculator poate sa fie proiectat astfel incat sa modeleze nu numai procese si sisteme existente in lumea reala dar si lucruri care nu au existat si nu ar putea exista in realitate. La fel ca si majoritatea masinilor, un program de calculator este facut din diferite repere (parti) componente care interactioneaza intr-un mod definit cu precizie. O astfel de colectie de componente constitue un sistem motiv pentru care programele de calculator sunt numite uneori si sisteme informatice. In mod traditional, la elaborarea unui astfel de sistem de procesare a informatiei, proiectantul se concentreaza in special pe ce prelucrari trebuie sa faca programul. In cazul programelor complexe, problema este descompusa in subprobleme ce urmeaza a fi abordate separat. Daca unele din aceste subprobleme au inca un grad ridicat de complexitate, ele sunt la randul lor descompuse in subprobleme mai simple. O astfel de abordare de la complex la simplu prin detalieri succesive se numeste metodologie top-down de dezvoltare a programelor. Detalierea continua pana cand fiecare subproblema poate fi rezolvata de un subprogram numit subrutina, procedura sau functie in functie de limbajul de programare folosit. Programul obtinut are drept componente aceste proceduri care la executie interactioneaza pentru obtinerea rezultatului. In cazul unui program procedural datele sunt prelucrate similar cu prelucrarea unor piese intr-o linie de productie fiind transmise ca in figura 1.2 de la un punct de prelucrare la altul (de la o procedura la procedura) pana la procesarea completa.

Figura 1.2 prelucrarea procedurala a datelor In cazul programelor orientate pe obiecte lucrurile stau oarecum diferit. Si aceste programe sunt sisteme constituite din componente care interactioneaza intre ele dar aceste componente nu implementeaza algoritmi de rezolvare a unor subprobleme ca procedurile. Aceste componente reunesc datele cu procedurile de prelucrare ale acestora intr-o singura entitate denumita obiect. La fel ca si obiectele din lumea reala, un astfel de obiect are o serie de proprietati de exemplu culoare, dimensiune, coordonate. Totodata obiectul are un anumit comportament specific fiind capabil de a efectua in anumite conditii o serie de actiuni care ii modifica starea. Asa cum in cazul unei masini comanda de accelerare ii modifica parametrii de stare viteza si coordonate tot asa actiunile obiectului ii modifica valorile proprietatilor. Putem reprezenta un obiect ca in Figura 1.3. Obiectul executa actiunile 1, 2 si 3 asupra proprietatilor la solicitari venite din exterior de la alte obiecte. Spunem ca aceste actiuni sunt publice, fiind accesibile din afara obiectului.

CURS 1

Figura 1.3 Reprezentarea unui obiect Actiunea 4 este interna obiectului si nu poate fi solicitata din exterior. Spunem despre ea ca este o actiune privata. Proprietatile obiectului sunt si ele private, valorile lor neputand fi modificat direct din exterior ci numai prin actiunile obiectului insusi. Proprietatile obiectului se numesc variabile reprezentand de fapt datele supuse prelucrarii. Actiunile de care obiectul este capabil si care definesc comportamentul sau sunt de fapt proceduri ce se executa la apel asupra datelor interne ale obiectului. Aceste proceduri se numesc metode. Variabilele si metodele se numesc membri ai obiectului. Mai multe obiecte pot coopera intre ele pentru rezolvarea unei probleme asa cum motorul coopereaza cu carburatorul, pompa de benzina si rezervorul de combustibil pentru a deplasa un autoturism. In alta ordine de idei obiecte simple pot fi asamblate impreuna pentru a crea un obiect mai complex la fel cum obiectul autoturism se obtine din asamblarea impreuna a caroseriei, motorului, carburatorului, pompelor de apa si benzina, rezervorului si a altor repere. Motorul este la randul sau constituit din mai multe repere mai simple. Un program java este el insusi un obiect complex care poate fi construit folosind o serie de obiecte de complexitate mai redusa compuse la randul lor din obiecte mai simple, care la randul lor Toate aceste obiecte componente coopereaza la rezolvarea problemei. In aceasta abordare proiectarea unui program orientat pe obiecte difera fundamental de proiectarea unui program procedural. Se porneste de la realizarea sau refolosirea unor obiecte simple pentru a construi obiecte din ce in ce mai complexe, obiectul rezultat in final fiind capabil sa prelucreze datele de intrare in modul dorit. Astfel proiectarea unui program orientat pe obiecte se aseamana cu proiectarea hardware. Circuitele integrate sunt obiecte cu un anumit comportament care se asambleaza pe placi de textolit cu cablaj imprimat rezultand un modul care el insusi este un obiect cu comportamentul dorit. Mai multe astfel de module se pot

PROGRAMARE IN JAVA - Note de curs

asambla impreuna pe un sasiu (sertar cu sloturi) pentru a forma un obiect mai complex. Mai multe sertare pot fi asamblate impreuna intr-un dulap cablat corespunzator rezultand un obiect si mai complex. La randul sau mai multe dulapuri de acest tip pot fi asamblate impreuna intr-o camera de comanda si interconectate intre ele rezultand un sistem extrem de complex care in esenta este si el un obiect. O astfel de abordare de la simplu la complex se numeste metodologie down-top de proiectare software (total diferita de metodologia top-down folosita la proiectarea programelor procedurale). La creare obiectele sunt personalizate printr-un nume (identificator ) cu ajutorul caruia ne putem referi la obiectul respectiv. Pentru a crea un obiect trebuie sa definim care sunt proprietatile si comportamentul acestuia. Aceasta definire se numeste clasa. Obiectele sunt instantieri ale clasei date. Asa cum toate autoturismele pot fi incadrate intr-o clase de obiecte numita Autovehicule caracterizate prin proprietatile model, capacitate cilindrica, culoare, numar locuri etc. si capabile de actiunile acelerare, franare, schimbare a directiei, aprindere faruri, semnalizare, etc. si obiectele software se incadreaza intr-o clasa. Crearea obiectului se face pe baza definitiei clasei careia apartine obiectul prin alocarea unui bloc de memorie si completarea acestuia cu datele si codul corespunzatoare. Zona de date a blocului de memorie se initializeaza cu valorile specificate la crearea obiectului. Avantajele programarii orientata pe obiecte sunt multiple: - obiectele construite pot fi testate usor fiecare in parte astfel ca la folosirea lor la realizarea unor obiecte mai complexe putem fi siguri de buna lor functionare. Aceasta duce la o mai mare siguranta a programelor. - obiectele odata realizate, pot fi refolosite si in alte aplicatii. - munca in echipa este evident mai eficienta. - Programele orientate obiect sunt mai usor de modificat prin simpla inlocuire a unora din obiectele componente. Asa cum pe placa de baza a unui PC putem inlocui un procesor mai lent cu altul mai rapid fara a modifica celalalte componente, tot asa putem inlocui un obiect cu un altul avand acelasi comportament dar la realizarea caruia s-au folosit algoritmi mai performanti. Noul obiect fiind compatibil la nivel de interfata cu obiectul inlocuit, celalalte obiecte componente nu trebuiesc modificate. Programul insa va fi mai eficient beneficiind de performantele imbunatatite ale noului obiect introdus. - Programele orientate obiect complexe sunt mult mai usor de proiectat si de inteles.

Mostenirea

Unul din avantajele majore al POO il constituie mostenirea. Aceasta ii permite programatorului sa nu reinventeze roata de fiecare data de cate ori incepe sa lucreze la un nou program. De ce sa fii nevoit sa rezolvi probleme pe care le-ai rezolvat odata, anterior sau pe care alti programatori le-au rezolvat deja inaintea ta. In cazul programarii procedurale aceasta problema era solutionata prin existenta unor biblioteci de functii. Functiile si procedurile de biblioteca pot fi apelate din programul nou creat de noi, codul acestora fiind cautat si extras din fisierul de biblioteca corespunzator si adaugat programului in cod masina obtinut la compilare prin operatia de editare a legaturilor (linkeditare). Utilizarea bibliotecilor de functii are insa o mare limitare ea nu ofera un mecanism de extindere a capabilitatilor functiilor continute, acestea fiind deja in cod masina si neputand fi modificate. POO ofera un mecanism

10

CURS 1

elegant si revolutionar, numit mostenire, de a depasi aceasta limitare. Locul bibliotecilor de functii este luat in cazul POO de bibliotecile de clase. Clasele pot fi extinse prin adaugare de noi proprietati si metode fara a modifica codul lor initial. Aceasta se bazeaza prin definirea unei clase derivate din clasa de baza continuta eventual de biblioteca. Noua clasa mosteneste proprietatile si metodele clasei de baza carora li se adauga proprietatile s metodele specificate la definirea clasei de baza. O astfel de clasa derivata din clasa de baza se numeste subclasa a acesteia. O parte din bibliotecile de clase java sunt standard acompaniand compilatorul si interpretorul Java, altele putand fi furnizate de alti producatori de software independenti. De asemenea, programatorul poate sa creeze propriile sale biblioteci clase pe care sa le foloseasca in diferite aplicatii.

Crearea unui program Java


Vom incepe prin a dezvolta o aplicatie Java extrem de simpla (traditionalul (HalloWorld) pentru a exemplifica structura unui astfel de program si etapele ce trebuiesc parcurse pentru a-l executa. Vom incepe prin a edita cu un program editor de text codul sursa al aplicatiei. Asa cum am am spus anterior, un program java este el insusi un obiect. Vom incepe prin a defini clasa a carei instantiere este aplicatia noastra: class HalloWorld { //Aici se vor adauga membrii clasei } Pentru ca aceasta clasa sa defineasca o aplicatie, ea trebuie obligatoriu sa contina metoda main care este apelata la lansarea in executie a programului. Metoda main este de fapt o functie (similara cu functiile C) care primeste ca parametri un vector de siruri de caractere reprezentand argumentele din linia de comanda cu care a fost lansat programul. In Java sirurile de caractere sunt (ca toate datele de altfel) obiecte apartinand clasei String. Un vector de astfel de obiecte este definit ca String[]. Aceasta functie trebuie sa fie accesibila din exteriorul obiectului pentru ca interpretorul sa poata cere executia acesteia, sa fie publica, motiv pentru care este declarata de tip public. Codul acestei functii este comun tuturor instantelor clasei metoda fiind declarata din acest motiv static. De asemenea main nu intoarce nimic fiind deci declarata void. Vom avea deci: class HalloWorld { public static void main(String[] arguments){ //Aici se va adauga codul functiei main } } In cazul exemplului nostru, dorim ca functia noastra sa afiseze mesajul Hallo world!. Pentru afisare vom solicita serviciile obiectului System care gestioneaza relatiile cu sistemul. Acesta are in componenta un obiect out care gestioneaza afisarea. Accesul la membrul out al lui System cu operatorul de acces . ( la fel cum se accesau membrii unei structuri in C): System.out . Acestei componente ii vom solicita sa afiseze mesajul nostru prin apelul metodei sale println. Vom obtine deci:

PROGRAMARE IN JAVA - Note de curs


class HalloWorld { public static void main(String[] arguments){ System.out.println(Hallo world!); } }

11

Se observa ca instructiunea adaugata de noi la corpul functiei trebuie terminata ca si in limbajul C cu caracterul ";". Textul programului il vom salva intr-un fisier avand acelasi nume cu classa si extensia java (HalloWorld.java). Vom compila programul cu comanda javac HelloWorld.java rezultand fisierul HelloWorld.class continand byte-codul programului. Acest byte-cod il vom executa cu interpretorul java prin comanda java HelloWorld. Programul va afisa in fereastra DOS in care a fost executat mesajul Hello world! si se va termina (figura 1.4).

Figura 1.4 Compilarea si executia unui program java

Sumar
Pe parcursul acestui curs am discutat aspectele introductive legate de limbajul Java si POO. Am elaborat de asemenea un prim program java si am parcurs etapele necesare pentru executia acestuia: 1. Se editeaza programul cu un editor de text; 2. Se compileaza programul; 3. Se apeleaza interpretorul pentru executarea byte-codului generat de compilator. Parcurgand aceste etape am vazut cum se defineste o clasa si cum se declara in cadrul acesteia o metoda. De asemenea am vazut cum se apeleaza la serviciile unui alt obiect existent in speta pentru afisarea unui mesaj am apelat metoda System.out.println(<mesaj>). Unde <mesaj> este un sir de caractere incadrat intre ghilimele. Aceasta metoda afiseaza sirul de caractere la consola sistemului (in fereastra DOS in care am rulat aplicatia) si trece cursorul pe randul urmator. Trebuiesc de asemenea remarcate urmatoarele detalii de sintaxa: clasa se declara cu instructiunea class; Programul Java este instantierea unei clase care contine metoda main; Metoda main este de tip public static void si are ca parametru String[]; Numele clasei trebuie sa fie acelasi cu numele fisierului in care se salveaza codul acesteia; In textul programului pot fi introduse comentarii precedate de perechea de caractere // (la fel ca in C), compilatorul ignorand textul ce urmeaza acestor caractere pana la sfarsitul randului. Instructiunile programului se termina cu caracterul ;. Mai multe detalii privind cele de mai sus vor prezentate in cursurile urmatoare.

12

CURS 1

Exercitii
1. Cand compilati un program, ce faceti de fapt? a. Il salvati pe disc b. Il convertiti intr-o forma pe care calculatorul poate sa o inteleaga c. Il adaugati la colectia voastra de programe 2. Ce este o variabila? a. O valoare necunoscuta ce este precizata in timpul executiei programului b. Un text intr-un program ignorat de compilator c. Un loc unde vor fi pastrate de catre program informatii 3. Modificati programul HalloWorld introducand in codul sau diverse erori. De exemplu stergeti terminatorul ; de la sfarsitul instructiunii de afisare sau modificati numele clasei din class HalloWorld{...} in class halloWorld{...}. Salvati programul si incercati sa il compilati si executati. Comparati mesajele de eroare obtinute cu erorile introduse.