Sunteți pe pagina 1din 86

METODE SI TEHNICI

AVANSATE IN
PROGRAMAREA
OBIECTUALA
Note de curs, 2014-2015
Diana Stefanescu, Diana.Stefanescu@ugal.ro

CURS 1 - CUPRINS
1.

NOTIUNI INTRODUCTIVE
1.
2.

2.

Limbaje de programare
Programare procedurala/obiectuala

Limbajele C++/Java Studiu


comparativ

CAPITOLUL 1

1. NOTIUNI
INTRODUCTIVE

1.1. LIMBAJE DE
PROGRAMARE

Limbaje. Limbaje de programare


(LP)

Naturale
Artificiale

De descriere a unui algoritm

Ex: Shema logica, pseudocoul

Limbajele de programare

Primitive (sintaxa (reprezentarea simbolica)


+ semantica (semnificatia))

LP. Istoric si evolutie

Limbaje din generatia nti:

Limbaje din generatia a doua:

Limbajele masin (cod masin): date si instruciuni exprimate


sub o form binara, specific doar mainii pe care se execut
programul.
Limbajele de asamblare: mnemonice pentru instructiuni (LD,
ADD) si nume descriptive (identificatori) ptr operanzi -> asamblor
(compilatorul unui limbaj de asamblare)

Limbaje din generaia trei, patru, cinci:

limbajele de nivel nalt: apropialte de limbajul natural, riguros


formalizate (C, Java, Pascal, COBOL, etc.)

Traducerea (translatarea)
limbajelor

Compilatoare
Interpretoare
Traducere in doua faze

Clasificari ale limbajelor de


programare

I dupa apropierea de limbajul masina

Limbaje de nivel coborat (limbaj masina,


limbaj asamblare)
Limbaje de nivel inalt

Clasificari ale limbajelor de


programare

II dupa modul de evocare a


prelucrarilor in program

Limbaje imperative (C, C++, C#, Fortran,


Java)
Limbaje functionale (LISP, ML, SCHEME,
Haskell)

Clasificari ale limbajelor

III dupa modul de rezolvare a unei


probleme

Rezolvarea orientata pe algoritm (pe


aciune): limbaje structurate (FORTRAN, C,
ALGOL, PASCAL)
Rezolvarea orientata pe date: limbaje
declarative (Haskell, ML, Prolog)
Rezolvarea orientat obiect: limbaje POO
(C++, Java, Smalltalk)

Clasificari ale limbajelor (LP-PP1)

IV prin prisma paradigmelor


Paradigm:

Modelul sau arhetipul unui proces sau


sistem
Colecii de caracteristici de evaluare si
criterii de abstractizare

Clasificari ale limbajelor (LP-PP2)

IV prin prisma paradigmelor

Paradigma programrii procedurale si


structurate
Paradigma programrii modulare
Paradigma programrii obiectuale
Paradigma programrii funcionale si logice
Programarea concurent si distribuit
Alte paradigme

Clasificari ale limbajelor (LP-PP3)

IV prin prisma paradigmelor


Programarea procedurala si
structurata:

Utilizatorul descrie pas cu pas algoritmul de


rezolvare
Unitatea de baz: procedura sau funcia
Algol60, Pascal, C, PL/1, Ada

Clasificari ale limbajelor (LP-PP4)

IV prin prisma paradigmelor


Programarea modulara:

Programul se descompune n module


Modulele sunt independente, atomice
Principul de baz: ncapsularea
Modulul are 2 componente:

Interfaa
Implementarea

Modula si Ada

Clasificari ale limbajelor (LP-PP5)

IV prin prisma paradigmelor


Programarea obiectuala:

Obiect: entitate care conine informaie si


comportament
Orice entitate din lumea real poate fi considerat
obiect
Programul: ansamblu de obiecte n interaciune
Principii de baz:

ncapsulare (obiectele au structur si stare)


Comunicare prin mesaje
Reutilizarea codului (compoziie si eneralizare/specializare)
Polimorfism (nume - nelesuri diferite)

Smalltalk, C++, Java

Clasificari ale limbajelor (LP-PP6)

IV prin prisma paradigmelor


Programarea functionala:

Programul este un ansamblu de funcii


Apeluri recursive
Funciile sunt folosite la descrierea datelor si
codului
Nu au instruciuni de atribuire
Fundament matematic: expresiile lambda
Lisp, ML

Clasificari ale limbajelor (LP-PP7)

IV prin prisma paradigmelor


Programarea logica:

Program: fapte si reguli


Limbaje declarative
Se indic modul cum trebuie s arate soluia
problemei
Fundament matematic: sistemele logice formale:

Logica predicatelor de ordinul 1


Logici modale, temporale sau monotonice

Constituie baza motoarelor de inferen n sisteme


expert
Prolog

Clasificari ale limbajelor (LP-PP8)

IV prin prisma paradigmelor

Programare la nivelul bazelor de date: SQL, dBase,


FoxPro

Programarea vizual (RAD - Rapid Application


Development): Magic
Limbaje bazate pe marcatori pentru structurarea
informaiei: HTML, XML
Programarea bazat pe ageni

Limbaje specifice: Telescript, Agents, AgentTcl


Platforme multi-agent (bazate pe tehnologie obiectual):
OS, Jade, IBM Aglets

FIPA-

Clasificari ale limbajelor

V dupa modul de translatare si executie

Limbaje compilate (C, C++, C#, PASCAL)


Limbaje interpretate (AWK, Perl, Python, Ruby,
BASIC, TCL, LISP, PROLOG, SCHEME)

OBS:

Limbaje interpretate
+ : simplitate, portabilitate
- : viteza de execuie redus
Limbaje compilate
+ : execuia extrem de rapid
- : lipsa portabilitii

1.2. PROGRAMARE
PROCEDURALA/OBIECTUALA

Programarea procedurala/obiectuala

Paradigme de rezolvare a problemelor:

Rezolvarea orientat pe algoritm ->


(programare structurata, procedurala):

Rezolvarea orientat pe date (programare


logica/functionala):

(FORTRAN, C, ALGOL, PASCAL)

Haskell, ML, Prolog

Rezolvarea orientat pe obiecte (POO):

C++, Java, Smalltalk


NOTIUNI INTRODUCTIVE

21

Programarea procedurala
(structurata)

Principii; th de structura (C. Bohm i G. Jacobini)


Metode de proiectare orientate pe algoritm:

metoda de proiectare top-down (descompunerea


functionala a problemei P)

metoda programrii structurate


metoda rafinrii succesive

NOTIUNI INTRODUCTIVE

22

Dezvoltarea software-ului in
abordarea structurata
Dezavantaje:

Reutilizarea aproape nula.


Complexitatea ridicata a aplicatiilor.
Software-ul nu poate evolua atat timp cat
modificarile partiale pot avea efecte neasteptate.

Remediul: MODULARIZARE
Caracteristici:
Proiectare top-down urmata de programare
bottom-up.
Descompunere top-down condusa de criterii
functionale
Arhitectura reflecta functiile sistemului software
NOTIUNI INTRODUCTIVE

23

Abordarea structurata - Dezavantaje


Rezultate satisfacatoare doar daca functiile:
Corect identificate
Nu se schimba in timp

Structura software-ului este indusa prin


functii. Evolutia functiilor poate determina
importante modificari structurale.
Modificari si completari ulterioare dificile
modularizare limitata.

NOTIUNI INTRODUCTIVE

24

Programarea orientata pe obiecte


(POO)

Ideea unificrii datelor cu modalitile de prelucrare a


acestora; manevreaz entiti reprezentate sub form
de obiecte

obiect = date + cod de tratare a acestor date

Ofer posibilitati de:

Modelare a obiectelor, a proprietilor i a relaiilor dintre ele


Descompunere a unei probleme n componentele sale (soft
mai mentenabil, adaptabil, reciclabil)

NOTIUNI INTRODUCTIVE

25

Dezvoltarea software-ului Abordarea


orientata pe obiecte
Paradigma se muta de la cea centrata pe functii la cea
centrata pe obiecte.
Structura e indusa prin jucatori (care constituie mai
mult partea statica a sistemului) mai degraba decat
prin functii (partea dinamica, evolutiva a sistemului).
Nu inlocuieste abordarea structurata; construita la
inceputul acesteia.
Modularizare prin decuplarea sistemului in obiecte
independente.
Unitatea de modularizare clasa.
NOTIUNI INTRODUCTIVE

26

Avantajele abordarii OO
Modele mult mai apropiate de lumea reala.
Mentenanta mai usoara (structura inerent
decuplata).
Reutilizare, deci:
Dezvoltare rapida
Programe de calitate superioara

NOTIUNI INTRODUCTIVE

27

POO (2)

Facilitile POO (conf. Pascou):

abstractizarea datelor
motenirea
ncapsularea (ascunderea) informaiei
legarea dinamic (trzie), polimorfism

NOTIUNI INTRODUCTIVE

28

Definirea termenilor

Abstractizare
Incapsulare
Ascunderea informatiei
Cuplare
Coeziune

Definirea termenilor

Abstractizare

Extragerea trasaturilor esentiale despre o entitate sau


grup de entitati si ignorarea detaliilor neesentiale
(Edward Berard)
Procesul de identificare a modelelor comune care au
variatiuni sistematice; o abstractiune reprezinta un
model comun si asigura un mijloc de a specifica
variatiunea care trebuie folosita (Richard Gabriel)

Exemplu:
Model: coada de prioritati
Detalii esentiale: lungimea; obiectele prezente in coada
operatiile (adaugare, stergere, gasire a unui obiect)
Variatiuni: implementare de tip lista inlantuita sau vector;
stiva, coada.

Definirea termenilor

Incapsulare

Ascunderea informatiilor

Ascunderea partilor unei abstractiuni

Cuplarea

Inchiderea tuturor partilor unei abstractiuni in interiorul


unui container

Puterea interactiunilor dintre obiectele din sistem

Coeziunea

Gradul in care task-urile efectuate de un singur modul


sunt legate din punct de vedere functional

CONCEPTE DE BAZA ALE POO


Introducere
Abstractizarea datelor
Mostenirea

1.
2.
3.
1.
2.

4.
5.
6.

Mostenirea simpla
Mostenirea multipla

Incapsularea (ascunderea) informatiei


Legarea dinamica (tarzie)
Alte aspecte
32

ABSTRACTIZAREA DATELOR

Obiectele - componente software care


modeleaz fenomene din lumea real
Obiectele care reprezint aceeai idee sau
concept sunt de acelai tip i pot fi grupate
n clase (concrete sau abstracte).
Clasele implementeaz tipuri de date
Clas = Date + Operaii.

Exemplu: tipul matrice, int.

Abstractizarea datelor (cont)

Clasa

Tipul unui obiect, sablon al obiectului


Caracteristici: numele clasei, atribute, funcii i relaii
cu alte clase

Obiect, instanta

are proprietatile definite in clasa


pentru o clasa - mai multe instante
Obiectul

stare (se refer la elementele de date coninute n obiect i la


valorile asociate acestora (datele membre)).
comportament (determinat de care aciunile pe care obiectul
poate s le execute (metodele)

Abstractizarea datelor (cont)

Atribute

atribute ale instantei (date membre, C++)


atribute ale clasei (date membre statice, C++)

Metode (functii membre)


Crearea si distrugerea obiectelor:

static sau dinamic


constructori, destructori (destructori-doar in
C++)

CONCEPTE DE BAZA ALE POO


Introducere
Abstractizarea datelor
Mostenirea

1.
2.
3.
1.
2.

4.
5.
6.

Mostenirea simpla
Mostenirea multipla (doar in C++, simulare prin
interfete - Java)

Incapsularea (ascunderea) informatiei


Legarea dinamica (tarzie)
Alte aspecte
36

MOSTENIREA

Caracteristic POO
Permite refolosirea codului
Permite extinderea funcionalitii claselor
existente
Permite crearea unei ierarhii de clase i
trecerea de la clasele generale la cele
particulare

Relatia clasa de baza-cls. derivata

A - clasa de baz (este o generalizare); conine


informaiile comune (disponibile prin motenire i
subclaselor acesteia).
B - clasa derivat (particularizare, o specializare
a clasei A); extinde funcionalitatea clasei de
baz i conine informaiile specifice.
TERMINOLOGIE:

clasa de baza, clasa derivata


clasa, subclasa
superclasa, clasa
clasa parinte, clasa copil

Tipuri de mostenire (1)

Mostenirea simpla (unica):

Mostenirea multipla:

Fiecare clas are doar o superclas


Structura arbore
O clas are mai multe superclase
Structura retea

Modaliti de specializare a unei


clase de baz:

introducerea de extra-atribute i extrametode n clasa derivat (particulare


doar clasei derivate)
redefinirea membrilor n clase derivate
(polimorfism)

Tipuri de mostenire (2)

Mostenirea multipla probleme posibile:

ambiguitate (pentru acelai atribut se motenesc


valori diferite)

Remediu: strategii de rezolvare a conflictului (printele


cel mai apropiat, cel mai deprtat, etc.)

motenire repetat (o clas ajunge s


moteneasc de la aceeai clas, pe drumuri
diferite n reea)

Remediu C++:

clasa E poate avea dou copii ale lui A, una pentru fiecare
drum;
clasa E are o singur copie, iar A este clas virtual de baz
i pentru C i pentru B

CONCEPTE DE BAZA ALE POO


Introducere
Abstractizarea datelor
Mostenirea

1.
2.
3.
1.
2.

4.
5.
6.

Mostenirea simpla
Mostenirea multipla

Incapsularea (ascunderea) informatiei


Legarea dinamica (tarzie)
Alte aspecte
41

INCAPSULAREA (ASCUNDEREA)
INFORMATIILOR

Reflect faptul c atributele instan i metodele


unui obiect l definesc doar pe acesta: spunem c
metodele i atributele unui obiect sunt private,
ncapsulate n obiect.
Interfaa cu obiectul relev foarte puin din ceea ce
se petrece n interiorul lui.
Obiectul deine controlul asupra atributelor instan,
care nu pot fi alterate de ctre alte obiecte.

Excepie: atributele de clas (nu sunt ncapsulate, fiind


partajate ntre toate instanele clasei) -> tehnica de
plasare a valorilor n datele membre private ale
obiectului, reprezint un mecanism de ascundere a
datelor.

Niveluri de acces (C++)

C++: ncapsularea - prin


controlul accesului
nivel de acces

protected

Clasa A

private

private
protected
public
(friend)

Mostenire:

public

private
protected
public

clas derivat
Clasa B

Figura 1.4. Accesul la membrii unei clase

CONCEPTE DE BAZA ALE POO


Introducere
Abstractizarea datelor
Mostenirea

1.
2.
3.
1.
2.

4.
5.
6.

Mostenirea simpla
Mostenirea multipla

Incapsularea (ascunderea) informatiei


Legarea dinamica (tarzie)
Alte aspecte
44

LEGAREA DINAMICA (TARZIE,


late binding)

Obiectele unei clase printe trebuie cunoscute n momentul compilrii.


Efectul combinat al motenirii poate determina ca o anumit metod s
fie specializat diferit (prin redefinire), pentru subclase diferite.
Polimorfismul = comportamente diferite ale unei metode n raport cu
tipul unui obiect. Suprascrierea (overriding) unei metode in mod dinamic
genereaza polimorfismul.
Selectarea unei metode redefinite poate fi realizat n faza de compilare
(legarea iniial, early binding), sau n momentul execuiei (legare
trzie).
n limbajul C++, legarea dinamic se poate realiza prin implementarea
de:

funcii virtuale (pot fi redefinite polimorfic);


funcii virtuale pure (doar declarate, nu definite).

In C++ polimorfismul necesita:

mostenire
pointeri
functii virtuale

CONCEPTE DE BAZA ALE POO


Introducere
Abstractizarea datelor
Mostenirea

1.
2.
3.
1.
2.

4.
5.
6.

Mostenirea simpla
Mostenirea multipla

Incapsularea (ascunderea) informatiei


Legarea dinamica (tarzie)
Alte aspecte
46

ALTE ASPECTE

Comunicarea intre obiecte

Pseudovariabile - difer de variabilele normale prin faptul c


nu li se pot atribui valori n mod direct, de ctre
programator.

mesaje-trimiterea de mesaje (invocarea metodelor)intre obiecte: un


obiect poate stimula un altul s activeze (declaneze) o metod,
trimindu-i un mesaj
C++: funciile membre (metodele) - accesate n mod similar
oricarei funcii, cu deosebirea c este necesar specificarea
obiectului cruia i corespunde metoda.

this (pointer ctre obiectul curent) c++


pointer catre clasa parinte a obiectului curent

Metaclase = clase de clase

C++ - nu include explicit metaclasele, dar suport variabilele clas


sub forma datelor statice: o funcie membru static a unei clase, se
folosete o singur copie, partajat de ctre toate instanele clasei; o
asemenea funcie nu este asociat unei anumite instane.

Alte aspecte (2)

Persistenta - timpul de via al unui obiect


Supraincarcarea (overloading) operatorilor

GRESELI FRECVENTE
EURISTICI

Toate datele trebuie ascunse in interiorul clasei!


Datele publice afecteaza:

decompozitia
inteligibilitatea
continuitatea
protectia
cuplarea

Mentineti datele si operatiile inrudite in acelasi loc!


Evitati clasele cu multe metode de accesare definite in
intefetele publice
O clasa trebuie sa reprezinte o singura abstractiune

NOTIUNI INTRODUCTIVE

50

CAPITOLUL 1

2. C++/Java
STUDIU COMPARATIV

1.2. C++/Java STUDIU


COMPARATIV

C++

Procedural/obiectual:

Java

Permite progr. proced.,


functionala, OO,
mataprogramare (template)

Compatibilitate cu C
Compilat
WOCA - Write once
compile anywhere

Pur obiectual (complet


orientat pe obiecte)
Compilat + Interpretat
WORA / WORE - Write
once run anywhere /
everywhere

C++ - limbaj compilat


Editare de
legaturi

PS

Compilarea

Incarcare

DATE

PO

PE

Executie

Program
obiect
relocabil

Program in
format
executabil

REZULTATE

Java compilat/interpretat (1)


Java source
code

Java
compiler

Java
bytecode

Bytecode
interpreter

pentru JVM

Bytecode
compiler

Machine
code

Reprezentare intermediara: bytecod; Masina


virtuala Java

Java compilat/interpretat (2)

Masina virtuala Java (Java Virtual Machine,


JVM):

calculator abstract (Gosling, 1992), cu un set


de instructiuni ptr procesor, set de registri,
mod de organizare a memoriei
componenta a tehnologiei Java
asigura posibilitatea transmiterii intre
calculatoare a programelor codificate binar,
chiar daca aceste calculatoare sunt de tipuri
diferite

Utilizarea JVM

NOTIUNI INTRODUCTIVE

56

C++

Executie (10-20)
Executie

+Optimizare (3-4)

Java

Executie
+JIT (JustInTime)
compiler
+JIT (JustInTime)
compiler

NOTIUNI INTRODUCTIVE

57

OBS. C++ (ex .NET)

OBS. C++ (ex .NET) (2)

Aplicatii C++: ISO/ANSI C++


Aplicatii C++:

Consola
Windows (tratarea evenimentelor)

Aplicatii C++:

native (MFC Microsoft Foundation Classes)


CLR (Common Language Run-Time) =
C++/CLI (Common Language Runtime)
NOTIUNI INTRODUCTIVE

59

OBS. C++ (ex .NET) (3)

CLR (Common Language Run-Time) = C++/CLI


(Common Language Runtime)

CLR mediu standardizat de executie a unor programe (Visual


Basic, C#, C++)
CLI specificatii pentru o masina virtuala
Limbajul intermediar utilizat - Microsoft Intermediate Language
(MSIL).
Codul in MSIL mapat in cod masina prin JIT compiler
CLI defineste o multime de tipuri de date Common Type
System (CTS)

NOTIUNI INTRODUCTIVE

60

Programe in C++/Java

C++-colectie de
functii

Java

class FirstApp
{
public static void main(String args[])
{
System.out.println("Hello world!");
}
}

Programe (2)

C++-

Aplicatii
Portabilitate limitata
Compil: optiuni

Java

aplicatii, care pot fi executate pe orice


calculator, legat sau nu la o retea, si au
acces la toate resursele calculatorului
respectiv, la fel ca programele scrise in
orice alt limbaj;
miniaplicatii (sau appleturi, de la
engl. applet), care se pot transmite
prin reteaua de calculatoare si pot fi
executate numai in cadrul unui
navigator de Web (engl. browser);
ruleaza client
JSP, ruleaza pe server

Portabilitate totala, independenta totala


fata de platforma (tipul tipul
calculatorului si al sistemului de operare
folosit)

ELEMENTE DE LIMBAJ
C++/Java

Vocabular
Unitati lexicale:

Cuvinte cheie (cu cateva exceptii aceleasi)


Identificatori

NOTIUNI INTRODUCTIVE

63

ELEMENTE DE LIMBAJ (2)

Comentarii:
// - pe o singura linie
/*..
*/ - pe mai multe linii
/** ------------------------ */ - Java- generarea automata a
comentariilor (javadoc)

Mecanism de generare automata a


documentatiei inline:

C++ - (Doxygen, soft suplimenntar)


Java (Javadoc,NOTIUNI
standard
documentation)
INTRODUCTIVE

64

TIPURI DE DATE C++/Java

Java:

preia de la C si C++ aproape toate tipurile


aritmetice (short, int, long, float, double) si tipul void
mai putine tipuri de date primitive decat C/C++;
Java impune o aceeasi lungime si reprezentare a
tipurilor numerice pentru toate implementrile
limbajului (tipurile de date sunt definite pentru masina
abstracta virtuala).
fara unsigned!
NOTIUNI INTRODUCTIVE

65

TIPURI DE DATE (2)

Java:

tipul de date boolean (pentru date logice) si - deci - nu


mai permite confuzia intre valorile logice si cele
numerice:
EX: gresit n Java, corect n C/C++.
return x ? 1:0 ;

if ( ! n) { ... }

// corect este: return x !=0 ? 1:0 ; cu x de tip int


// corect este: if (n==0) { ... }

do { nf=nf *n--;} while (n) ;

// corect este: do { nf=nf*n--;} while ( n>0);


NOTIUNI INTRODUCTIVE

66

TIPURI DE DATE (3)

Java:
control strict al tipurilor, atat la
atribuirea de valori unor variabile, cat si
la transmiterea de parametri catre
functii;
nu permite folosirea in calcule a unor
variabile care nu au primit valoare;

NOTIUNI INTRODUCTIVE

67

TIPURI DE DATE (4)

C++:

NOTIUNI INTRODUCTIVE

68

TIPURI DE DATE (5)

Java:

NOTIUNI INTRODUCTIVE

69

TIPURI DE DATE (6)

Java:

Tipurile primitive:
aritmetice

caracter: char (2)


logic: boolean (true i false)
Tipul referin:

ntregi: byte (1 octet), short(2), int (4), long (8)


reale: float (4), double (8)

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.


NOTIUNI INTRODUCTIVE

70

TIPURI DE DATE (7)

Java:

control strict al tipurilor:

la atribuirea de valori unor variabile: Automat: conversiile de


promovare de la un tip numeric inferior la un tip aritmetic superior
(byte, short, int, long, float, double), care nu implic o trunchiere
int n=3; float f; double d;
d=f=n; // corect f=3.0, d=3.0
n=f; // gresit sintactic
f=d; // gresit sintactic
transmiterea de parametri catre functii;
double r = Math.sqrt(2); // promovare de la int la double ptr. 2
O alt conversie automat, de promovare se face pentru rezultatul unei
functii, dac tipul expresiei din instructiunea return difer de tipul declarat al
functiei.
static float rest (float a, float b) {
int r = (int)a % (int) b;
return r;
}
NOTIUNI INTRODUCTIVE

71

TIPURI DE DATE (8)

Java:

Conversia de la un tip numeric superior la un tip aritmetic


inferior trebuie cerut explicit prin folosirea operatorului
cast de fortare a tipului si nu se face automat ca n C.
int n=3; float f; double d;
f= (float)d; // cu pierdere de precizie
n=(int)f; // cu trunchiere
int r = (int) Math.sqrt(4); // conversie necesara de la double la int
// functie de rotunjire din clasa Math
public static int round (float a) {
return (int)floor(a + 0.5f); // "floor" are rezultat double
}
NOTIUNI INTRODUCTIVE

72

TIPURI DE DATE (9)

Java:

Nu se aplica modificatorul const!


static, final

public static final double PI = 3.14159265358979323846;

Operatori:

>>> (deplas. la dreapta fara semn)


+ - concatenare siruri
Nu exista sizeof (nu e nevoie!)!
Nu operator de referentiere (&), deferentiere (*),
NU pointeri!
NOTIUNI INTRODUCTIVE
73

PROGRAMATOR/PROIECTANT
POO IDEAL

Capabil de gandire abstracta


Poate trata bine incertitudinile
Comunica rezonabil

Codificarea caracterelor

C/C++
Cod ASCII

1 octet

Fara semn
Cu semn

Referire cod octal:

Java
Unicode (2 octeti)

\11 (pentru \t)

65536 semne
Structurat in blocuri
Basic, Latin, Greek, Arabic,
Gothic, Currency,
Mathematical, Arrows, Musical,
referire prin cod hexa:

\ uxxxx
\u03B1 -\u03C9: -
http://www.unicode.org

Implementarea structurilor
de control (instructiuni)

C/C++

Java

Nu exist goto
numeEticheta: definete o
etichet.

Pot fi definite etichete folosite


astfel:

ex1

break numeEticheata
continue numeEticheta

EX1. Etichete in Java


i=0;
eticheta:
while (i < 10) {
System.out.println("i="+i);
j=0;
while (j < 10) {
j++;
if (j==5) continue eticheta;
//sau: if (j==5) break eticheta;
System.out.println("j="+j);
}
i++;
}

La nivel de limbaj

C/C++
Semantica valorii:

Obiectele sunt valori


Pointeri
Referinte

Op. selectie membru:

Java
Semantica referintei

Semantica referintei:

ob.membru (.)

->

refOb.membru

SPATIUL NUMELOR
(namespace)

C/C++
La nivel de constanta,
var., functie
Bibl. standard: std

Java
In interiorul unei definitii
de tip:

Clasa
Interfata

La nivelul unui pachet


(Pachet = Colecie de
clase i interfee)

Pachete standard (J2SDK)

java.lang - clasele de baz ale limbajului Java


java.io - intrri/ieiri, lucrul cu fiiere
java.util - clase i interfee utile
java.applet - dezvoltarea de appleturi
java.awt - interfaa grafic cu utilizatorul
java.awt.event - tratare evenimente
java.beans - scrierea de componente reutilizabile

Pachete standard (J2SDK)

java.net - programare de reea


java.sql - lucrul cu baze de date
java.rmi - execuie la distan
java.security - mecanisme de securitate
java.math - operaii matematice cu nr mari
java.text - lucrul cu texte, date i nr indep. de
limb
java.lang.reflect - introspecie
javax.swing - interfaa grafic cu utilizatorul, mult
mbogit fa de AWT.

FUNCTII

C++ - functia-unitate de modularizare


Java clasa unitate de modularizare

Functie=metoda
main incepe executia programului
Java:

main inclusa, ca metoda statica, intr-o clasa


argument vector de siruri

FUNCTII C++/Java

C++

Declaratii de functii (specificarea prototipului)


Definitii de functii (antet+corp)!

Java

Nu conteaza ordinea n care sunt scrise functiile


(metodele) unei clase: o functie poate fi apelata
nainte de a fi definita si nici nu este necesar
declararea functiilor utilizate (nu se folosesc
prototipuri de functii).
Orice functie apartine unei clase.
Nu se pot defini functii n afara claselor.

FUNCTII

C++

Functii cu parametri impliciti (NU si-n Java!)

Transmiterea parametrilor; Returneaza:

Java

Valoare
Pointer (NU si-n Java!)
Referinta

Transmiterea parametrilor; Returneaza:

int cmmdc(int a=0, int b=0);

Tipuri primitive si referinte transmise intotdeauna prin valoare

C++/Java

Transmiterea argumentelor in linia de comanda (la lansarea in


executie) siruri de caractere
Functii cu nr. variabil de parametri

FUNCTII C++/Java

Supraincarcarea functiilor (overloading)

C++ - supraincarcarea operatorilor


Java: +, += gata supraincarcati ptr Sring

Suprascrierea (supradefinirea, overriding)


functiilor

GENERICITATE

C++: clase si functii templates:

Generare de copii separate ale clasei/functiei


ptr. fiecare tip de parametru la compilare
Template-urile pot fi specilizate

Java: clase si functii generice

O singura versiune a clasei/functiei pentru


toate tipurile de parametri
Cls/functiile generice NU pot fi specializate

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