Aspektiohjelmointiympäristöt



Samankaltaiset tiedostot
arvostelija OSDA ja UDDI palveluhakemistoina.

Selainpelien pelimoottorit

Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages

Ohjelmointi 1 / syksy /20: IDE

Koht dialogia? Organisaation toimintaympäristön teemojen hallinta dynaamisessa julkisuudessa tarkastelussa toiminta sosiaalisessa mediassa

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

Aika/Datum Month and year Kesäkuu 2012

Pro gradu -tutkielma Meteorologia SUOMESSA ESIINTYVIEN LÄMPÖTILAN ÄÄRIARVOJEN MALLINTAMINEN YKSIDIMENSIOISILLA ILMAKEHÄMALLEILLA. Karoliina Ljungberg

! #! %! & #!!!!! ()) +

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Arkkitehtuurinen reflektio

Maailman muutosta tallentamassa Marko Vuokolan The Seventh Wave -valokuvasarja avauksena taidevalokuvan aikaan

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Luonnontieteiden popularisointi ja sen ideologia

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Katsaus korruption vaikutuksesta Venäjän alueelliseen talouskasvuun ja suoriin ulkomaisiin investointeihin

Oppimateriaalin kokoaminen ja paketointi

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

Visual Basic -sovelluskehitin Juha Vitikka

5. HelloWorld-ohjelma 5.1

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

OpenUP ohjelmistokehitysprosessi

Hallintaliittymän käyttöohje

Kieliversiointityökalu Java-ohjelmistoon. Ohje

Tiedekunta/Osasto Fakultet/Sektion Faculty Valtiotieteellinen tiedekunta

Ohjelmistojen mallintaminen, mallintaminen ja UML

11/20: Konepelti auki

P e d a c o d e ohjelmointikoulutus verkossa

Hallintomallit Suomen valtionhallinnon tietohallintostrategioissa

Hellä ensikosketus. Tomi Kiviniemi

Eclipse 3.2 pikku opas versio 1.0. Esittely Uuden projektin perustaminen Sovelluksen luominen Koodin siistiminen Vinkkejä

arvostelija Aspektiohjelmointi Juuso Hyvönen Helsinki Kandidaatintutkielma HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Työkalut ohjelmistokehityksen tukena

5. HelloWorld-ohjelma 5.1

UpdateIT 2010: Editorin käyttöohje

Eclipse 3.1 Pikaopas versio 1.0

MOBISITE-TYÖKALUN SISÄLTÄMÄT TOIMINNOT

OptimePortal ja OptimeEvent versioiden yhteenveto joulukuu

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Hakemistojen sisällöt säilötään linkitetyille listalle.

13/20: Kierrätys kannattaa koodaamisessakin

Tik Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu KÄYTTÖOHJE. LiKe Liiketoiminnan kehityksen tukiprojekti

Ylläpito-ohje. Matematiikan oppifoorumi. Carl Johansson Jukka Kariola Outi Marttila Helena Venäläinen Sampsa Virtanen. Ohjaaja.

15. Ohjelmoinnin tekniikkaa 15.1

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen

CTRL+F Android-sovellus

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito

.NET ajoympäristö. Juha Järvensivu 2007

Tiedostonhallinta. Yleistä

Avoimet ohjelmistokehykset

Ohjelmiston testaus ja laatu. Testaustasot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Ohjelmoinnin peruskurssien laaja oppimäärä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

4. Luokan testaus ja käyttö olion kautta 4.1

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

Opintokohteiden muokkaus WebOodissa. Sisällys. Aluksi

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

4. Lausekielinen ohjelmointi 4.1

Asko Ikävalko, k TP02S-D. Ohjelmointi (C-kieli) Projektityö. Työn valvoja: Olli Hämäläinen

Ylläpito. Ylläpidon lajeja

TIE Principles of Programming Languages CEYLON

Malliperustainen ohjelmistokehitys (Model-Driven Engineering, MDE)

Asuntojen neliöhinnan vaihtelu Helsingissä ( )

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A Kandidaatintyö ja seminaari

Groovy. Niko Jäntti Jesper Haapalinna Group 31

SQL Buddy JAMK Labranet Wiki

arvostelija Turvallisuuskriittisissä, sulautetuissa järjestelmissä esiintyvien ohjelmistovaatimusten virheanalyysi Jarkko-Juhana Sievi

Eclipse & WindowBuilder

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Test-Driven Development

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Joonas Ruotsalainen GIT PIKAOPAS. Tutkielma 2011

15. Ohjelmoinnin tekniikkaa 15.1

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

Dokumentin nimi LOGO:) Tampereen teknillinen yliopisto. Ryhmä XXX: Projektiryhmän nimi Projektin nimi

erasmartcardkortinlukijaohjelmiston

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Test-Driven Development

ejuttu ohjeet kuinka sitä käytetään.

DXL Library ja DXL-kielen olemus. Pekka Mäkinen SoftQA Oy http/

Ohjelmoinnin peruskurssi Y1

Mainosankkuri.fi-palvelun käyttöohjeita

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Visma Fivaldi -käsikirja Asiakaskohtaiset hinnat

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Testivetoinen ohjelmistokehitys

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

Transkriptio:

hyväksymispäivä arvosana arvostelija Aspektiohjelmointiympäristöt Jesse Hallio Helsinki 23.11.2005 seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto Fakultet/Sektion Faculty Laitos Institution Department Matemaattis luonnontieteellinen Tekijä Författare Author Jesse Hallio Työn nimi Arbetets titel Title Tietojenkäsittelytieteen laitos Aspektiohjelmointiympäristöt Oppiaine Läroämne Subject Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages seminaari 23.11.2005 8 sivua Tiivistelmä Referat Abstract Aspektipohjainen ohjelmointi on kasvattanut suosiotaan 1990-luvun lopulta alkaen. Aspektipohjaista ohjelmointia helpottavat kehitystyökalut ovat yleistyneet vasta viimevuosina. AspectJ kieli, AspectJ developer tools (AJDT) ja Eclipsekehitysympäristö ovat työkalujen kehityksen kärjessä. Tämä kirjoitelma pyrkii kuvaamaan AJDT 1.3:sen tarjoamat työkalut Eclipse kehitysympäristössä AspectJ:lle. Avainsanat Nyckelord Keywords Säilytyspaikka Förvaringsställe Where deposited Muita tietoja övriga uppgifter Additional information

Sisältö ii 1 Johdanto 1 2 Aspektityökalut 2 3 AspectJ ja Eclipse 3 3.1 AspectJ kääntäjä............................. 3 3.2 Selaaminen ja navigointi......................... 4 3.3 Muokkaaminen.............................. 5 3.4 Muutoksenhallinta............................ 5 3.5 Debugger................................. 6 3.6 Dokumentointi.............................. 6 3.7 Tulevaisuus................................ 6 4 Yhteenveto 7 Lähteet 7

1 Johdanto 1 Aspektipohjainen ohjelmointi[klm97] on saavuttanut ohjelmistokehittäjien keskuudessa suurta huomiota 1990-luvun lopulta alkaen. Aspektipohjaisessa ohjelmoinnissa on ajatuksena esittää ohjelmiston poikkileikkaavia ei-toiminnallisia ominaisuuksia, joiden toteuttaminen perinteisen ohjelmointiparadigman yhteydessä on äärimmäisen työlästä ja virhealtista [KLM97]. Poikkileikkaavia ominaisuuksia ovat esimerkiksi lokitus ja käyttöoikeuksien varmistaminen. Aspekteilla voidaan myös toteuttaa pienempään ohjelman osaan kohdistuvia toiminnallisuuksia, kuten välimuistitusta. Aspektipohjaisessa ohjelmoinnissa koko ohjelmakoodi koostuu toiminnallisesta ohjelmakoodista, aspektien liitoskohtamäärittelyistä sekä kehotteista. Kehotteet määrittelevät aspektin sisältämän ohjelmakoodin. Liitoskohtamäärittelyt määrittelevät millä perusteella kohdat (liitoskohdat) toiminnallisesta ohjelmakoodista valitaan joihin kehotteiden sisältämä koodi liitetään. Kehotteet ja liitoskohtamäärittelyt sijaitsevat eri tiedostoissa kuin toiminnallinen ohjelmakoodi, eikä toiminnallisessa ohjelmakoodissa ole mitään viitteitä suoraan liitoskohtamäärittelyihin. Aspektit lisätään toiminnalliseen ohjelmakoodiin punonnalla, joka voidaan suorittaa käännösaikaisesti (staattinen punonta) tai ajonaikaisesti (dynaaminen punonta) [KLM97]. Aspektit siirtävät läpileikkaavan toiminnallisuuden ohjelmakoodin keskitetysti kehotteisiin, joten läpileikkaavan toiminnallisuuden muuttuessa tai uusia läpileikkaavia toiminnallisuuksia lisätessä ohjelmakoodia tarvitsee muuttaa vain yhdestä paikasta ja se tulee käyttöön kaikkialla mihin liitoskohtamäärittely on kehotteen määritellyt liitettäväksi. Toinen aspektipohjaisen ohjelmoinnin hyöty on se, että toiminnallista ohjelmakoodia toteuttavan ohjelmoijan ei yleensä tarvitse olla tietoinen aspekteista toteuttaessaan ohjelmakoodia. Se on myös suuri haitta, sillä mikään toiminnallisessa ohjelmakoodissa ei osoita mitkä kehotteet vaikuttavat mihinkin kohtaan toiminnallista ohjelmakoodia [KLM97]. Seuraavassa luvussa käsitellään yleisesti toiminnallisuuksia mitkä liittyvät aspektiohjelmointiympäristöihin. Koska AspectJ:stä on tullut aspektikielien tunnustetuin toteutus sekä Eclipse kehitysympäristöstä suosituin aspektikehitysympäristö, luvussa kolme esitellään AspectJ:n käyttöä Eclipse kehitysympäristössä.

2 Aspektityökalut 2 Aspektipohjaisen ohjelmointikielen lisääminen olemassaolevaan kieleen vaatii vähintään yhden työkalun: punojan. Punojan tehtävänä on liittää määritellyt kehotteet toiminnalliseen ohjelmakoodiin joko ennen pääkielen kääntämistä, sen kääntämisen jälkeen tai ajonaikaisesti. Käytännössä jokainen aspektijärjestelmä tarjoaa vähintään komentoriviltä ajettavan punojan jotta kieltä pystyy käyttämään. Komentorivityökalut eivät tarjoa yleensä kehittämistä helpottavia palveluita vaan suorittavat vain pelkän punonnan. Esimerkiksi AspectC++:lle [SGS02] on tarjolla vain punoja. Integroidut kehitysympäristöt tarjoavat normaaleille ohjelmointikielille yksittäisen ohjelmakooditiedoston selailua tehokkaamman tavan navigoida ohjelmiston sisällä. Kehitysympäristö tunnistaa ohjelmointikielen ja rakentaa puumaisia listoja eri pakkausten, luokkien, metodeiden ja muuttujien sisällöstä ja mahdollistaa tehokkaan navigoinnin eri ohjelmakooditiedostojen välillä. Ohjelmaa kirjoittaessa editori tarjoaa erinäisiä kirjoitusapuja ohjelmoijalle, kuten luokka-, muuttuja- ja metodinimen täydennystä ja metodien mahdollisten argumenttilistojen esittämistä. Aspektipohjaiset ohjelmointikielet lisäävät tarvetta ohjelmakoodin selailun avuille sekä tukea aspektikielen kirjoittaselle kuten normaalillekin ohjelmointikielelle. Erityisen hyödyllinen navigointirakenne aspektikielille on esitys kehotteista ja liitoskohtamäärittelyistä niihin ohjelmiston liitoskohtiin joihin punonnassa kehotteen sisältö liitetään, sekä ohjelmakoodissa esitys siitä, mitkä kehotteet ollaan punomassa mihinkin kohtaan ohjelmakoodia [MWB01]. Normaalin ohjelmakoodin refaktorointityökalut ovat osoittautuneet myös hyödyllisiksi aspektiohjelmoinnissa. Niiden avulla saadaan tehokkaasti esille uusia liitoskohtia olemassaolevasta ohjelmakoodista johon on tarkoitus lisätä kehotteita [MWB01]. Myös aspekti refaktorointityökalut, joiden kohde on aspektit itse, auttavat itse aspektien ylläpidossa ja jatkokehityksessä. Aspektitietoinen virheidenpoistotyökalu (debugger) on myös olennainen osa aspektiohjelmointikielen integroimista ohjelmistoympäristöön. Muita hyödyllisiä työkaluja ovat automaattiset dokumentoinningeneroijat sekä hyvälaatuinen dokumentointi aspektikielestä itsestään ja aspektikielen integroinnin käytöstä kehitysympäristössä [Ker05b].

3 AspectJ ja Eclipse 3 Java alustalle on tarjolla useita aspektikieliä sekä integroituja kehitysympäristöjä. Aspektikielistä aktiivisimmin käytettyjä ovat AspectJ[Asp05], Spring AOP[Spr05] ja JBoss AOP[JBo05]. Integroiduista kehitysympäristöistä suosituimpia ovat Eclipse[Ecl05], NetBeans[Net05], JBuilder[JBu05] ja JDeveloper[JDe05]. Kaikista mahdollisista edellämainituista aspektikieli kehitysympäristö pareista vain AspectJ:n kehitystyökalut Eclipselle[AJD05] seuraavat sekä kehitysympäristön ja aspektikielen kehitystä aktiivisesti ja ovat jatkuvan kehityksen kohteena [Ker05a]. Tämä työkalukuvaus keskittyy AspectJ:n versioon 1.5, Eclipsen versioon 3.1 ja AspectJ:n kehitystyökalujen Eclipselle (AspectJ Development Tools, AJDT) versioon 1.3. Tätä kirjoittaessa AspectJ:n versio 1.5 ei ole vielä julkaistu, vaan kuvaus keskittyy milestoneen 5. 3.1 AspectJ kääntäjä Koska AspectJ laajentaa java kielen syntaksia, niin punoja on normaalista kääntäjästä eroava uusi kääntäjä, joka korvaa normaalin java kääntäjän ja tuottaa suoraan luokkatiedostojen tavukoodin. Punoja, ajc, on laajennus Eclipsen kääntäjän päälle, mutta toimii Eclipse kehitysympäristöstä täysin erillään ja myös komentoriviltä aivan kuten javan normaali kääntäjä, javac. AspectJ:n tapa toteuttaa aspektit laajentamalla javaa rajoittaa myös sillä tehtyjen projektien yhteydessä käytettäviä muita työkaluja. Työkalut, jotka käsittelevät java lähdekoodia suoraan, eivät toimi AspectJ:n kanssa. Jokainen ulkoinen ja erillinen työkalu pitää erikseen muokata tukemaan AspectJ:tä [Ker05b]. Koska AspectJ:n kääntäjä on laajennettu versio Eclipsen käyttämästä kääntäjästä, toimii se suoraan Eclipsen sisällä. Kääntäjä on täysin integroitu kehitysympäristöön ja tukee sen kaikkia ominaisuuksia, kuten ohjelmakoodin kääntämistä samaan aikaan tiedostojen muokkaamisen kanssa rinnakkain, sekä käännösvirheiden esittämistä problems näkymässä. Koska AspectJ on laajennus java kieleen, pystyy kääntäjä tarkistamaan staattisesti (käännösaikaisesti) aspektiohjelmakoodin ja esittämään koodista virheet ongelmat näkymässä (Problems) myös aspektikoodin osalta sitä mukaa kun aspektia muokataan [Ker05b]. Jos käytettävissä on vain class tiedostot tai jar paketti ohjelmakoodista, tai muusta syystä aspektit ovat erillään java lähdekoodista, eivät seuraavassa aliluvussa mainitut selaamiseen ja navigointiin tarkoitetut työkalut ole käytettävissä. AJDT tarjoaa

4 kuitenkin mahdollisuuden selvittää mihin aspektit punotaan. Eclipsen käännöksen saa tulostamaan ongelmat näkymään jokaisesta punonnasta ilmoitusrivin joka kertoo mihin luokkaan ja mille riville kehote on punottu. Lista päivittyy aina Eclipsen suorittaessa käännöksen, joten aspektien lisääminen vain binäärimuodossa saataviin ohjelmiin on mahdollista ilman että työskentelyn joutuu tekemään täysin ilman apuvälineita [Cha05]. 3.2 Selaaminen ja navigointi AJDT tarjoaa AspectJ projektien selailuun ja navigointiin tehokkaita työkaluja. Aspektitietoisuus on integroitu moniin Eclipsen normaaleista näkymistä, ja AJDT tuo mukanaan muutaman uuden näkymän. Pieni mutta äärimmäisen hyödyllinen lisäys Eclipsen normaaleihin näkymiin on koristaja (decorator), pieni oranssi nuolenpää joka lisätään java elementtien pikku ikonin vasempaan reunaan. Nuolenpää on nähtävillä kaikissa listoissa, joissa on java elementtejä, kuten paketti (Package), yleiskatsaus (Outline) ja ristiinviittaus näkymissä (Cross References). Nuolenpää kertoo, että java elementtiin vaikuttaa kehote suoraan, tai se sisältää liitoskohtamäärittelyn joka liittyy kehotteeseen [Cha05]. AJDT:hen liittymättömiä, mutta aspektien kanssa työskentelyssä käteviä työkaluja ovat Eclipsen kattavat refaktorointityökalut erityisesti vanhan ohjelmakoodin muokkaamisessa aspektikäyttöön. Eclipsen normaali Paketti näkymä näyttää AJDT:n kanssa myös aspektit ja aspektimäärittelyt. Erityyppiset kehotteet eritellään toisistaan erilaisen pikku ikonien avulla, ennen (before), jälkeen (after) ja ympärillä (around) [Cha05]. Myös muilla aspektimäärittelyillä on omat pikku ikoninsa, kuten määrittele varoitus (declare warning) ja määrittele virhe (declare error) [ChH04]. Eclipsen normaalin Yleiskatsaus näkymän rinnalle saa avattua ristiinviittaus näkymän. Ristiinviittaus näkymä seuraa oletuksena editori näkymää (tarvittaessa seuraamisen saa pois päältä) ja esittää ristiinviittauksia aspektien ja muun ohjelmakoodin välillä. Kun aktiivisessa editori näkymässä ja siten myös yleiskatsaus näkymässä on luokan lähdekoodi, näyttää ristiinviittaus näkymä mitkä kehotteet vaikuttavat mihinkin muokattavan luokan metodiin. Kehotteista pääsee navigoimaan kehotteiden lähdekoodiin. Kun aktiivisessa editori näkymässä ja siten myös yleiskatsaus näkymässä on kehotteen lähdekoodi, näyttää ristiinviittaus näkymä mihin luokkiin ja metodeihin kehote vaikuttaa. Listatuista metodeista pääsee navigoimaan metodien lähdekoodiinkoodiin [Cha05]. Yleiskatsaus näkymän ja ristiinviittaus näkymän avulla on tehokasta navigoida metodeiden ja niihin vaikuttavien aspektien väliä, jo-

5 ka vähentää olennaisesti ongelmia jotka muodostuvat tietämättömyydestä mitkä aspektit vaikuttavat mihinkin luokkiin, liitoksen molemmista päistä katsoen. Projektitason visualisointiin AJDT tarjoaa aspektivisualisointi perspektiivin (Aspect Visualization Perspective). Aspektivisualisaattori esittää projektissa olevat luokat pystyssä olevina palkkeina luokkien pituuksien mukaan. Viereiseltä listalta voi poimia projektiin kuuluvia aspekteja joiden vaikutukset eri luokkiin esitetään palkkeihin väritettyinä vaakaviivoina suhteellisiin kohtiin suhteessa lähdekoodiin. Visualisaattoria voi myös käyttää navigointiin; hiirellä voi valita palkeista kohdan minkä lähdekoodi ladataan perspektiivin editori näkymään. Aspektivisualisaattori tarjoaa hyvän yleiskuvan projektista ja aspektien vaikutusten laajuudesta, ja on hyvä työkalu tutustuessa uuteen aspekteja käyttävään projektiin [ChH04, Cha05]. 3.3 Muokkaaminen Lähdekoodia selatessa ja muokatessa AJDT lisää editori näkymän vasempaan reunaan pikku ikonin kertomaan jos riviin liittyy kehote. Ikonin tyyppi voi olla ennen, jälkeen tai ympärillä. Lisäksi ikonissa voi olla pieni kysymysmerkki, joka kertoo, että päätös kehotteen ajamisesta tapahtuu vasta ajonaikaisesti. Oikealla hiiren nappulalla saa ikonista esiin kontekstivalikon, josta voi navigoida ristiinviittaus-näkymän tavoin ohjelman lähdekoodista kohtaan liittyviin kehotteisiin, tai kehotteen lähdekoodista ohjelman lähdekoodin kohtiin mihin kehote vaikuttaa [Cha05]. 3.4 Muutoksenhallinta AJDT tarjoaa myös apua muutoksenhallintaan aspektiprojektissa. Läpileikkausten vertailu (Crosscutting Comparison) on työkalu kahden eri aikaan vallinneen tilanteen vertailuun aspektien vaikutuksissa ohjelmakoodiin. Työkalu on tehokas löytämään tilanteita missä ohjelmakoodin muutosten takia liitoskohtamäärittelyt eivät enää osu haluttuihin kohtiin. Työkalu tarjoaa aspektien käyttöön liittyvät muutokset listana, jossa on lisäykset ja poistot sekä luokat ja aspektit joihin muutokset kohdistuvat. Listaa voi rajoittaa yhteystyyppien mukaan ja aspektien sekä luokkien nimistä voi navigoida kyseisiin tiedostoihin, jos tiedostot ovat vielä olemassa. Vertailua voi tehdä kahden tallennetun ajan pisteen välillä, tai tallennetun ajan pisteen ja nykyhetken välillä. Nykyhetkeen vertaillessa lista päivittyy aina käännöksen yhteydessä automaattisesti, joka antaa hyvän kuvan muutosten vaikutuksista ohjelmakoodia kirjoittaessa [Cha05].

6 3.5 Debugger Virheidenpoistotyökalu, debugger, on tehokas työkalu virheiden poistamisessa. Eclipsen normaali debugger toimii AJDT:n kanssa täysin samalla tavalla, eikä eroa mitenkään Eclipsen normaalista, vaan on yhtä helppokäyttöinen myös aspektikoodin kanssa. Mitään rajoitteita debuggerin käytössä ei ole. Ainoastaan, jos tarvitsee kyetä pysähtymään ympärillä kehotteisiin, joutuu muuttamaan asetuksia kääntäjästä laittamalla inline toiminnon pois päältä [ChH04]. 3.6 Dokumentointi Dokumentointia kehitysympäristössä voidaan käsittää kahdella tavalla. Se voidaan käsittää tarjoittavan joko AJDT:n ja AspectJ:n dokumentointina, tai AspectJ:llä tehdyn projektin dokumentointina. AJDT:n ja AspectJ:n dokumentaatio integroituu saumattomasti osaksi Eclipsen help toiminnetta, ja haluamansa tiedon löytää tehokkaasti Eclipsen help:in hakutoiminnolla. AspectJ tarjoaa oman kääntäjänsä tavoin myös oman JavaDoc työkalun, ajdoc:n. Ajdoc on tarkoitettu korvaamaan javan oma javadoc komento aivan samalla tavalla kuin AspectJ:n ajc korvaa javan javac:in. Ajdoc luo ohjelmakoodista samanlaista dokumentaatiota kuin normaali javadoc:kin, mutta lisää jokaisen metodin kuvaukseen tiedon mitkä kehotteet liittyvät metodiin. Kehotteen nimi on linkki kehotteen omaan javadoc sivuun [ChH04]. 3.7 Tulevaisuus Tulevaisuuden näkymissä AJDT:lle nähdään refaktoroinnit aspekteille kun tutkimus edistyy aiheesta enemmän [Ker05b, Cha05], lisääntynyt tuki aspektikirjastojen kehittämiseen ja käyttämiseen [Cha05] sekä uusia työkaluja rajoittaa informaatiotulvaa mikä syntyy kun ohjelmassa käytetään valtavia määriä läpileikkaavia toimintoja [Cha05]. AJDT:n tulevaisuuden näkymät ovat kuitenkin epävarmat, sillä AJDT:n kehitysprosessi on hyvin käyttäjäläheinen. Kehityksen prioriteetit määrittelevät käyttäjät tarpeineen ja siksi käyttäjiä rohkaistaan osallistumaan keskusteluun tulevista laajennuksista [Cha05].

4 Yhteenveto 7 Aspektikielistä Javan AspectJ ja sen kehitystyökalu, AJDT, Eclipse kehitysympäristöön ovat toimiva kokonaisuus olennaisia työkaluja aspektiohjelmointiin. AJDT tarjoaa monia ohjelmakoodin ja aspektikoodin selailutyökaluja, integroidun kääntäjän, ohjelmakoodin kirjoittamista aspektiympäristöön helpottavia toimintoja, integroidun debuggaus työkalun ja dokumentointilaajennuksen javan normaaliin dokumentointityökaluun sekä yksinkertaisen aputyökalun muutoksenhallintaan erityisesti aspektiympäristössä. Työkalujen kehitys on aktiivista ja seuraa tehokkaasti sekä AspectJ:n että Eclipsen kehitystä joten AspectJ:n tulevaisuus näyttää hyvältä. Lähteet AJD05 Asp05 ChH04 Cha05 Ecl05 JBo05 JBu05 JDe05 Ker05a AJDT: AspectJ development tools website. http://www.eclipse.org/ ajdt/. [21.11.2005] AspectJ: a seamless aspect-oriented extension to the java tm programming language. http://www.eclipse.org/aspectj/. [22.11.2005] Chapman, M. ja Hawkins, H., Develop aspect-oriented Java applications with Eclipse and AJDT. IBM developerworks. http://www-128.ibm. com/developerworks/library/j-ajdt/. [21.11.2005] Chapman, M., AOP@Work: New AJDT releases ease AOP development. IBM developerworks. http://www-128.ibm.com/ developerworks/java/library/j-aopwork9/. [21.11.2005] The Eclipse Development Environment. http://www.eclipse.org/. [22.11.2005] JBoss Aspect Oriented Programming (AOP). http://www.jboss.org/ products/aop. [22.11.2005] Borland JBuilder Development Environment. http://www.borland. com/jbuilder/. [22.11.2005] Oracle JDeveloper integrated development environment. http://www. oracle.com/technology/products/jdev/index.html. [22.11.2005] Kersten, M., AOP@Work: AOP tools comparison, Part 1. IBM developerworks. http://www.ibm.com/developerworks/java/library/ j-aopwork1/. [21.11.2005]

8 Ker05b Kersten, M., AOP@Work: AOP tools comparison, Part 2. IBM developerworks. http://www.ibm.com/developerworks/library/ j-aopwork2/. [21.11.2005] KLM97 MWB01 Kiczales, G., Lamping, J., Menhdhekar, A., Maeda, C., Lopes, C., Loingtier, J.-M. ja Irwin, J., Aspect-oriented programming. Teoksessa Proceedings European Conference on Object-Oriented Programming, Akşit, M. ja Matsuoka, S., toimittajat, osa 1241, Springer-Verlag, Berlin, Heidelberg, and New York, 1997, sivut 220 242. Murphy, G. C., Walker, R. J., Baniassad, E. L. A., Robillard, M. P., Lai, A. ja Kersten, M. A., Does aspect-oriented programming work? Comm. ACM, 44,10(2001), sivut 75 77. Net05 NetBeans Development Environment. http://www.netbeans.org/. [22.11.2005] SGS02 Spr05 Spinczyk, O., Gal, A. ja Schröder-Preikschat, W., AspectC++: An aspect-oriented extension to the C++ programming language. Proceedings of the Fortieth International Conference on Tools Pacific. Australian Computer Society, Inc., 2002, sivut 53 60. Spring Framework: Spring AOP: Aspect Oriented Programming with Spring. http://www.springframework.org/docs/reference/aop. html. [22.11.2005]