Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Aspektus-orientált nyelvek XMLreprezentációja
Kincses RóbertDebreceni Egyetem, Informatikai Inté[email protected]
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
AOP alapelvek• Alapfogalmak:
– 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-stylesheettype="text/xsl"
href="simple.xsl"?><list><element value="7"/><element value="6"/></list>
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><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>
simple.xml
simple.xsl
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 ) thrownew 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 ) thrownew 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?