Hva er et aktivt objekt?
I programmering og prosjektering av datamaskiner er et aktivt objekt en type designmønster som kan brukes til å sikre at noen tjenester alltid er tilgjengelige i et flertrådig eller samtidig system. Et aktivt objekt er et objekt som implementerer en mekanisme, slik at det kan motta og behandle innspill fra eksterne objekter uten å tvinge de eksterne objektene til å vente på at utførelsen skal fullføres. Denne mekanismen lar også mange objekter som alle kan løpe samtidig bruke aktive objekter uten mulighet for lange blokkeringstider der samtidige prosesser må stoppe og vente på tilgang. Dette oppnås oftest ved å pakke de aktive objektene inn i et offentlig tilgjengelig grensesnitt, kalt en proxy, og deretter implementere en type køsystem inne i objektene slik at meldinger blir lagret for senere behandling. Dette skaper et designmønster der objekter sender meldinger til aktive objekter og deretter fortsetter behandlingen til det aktive objektet behandler meldingen og senere informerer de anropende objektene om resultatene slik at de kan oppdatere tilstandene sine deretter.
Utenfor et aktivt designmønster kan et normalt objekt kalles et passivt objekt. I et enkelt programeksempel kan et passivt objekt fungere som en chat-serverrelé, der eksterne objekter kontakter det passive objektet for å overføre en melding til alle andre på serveren. Hver gang det passive serverobjektet mottar en chat-melding fra et eksternt objekt, må det håndtere forespørselen umiddelbart og deretter sende utdata umiddelbart, alt mens det eksterne objektet stopper sin egen utførelse til prosessen er fullført, en effekt kjent som blokkering. Å lage forskjellige tråder i programmet kan løse problemet med utførelsesblokkering, men deretter starte problemer med synkronisering.
I et aktivt objektdesignmønster, ville det samme serverobjektet i eksemplet over kjørt i sin egen tråd adskilt fra de andre objektene. Det vil også bli pakket inn i en type grensesnitt kjent som en proxy som også kjører i en egen tråd, noen ganger hovedprogrammet for utførelse. Når et eksternt objekt ønsker å få serverobjektet til å sende ut en chat-melding, kontakter det proxy-objektet, gir den all nødvendig informasjon, og går deretter tilbake til normal utførelsesstatus i stedet for å vente.
Proxy-grensesnittet konverterer deretter informasjonen fra det eksterne objektet til en melding om at den går til en kø for at det aktive objektet skal behandles. På dette tidspunktet er både proxy-grensesnittet og det eksterne objektet fritt til å fortsette å utføre og blokkeres ikke. I mellomtiden jobber det aktive objektet for å holde køen tom, og behandler hver innkommende melding. Hvis det anropende objektet krever at informasjon blir returnert av det aktive objektet, kan en tilbakeringingsstruktur brukes til å informere det fjerne objektet om eventuelle endringer i tilstanden.