Programare orientată pe obiecte - Java
De ce Java?
Limbaje de programare •
Limbajele de programare procedurală sunt axate pe implementarea algoritmilor. Datele sunt entităţi externe acestora. – Exemple: Fortran, Pascal, Basic, C date iniţiale
•
rezultate
ALGORITM
Limbajele de programare orientată pe obiecte sunt axate pe implementarea obiectelor. Datele sunt în interiorul obiectelor. – Exemple: Smalltalk, Java, C++, C# mesaje OBIECT
mesaje OBIECT
OBIECT
Limbaje de programare orientată pe obiecte • • • •
Oferă suport pentru crearea şi manipularea obiectelor; Permit modelarea intuitivă a lumii reale; Modularitate intrinsecă; Ascunderea implementării obiectelor: – separare netă între interfaţa şi implementarea unui obiect; – utilizatorul obiectelor este interesat doar de interfaţa lor; – implementarea poate fi modificată fără a afecta utilizatorul;
• • • •
Controlul şi protecţia datelor; Reutilizarea codului; Uşurinţa întreţinerii şi depanării programelor; Ideale pentru aplicaţii multithreading şi aplicaţii distribuite în reţea (appleturi);
Limbajul de programare Java • • • •
Este un limbaj de programare orientată pe obiecte. Este unul din cele mai populare limbaje de programare. A fost dezvoltat de firma Sun Microsystems. Oferă suport pentru dezvoltarea facilă a aplicaţiilor în reţea, a aplicaţiilor multithreading şi a interfeţei grafice cu utilizatorul (GUI = graphic user interface). • Permite interceptarea şi tratarea excepţiilor în timpul execuţiei programelor fără a opri execuţia lor. • Este un limbaj de programare compilat-interpretat.
Limbaje de programare compilate • Programul scris în limbajul de programare este translatat în limbajul maşinii pe care va fi executat acest program. • Translatarea se face înaintea execuţiei şi se numeşte compilare. • Rezultatul compilării depinde de calculatorul şi sistemul de operare pe care va rula programul. • Pentru a fi rulat pe un alt tip de calculator sau pe un alt sistem de operare programul trebuie (re)compilat: write once, compile anywhere. • Exemple: Fortran, Pascal, C, C++, C# • Avantaje: viteza de execuţie, optimizare; • Dezavantaje: dependenţă de hardware, cost;
Limbaje de programare compilate
compilator Windows
cod sursă
compilator MacOS
compilator Linux
cod maşină
cod maşină
cod maşină
Limbaje de programare interpretate • Programul scris în limbajul de programare este translatat în limbajul maşinii pe care va fi executat acest program. • Translatarea se face în timpul execuţiei şi se numeşte interpretare. • Programe diferite pot fi rulate pe acelaşi calculator folosind acelaşi interpretor. • Acelaşi program poate fi rulat pe un alt tip de calculator sau pe un alt sistem de operare care rulează un interpretor pentru acel limbaj: write once, run anywhere. • Exemple: Basic, Javascript, MATLAB • Avantaje: portabilitate, independenţă de hardware, cost; • Dezavantaje: viteză şi optimizare reduse;
Limbaje de programare interpretate
interpretor Windows
cod sursă
interpretor MacOS
interpretor Linux
Maşină virtuală • Maşină virtuală = calculator (maşină de calcul) simulat • Maşina virtuală (MV) este o arhitectură generică de calculator definită printr-un un set de instrucţiuni şi un set de registre. • Maşina virtuală poate fi simulată pe orice calculator real. • Execuţia unui program de către maşina virtuală se face simulând procesarea instrucţiunilor. • Erorile programului duc la oprirea maşinii virtuale, nu şi a simulatorului acesteia, ceea ce face posibilă diagnosticarea erorilor.
Limbaje compilate-interpretate • Presupun existenţa unei maşini virtuale. • Execuţia programului = compilare + interpretare: – compilare: programul sursă este mai întâi translatat în limbajul maşinii virtuale. – interpretare: instrucţiunile maşinii virtuale sunt interpretate de simulatorul acesteia.
• Un program este compilat o singură dată dar, odată compilat, acesta poate fi executat apoi pe orice simulator al maşinii virtuale: compile once, run anywhere. • Exemple: Smalltalk, Java • Avantaje: portabilitate, cost, mediu protejat de execuţie; • Dezavantaje: overheadul maşinii virtuale, viteză şi optimizare limitate;
Limbaje compilate-interpretate
MV sub Windows
cod sursă
compilator MV
cod maşină virtuală
MV sub MacOS
MV sub Linux
Limbajul de programare Java • Inventat la începutul anilor '90 în cadrul firmei Sun. • Seamănă mult cu C++ dar mai simplu (fără pointeri, fără instrucţiuni de gestiune a memoriei, etc). • Presupune existenţa unei maşini Java pentru execuţia programelor. Maşina Java poate fi virtuală dar poate fi implementată şi hardware. • Portabilitate maximă a programelor. Un program Java poate rula pe orice calculator pe care este instalată o maşină virtuală Java. • Mecanism robust de intercepţie a excepţiilor în timpul execuţiei bazat pe facilitatea simulatorului maşinii virtuale de a nu fi blocat sau compromis de acestea†. † Excepţiile afectează calculatorul simulat, nu şi calculatorul care simulează.
Java operează numai cu obiecte • Orice program scris în Java este un sistem de obiecte. • Comunicarea între programul Java şi lumea externă se face tot prin intermediul obiectelor. Conexiunea la reţea, accesul unui fişier, afişarea pe ecran presupun interacţiunea cu obiecte specifice care oferă interfeţe generice specifice conexiunii la reţea, accesului fişierelor, afişării pe ecran. • Tipurile (clasele) de obiecte de uz general, precum cele pomenite mai sus, sunt disponibile programatorului sub forma unor pachete de clase reunite în API (Application Programming Interface) • Programatorul poate crea tipuri noi de obiecte cu structură şi comportament adecvat aplicaţiei dorite.
JVM, maşina virtuală Java • Programele scrise în limbajul Java sunt rulate pe maşina virtuală Java (JVM = Java Virtual Machine). • Programul scris în Java este mai întâi translatat în limbajul JVM, rezultând un cod obiect ce conţine numai instrucţiuni ale JVM, numit bytecode. • bytecode - fiecare instrucţiune a JVM are 8 biţi (un byte). • Codul obiect este apoi interpretat de mediul de simulare al JVM (numit JVM Execution Environment). • JVM este o maşină cu stivă. • Există şi implementări fizice ale arhitecturii JVM (picoJava).
Mediul de execuţie • JRE = Java Runtime Environment • Cuprinde maşina virtuală + pachetele de clase de uz general.
API (Biblioteca de clase de uz general)
JVM (Maşina virtuală Java) Sistemul de operare
JRE
Pachetul de dezvoltare • JDK = Java Development Kit • Cuprinde JRE necesar execuţiei programelor + uneltele software necesare dezvoltării şi depanării programelor.
JDK
unelte de dezvoltare (compilare, arhivare, documentare, debug, etc)
API (Biblioteca de clase de uz general)
JVM (Maşina virtuală Java) Sistemul de operare
JRE