Sunteți pe pagina 1din 10

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) este 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 aparinnd aceleeai clase sau unor clase diferite. Fiecare obiect se
caracterizeaz prin stare i comportament. Starea obiectului depinde de datele pe care
acesta le conine, 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 poate avea ca efect modificarea strii obiectului b (adic
modificarea unor date coninute n structura de date a lui b) i/sau poate primi o valoare
ntoars 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 succesului 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, executiei i documentarii unei aplicaii Java.
5. Implementarea mainii virtuale Java
De regul, arhitectura i setul de instruciuni al calculatorului, pe care se exec ut un
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 tim p, 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" compilate,
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 pro gramului
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 comenzi este, fie executarea aplicaiei, fie apariia 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

Clasa
X
X
X
X

Subclasa
X*
X

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);
}
}

Pachet

X
X

Oriunde

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).

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