PROGRAMARE AVANSATA PE OBIECTE
Conf.univ.dr. Ana Cristina DĂSCĂLESCU
Conținut tematic
› Introducere în limbajul Java
› Clase și obiecte. Extinderea claselor. Polimorfism
› Tablouri. Șiruri de caractere
› Clase abstracte. Interfețe
› Excepții
› Fluxuri de intrare/ieșire
› Colecții de date
› Lambda expresii
› Fire de executare
› Socket-uri
› Interfețe grafice
› Lucrul cu baze de date
› Servlet-uri. Java Server Pages (JSP)
› RESTful Web Services
Bibliografie
Joshua Bloch, Effective Java (3rd edition), Addison-Wesley Professional, 2018
Raul Gabriel Urma, Modern Java in action, 2018
Raul Gabriel Urma, Java 8 in action, 2014
Bruce Eckel, Thinking in Java, 2012
Ștefan Tanasă, Cristian Olaru, Ștefan Andrei, Java de la 0 la expert, Ed. Polirom, 2011
Tutoriale:
•https://docs.oracle.com/javase/tutorial/index.html
•http://www.tutorialspoint.com/java/
Examinare
• 40% Laborator + Proiect
• 60% Examen (minim nota 5)
Tematica cursului 1
› Prezentarea generală a platformei Java
› Structura unui program
› Tipuri de date și operatori
› Literali
› Instrucţiuni
› Pachete de clase
› Operații de citire/scriere
Scurt istoric al limbajului Java
În anul 1991 firma Sun Microsystems finanțează proiectul
Green, coordonat de James Gosling.
Specificațiile noului limbaj, inițial denumit OAK, iar apoi Java
1.0 sunt finalizate în anul 1995.
În anul 1995 compania Sun Microsystems vinde licența firmelor
IBM, Microsoft, Adobe și Netscape.
În 2009 Sun Microsystems este cumpărată de Oracle.
Java 1.1 (1997): JDBC și JIT
………
Java 8 (2014): lambda expresii și programare funcțională
………
Java 11-13 (2018-2019): eliminarea unor module învechite
(applet-uri, CORBA) și îmbunătățiri JVM
Caracteristici
› Limbaj compilat și interpretat › Write Once, Run Anywhere
Caracteristici
› Bytecode-ul reprezintă un set de instrucțiuni specifice JVM
Java bytecode Java bytecode
C++/Java X86 ASM (mnemonics) (hexadecimal)
mov eax, byte[ebp-4] iload_0 0x1A
int add(int a, int b)
{ mov edx, byte[ebp-8] iload_1 0x1B
return a+b; add eax, edx iadd 0x60
}
ret ireturn 0xAC
Caracteristici
Java Virtual Machine (JVM)
• Class loader: program care
încarcă în memorie bytecode-
ul unei aplicații Java
• Execution engine: execută
instrucțiunile din bytecode-ul
încărcat
Caracteristici
Execution engine
•Interpretator: interpretează și execută bytecode-ul
• Compilator Just-in-Time (JIT): transformă bytecode-ul care se execută frecvent în cod
mașină nativ, specific procesorului gazdă
Caracteristici
• Orice program conține cel puțin o clasă
Limbaj orientat pe • Nu mai există funcții independente
obiecte
• Au fost eliminate concepte precum: pointeri,
Simplu supraîncărcarea operatorilor, moștenirea multiplă,
structuri/uniuni etc.
• Management automat al memoriei
Robust • Strong data-typed
• Mecanism standard de tratare a excepțiilor
• Securitatea platformei
Sigur • Sandbox
• Suport nativ pentru fire de executare (thread-safe)
Permite programarea • Biblioteci care conțin primitive specifice
concurentă și distribuită
Software necesar
JVM Java Runtime
Core Development
Environment
classes tools
(JRE)
Runtime
libraries Java
Development
Kit (JDK)
Java Runtime
Environment (JRE)
Platforme Java
Java
Standard
Edition
(Java SE)
Java
Java Micro
Enterprise
Edition
Edition
(Java ME)
(Java EE)
Platforme
Java
Java FX Java Card
Setul de caractere
› Setul de caractere: Unicode (65536 simboluri)
› Un caracter se reprezintă pe 2 octeţi.
› Unicode este compatibil cu ASCII: primele 256 caractere
sunt cele din ASCII.
› Este structurat în blocuri: Basic, Latin, Greek, Arabic,
Gothic, Currency, Mathematical, Arrows, Musical etc.
› http://www.unicode.org
Literali
Întregi
• pot fi scriși în baza 10, baza 2 (prefix 0b sau 0B), baza 8 (prefix 0) sau baza 16
(prefix 0x sau 0X)
• implicit se reprezintă pe 4 octeţi (int)
• pentru long (8 octeţi) se adaugă sufixul L sau l
Numere cu virgulă mobilă
• implicit se reprezintă pe 8 octeţi (double)
• pentru float se adaugă sufixul F sau f
Boolean: true sau false
Caractere: 'A', număr întreg, '\u0061' (format unicode baza 16)
Șiruri de caractere: "Test"
null
Cuvinte cheie
Tipuri de date
Tipuri de date primitive
Fiecare tip de dată primitiv are asociată o clasă corespunzătoare (wrapper),
care permite transformarea unei variabile de tip primitiv într-un obiect.
Clase înfășurătoare
Câmpuri
Constructori Metode
statice
• MIN_VALUE • Cu argument de tip • tipValue()
• MAX_VALUE primitiv • compare(tip x,tip y)
• SIZE (biți) • Cu argument de tip • compareTo(Tip ob)
• BYTES (octeți) String • parseTip(String s)
• toString()
• toString(tip x)
• valueOf(tip x)
• valueOf(String s)
Autoboxing/unboxing
Operatori
Instrucțiuni
Decision-
Looping Branching
making
• if-then • while • break
• if-then-else • do-while • continue
• switch • for • return