Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-ca-cd:laboratoare:reflection [2020/07/28 23:08]
127.0.0.1 external edit
poo-ca-cd:laboratoare:reflection [2020/08/18 22:26] (current)
florin.mihalache
Line 1: Line 1:
-= Reflection =+===== Reflection ​=====
  
-* Responsabil:​ Cosmin Boacă +  ​* Responsabil:​ Cosmin Boacă 
-* Data publicării:​ 05.01.2015 +  * Data publicării:​ 05.01.2015 
-* Data ultimei modificări:​ 05.01.2015+  * Data ultimei modificări:​ 05.01.2015
  
-==Obiective==+====Obiective====
 Scopul acestui laborator este familiarizarea studenţilor cu noţiunnile de **Reflection**,​ **Java Native Interface** și **Annotations**. Scopul acestui laborator este familiarizarea studenţilor cu noţiunnile de **Reflection**,​ **Java Native Interface** și **Annotations**.
  
-==Java Native Interface (JNI)==+====Java Native Interface (JNI)====
  
 Programele scrise in java **NU** rulează direct pe mașina fizică ci rulează într-o mașină virtuala cunoscută sub numele de **JVM (Java Virtual Machine)**. Din acest motiv codul java nu se compilează în cod mașină ci se compilează intr-un cod intermediar numit **bytecode** care este interpretat de mașina virtuală, aceasta fiind cea care este responsabilă de execuția codului. Acest lucru are o serie de avantaje și dezavantaje. Printre avantaje se numără : Programele scrise in java **NU** rulează direct pe mașina fizică ci rulează într-o mașină virtuala cunoscută sub numele de **JVM (Java Virtual Machine)**. Din acest motiv codul java nu se compilează în cod mașină ci se compilează intr-un cod intermediar numit **bytecode** care este interpretat de mașina virtuală, aceasta fiind cea care este responsabilă de execuția codului. Acest lucru are o serie de avantaje și dezavantaje. Printre avantaje se numără :
-* Portabilitatea (Codul compilat sub formă de bytecode poate fi rulat pe orice mașină pe care este este prezent un JVM, indiferent de arhitectura acesteia). +  ​* Portabilitatea (Codul compilat sub formă de bytecode poate fi rulat pe orice mașină pe care este este prezent un JVM, indiferent de arhitectura acesteia). 
-* Managementul erorilor (Operatiile ilegale făcute de program sunt semnalate prin aruncarea de excepții nu prin trimiterea de semnale de către sistemul de operare)+  * Managementul erorilor (Operatiile ilegale făcute de program sunt semnalate prin aruncarea de excepții nu prin trimiterea de semnale de către sistemul de operare)
  
 Principalul dezavantaj al rulării programulu intr-o mașină virtuală este performanța. Bytecode-ul trebuie interpretat/​compilat (în realitate este o combinație) de către mașina virtuală care la rândul ei să genereze cod mașină, sau cod **nativ**, care se poate rula direct pe mașina fizică. Principalul dezavantaj al rulării programulu intr-o mașină virtuală este performanța. Bytecode-ul trebuie interpretat/​compilat (în realitate este o combinație) de către mașina virtuală care la rândul ei să genereze cod mașină, sau cod **nativ**, care se poate rula direct pe mașina fizică.
Line 41: Line 41:
  
  
-==Reflection==+====Reflection====
  
 **Reflection** reprezintă un mecanism ce permite unui program să-și examineze și să-și modifice structura in timpul rulării. La baza API-ului pentru **Reflection** stau următoarele clase : **Reflection** reprezintă un mecanism ce permite unui program să-și examineze și să-și modifice structura in timpul rulării. La baza API-ului pentru **Reflection** stau următoarele clase :
  
-* ''​Class''​ +  ​* ''​Class''​ 
-* ''​Constructor''​  +  * ''​Constructor''​  
-* ''​Method''​ +  * ''​Method''​ 
-* ''​Field''​ +  * ''​Field''​ 
-* ''​Annotation''​+  * ''​Annotation''​
  
 Fiecare dintre aceste clase abstractizează conceptul corespunzător numelui clasei. Implementarea internă a acestui mecanism este diferită de la un JDK la altul, dar în mare este bazată pe **metode native**. Fiecare dintre aceste clase abstractizează conceptul corespunzător numelui clasei. Implementarea internă a acestui mecanism este diferită de la un JDK la altul, dar în mare este bazată pe **metode native**.
Line 109: Line 109:
 Acest fișier va fi parsat primit ca parametru de o clasă care îl va parsa și va returna un server. Avantajul este că instanțierea unui server este foarte simplă chiar dacă parserul fisierului de XML este destul de greu de scris. Acest fișier va fi parsat primit ca parametru de o clasă care îl va parsa și va returna un server. Avantajul este că instanțierea unui server este foarte simplă chiar dacă parserul fisierului de XML este destul de greu de scris.
  
-==Adnotări (Annotations)==+====Adnotări (Annotations)====
  
 Adnotările sunt o formă de a încorpora **metadata** în codul Java. Ele pot fi folosite la compilare sau pot persista și la runtime. În cadrul acestui laborator vom folosi doar adnotări care persistă la runtime și care pot fi aplicate metodelor unei clase. O astfel de adnotare se declară în felul următor : Adnotările sunt o formă de a încorpora **metadata** în codul Java. Ele pot fi folosite la compilare sau pot persista și la runtime. În cadrul acestui laborator vom folosi doar adnotări care persistă la runtime și care pot fi aplicate metodelor unei clase. O astfel de adnotare se declară în felul următor :
Line 127: Line 127:
 Pentru mai multe detalii despre adnotări și despre analiza lor folosind **reflection** consultați tutorialul următor : http://​www.vogella.com/​tutorials/​JavaAnnotations/​article.html Pentru mai multe detalii despre adnotări și despre analiza lor folosind **reflection** consultați tutorialul următor : http://​www.vogella.com/​tutorials/​JavaAnnotations/​article.html
  
-==Exemple==+====Exemple====
  
 <code java AppTest.java>​ <code java AppTest.java>​
Line 207: Line 207:
 </​code>​ </​code>​
  
-==Exerciții==+====Exerciții====
  
    - **(2p)** Creati clasa ''​ReflectionDummy'',​ o clasă care va conține 3 membri de tipul int, unul private, unul protected și unul public. Creați un obiect din această clasă și setați valorile membrilor folosind API-ul pentru Reflection. Folosiți metoda ''​getDeclaredFields''​ din clasa ''​Class'',​ și metodele ''​setAccessible''​ respectiv ''​set''​ din clasa ''​Field''​.    - **(2p)** Creati clasa ''​ReflectionDummy'',​ o clasă care va conține 3 membri de tipul int, unul private, unul protected și unul public. Creați un obiect din această clasă și setați valorile membrilor folosind API-ul pentru Reflection. Folosiți metoda ''​getDeclaredFields''​ din clasa ''​Class'',​ și metodele ''​setAccessible''​ respectiv ''​set''​ din clasa ''​Field''​.
poo-ca-cd/laboratoare/reflection.1595966902.txt.gz · Last modified: 2020/08/18 22:26 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0