Idempotenssi

Matematiikassa funktion sanotaan olevan idempotentti, jos sillä suoritettava operaatio tuottaa saman tuloksen riippumatta siitä, suoritetaanko se vain yhden vai useamman kerran. Tämä ominaisuus on nimeltään idempotenssi. Toisin sanoen funktio on idempotentti, jos ja vain jos kaikille alkioille pätee

.

Matriisia A sanotaan idempotentiksi, jos A2 = A. Tällöin A:n määrittelemä lineaarikuvaus on funktiona idempotentti. Tällaiset lineaarikuvaukset ovat projektioita.

Tietotekniikassa

Tietotekniikassa metodi on idempotentti, jos sen vaikutukset ovat samat riippumatta siitä, suoritetaanko se vain yhden vai useamman kerran. Esimerkiksi metodi, joka toteuttaa asiakkaan osoitetietojen hakemisen tietokannasta on idempotentti metodi, sillä kysely ei muuta tietokannan tilaa. Toisaalta osoitetietojen tallennuskin voi olla idempotentti: se kyllä muuttaa tietokannan tilaa, mutta samojen osoitetietojen tallennus uudelleen ei sitä enää muuta. Sen sijaan asiakkaan tekemän tilauksen tallentava metodi ei tyypillisesti ole idempotentti, sillä metodin kutsuminen useita kertoja lisää vastaavan määrän tilauksia tietokantaan. Huomaa myös, että metodilla voi olla ohjelman tilaa muuttavia sivuvaikutuksia, vaikka se olisi idempotentti.

C-kielessä otsikkotiedostot pyritään yleensä suunnittelemaan idempotenteiksi siinä mielessä, että ohjelman toimintaan ei vaikuta se, otetaanko otsikkotiedosto mukaan käännettäessä #include-direktiivillä yhden vai useamman kerran. ISO-standardin mukaan standardikirjastojen otsikkotiedostojen on oltava idempotentteja.[1]

WWW:n tiedonsiirrossa käytetyn HTTP-protokollan GET-metodia tulisi standardin mukaan RFC 2616[2] käyttää ainoastaan tiedon hakuun palvelimelta, mikä on idempotentti ominaisuus (toisin sanoen, useiden samanlaisten GET-metodien suorittaminen vaikuttaa palvelimen tilaan samalla tavalla kuin jos metodi suoritettaisiin vain kerran). Käytännössä usein näin ei kuitenkaan ole, vaan järjestelmän tilaa muuttavat toiminnot kuten päivitykset ja poistot on toteutettu GETillä. Myös DELETE-metodin tulisi olla idempotentti: sillä on kyllä vaikutus palvelimen tilaan, nimittäin tietyn resurssin poistaminen, mutta saman pyynnön toistaminen ei aiheuta enää lisää vaikutuksia. POST-pyynnön taas voidaan olettaa olevan ei-idempotentti.

Lähteet

  1. Sun Studio 12: C User's Guide (6.8.1 Standard Headers) docs.sun.com. Viitattu 25.9.2009. (englanniksi)
  2. Fielding, et al: HTTP/1.1: Method Definitions Kesäkuu 1999. W3C/MIT: Network Working Group. Viitattu 25.9.2009. (englanniksi)
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.