Sunteți pe pagina 1din 43

PROGRAMARE JAVA

Curs 1

Bibliografie
Curs practic de Java,
Cristian Frsinaru,
Editura Matrixrom

http://thor.info.uaic.ro/~acf/java/Cristian_FrasinaruCurs_practic_de_Java.pdf

Bibliografie
Java de la 0 la expert
Stefan Tanas
Editura Polirom

Bibliografie
Head first Java,
Kathy Seirra & Bert Bates
Editura OREILLI

Bibliografie
Thinking in Java,
Bruce Eckel,
editura Prentice Hall

Bibliografie
Oracle
Java SE 7 Fundamentals

Android Apps Performance Optimization


Android Apps Performance
Optimization,
Herve Guihot, Apress

Java IDE

Conform ProgrammerWorld.net

Java IDE - Eclipse

Java IDE - NetBeans

Java IDE Jbuilder

Java IDE Intellij IDEA

Java IDE - JDeveloper

Java IDE

Alice 3.1

Freeware object-based programming educational


programming language
Integrated development environment (IDE)
Uses a drag and drop environment to create computer
animations using 3D models
Designed solely to teach programming theory without
the complex semantics of production languages such
as C++

Alice 3.1

Greenfoot

Greenfoot is an interactive Java development


environment designed primarily for educational purposes
at the high school and undergraduate level
It allows easy development of two-dimensional graphical
applications, such as simulations and interactive games.
Greenfoot is being developed and maintained at
the University of Kent, with support from Oracle.

Greenfoot

Ce este Java

Java este o tehnologie inovatoare lansat de compania Sun


Microsystems n1995

Denumit iniial OAK,tehnologia Java este format dintr-un limbaj


de programare de nivel nalt pe baza cruia sunt construite o
serie de platforme destinate implementrii de aplicaii pentru
toate segmentele industriei software.

Caracteristici

Simplitate - elimin suprancrcarea operatorilor, motenirea


multipl
Uurin n crearea de aplicaii complexe ce folosesc
programarea n reea, fire de execuie, interfa grafic, baze de
date, etc.
Robustee - elimin sursele frecvente de erori ce apar n
programare prin renunarea la pointeri, administrarea automat a
memoriei i eliminarea pierderilor de memorie printr-o
procedur de colectare a obiectelor care nu mai sunt referite, ce
ruleaz n fundal (garbage collector).

Caracteristici

Securitate - este un limbaj de programare foarte sigur, furniznd


mecanisme stricte de securitate a programelor concretizate prin:
verificarea dinamic a codului pentru detectarea secvenelor
periculoase, impunerea unor reguli stricte pentru rularea
proceselor la distan etc.
Complet orientat pe obiecte - elimin complet stilul de
programare procedural.
Neutralitate arhitectural - comportamentul unei aplicaii
Java nu depinde de arhitectura fizic a mainii pe care ruleaz.

Caracteristici

Portabililtate - Java este un limbaj independent de platforma de


lucru, aceeai aplicaie rulnd fr nici o modificare i fr a
necesita recompilarea ei pe sisteme de operare diferite cum ar fi
Windows, Linux, Mac OS, Solaris, etc. lucru care aduce economii
substaniale firmelor dezvoltatoare de aplicaii.
Este compilat i interpretat, aceasta fiind soluia eficient
pentru obinerea portabilitii.
Performan - dei mai lent dect limbajele de programare care
genereaz executabile native pentru o anumit platform de
lucru, compilatorul Java asigur o performan ridicat a codului,
astfel nct viteza de lucru puin mai sczut nu va fi un
impediment n dezvoltarea de aplicaii orict de complexe,
inclusiv grafic 3D, animaie, etc.

Platforme de lucru Java

J2SE (Standard Edition) - Este platforma standard de lucru ce


ofer suport pentru crearea de aplicaii independente i appleturi.
De asemenea, aici este inclus i tehnologia JavaWeb Start ce
furnizeaz o modalitate extrem de facil pentru lansarea i
instalarea local a programelor scrise n Java direct de peWeb,
oferind cea mai comod soluie pentru distribuia i actualizarea
aplicaiilor Java.
J2ME (Micro Edition) - Folosind Java, programarea
dispozitivelor mobile este extrem de simpl, platforma de lucru
J2ME oferind suportul necesar scrierii de programe dedicate
acestui scop.

Platforme de lucru Java

J2EE (Enterprise Edition) - Aceast platform ofer


API-ul necesar dezvoltrii de aplicaii complexe, formate
din componente ce trebuie s ruleze n sisteme
eterogene, cu informaiile memorate n baze de date
distribuite, etc.
Tot aici gsim i suportul necesar pentru crearea de
aplicaii i servicii Web, bazate pe componente cum ar fi
servleturi, pagini JSP, etc.

Java: un limbaj compilat i interpretat

In funcie de modul de execuie a aplicaiilor, limbajele de


programare se mpart n dou categorii:

Interpretate: instruciunile sunt citite linie cu linie de un program


numit interpretor i traduse n instruciuni main. Avantajul acestei
soluii este simplitatea i faptul c fiind interpretat direct sursa
programului obinem portabilitatea. Dezavantajul evident este viteza de
execuie redus. Probabil cel mai cunoscute limbaj interpretat este
limbajul Basic.
Compilate: codul surs al programelor este transformat de compilator
ntr-un cod ce poate fi executat direct de procesor, numit cod main.
Avantajul este execuia extrem de rapid, dezavantajul fiind lipsa
portabilitii, codul compilat ntr-un format de nivel sczut nu poate fi
rulat dect pe platforma de lucru pe care a fost compilat.

Java: un limbaj compilat i interpretat

Limbajul Java combin soluiile amintite mai sus, programele Java


fiind att interpretate ct i compilate. Aadar vom avea la
dispoziie un compilator responsabil cu transformarea surselor
programului n aa numitul cod executabil, precum i un
interpretor ce va executa respectivul cod executabil.
Prin maina virtual Java (JVM) vom nelege mediul de execuie al
aplicaiilor Java. Pentru ca un cod executabil s poat fi
executat pe un anumit calculator, se va instalat o main virtual
Java. Acest lucru este realizat automat de ctre distribuia J2SDK.

Scopul proiectrii limbajelor C++ & Java

C++ a fost proiectat pentru programarea sistemelor i extinde limbajul


C prin:

Programare orientat pe obiecte


Tratarea excepiilor
Managementul resurselor
Programare generic
STL containere i algoritmi

Java a fost creat iniial pentru network computing, pentru uurin n


utilizare i nvare i conine o puternic librrie cross-platform.

Nu furnizeaz ntotdeauna access la caracteristicile i performanele


platformei pe care ruleaz
Se bazeaz pe maini virtuale pentru a rula n siguran i portabilitate
Programare orientat pe obiecte ce folosete o sintax similar C fr a fi
compatibil cu limbajul n sine

Comparaii C++ & Java

Puternic influenat de sintaxa


C++/C

Furnizeaz Java Native Interface i


mai recent Java Native Access ca o
metod de apel al C/C++

Write once compile anyware


(WOCA)

Write once, run


anywhere/everywhere
(WORA/WORE)

Permite programarea procedural,


programarea funcional, POO,
programare generic, programare
template

Permite programare procedural,


programare funcional, programare
generic, POO, scripting

Puternic influenat de sintaxa C


avnd adaugate caracteristici de
programare orientat obiect

Compatibil cu C code cu excepia


claselor

C++

Cod nativ rulat de maina int


Furnizeaz informaii despre tipul
i numele obiectelor (Run-Time
Type Information)
Respect mai multe standarde de
compatibilitate binar (pentru
compilatoare MSVC i
Itanium/GNU)
Opional, verificare automat a
domeniului de reprezentare al
unei variabile
Suport nativ pentru numere fr
semn

Java

Ruleaz n main virtual


Permite meta programming i
generare de cod la run-time

Respect un singur standard de


compatibilitate binar (OS &
compiler independent)

Toate operaiile sunt verificate din


punct de vedere al domeniului de
reprezentare

Fr suport nativ pentru numere


fr semn

C++

Pointeri, referine i transfer prin


valoare pentru toate tipurile de
date
Gestiunea memoriei poate fi
efectuat manual prin new i
delete ori automat prin domeniu
sau smart pointers
Suport clase, structuri i uniuni i
le poate aloca n heap sau stiv
Permite conversii explicite de
tipuri

Java

Transfer prin valoare

Garbage collection

Clasele sunt alocate n stiv

Rigid type safety conversion

C++

STL proiectat pentru un scop i


funcionalitate limitat i include
suport pentru:

Java

siruri de caractere, containere,


algoritmi, iteratori, I/O, generator
numere aleatoare, parser de expresii
regulate, multithreading i librria
standard C. Librria Boost ofer i
mai mult funcionalitate incluznd
network I/O.

Permite suprancrcarea
operatorilor cu pstrarea
semnificaiei (recomandat)

Librria standard a crescut cu


fiecare versiune i include suport
pentru:

Containeri, iteratori, algoritmi,


programare GUI, grafic,
multithreading, networking, platform
security, dynamic class loading. Ofer
interfee pentru XML, XSLT, MIDI,
conectivitate pentru baze de date,
criptografie etc.

Operatorii nu sunt suprancrcai.


Excepie + i += pentru string

C++

Motenire simpl i multipl,


motenire virtual

const
goto
Cod sursa independent de
platform (poate fi compilat
pentru windows, bsd, linux, mac os,
solaris). Result cod nativ dedicat

Java

Motenire simpl, suport pentru


motenire multipl via interfee
(echivalentul claselor abstracte din
C++)
final
Label loops
Compilat pentru JVM. Code
dependent de platforma Java,
independent de platform

Sintax
C++
//declararea clasei CClass
class CClass
{
//declararea unui membru privat
int x;
public:
//declararea unui constructor
//care initializeazaa x cu 0.
//altfel continutul lui x nu
//poate fi precizat
CClass():x(0)
{}
// Functie membra
int Bar(int i)
{
return 3*i + x;
}
};

Java
// definire clasa Jclass
class JClass {
//declarare membru privat
setat
//implicit 0
private int x;
// constructor
public JClass() {
}
//functie membra
public int Bar(int i) {
return 3*i + x;
}
}

Sintax
C++
//declararea unui obiect CClass
//initializat de constructor
CClass a;
// utilizarea altui constructor
CClass a(args);
// sau (C++11):
CClass a{args};

Java
//declararea unei referinte
//catre un obiect JClass
JClass a;
//initializare prin
//constructor implicit
JClass a = new JClass();

//initializare prin
//alt constructor
JClass a = new JClass(args);

Sintax
C++
//copie copie continutul lui a
//intr-un nou obiect b
//alternativ CClass b(a)
CClass b = a;
// modifica obiectul a
a.x = 5;
// afiseaza 0 deoarece
// b este diferit de a
cout << b.x << endl;

Java
//copie continutul obiectului
//referit de a intr-un nou
//obiect JClass
//seteaza referinta b
//catre acest nou obiect
//Clasa JClass trebuie sa
//construiasca o interfata
clonabila
Foo b = a.clone();

// modifica obiectul referit de a


a.x = 5;
//afiseaza 0 deoarece b
//refera un obiect diferit de a
System.out.println(b.x);

Sintax
C++
//declararea unui pointer
//pe Cclass. Pointerul nu este
//initializat
CClass *c;

//initializare cu adresa
//unui nou obiect CClass
c = new CClass;
//initializare pointer d cu c
CClass *d = c;

Java
//declararea unei referinte
//catre JClass. Este necesara
//initializarea inainte de
//utilizare
JClass c;
//atribuie referintei c un
//nou obiect JClass
c = new JClass();
//referinta d va referi acelasi
//obiect ca c
JClass d = c;

Sintax
C++

Java

//modifica obiectul pointet de c


c->x = 5;

//modifica obiectul referit de c


c.x = 5;

//apel functie CClass::Bar() pt. a


//apel functie CClass::Bar() pt. *c
a.bar(5);
c->bar(5);

//invoca JClass.Bar pt. a


//invoca JClass.Bar pt. c
a.bar(5);
c.bar(5);

//afiseaza 5 deoarece d pointeaza


//catre acelasi obiect ca si c
cout << d->x << endl;

//afiseaza 5 deoarece d
//refera acelasi obiect ca c
System.out.println(d.x);

Diferene
C++

Java

//pointer catre o zona constanta


const CClass *a;

//declaratie unei referinte finale


//este posibila modificarea obiectul
//dar nu a referintei
final JClass a;

a = new CClass();

a = new JClass();

//nu se poate
a->x = 5;

//se poate
a.x = 5;

//declararea unui pointer constant final JClass b = new JClass();


CClass *const b = new CClass();
//nu se poate
b = new CClass();

//nu se poate
b = new JClass();

//se poate
b->x = 5;

//se poate
b.x = 5;

C++

Sintax

C++ permite permite


caracteristici low level

Pointeri sunt utilizai pentru


manipularea zonelor de memorie,
necesari n special pentru
componente low level ale
sistemului de operare

Au acelai control flow structure

Java

Java nu

Java se bazeaz pe cod extern,


accesat prin Java Native Interface,
cu un overhead semnificativ
pentru fiecare apel

Semantic
C++

Java

Java nu

Codul minim ce poate fi compilat


presupune existena unei funcii

Codul minim ce poate fi compilat


presupune existenta unei clase

Sunt permise conversii implicite de


tip: if(a = 5) //warning

n java sunt necesare conversii


explicite: if(a = 5) //error

Trasmiterea parametrilor prin


referin, valoare, adres

Transmiterea parametrilor prin


valoare

Dimensiunea tipurilor de date


depinde de platform

Dimensiunea tipurilor de date nu


depinde de platform

C++ permite argumente


predefinite

Semantic
C++

Pointerii pot fi manipulai direct,


prin intermediul lor putnd fi
adresat direct memoria.
Pointeri la pointeri, pointeri pe int,
pointeri pe double, pointeri pe
void
Pointeri pe funcii, pointeri pe
funcii membre

C++ - suprancrcare operatori

Static and dynamic link of binaries

Java

Referinele nu permit access


direct la memorie

Referintele refer doar obiecte,


nimic altceva

Referinte ctre obiecte, referine


ctre interfee
Java fr suprancrcare
operatori

API for reflection & dinamic


loading of new code

Semantic
C++

Compile-time templates furnizeaz


un suport mai extins pentru
programare generic i
metaprogramare

C++ permite motenire multipl

Doar C++11 ofer nativ


multithreading

Funciile membre pot fi declarate


ca fiind virtuale dar implicit nu
sunt

Java

Programare generic

Motenire simpl, dar pot exista


mai multe interfee

Nativ pentru multithreding

Funciile membre sunt implicit


virtuale. Pot fi fcute nevirtuale
prin utilizare cuvntului cheie final

Managementul resurselor
C++
Java

Constructori, destructori, smart


poitners
Se poate aloca in mod arbitrar
memorie

Garbage collection

Alocare doar n momentul


instanierii.Totui alocare arbitrar
prin tablorui de octei

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