Sunteți pe pagina 1din 8

CURS 7

Generatoare. Siguranța generatoarelor.


 Generatoarele sunt programe ce pot genera diverse artefacte
 Ele automatizează crearea artefactelor ce au o structură bine înțeleasă și regulată
 Artefactele generate variază cel mai adesea în funcție de intrarea generatorului
 Exemple
 Compilatorul: generează cod binar pornind de la codul sursă
 JavaDoc: generează pagini HTML pe baza comentariilor sursă
 Green: generează cod sursă pornind de la diagrame de clase
 Servlets: generează pagini HTML
 Java Server Pages (JSP): generează Servlets

Input(parameter) -> Generator -> Output

Programarea Generativă:
 Există task-uri de rutină de programare ce sunt întotdeauna similare
 Doar mici variații de funcție de anumiți parametri
 Programarea generativă încearcă automatizare acestor task-uri folosind generatoare de program
parametrizate pentru diverse părți ale programului
 Generatoarele de program sunt meta-programe: programe ce lucrează cu alte programe
 Meta-programarea poate fi sofisticată și potențial nesigură
 Diverse abordări ale programării generative
 Instrumente externe: programe de sine stătătoare ce efectuază un task particular de generare de
program (compilator, generator de compilator)
 Elemente generative de limbaj: construcții pentru generarea integrată într-un limbaj de programare
Adesea transformarea a unor noi construcții de nivel înalt în construcții de nivel scăzut (adesea
numit ”macrouri”)

Tipare & Aplicații Comune


 Class extenstions
Input – clasa ce trebuie extinsă și informatii suplimentare
Output – subclasa conținând funcționalități suplimentare
e.g. clone, hascode, equals, print, serialize, copy
 Proxies
Input – tipul și metodele/cîmpurile ce trebuie protejate
Output – subclasa conținând semantici modificate
e.g. monitoare, acces la distanta, managementul resurselor, controlul accesului
 Wrappers
Input – tipuri, metode, cimpuri ce trebuie invelite
Output – clasa wrapper cu interfața corespunzătoare
e.g integrarea de compoente legacy
 Interfaces
Input – descrierea interfeței
Output – diverse tipuri de interfețe
e.g. DB interface, gui, web interface, api
CURS 7
Templeturi
 Codul ce generează cod poate fi complex
 Exemplu: construirea unui Abstract Synyax Tree (AST) pt codul generat

Exemplu: Generator Getter&Setter


 Convenția Java: clasele furnizează metode getter și setter pt accesarea variabilelor membre
 Poate fi util, e.g. pt pattern-ul observer
 Metodele simple getter si setter reprezinta cel mai adesea muncă de rutina
 Poate automatiza procesul folosind un generator:
CURS 7
Exemplu: Remote Method Calls
 Apelarea de metode ale unor obiecte aflate pe alte calculatoare ca si cum ar fi ele locale
 Necesita o noua clasa: stubul clientului
 Pt obiectul reprezentând local obiectul de la distantă
 Are aceeași semnătura ca și obiectul aflat la distantă
 Dar implementarea diferită a metodelor:
1. Trimiterea apelului cu încapsularea parametrilor la server
2. Așteaptă și primește valoarea întoarsă de metodă
 În Java: stubul client și alte clase sunt generate de către instrumentul de generare extern RMIC (Remote
Method Invocation Compiler)

Class -> RMIC -> Other classes required for remoting

Generator de Stub
CURS 7

Scopurile Generării de Cod


1) Dezvoltare mai eficintă
 Adaptibilitate si refolosire
 Control complexitatii
 Structură mai clara (templeturi)
 O mai buna gestiune a variantelor multiple

2) Evitarea erorilor de dezvoltare prin reducerea implicării umane atunci când acest lucru nu este necesar
3) Folosirea mai eficientă prin adaptabilitate (e.g. reflecție dinamică)
4) Câștig de performanță la runtime prin folosirea de componente adaptate (e.g. Generarea de cod
optimizat)

Siguranța Generatoarelor
 Sistemele tip pot detecta potențiale erori de execuție în mod static
 Generatoarele sunt meta-programe ce introduc noi surse de erori de execuție: erori de generare
(părti ale programului generat ce pot genera potențial cod greșit ce la rândul sau poate cauza erori
de execuție)
 Necesare noi sisteme de verificare de tip pentru detectarea părților în generatoare ce pot genera
potențial cod greșit (sisteme de verificare pentru generatoare)
 Siguranța generatorului: proprietatea unui generator de a nu putea genera cod greșit
 Din păcate siguranța generatoarelor de obicei nu este garantata

Erori de Generare
 Prin verificările de tip ale ieșirii generatorului putem detecta posibile erori de generare

 Dar unele erori de generare produc cod greșit doar in cazul unor anumiți parametri

 Astfel de probleme îngreunează găsirea erorilor de generare


CURS 7
CURS 7
Java Emitter Templates (JET)
 Tehnologie de generare bazată pe templeturi
 Parte a Eclipse Modeling Framework (EMF)
 Sintaxa similară JSP
 Idea
1. Dezvoltatorul creează templeturi parametrizate (sufixul jet)
2. Fiecare templet este transformat intr-o clasa Java
3. Clasele pot fi folosite pentru a genera ceva
 Pot fi folosite pt generarea oricărui tip de fisier text (nu doar cod sursa Java)

Folosirea Jet in Eclipse

 Crearea proiect nou Java


 Converirea Proiectului intr-un Proiect Jet

 Pentru configurarea JET


CURS 7
Generator Hello World

Folosirea Generatorului Hello Word


CURS 7
Sumar
 Generatoarele sunt programe ce pot genera anumite artefacte
 Programarea generativa încearcă generarea anumitor părți de program, e.g extensii de clase, proxies,
interfete, wrapper
 Cu ajutorul templeturilor ieșirea generatoarelor poate căpăta o formă naturală
 Erorile de generare sunt părți ale programului generat ce pot fi potențial greșite
 Java Emitter Templates (JET) este o tehnologie populară de generare pentru Eclipse

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