Új programozási paradigmák a láthatáron (aspektus-orientált és intencionális programozás) Csontos Péter AITIA Informatikai Rt. 2002/10/17
Motiváció Szoftver krízis II. Hardver termelés Szoftver termelés
Problémák és új irányok Az OOP és az UML hiányosságai Aspektusok és domain-ek absztrakciója Round-trip engineering és öröklött rendszerek Terv és kód éles határai Megoldási javaslatok AOP IP Meta-metamodellezés Ágensek
AOP Új paradigma A 90-es évek közepén kezdett terjedni Aspektus: külön modul A programozás funkcionális megközelítésének reneszánsza (a use case-ekhez hasonlóan) Számos megközelítés és eszköz, legismertebbek: AspectJ, HyperJ
AspectJ bevezetés XEROX PARC fejlesztése Greg Kiczales: vezető kutató A Java természetes kiterjesztése Forrás kompatibilitás JVM kompatibilitás Fejlesztőeszközök Nyelv stílusa
Az AspectJ elemei Dynamic join point: atomi esemény Metódushívás Változó manipuláció Kivétel dobás Objektum inicializáció Stb. Pointcut: összetett esemény Advice: viselkedés az esemény körül Aspect: moduláris egység Aspektus precedencia Aspektus öröklődés
AspectJ példa Példaprogram: az adott csomag minden osztályának minden publikus metódusában Error típusú kivétel dobása a logba való írást eredményez. aspect SimpleErrorLogging { Log log = new Log(); pointcut publicEntries(): receptions(public * com.xerox.printers.*.*(..)); after() throwing (Error e): publicEntries() { log.write(e); }
AspectJ fejlesztőeszközök AspectJ Browser JBuilder kiterjesztés Egyebek: Forte kiterjesztés, emacs kiterjesztés
Egyéb AOP eszközök HyperJ DemeterJ Mozart ComposeJ ConcernJ Multi-Dimensional Separation of Concerns, hiperterek Ős: subject-oriented programming DemeterJ Mozart ComposeJ ConcernJ Változatok az AspectJ témára C C++ C# Perl Python Ruby Smalltalk
IP bevezetés Microsoft Research projekt a 90-es években Vezető: Charles Simonyi Hungarian notation Word, Excel PARC, WYSIWYG 2002 szeptember: Intentional Software Corporation Társ: Greg Kiczales Együttműködő partner: ELTE Termék: 2003 végére várható Magyar változatok Intencionális programozás Szándék alapú programozás Szándék-orientált programozás
IP célok A programozó eredeti szándékának minél jobb reprezentációja Terv és kód közötti határok elmosása Magas szintű, újra felhasználható, „mindent túlélő” absztrakciók létrehozása Domain-specifikus absztrakciók hatékony leírása Öröklött kód minél hatékonyabb felhasználása
Az IP elemei Intencionális program-fa Generikusság Grafikus editor a tervhez Generálás: csökkentett program-fa (R-code) Transzformációk: redukciós enzimek (maguk is a fa elemei) Öröklött kódot beolvasó enzimek
Az UML fejlődési irányai UML akció szemantika teljes kód generálása UML-ből Teljes UML alapú szoftver platform integrált terv és kód The Reuse Initiative JacZone WayPointer ágensek, amelyek a tervezést segítik Ivar Jacobson cége Az RR és a RUP kiterjesztése
Egyéb projektek Eclipse Universal Modeler Jackpot IBM, HP, … Az Eclipse általános fejlesztőeszközre épül Az OMG XMI és MOF szabványait használja Tetszőleges absztrakció modellezésére Jackpot Sun James Gosling A NetBeans fejlesztőeszközre épül
??? Kérdések Csontos Péter Aitia Rt. pcsontos@aitia.ai Aitia Inc.: Arificial Intelligence, Information Technology, Intelligent Agents