Meta- ja megaohjelmointi Tiivistelmä Laajat hajautetut järjestelmät ovat muun muassa Internetin laajetessa ja tietoliikenneohjelmistojen yleistyessä levinneet kaikkialle. Hajautettujen ohjelmistojen suunnittelu ja ohjelmointi on kuitenkin vaikeaa ja aikaa vievää puuhaa. Olio- ja komponenttipohjainen ohjelmien suunnittelu on osaltaan tuoneet helpotusta ohjelmien valmistukseen, mutta kaikkia ongelmia eivät nekään ole poistaneet. Esimerkiksi olioiden uudelleenhyödyntäminen ja hajautettujen järjestelmien muuttuvien ominaisuuksien huomioonottaminen on vieläkin hankalaa. Muita suunnittelun ja ohjelmoinnin ongelmia ovat erilaisten ohjelmistojärjestelmien yhteenliittäminen ja eri ohjelmointikielellä ohjelmoitujen sovellusten yhteensovittaminen ja laajentaminen. Tämän seminaarityön aikana kurkistamme kahteen tekniikkaan, megaohjelmointiin ja metaolioprotokolliin, jotka käyttävät ongelmien ratkaisemisessa hyödykseen metaolioita. Ohjelmistojärjestelmien koon kasvaessa tarvitaan tekniikkaa, jolla voidaan sovittaa sekä hallita suuria ja eri ohjelmointikielellä valmistettuja ohjelmia. Megaohjelmointi on teknologia suurien moduleiden, megamoduleiden ohjelmointiin. Megamodulit ovat toisistaan riippumattomasti ylläpidettyjä ohjelmistojärjestelmiä, joilla on omat sisäinen toiminta ja päämäärät, mutta jonka tietorakenteita ja toimintoja voidaan käyttää modulin ulkopuolelta. Metaolioprotokollat on yritys kehittää ohjelmointikieli, jolla voidaan yhdistää eri ohjelmointikielellä kirjoitettuja ohjelmia tai laajentaa olemassaolevan ohjelmointikielen semantiikkaa tuomalla kielelle uusia ominaisuuksia. Uusia kielelle tuotettuja ominaisuuksia voisi olla vaikka ohjelmoijan halu tehdä ohjelmia, joiden käyttäytymistä voidaan muuttaa ohjelman suorituksen aikana. Esimerkiksi ohjelmaa suorittaessa huomataan, että kärsii suoritusongelmasta ja toisella tavalla toteutettuna, ohjelma voisi suoriutua paremmin. Metaolioprotokollien avulla voidaan tehdä uusia toteutuksia ohjelman ongelmaosille ja parantaa näin suoritustehoa. Eräs esimerkki, joka on hyvin lähellä edellä mainittua, ja joka ottaa huomioon ohjelman käyttäytymisen erilaisissa tilanteissa on DART (Distributed Adaptive Run-Time). DART on sovellusalusta ajonaikaisten muutosten huomioonottavien hajautettujen sovellusten ohjelmointiin. DARTin tarkoituksena helpottaa ohjelmointia siten, että ohjelmia voidaan luoda suhteellisen abstraktilla tavalla.