Sunteți pe pagina 1din 13

Curs 2 - Programarea calculatoarelor i limbaje de programare

1. Tehnici de programare Exist mai multe tehnici de programare: 1. Programare procedural Caracteristici: o prima modalitate de programare, nc frecvent folosit o descompunerea programului n proceduri (funcii) care sunt apelate n ordinea de desfurare a algoritmului o sunt prevzute posibiliti de transfer a argumentelor ctre funcii i de returnare a valorilor rezultate o limbajul Fortran: primul limbaj de programare procedural . o au urmat Algol60, Algol68, Pascal, iar C este unul din ultimele invenii n acest domeniu. 2. Programarea modular (structurat) Caracteristici: accentul s-a deplasat de la proiectarea procedurilor ctre organizarea datelor, datorit creterii dimensiunii programelor. stilul de programare este n continuare procedural datele i procedurile sunt grupate n module, nu implic ns i o asociere strict ntre acestea Modulul: o mulime de proceduri corelate, mpreun cu datele pe care le manevreaz tehnic de ascundere a datelor (data-hiding): posibilitatea de ascundere a unor informaii definite ntr-un modul fa de celelalte module. modularitatea i ascunderea informaiilor sunt caracteristici implicite n programarea orientat pe obiecte. 3. Programarea orientat pe obiecte Programarea procedural i structurat presupun descrierea algoritmilor ca o secven de pai care duc de la datele iniiale la rezultatul cutat. n cazul limbajelor de programare orientate la o clas concret de probleme apar sisteme de dirijare cu baze de date, modelare etc. De asemenea apare i necesitatea sporirii siguranei programelor prin interzicerea accesului neautorizat la date. n acest context apare programarea orientat pe obiecte ce presupune: determinarea i descrierea claselor utilizate n program crearea exemplarelor de obiecte necesare determinarea interaciunii dintre ele.

2. Principii n programarea orientat pe obiecte Programarea orientat pe obiecte (POO) e ste o metod de programare n care programele sunt organizate ca i colecii de obiecte cooperante, fiecare dintre ele reprezentnd o instan a unei clase, iar clasele sunt membre ale unei ierarhii de clase, corelate ntre ele prin relaii de motenire. Se folosesc obiecte ca uniti constructive de baz. Fiecare obiect este o instan (un exemplar) al unei clase. Clasele sunt componente ale unei ierarhii de tip, fiind corelate ntre ele prin relaii de motenire.

Clasa este o extensie a conceptului de tip de date i conine o structur de date, mpreun cu metodele (functiile) care se aplica acestor date. Obiectul este o instaniere (o instan ) a clasei. n acelasi program se pot folosi mai multe obiecte aparin nd aceleeai clase sau unor clase diferite. Fiecare obiect se caracterizeaz prin stare i comportament . Starea obiectului depinde de datele pe care acesta le con ine, in timp ce comportamentul este dat de metodele clasei respective. n general, comunicarea const n invocarea de metode. Daca obiectul a invoca o metoda a obiectului b, aceasta poa te avea ca efect modificarea st rii obiectului b (adic modificarea unor date coninute n structura de date a lui b) i/sau poate primi o valoare ntoar s de metoda respectiva. Modelul obiect al unei aplicaii implic patru principii importante: a. abstractizare; b. ncapsulare; c. modularitate; d. ierarhizare. Modelul obiect este un concept unificator n tiina calculatoarelor, aplicabil nu numai n programare, ci i n arhitectura calculatoarelor, n proiectarea interfeelor utilizator, n baze de date. a. Abstractizarea se refer la identificarea trsturilor caracteristice eseniale ale unui obiect, care l deosebesc de toate celelalte feluri de obiecte. Fiecare obiect n sistem are rolul unui actor abstract, care poate executa aciuni, i poate modifica i comunica starea i poate comunica cu alte obiecte din sistem fr a dezvlui cum au fost implementate acele facilitai. Procesele, funciile sau metodele pot fi de asemenea abstracte. b. ncapsularea se refer la ascunderea de informaii (data-hiding). Obiectele nu pot schimba starea intern a altor obiecte n mod direct (ci doar prin metode puse la dispoziie de obiectul respectiv). Doar metodele proprii ale obiectului pot accesa starea acestuia. Astfel se poate face o compartimentare a elementelor unei abstractizri n dou pri: structura i comportarea. ncapsularea separ comportarea (accesat prin interfa) de structur, definit prin implementare. Fiecare tip de obiect expune o interfa pentru celelalte obiecte care specific modul cum acele obiecte pot interaciona cu el.

c. Modularitatea este procesul de partiionare a unui program n componente individuale (module). Ea permite reducerea complexitii programului prin definirea unor granie bine stabilite i documentate n program. Modularizarea const n partiionarea programului n module care pot fi compilate separat, dar care au conexiuni cu alte module ale programului. Modulele servesc ca i containere n care sunt declarate clasele i obiectele programului. d. Ierarhizarea reprezint modalitatea de a ordona abstractizrile (tipurile abstracte de date). Ierarhiile pot s denote relaii de tip sau relaii de agregare. o Relaiile de tip sunt definite prin motenirile ntre clase, prin care o clas (clasa derivat) motenete structura sau comportarea definit n alt clas (clasa de baz ). o Relaiile de agregare specific compunerea unui obiect din mai multe obiecte mai simple. Motenirea permite definirea i crearea unor clase specializate plecnd de la clase (generale) care sunt deja definite. Ea permite construirea unor clase noi, care pstreaz caracteristicile i comportarea, deci datele i funciile membru, de la una sau mai multe clase definite anterior, numite clase de baz, fiind posibil redefinirea sau adugarea unor date i funcii noi. O clas ce motenete una sau mai multe clase de baz se numete clasa derivat. Atat variabilele, cat si metodele pot fi statice sau nestatice. Proprietatea de motenire: proprietatea claselor prin care o clas nou construit poate prelua datele i metodele clasei mai vechi. Clasa derivat se afl ntotdeauna pe un nivel imediat inferior celui corespunztor clasei de baz. n Java exist doar motenire simpl, o ierarhie de clase n care fiecare clas derivat are o singur clas de baz. Exemplu: Paralelogram

Dreptunghi

Romb

Ptrat Clasa dreptunghi este o clas derivat (subclas) a clasei paralelogram, iar clasa paralelogram este o clas de baz (supraclas) a clasei dreptunghi. Astfel, o ierarhie de concepte conduce la o ierarhie ntre clasele care implementeaz conceptele ierarhice respective.

3. Caracteristicile limbajul de programare Java Java este un limbaj de programare orientat obiect, destinat n principal programrii internet. nceputul limbajului Java este n toamna anului 1991, cnd firma Sun Microsystems a finanat un proiect cu numele Green condus de James Gosling. Scopul echipei Green era s plaseze firma Sun Microsystems pe piaa produselor electronice comerciale. Inginerii i dezvoltatorii de soft de la Sun au cutat microprocesoare care s ruleze pe o multitudine de maini, n particular pe sisteme distribuite care lucreaz n timp real. Cheia succesu lui firmei Sun a fost abilitatea lucrului pe platforme multiple. Dupa 4 ani de lucru, echipa Green finalizeaz specificaiile limbajului Java. Apoi compania Sun Microsystems vinde licena firmelor IBM, Microsoft, Silicon Graphics, Adobe si Netscape. Limbaj compilat i interpretat Un limbaj este interpretat dac instruciunile unui program scris n acel limbaj sunt procesate linie cu linie i traduse n cod main. Un limbaj este compilat dac un program scris n acel limbaj este tradus ntr -un cod pe care calculatorul l poate nelege (executa) mult mai uor. Programele interpretate sunt mai lente dect cele compilate, ns cele compilate sunt de obicei dependente de platforma respectiv. Programele Java sunt mai nti compilate n nite fiiere intermediare asemntoare codului de asamblare (byte code) i apoi acestea sunt interpretate de mediul de execuie Java n instruciuni main asociate platformei sistem. Limbaj independent de platform (portabilitate). La instalarea limbajului Java se va crea o maina virtual Java (JVM Java Virtual Machine) care are drept scop traducerea instruciunilor unui byte code Java n instruciuni main pentru platforma curent. Astfel, fiierele intermediare byte code pot fi copiate i executate pe orice platform (indiferent c este Windows, Unix, Solaris etc.) Complet orientat pe obiecte. Aceasta este o trstur implicit, punnd n eviden toate aspectele legate de programarea orientat obiect: obiecte, trimitere de parametri, ncapsulare, clase, biblioteci, motenire, modificatori de acces. Limbaj concurent. Concurena (multithreading) nseamn capacitatea unui program de a executa mai multe secvene de cod n acelai timp. O secven de cod Java se numete fir de execuie (thread). Datorit posibilitii crerii mai multor fire de execuie, un program Java poate s execute mai multe sarcini simultan, de exemplu animaia unei imagini, trimiterea unei melodii spre placa de sunet, comunicarea cu un server, alocarea i eliberarea memoriei etc. Simplitate. Spre deosebire de C++ care este un limbaj orientat pe obiect mai popular, Java elimin cteva din trsturile acestuia: posibilitatea motenirii multiple este exclus, irurile sunt ncapsulate ntr-o structur clas, nu exist pointeri, alocarea i dealocarea memoriei se face automat, exist un mecanism de eliberare a memoriei (garbage collection) . Limbaj distribuit. Java este distribuit pentru c permite utilizarea obiectelor locale i la distan. El ofer posibilitatea dezvoltrii de aplicaii pentru Internet, capabile s

ruleze pe platforme distribuie i eterogene. n acest sens, Java respect standardul IEEE (Institute of electrica land Electronics Engineers) pentru structurile de date, cum ar fi folosirea ntregilor, numerelor n virgul flotant i irurilor de caractere. Java se poate folosi n aplicaii de reea, deoarece respect protocoalele de reea, cum ar fi FTP, HTTP etc. Limbaj performant. Interpretorul Java este capabil s execute un byte code aproape la fel de repede ca un cod compilat. Avnd posibilitatea s lucreze cu fire de execuie multiple, Java justific faptul c este un limbaj performant. Robustee nu exist pointeri, care genereaz multe erori n cazul limbajelor C i C++. Dinamic. Administrarea automat a memoriei. Java verific memoria dinamic nainte de a fi alocat i are un sistem automat de alocare/dealocare a memoriei. Securitate. Programele Java nu pot accesa memoria heap, stack sau alte seciuni protejate de memorie, deoarece Java nu folosete pointeri i aloc memorie doar la execuie. nainte ca interpretorul Java s execute byte codul, se verific dac este un cod Java valid prin cercetarea accesului la date, conversiilor de date nepermise, valori i parametri incoereni, depirea stivei.

4. Platforme de lucru Java oferite de Sun Microsystems JavaSE (Standard Edition) Aplicaii independente, appleturi, n general pentru sisteme gen workstation. JavaME (Micro Edition) Programarea dispozitivelor mobile JavaEE (Enterprise Edition) Aplicaii complexe, pe mai multe nivele pentru sisteme eterogene, cu baze de date distribuite, etc. Aplicaii i servicii Web: servleturi, pagini JSP, etc. Distribuiile Java sunt oferite gratuit http://www.oracle.com/technetwork/java/index.html

Mediul de dezvoltare Java Developers Kit (JDK) conine pe de o parte o serie de biblioteci de clase Java necesare scrierii unui program (API) i pe de alta parte un set de utilitare necesare compilarii, testarii, execut iei i documentarii unei aplica ii Java. 5. Implementarea mainii virtuale Java De regul, arhitectura i setul de instruciuni al calculatorului, pe care se execut u n program Java, difer de cele ale mainii virtuale Java. n consecin, codul de octei generat de compilatorul Java nu poate fi executat nemijlocit de procesorul (procesoarele) calculatorului pe care acesta se execut. Dac este realizat software (aa cum se ntampl n majoritatea cazurilor), maina virtual Java este ea nsi un produs program, care este scris i compilat special pentru tipul de calculator pe care se instaleaz, deci folosete setul de instruciuni nativ al

acestuia. Acest produs program trebuie s respecte specificaia mainii virtuale Java , dar realizarea concret depinde de tipul de calculator pe care se instaleaz. Mai mult, pentru acelai calculator pot fi realizate mai multe maini virtuale Java, care to ate respecta specificaia, dar difer ntre ele prin modul de realizare. n principiu, componenta principal a mainii virtuale Java este un interpretor, adic un program care parcurge instruciunile coninute n codul de octei Java din memoria mainii virtuale Java i le convertete n instruciuni native, care pot fi executate de procesorul calculatorului gazd. Aceast conversie necesit un anumit timp, din care cauz durata de execuie a unui program interpretat este intotdeauna mai mare dect a unuia compilat direct n codul nativ. Din aceast cauz, principala deficien care se semnala la primele implementri ale mainii virtuale Java era c durata de execuie a programelor era sensibil mai mare dect a celor scrise in limbaje "tradiionale" compil ate, cum ar fi C, C++, Pascal, Fortran etc. Implementrile moderne ale mainii virtuale Java se caracterizeaz prin mrirea sensibil a vitezei de executie, care se apropie deja de cea a programelor compilate. Aceasta se realizeaz, n special, prin introducerea unei compilri "just in time ": codul de octei este compilat, n momentul execuiei, in cod nativ pentru calculatorul gazd i abia apoi este executat. Desigur c cea mai eficient reducere a duratei de execuie se produce atunci cnd maina virtual Java este implementata hardware, astfel nct codul de octeti Java (bytecode) este cod nativ al acestei maini. n acest caz, durata de execuie a programului este aceeai cu cea a unui program compilat tradiional. 6. Tipuri de produse software scrise n Java Limbajul Java este folosit cel mai frecvent pentru a scrie urmatoarele trei tipuri de programe: aplicaie - este un produs software care se instaleaz pe un anumit calculator i funcioneaz direct sub controlul sistemului de operare, avnd acces la toate resursele calculatorului respectiv. Una din clasele aplicaiei trebuie sa conin metoda principal , cu care ncepe execuia aplicatiei. Aceast metod se numete main i are forma:
public static void main(String args[]) { // corpul metodei }

applet (miniaplicaie) - este un program care se transmite sub form de cod de octei (bytecode) prin reeaua de calculatoare i este executat n cadrul unui navigator (browser) de Web, fr a avea acces la fiierele sau sistemul de intrare/ieire al calculatorului pe care se execut; servlet - un program care se execut pe un server din reea.

7. ablon de aplicaie simpl n limbajul Java class <nume_clasa> { public static void main(String args[]) { // corpul metodei main } } <nume_clasa> - este numele clasei, fiind ales de ctre programator cu respectarea urmtoarelor condiii: - numele clasei trebuie s nceap cu o liter i este format numai din litere, cifre i eventual _ ; - n cazul numelor compuse din mai multe cuvinte, fiecare cuvnt ncepe cu majuscul; // corpul metodei main - este o succesiune de instruciuni i comentarii care respect sintaxa limbajului Java

Primul program 1. Scriererea codului surs class FirstApp { public static void main( String args[]) { System.out.println("Hello world!"); } } Definire clas class numeclasa Funcia principal a unei aplicaii Java propriu-zise: - public static void main( String args[]) Afiare - System.out.println Salvarea fiierelor surs C:\intro\FirstApp.java Compilarea aplicaiei javac FirstApp.java va rezulta: FirstApp.class Rularea aplicaiei java FirstApp Se poate folosi un IDE (mediu integrat de dezvoltare) pentru a realiza toi paii anteriori (JCreator, Eclipse, NetBeans, etc.)

Editarea fisierului surs Pentru nceput, vom considera c aplicaia este constituit dintr -o singur clas, care respect ablonul indicat anterior. Programul surs pentru aceast clas va fi editat sub forma unui fiier separat, care are acelai nume cu clasa i are extensia .java. Compilarea i eliminarea erorilor semnalate de compilator Translatarea programului surs n program sub forma de cod de octei (bytecode) se face cu ajutorul compilatorului Java, numit javac. n acest scop, va deplasai n subdirectorul n care se gsete programul surs pe care dorii s - l compilai i dai comanda javac <fisier_sursa> Dup ce ai dat aceast comand, vei obine unul din urmtoarele rezultate: 1. Pe ecran apare din nou promptul sistemului de operare, fr a se afia un mesaj de eroare. n acest caz, compilarea a decurs normal, iar dac dai comanda dir vei constata ca n subdirectorul curent a aprut un nou fiier, care poart numele clasei i extensia class. Acesta este fiierul care conine bytecode -ul clasei compilate. 2. Obinei un mesaj de eroare, care indic fie c exist erori n program, care au fost sesizate de compilator, fie c exist erori n linia de comand prin care ai cerut compilarea. n ambele cazuri, este necesar s eliminai erorile i s reluai compilarea Executarea (rularea) aplicaiei Dac n directorul curent exist fiierul <nume_aplicaie> .class, executarea acestei aplicaii se solicit prin comanda : java <nume_aplicaie> Trebuie remarcat c se d ca parametru numai numele clasei, fr extensia class. Efectul acestei come nzi este, fie executarea aplica iei, fie apari ia unui mesaj de eroare de execuie. Prin comanda java se pune n execuie interpretorul mainii virtuale Java. Acest interpretor verific dac n directorul curent exist fiierul <nume_aplicaie> .class. Daca acesta exist, ncarc n memorie codul de octei pe care l conine i pune n execuie metoda public static void main(). Dac fiierul nu exist sau dac el nu conine o astfel de metod, se semnaleaz printr -un mesaj de eroare.

Tip abstract de date mulime de date care au aceeai reprezentare i pentru care este definit setul de operaii care se pot executa asupra elementelor mulimii respective. are dou pri: o parte care definete reprezentarea datelor si o parte care definete operaiile asupra datelor respective.

Noiunea de clas O clas definete un tip abstract de date. Definiie clas: class nume{ lista_elementelor_membru } Lista elementelor membru poate conine: 1. declaraii de date; 2. implementri de funcii; 3. prototipuri de funcii abstracte. Datele declarate printr-o definiie de clas se numesc date membru. Funciile definite sau pentru care este prezent numai prototipul n definiia clasei, se numesc funcii membru sau metode. Att datele ct i metodele pot avea modificatori de acces. Modificatorii de acces Modificatorii de acces sunt cuvinte rezervate ce controleaz accesul celorlalte clase la membrii unei clase. Specificatorii de acces pentru variabilele i metodele unei clase sunt: public, protected, private i cel implicit (la nivel de pachet). Specificator Private Protected Public Implicit Exemplu: class Complex { // date membru float real; float imag; // functii membru publice public void atribuire(float x, float y) { real = x; imag=y; } public double retreal() { return real; } public void afiscomplex(){ System.out.println(real+++imag+*i); } } Clasa X X X X Subclasa X* X Pachet Oriunde

X X

Obiecte Un obiect este o dat de un tip definit printr-o clas. Se spune c obiectul este o instaniere a clasei respective. Formatul declaratiei unui obiect: nume_clas nume_obiect; Instanierea obiectelor se face folosind operatorul new. nume_obiect = new nume_clas(..); Datele membru se aloc distinct la fiecare instaniere a clasei. O excepie o constituie datele membru care au clasa de memorare static, ea este o parte comun pentru toate instanierile clasei i exist ntr-un singur exemplar. Funciile membru sunt ntr-un singur exemplar oricte instanieri ar exista. Legtura dintre funcii membru i obiectul pentru care se face apelul se realizeaz folosind operatorul punct. Exemplu de instanieri pentru clasa complex: Complex z; z=new Complex(); Atunci: z.atribuire(0,0); z.afiscomplex(); afieaz numrul complex z (n cazul de fa 0+0i).

Fundamentele limbajului Java. Sintax Java.


Identificatori Sunt secvene nelimitate de litere i cifre Unicode plus simbolul _, ce ncep cu o liter sau _. Identificatorii nu au voie s fie identici cu cuvintele rezervate. Exemple: a1, FirstApp, factorial, etc. Convenie: Nume de clasa: prima liter mare ( Complex) Nume de metod: prima liter mic ( aduna, adunaComplex) Nume variabil: prima liter mic (var1) Nume constant: prima liter mare sau tot numele cu litere mari (Pi, PI) Obs: dac identificatorul este format din mai muli atomi lexicali, atunci primele litere ale celorlali atomi se scriu cu majuscule. Constante Intregi (10, 16 -0x, 8-0) - normali - se reprezint pe 4 octei (32 bii) -lungi - se reprezint pe 8 octei (64 bii) i se termin cu caracterul L (sau l). Flotani: 1.0, 2e2, 3f, 4D -s aib cel puin o zecimal dup virgul -s fie n notaie exponenial -s aib sufixul F sau f pentru valorile normale - reprezentate pe 32 bii, respectiv

D sau d pentru valorile duble reprezentate pe 64 bii. Logici: true, false Caracter: J, a, v, a, \n Caracter sau secvene escape (permit specificarea caracterelor care nu au reprezentare grafic i reprezentarea unor caractere speciale precum backslash, apostrof, etc.) Secvenele escape predefinite n Java sunt: \b : Backspace (BS) \t : Tab orizontal (HT) \n : Linie nou (LF) \f : Pagin nou (FF) \r : Inceput de rnd (CR) \" : Ghilimele \ : Apostrof \\ : Backslash iruri de caractere: Text Este format din zero sau mai multe caractere ntre ghilimele. Caracterele care formeaz irul pot fi caractere grafice sau secvene escape. Separatori: indic sfritul unei uniti lexicale i nceputul alteia. ()[];,. Observaie: instruciunile sunt separate prin ; Operatori atribuirea: = matematici: +, -, *, /, %, ++, -lval op= rval: x += 2 n -= 3 x++, ++x, n--, --n logici: &&(and), ||(or), !(not) relaionali: <, <=, >, >=, ==, != pe bii: &(and), |(or), ^ (xor),~ (not) de translaie: <<, >>, >>> (shift la dreapta fr semn) if-else: expresie-logica ? val-true: val-false Operatorul , (virgul) folosit pentru evaluarea secvenial a operaiilor: int x=0, y=1, z=2; Operatorul + pentru concatenarea irurilor String s1="Ana"; String s2="mere"; int x=10; System.out.println(s1 + " are " + x + " " + s2); Operatori pentru conversii (cast) : (tip-de-data) int a = (int)a;

char c = (char)96; int i = 200; long l = (long)i; //widening conversion long l2 = (long)200; int i2 = (int)l2; //narrowing conversion Comentarii Exist trei feluri de comentarii: Comentarii pe mai multe linii, nchise ntre /*i */. Comentarii pe mai multe linii care in de documentaie, nchise ntre /** i */. Textul dintre cele dou secvene este automat mutat n documentaia aplicaiei de ctre generatorul automat de documentaie javadoc. Comentarii pe o singur linie, care incep cu //. Tipuri de date Tipurile primitive: aritmetice ntregi: byte (1 octet), short(2), int (4), long(8) reale: float (4), double (8) caracter: char (2) logic: boolean (true i false) Tipul referin: Vectorii, clasele i interfeele Valoarea unei variabile de acest tip este, spre deosebire de tipurile primitive, o referin (adres de memorie) ctre valoarea sau mulimea de valori reprezentat de variabila respectiv. Nu exist: pointer, struct i union. Variabile Declararea variabilelor: Tip numeVariabila; Iniializarea var iabilelor: Tip numeVariabila = valoare; Declararea constantelor: final Tip numeVariabila; final double PI = 3.14; int valoare = 100; long numarElemente = 12345678L; String bauturaMeaPreferata = "apa";
Categorii variabile a. Variabile membre ale unei clase, declarate n interiorul unei clase, vizibile pentru toate metodele clasei respective ct i pentru alte clase n funcie de nivelul lor de acces b. Parametrii metodelor, vizibili doar n metoda respectiv c. Variabile locale, declarate ntr -o metod, vizibile doar n metoda respectiv d. Variabile locale, declarate ntr -un bloc, vizibile doar n blocul respectiv. e. Parametrii de la tratarea excepiilor

Adrese utile www.java.com Toat lumea www.java.net Comunitate java.sun.com Dezvoltatori jguru.com Cursuri jars.com Resurse javaworld.com, javareport.com Articole javaalmanac.com Exemple de cod google:java

S-ar putea să vă placă și