Metaobjekti - Metaobject

Vuonna tietojenkäsittelytiede , eli Metaoliolla on esine , joka manipuloi, luo, kuvaa tai työkoneiden esineitä (itse). Objektia, jota metaobjekti koskee, kutsutaan perusobjektiksi. Osa metaobjektin mahdollisesti määrittelemistä tiedoista sisältää perusobjektin tyypin , käyttöliittymän , luokan , menetelmät , attribuutit , jäsennyspuun jne. Metaobjektit ovat esimerkkejä tietojenkäsittelytieteen heijastuskäsitteestä , jossa järjestelmällä on pääsy (yleensä ajon aikana) oma sisäinen rakenne. Reflektio antaa järjestelmälle mahdollisuuden kirjoittaa itsensä olennaisesti uudestaan, muuttaa omaa toteutustaan ​​sen toteutuessa.

Metaobject-protokolla

Metaoliolla protokolla (MOP) antaa sanaston ( protokolla ) pääsyn ja manipuloida rakennetta ja käyttäytymistä järjestelmien esineitä. Metaobjektiprotokollan tyypillisiä toimintoja ovat:

  • Luo tai poista uusi luokka
  • Luo uusi ominaisuus tai menetelmä
  • Aiheuttaa luokan perimään toisen luokan ("muuta luokan rakennetta")
  • Luo tai muuta koodi, joka määrittelee luokan menetelmät

Metaobject-protokolla on ristiriidassa Bertrand Meyerin avoimen / suljetun periaatteen kanssa , jonka mukaan ohjelmistoobjektijärjestelmien tulisi olla avoimia laajennettaviksi, mutta suljettuina muokkausta varten . Tämä periaate tekee tehokkaan eron kohteen laajentamisen lisäämällä siihen ja kohteen muokkaamisen määrittelemällä se uudelleen ehdottamalla, että ensimmäinen on toivottava laatu (" esineiden tulisi olla laajennettavissa vastaamaan tulevaisuuden käyttötapausten vaatimuksia "), kun taas jälkimmäinen ei ole toivottavaa (" objektien tulisi tarjota vakaa käyttöliittymä, jota ei tarkisteta yhteenvedossa "). Metaobject -protokolla sitä vastoin paljastaa avoimesti esineiden ja koko objektijärjestelmän sisäisen koostumuksen itse järjestelmän kannalta. Käytännössä tämä tarkoittaa, että ohjelmoijat voivat käyttää objekteja määrittelemään itsensä uudelleen, mahdollisesti melko monimutkaisella tavalla.

Lisäksi metaobjektiprotokolla ei ole vain käyttöliittymä "taustalla olevaan" toteutukseen; pikemminkin, kautta Metaoliolla protokolla esine järjestelmä on rekursiivisesti toteutetaan kannalta on meta -object järjestelmä, joka itsessään on teoreettisesti toteutetaan ehtojen meta -metaobject järjestelmä, ja niin edelleen, kunnes mielivaltaisen perustapauksessa (johdonmukainen tila esineen järjestelmän ) määritetään siten, että protokolla sinänsä on rekursiivinen toiminnallinen suhde näiden toteutustasojen välillä.

Objektijärjestelmien toteuttaminen tällä tavoin avaa mahdollisuuden radikaaliin harkinnanvaraan uudelleensuunnitteluun, joka tarjoaa syvän joustavuuden, mutta tuo esiin mahdollisesti monimutkaisia ​​tai vaikeasti ymmärrettäviä metastabiiliuskysymyksiä (esimerkiksi objektijärjestelmä ei saa päivittää destruktiivisesti omaa metaobjektiprotokollaansa - sisäistä itsensä esitys - mutta joidenkin päivitysten mahdollista tuhoavuutta ei ole triviaalia ennustaa ja sitä voi olla vaikea perustella), riippuen rekursiivisesta syvyydestä, johon halutut modifikaatiot levitetään. Tästä syystä metaobjektiprotokollaa, kun se esiintyy kielellä, käytetään yleensä säästeliäästi ja erikoistarkoituksiin, kuten ohjelmisto, joka muuntaa muut ohjelmistot tai itse hienostuneilla tavoilla, esimerkiksi käänteisessä suunnittelussa.

Ajonaika ja kokoamisaika

Kun kokoelma ei ole käytettävissä ajon aikana, metaobject-protokollan toteuttamiseen liittyy muita komplikaatioita. Esimerkiksi tyyppihierarkiaa on mahdollista muuttaa tällaisella protokollalla, mutta se voi aiheuttaa ongelmia koodilla, joka on koottu vaihtoehtoisella luokamallin määrittelyllä. Jotkut ympäristöt ovat löytäneet tähän innovatiivisia ratkaisuja, esimerkiksi käsittelemällä metaobjektiongelmia käännösaikana. Hyvä esimerkki tästä on OpenC ++ . Semanttinen Web olio-malli on dynaaminen kuin useimmat tavalliset esine järjestelmät, ja se on yhdenmukainen suorituksenaikaisien Metaoliolla protokollia. Esimerkiksi semanttisen Web-mallin luokkien odotetaan muuttavan suhteitaan toisiinsa, ja luokittelijana tunnetaan erityinen päätelmämoottori, joka voi vahvistaa ja analysoida kehittyviä luokkamalleja.

Käyttö

Ensimmäinen metaobjektiprotokolla oli Xerox PARC: ssa kehitetyssä Smalltalk- olio-ohjelmointikielessä . Common Lisp Object System (CLOS) tuli myöhemmin ja vaikuttivat Smalltalk protokollan sekä Brian C. Smith alkuperäisen tutkimukset 3-Lisp kuin ääretön torni arvioijien. CLOS-malli, toisin kuin Smalltalk-malli, sallii luokassa olla useampi kuin yksi superluokka ; tämä lisää monimutkaisuutta asioissa, kuten luokan hierarkian linjan ratkaisemisessa jossakin objektiinstanssissa. CLOS mahdollistaa myös dynaamisen monimenetelmän lähetyksen , joka hoidetaan yleisten toimintojen kautta viestien välittämisen sijaan, kuten Smalltalkin yksittäisessä lähetyksessä . Vaikuttavin kirja, joka kuvaa metaobjektiprotokollan semantiikkaa ja toteutusta Common Lispissä, on The Art of the Metaobject Protocol, kirjoittanut Gregor Kiczales et ai.

Metaobject-protokollia käytetään myös laajasti ohjelmistotekniikan sovelluksissa. Lähes kaikissa kaupallisissa CASE-, uudelleensuunnittelu- ja integroituissa kehitysympäristöissä on jonkinlainen metaobjektiprotokolla, joka edustaa ja manipuloi suunnittelun artefakteja.

Metaobjektiprotokolla on yksi tapa toteuttaa näkökulmapohjainen ohjelmointi . Monet MOP: n varhaisista perustajista, mukaan lukien Gregor Kiczales , ovat sittemmin siirtyneet olemaan näkökeskeisen ohjelmoinnin ensisijaisia ​​puolestapuhujia. Kiczales et ai. ja PARC palkattiin suunnitella AspectJ varten Java , kieli, jolla ei ole natiivin Metaoliolla protokolla.

Katso myös

Viitteet

Ulkoiset linkit