270 likes | 417 Views
Generativno programiranje. Doc.dr.sc. Danijel Radošević. Sadržaj. Osnovni pojmovi GP Temeljne discipline GP Ilustrativni primjer generatora (1) Jezici skripata i GP Skriptni model generatora specifikacija konfiguracija predlošci (metaprogrami) Primjer generatora (2)
E N D
Generativno programiranje Doc.dr.sc. Danijel Radošević
Sadržaj • Osnovni pojmovi GP • Temeljne discipline GP • Ilustrativni primjer generatora (1) • Jezici skripata i GP • Skriptni model generatora • specifikacija • konfiguracija • predlošci (metaprogrami) • Primjer generatora (2) • Primjer (3), Autogenerator • Primjer (4), Verifikator
Generativno programiranje • ...predstavlja disciplinu automatskog programiranja s naglaskom na: • fleksibilnost razvojnog procesa generatora i aplikacija: • modifikacije generatora • mogućnost izrade aplikacije pomoću više generatora • optimizaciju (u odnosu na generički pristup) • ciljna aplikacija treba sadržavati samo potrebna, specifična svojstva, a ne svojstva svih aplikacija koje mogu biti generirane
Generativno programiranje • Generički (pridjev; eng. generic): koji se odnosi ili opisuje cijelu grupu ili klasu, opći. Biol. koji proizlazi iz gena ili se odnosi na gene. • Generativan (pridjev; eng. generative): koji ima sposobnost izrade, proizvodnje ili stvaranja.
Temeljne discipline GP • objektno-orijentirano programiranje • jezici i koncepti OOP • ugrađene osobine jezika • korištenje osobina pretprocesora (npr. predlošci funkcija i klasa u C++) • metaprogramiranje (eng. metaprogramming) • proces definiranja predložaka koda (metaprograma) na temelju kojih se automatskim postupkom mogu izrađivati softverske komponente iz zadane klase (Cordy, 1992.)
Temeljne discipline GP • generičko programiranje (eng. Generic Programming) • predstavlja ponovnu iskoristivost programskih komponenti kroz parametrizaciju, • nadopunjava generativni pristup (komplementarna disciplina). • aspektno orijentirano programiranje (eng. Aspect Oriented Programming - AOP) • aspekti predstavljaju svojstva koja nisu vezana za pojedine organizacijske jedinice programa kao što su funkcije ili klase, nego su raspršena na više njih. Danas: Aspect C++, AspectJ,... • jedna od disciplina nasljednica OOP (Guerray, 1996.)
Temeljne discipline GP • domenski inženjering (eng. Domain Engineering) • skupljanje, organiziranje i pohranjivanje prijašnjih iskustava u izgradnji novih sustava koji pripadaju istoj domeni i stvaranje repozitorija komponenti • DSL (eng. Domain Specific Languages) - jezici za specifikaciju aplikacija koje se generiraju
Ilustrativni primjer (1) • Generator programa za rad s vezanim listama: • generator: C++ • koristi biblioteku za rad s generativnim objektima • generirani kod: C++
Jezici skripata i GP • Svojstva jezika skripata (Ousterhout, 1998.): • vrlo visoka razina • bez tipova ili slabo tipizirani • interpreteri • namijenjeni su povezivanju gotovih komponenti pisanih u sistemskim programskim jezicima (strukturnim i objektno orijentiranim)
Jezici skripata i GP • Svojstva jezika skripata pogodna za GP: • mogućnosti jezika skripata u obradi znakovnih nizova (npr. Perl) • fleksibilnost: • polja neograničene veličine (otpadaju problemi oko alokacije/dealokacije memorije) • funkcije s neograničenim brojem argumenata (korisno kod implementacije funkcija generiranja) • mogućnost umetanja varijabli u znakovne nizove • mogućnost evaluacije znakovnih nizova • mogu izvršiti programski kod koji se nalazi u varijabli • primjer: autogenerator
Jezici skripata i GP • Projekti razvoja jezika skripata namijenjenih izradi generatora: • Open Promol (Litva) • CodeWorker (Francuska) • Wurblet (Njemačka; proširenje Java-a)
Skriptni model generatora • Radošević (2005.):”Integracija generativnog programiranja i skriptnih jezika”, doktorska disertacija • Skriptni model generatora • predstavlja model generatora (ne pojedine aplikacije/komponente) • aspektno orijentiran • slobodan od tipova (eng. typeless)
Skriptni model generatora • Tri osnovna elementa modela su • specifikacija (aplikacije/komponente) • konfiguracija (=pravila povezivanja specifikacije s predlošcima) • predlošci (metaprogrami, odnosno skripte više razine =metaskripte)
Specifikacija • Specifikacija se sastoji od parova atribut-vrijednost: Primjer: title:students table:foi_students primary_key:student_id field_int:student_id field_char:surname_name field_int:enrolment_year • Bitno: ne zadaju se sva svojstva aplikacije, nego samo specifična svojstva u odnosu na problemsku domenu!
Specifikacija • Specifikacija ima hijerarhijsku strukturu koja se može prikazati pomoću dijagrama specifikacije:
Specifikacija • Specifikacija ima hijerarhijsku strukturu koja se može prikazati pomoću dijagrama specifikacije: ponavljanje grupa
Konfiguracija • Povezivanje specifikacije s predlošcima koda (metaskriptama) definira se pomoću dijagrama metaskripata. • Elementi dijagrama metaskripata Metaskripta - predložak programskog koda - fizički sadrži veze (oznake koje se zamjenjuju generiranim kodom) Veza - spojna točka metaskripti s vrijednostima iz specifikacije Izvor - atribut ili grupa iz specifikacije
Konfiguracija • Višerazinski dijagram metaskripata: Superpozicija generatora: generator više razine sastoji se od više generatora nižih razina.
Konfiguracija • Odnos među razinama višerazinskog generatora: grupni izvor pojedini element grupe
Konfiguracija • Izuzeci, primjer: SELECT student_id, surname_name, enrolment_year FROM foi_students • iza svakog elementa grupe dolazi zarez (','), osim iza zadnjeg. • Predobrada izvora • izvor se koristi tek nakon što se nad njim provede zadani postupak predobrade. U primjeru: &lista(field_) • od elemenata grupe field_ formira se lista, koja tako postaje pojedinačni izvor.
Predlošci • Predlošci (metaskripte) određuju ciljni programski jezik i predstavljaju zajedničke elemente generiranih aplikacija unutar problemske domene generatora (dok specifikacija definira specifičku razliku). • fizički sadrže veze, primjer za C++: #include <iostream.h> #polja# void main(){ #unos# #obrada# cout << "-------------------" << endl; #ispis# }
Primjer generatora (2) • Osobna stranica D. Radošević (web aplikacija) • generatori: Perl • generator CMS sustava • generator prikaznog portala • generirana aplikacija: Perl, PostgreSQL baza podataka
Ciljevi daljnjeg rada • Može li generativno programiranje postati nasljednik dosadašnjeg OO koncepta? • pomak s izrade generatora na generativno programiranje OO + aspekti, metaprogramiranje, generiranje koda SP + enkapsulacija, skrivanje podataka, nasljeđivanje, polimorfizam kontrolne strukture, strukture podataka, potprogrami
Primjer (3) • Autogenerator • generator, ujedno i aplikacija: Perl • Autogenerator koristi svojstvo jezika skripata da mogu evaluirati programski kod koji se nalazi u varijabli • prema specifikaciji aplikacije i zahtjevu korisnika generira se programski kod koji se zatim odmah i izvršava
Primjer (4) • Generator specijalnih funkcija unutar aplikacije: Verifikator • aplikacija i uključeni generator: Visual Basic • Verifikator je obrazovno sučelje za pisanje programa u C++ • Generator se koristi za implementaciju mogućnosti ispravljanja pogrešaka u programu (eng. debugging)
Literatura • Czarnecki, K.; Eisenecker, U. W.:Generative programming: methods, tools and applications, Addison-Wesley, 2000. • Herrington , J.:Code Generation in Action, Manning, 2003. • Code Generation Network: • http://www.codegeneration.net/ • CodeWorker: • http://codeworker.free.fr/