1 / 27

Generativno programiranje

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)

slone
Download Presentation

Generativno programiranje

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Generativno programiranje Doc.dr.sc. Danijel Radošević

  2. 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

  3. 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

  4. 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.

  5. 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.)

  6. 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.)

  7. 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

  8. Osnovni model generatora

  9. Ilustrativni primjer (1) • Generator programa za rad s vezanim listama: • generator: C++ • koristi biblioteku za rad s generativnim objektima • generirani kod: C++

  10. 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)

  11. 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

  12. Jezici skripata i GP • Projekti razvoja jezika skripata namijenjenih izradi generatora: • Open Promol (Litva) • CodeWorker (Francuska) • Wurblet (Njemačka; proširenje Java-a)

  13. 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)

  14. 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)

  15. 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!

  16. Specifikacija • Specifikacija ima hijerarhijsku strukturu koja se može prikazati pomoću dijagrama specifikacije:

  17. Specifikacija • Specifikacija ima hijerarhijsku strukturu koja se može prikazati pomoću dijagrama specifikacije: ponavljanje grupa

  18. 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

  19. Konfiguracija • Višerazinski dijagram metaskripata: Superpozicija generatora: generator više razine sastoji se od više generatora nižih razina.

  20. Konfiguracija • Odnos među razinama višerazinskog generatora: grupni izvor pojedini element grupe

  21. 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.

  22. 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# }

  23. Primjer generatora (2) • Osobna stranica D. Radošević (web aplikacija) • generatori: Perl • generator CMS sustava • generator prikaznog portala • generirana aplikacija: Perl, PostgreSQL baza podataka

  24. 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

  25. 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

  26. 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)

  27. 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/

More Related