Ohjelmointirajapintojen siirtyminen (englanniksi: Application Programming Interface - API ) on tekniikka, jolla ohjelmointirajapinnan koodi muunnetaan toiseksi. Tähän on monia syitä: ohjelmointirajapinnan vanhentuminen, halu muuntaa koodi kielestä toiseen jne.
Viime aikoihin asti Kehittäjiä vaadittiin tekemään tämä tehtävä käsin. Kuitenkin äskettäin on luotu työkaluja Voit tehdä tämän automaattisesti.
Ohjelmointirajapintojen välisen vastaavuuden purkaminen (englanniksi: Mining API Mapping - MAM ) on tekniikka kahden eri kielen ohjelmointirajapintojen välisen vastaavuuden löytämiseksi ja suorittamiseksi.
Tämä tekniikka perustuu pikemminkin ohjelmointirajapinnan käyttöön kuin sen toteuttamiseen , ja tämä 3 syystä:
Siten tämä tekniikka rakentaa suhteet kahden eri kielen ohjelmointirajapinnan välille. Nämä suhteet ovat API-muunnoskaavion ( API Transformation Graph - ATG ) muodossa, mikä mahdollistaa halutun muunnoksen.
Tämä tekniikka toimii Java-ohjelmointirajapinnasta C # -ohjelmointirajapintaan.
Ensimmäinen vaihe muunnoksen suorittamisessa on löytää samanlaiset luokat nimen mukaan. Ohjelmointirajapintojen välisten vastaavuuksien purkaminen käyttää myös pakettien nimiä tarkentamaan hakua.
Kahden tekniikan avulla tämä tekniikka yrittää luoda parit seuraavan kaavan mukaisesti:
∀ c1 et c2 représentant des classes, ∃ un couple {c1, c2} si similarité{c1.nom, c2.nom} > SIM_THRESHOLDSIM_THRESHOLD edustaa kynnystä, jonka algoritmi on taitavasti määrittänyt .
Tämän jälkeen algoritmi yrittää löytää jokaiselle löydetylle parille attribuutit ja toiminnot, jotka muodostavat pareja, seuraavien kaavojen mukaisesti:
∀ a1 et a2 représentant des attributs, ∃ un couple {a1, a2} si similarité{a1.nom, a2.nom} > SIM_THRESHOLD ∀ f1 et f2 représentant des fonctions, ∃ un couple {f1, f2} si similarité{f1.nom, f2.nom} > SIM_THRESHOLDLopuksi jokaiselle löydetylle toiminnolle algoritmi yrittää löytää paikallisia muuttujia ja parametreja muodostavia parametreja seuraavien kaavojen mukaisesti:
∀ v1 et v2 représentant des variables locales, ∃ un couple {v1, v2} si similarité{v1.nom, v2.nom} > SIM_THRESHOLD ∀ p1 et p2 représentant des paramètres, ∃ un couple {p1, p2} si similarité{p1.nom, p2.nom} > SIM_THRESHOLDEsimerkiksi tämä tekniikka muodostaa parin välillä IndexFiles Java ja IndexFiles C #, koska niiden nimet ovat hyvin samanlaisia.
Ohjelmointirajapinnan muunnoskaavioSen jälkeen algoritmi rakentaa kullekin menetelmälle ohjelmointirajapinnan muunnoskaavion (englanniksi: API Transformation Graph - ATG ). Tämän tyyppinen kaavio kuvaa tulot, tuotokset, menetelmien nimet ja datariippuvuudet ohjelmointirajapinnoissa ja auttaa vertaamaan menetelmiä useilla tavoilla.
Siten menetelmän m ohjelmointirajapinnan muunnosgraafi on suunnattu graafi G {N- data , N m , E}:
Näiden kaavioiden rakentaminen ja parantaminen muiden aiemmin rakennettujen kaavioiden tulosten avulla mahdollistaa kahden ohjelmointirajapinnan välisen vastaavuuden löytämisen.
Java2CSharp-nimisen työkalun käyttöönotto mahdollisti ensimmäisten arviointien suorittamisen uudelle tekniikalle.
Seuraavassa taulukossa esitetään arvioinnin tulokset. Se näyttää oikein muunnettujen luokkien ja menetelmien lukumäärän ja vastaavan osuuden.
Projekti | Luokka | Menetelmä | ||
---|---|---|---|---|
Määrä | Tarkkuus | Määrä | Tarkkuus | |
db4o | 3155 | 83,3% | 10787 | 90,0% |
luseeni | 718 | 90,0% | 2725 | 90,0% |
puunkorjuu | 305 | 73,3% | 56 | 90,0% |
Nämä tulokset osoittavat erittäin suuren muunnostarkkuuden tämän työkalun ansiosta.
Twinning (englanniksi: twinning ) on siirtymämenetelmä rajapintojen ohjelmoimiseksi, joka vaatii ensin manuaalisesti kahden ohjelmointirajapinnan A ja B vastaavuuden.
[ Enumeration (Vector v) { return v.elements(); } Iterator (ArrayList a) { return a.iterator(); } ]Tämän tekniikan avulla voit sitten tehdä 2 muunnosta:
Pinnan mukautus tuottaa ohjelman P 'ohjelmasta P ja vastaavuuden kahden ohjelmointirajapinnan välillä.
Tämä muunnos kulkee ohjelman abstraktin syntaksipuun läpi ja soveltaa määritettyjä muutoksia ohjelmointirajapintojen väliseen kartoitukseen. Esimerkiksi aiemmin esitetyillä vastaavuuksilla koodista Enumeration elements = objects.elements();tuleeIterator elements = objects.iterator();
Tämä tekniikka toimii peräkkäin, eli se suorittaa lohkonmuunnoksia. Lohkot voivat edustaa viivaa tai sarjaa viivoja, jotka on erotettu aaltosulkeilla
Syvä mukautus tuottaa ohjelmasta P ja vastaavuudesta M ohjelmointirajapinnasta A ohjelmointirajapintaan B seuraavat elementit:
Tällä on se etu, että pystyt käyttämään mitä tahansa P ': n toteutuksia, koska käytettyä toteutustapaa voidaan vaihtaa erittäin helposti.
API-sukupolviAlgoritmi laskee ensin joukon kutsuja rakentajille ja korvattavia menetelmiä. Tämä näin laskettu uusi joukko edustaa konstruktoreita ja menetelmiä, joiden on oltava uudessa T-ohjelmointirajapinnassa.
Toteutusten luominenToteutusten luomisen algoritmi EmitImpl(n, M)käyttää aiemmin laskettua joukkoa. Se käyttää lukijaa n, joka toimii valitsimena. Sen avulla voit suorittaa hoitoja kuten ja . Luo siis T: n toteutus A: lla ja luo toteutusjoukko B: llä. sel1(T, T') = Tsel2(T, T') = T'EmitImpl(1, M)EmitImpl(2, M)
Uuden ohjelman luominenSeuraava tehtävä on tuottaa M ', joka määrittää vastaavuudet alun perin käytetyn A-ohjelmointirajapinnan ja ohjelmointirajapinnan T välillä, jolloin toinen toteutus voidaan käyttää.
Lopuksi riittää, että muodostetaan P 'sitomalla pinnan mukautusalgoritmi P: n ja M: n kanssa.
Prototyypin luominen mahdollisti ystävyyskaupunkien testaamisen. Prototyyppi kirjoitettiin noin 2 500 rivillä koodia, ja se on Cornell Polygot -koodin käännöskehyksen jatke. Se mahdollisti 2 kokeen suorittamisen:
Prototyyppi mahdollisti vuorovaikutteisen lähestymistavan määritellä ottelut:
Data-driven tilastollinen lähestymistapa , joka tilastollisesti oppii välisen vastaavuuden käytöt ohjelmointi rajapintoja. Tämä tehdään ohjelmointirajapintojen asiakaskoodissa olevien menetelmien rungosta.
Kullekin ohjelmointirajapinnan menetelmälle tilastollinen lähestymistapa rakentaa kaavion, jonka avulla voidaan poimia riippuvuudet tietojen ja ohjausrakenteiden välillä.
Tämän kaavion analyysi mahdollistaa menetelmien yhdenmukaistamisen ja siten vastaavuuksien löytämisen ohjelmointirajapinnan välillä.
Kutakin korvaavaa ohjelmointirajapinnan menetelmää varten algoritmi rakentaa esityksen kaaviona ohjelmointirajapinnan käytöstä.
Solmut edustavat toimintokutsuja, attribuuttien käyttöoikeuksia ja ohjausrakenteita. Kaaret edustavat solmujen välisiä data- ja ohjausriippuvuuksia.
Käyttösymboli ja lauseDatakeskeinen tilastollinen lähestymistapa, joka on saatu alikaaveria edeltävästä kaaviosta, joka edustaa ohjelmointirajapinnan vuorovaikutusta yhden tai useamman kohteen kanssa. Kullekin näistä aligrafeista algoritmi poimii solmujen nimet symbolisarjan muodostamiseksi. Jokaista näistä symboleista kutsutaan käyttösymboleiksi.
Sitten kaikkien aiemmin muodostettujen alaryhmien symbolisekvenssit kootaan yhteen muodostaen sekvenssin koko menetelmälle. Tällaista sekvenssiä kutsutaan lauseeksi.
Symbolien kohdistusJokainen Java- ja C # -vaihtomenetelmien virkepari kohdistetaan niiden symbolien mukaan odotus-maksimointialgoritmin ansiosta. Annettua kynnystä suurempaan pisteeseen kohdistetut sekvenssit edustavat ohjelmointirajapintojen välisiä vastaavuuksia.
StaMiner-nimisen työkalun kehittäminen, joka perustuu tietoihin suuntautuneeseen tilastollisen lähestymistavan algoritmiin, mahdollisti kokeiden suorittamisen ja tämän työkalun vertaamisen muihin. Kaikki testatut kirjastot ovat samanlaisia kuin ensimmäisessä osassa testatut (Ohjelmointirajapintojen välisen vastaavuuden purkaminen).
Näin suoritettu arviointi osoitti, että StaMiner suoritti muunnokset oikein 87,1 prosentissa tapauksista. Java2CSharpiin verrattuna StaMiner muutti koodin 4,2% vähemmän kääntövirheitä ja 6% vähemmän huonoja koodeja.
Tämän algoritmin tärkein etu ohjelmointirajapintojen välisten vastaavuuksien purkamiseen verrattuna perustuu asiakasmenetelmien sisällön analyysiin. Vastaavuuksien poiminta mahdollistaa nimien samankaltaisuuden havaitsemisen. Päinvastoin, datakeskeinen tilastollinen lähestymistapa mahdollistaa havaita datan riippuvuussekvenssin, menetelmäkutsut. Tämä johtaa asiakaskoodin parempaan ymmärtämiseen ja siten parempaan muunnokseen.
Veden muuntaminen on tekniikka ohjelmistokehyksen (englanniksi: framework ) siirtämiseksi verkkoon. Verkko-ohjelmistojen johtajien erityispiirteet sekoittavat useita kieliä, mukaan lukien HTML- koodi ja palvelimen tulkitsema koodi. Tämä tekniikka ei ole hyödyllinen siirrettäessä tekniikoita, jotka käyttävät vain palvelinkoodia (kuten JavaEE-palvelinsovelluksen siirtäminen), jotka voidaan siirtää tekniikoilla, jotka eivät ole ominaisia verkkokielille.
Tämä siirtotekniikka täyttää kaksi rajoitusta:
Tämä tekniikka on jatkoa saaren kielioppeille, jotka koostuvat mielenkiintoiseksi määritellyn koodin - saaret - poimimisesta muusta koodista - vedestä.
Verkkokehyksen siirtyminen veden muuntamisen avulla voidaan jakaa neljään päävaiheeseen:
Vaiheet kaksi ja kolme suoritetaan yhdellä monista tieteellisessä kirjallisuudessa esiintyvistä menetelmistä.
Saarten kielioppi on kielioppi, joka sisältää kahden tyyppistä tuotantoa:
Muodollisesti voimme määritellä ne seuraavasti:
Joko ei-kontekstuaalinen kieli, ei-kontekstuaalinen kielioppi siten, että ja missä:
Voimme määritellä saari kielioppi joukolle rakenteita kiinnostuksen sellainen, että .
Tämä määritelmä varmistaa, että saaren kielioppi on joustavampi kuin alkuperäinen kielioppi eli . Joten voi jäsentää oikein tekstin, joka ei ole kelvollinen .
Veden muunnoksetVerkko-ohjelmistokehyksen siirtyminen vesimuunnoksella sisältää 4 vaihetta.
Muodollisesti voimme määritellä vesimuunnoksen seuraavasti:
Joko muunnos, joka kartoittaa jokaisen peräkkäisen tunnussarjan syötetiedostosta saaren kielelle, jossa:
Yksinkertaisemmin, jokainen osatekijä, joka ei kelpaa kielellä saarten muunnetaan , joka on voimassa kielellä saaren.