Aspektus-orientált nyelvek XML reprezentációja Kincses Róbert Debreceni Egyetem, Informatikai Intézet kincsesr@inf.unideb.hu
Bevezetés OOP: helyesen alkalmazva jó minőségű szoftvert lehet vele előállítani Azonban léteznek nehezen modellezhető problémák: a programegységek határait átívelő problémák a több, független feladatot megvalósító egységek XEROX SPARC megoldása: AOP
Alapfogalmak: AOP alapelvek komponens: jól körülhatárolható részfeladat megoldása, a rendszer elemi építőköve aspektus: olyan dolgok, amik a rendszer egészét befolyásolják, komponensek teljesítményét, viselkedését, szemantikáját módosítják AOP célja: a komponensek és aspektus elkülönítése, absztrakt kezelésük
Aspektus-orientált rendszer hagyományos programozási nyelv: a komponensek megvalósítása egy vagy több aspektus nyelv: az aspektusok leprogramozása aspektusszövő (weaver): a nyelveket összekombinálja a programok, a megfelelő nyelveken megvalósítva. kapcsolódási pont: a komponens nyelv szintaktikai elemei, melyekhez az aspektusok kapcsolódnak
AspectJ általános célú, aspektus-orientált kiterjesztése a Java nyelvnek elemei: Kapcsolódási pont (join point) Vágási pont (pointcut) Tanács (advice) Típusközi deklaráció (Inter-type declarations) Aspektus (aspect)
XML Az extensible Markup Language(XML) W3C ajánlás (3. kiadás: 2004. február) nyelveket lehet definiálni, melyek dokumentum osztályokat adnak meg hierarchikus adatok leírására; logikai struktúra a tagek segítségével jól formázott, érvényes dokumentum sok további ajánlás épül rá
XSLT és XPath extensible Stylesheet Language Transformations: XML dokumentumok transzformációja XML Path: olyan nyelvet definiál, amellyel XML dokumentumok részei címezhetőek az XSLT XPath kifejezésekkel éri el az XML dokumentumok részeit
Példa: XML + XSLT <?xml version="1.0?> <?xml-stylesheet type="text/xsl" href="simple.xsl"?> <list> <element value="7"/> <element value="6"/> </list> simple.xml simple.xsl <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/trans form"> <xsl:template match="/"> <html> <head><title>list</title></head> <body> Ez egy lista: <xsl:apply-templates/> </body></html> </xsl:template> <xsl:template match="list"> <ul><xsl:apply-templates/></ul> </xsl:template> <xsl:template match="element"> <xsl:if test="@value > 5"> <li><xsl:value-of select="@value"/></li> </xsl:if> </xsl:template> </xsl:stylesheet>
Példa: Az eredmény
Az AspectJ XML reprezentációja az XML formátum kialakítása: emberi olvasásra is alkalmas legyen a nyelvi elemeket felülről-lefelé alakítjuk át cél: lehető legtöbb elemet alakítsuk át az XML dokumentumok felhasználása XSLT: automatikus átalakítás többféle kimenet a felhasználás módjának megfelelően
Példa: az XML formátum (1) public aspect SimpleAspect { //... } <?xml version="1.0" encoding="utf-8"?> <aspect name="simpleaspect" modifier="public"> </aspect>
Példa: az XML formátum (2) pointcut argcheck(int score): call(void Proba.doSomething(int)) && args(score); <pointcut> <name>argcheck</name> <formals> <formal type="int" name="score"/> </formals> <and> <primitive type="call"> void Proba.doSomething(int) </primitive> <primitive type="args">score</primitive> </and> </pointcut>
Példa: az XML formátum (3) before(int score): argcheck(score) { if( score < 0 score > 100 ) throw new IllegalArgumentException("illegal score: "+score); } <advice type="before"> <formals> <formal type="int" name="score"/> </formals> <pointcut> <name>argcheck</name> <exposes>score</exposes> </pointcut> <body> if( score < 0 score > 100 ) throw new IllegalArgumentException("illegal score:"+score); </body> </advice>
Az XML felhasználási módjai AspectJ kód előállítása automatikus kódelőállítása Akkor van értelme, ha nincs AspectJ kód a XML állomány tartalmazhat dokumentációt HTML alapú dokumentáció egy lépésben bytecode előállítása a fordító az XML és a Java forrásokat fordítja le
Példa: AspectJ kód előállítása (1) Aspektus generálása: <xsl:template match="aspect"> <xsl:value-of select="@modifier"/> <xsl:text> aspect </xsl:text> <xsl:value-of select="@name"/> { <xsl:apply-templates select="pointcut"/> <xsl:apply-templates select="advice"/> } </xsl:template>
Példa: AspectJ kód előállítása (2) Vágási pont generálása: <xsl:template match="pointcut"> pointcut <xsl:apply-templates select="name"/> <xsl:apply-template select="formals"/> <xsl:apply-templates select="and"/> <xsl:apply-templates select="primitive"/> <xsl:text>;</xsl:text> </xsl:template> <xsl:template match="primitive"> <xsl:value-of select="@type"/>( <xsl:apply-templates/> ) </xsl:template>
Összefoglalás, további lehetőségek
Köszönöm a figyelmet! Kérdések, megjegyzések?