Vad är ett aktivt objekt?
I datorprogrammering och teknik är ett aktivt objekt en typ av designmönster som kan användas för att säkerställa att viss tjänst alltid finns tillgänglig i ett flertrådigt eller samtidigt system. Ett aktivt objekt är ett objekt som implementerar en mekanism så att det kan ta emot och bearbeta inmatning från externa objekt utan att tvinga de externa objekten att vänta på att körningen ska slutföras. Denna mekanism tillåter också många objekt som alla kan köras samtidigt för att använda aktiva objekt utan möjlighet för långa blockeringstider där samtidiga processer måste stoppa och vänta på åtkomst. Detta uppnås oftast genom att slå in de aktiva objekten i ett offentligt tillgängligt gränssnitt, kallat en proxy, och sedan implementera en typ av kösystem inuti objekten så att meddelanden lagras för senare behandling. Detta skapar ett designmönster där objekt skickar meddelanden till aktiva objekt och sedan fortsätter sin bearbetning tills det aktiva objektet bearbetar meddelandet och senare informerar de anropande objekten om resultaten så att de kan uppdatera sina tillstånd i enlighet därmed.
Utanför ett aktivt objektdesignmönster kan ett normalt objekt kallas ett passivt objekt. I ett enkelt programexempel kan ett passivt objekt fungera som en chattserverrelä, där fjärrobjekt kontaktar det passiva objektet för att överföra ett meddelande till alla andra på servern. När det passiva serverobjektet tar emot ett chattmeddelande från ett fjärrobjekt måste det hantera begäran omedelbart och sedan omedelbart skicka utmatning, allt medan det fjärrobjektet stoppar sin egen körning tills processen är klar, en effekt som kallas blockering. Att skapa olika trådar i programmet kan lösa problemet med exekveringsblockering men startar sedan problem med synkronisering.
I ett aktivt objektdesignmönster skulle samma serverobjekt i exemplet ovan köras i sin egen tråd separat från de andra objekten. Det skulle också vara inslaget i någon typ av gränssnitt som kallas en proxy som också körs i en separat tråd, ibland huvudprogrammets exekveringstråd. När ett fjärrobjekt vill ha serverobjektet att skicka ut ett chattmeddelande, kontaktar det proxyobjektet, skickar till den all information som krävs och återgår sedan till sitt normala körningsläge istället för att vänta.
Proxygränssnittet konverterar sedan informationen från fjärrobjektet till ett meddelande om att det överförs till en kö för det aktiva objektet att bearbeta. Vid denna tidpunkt är både proxy-gränssnittet och det fjärrobjektet fritt att kunna fortsätta köras och är inte blockerade. Samtidigt fungerar det aktiva objektet för att hålla köen tom och bearbetar varje inkommande meddelande. Om det anropande objektet kräver att viss information ska returneras av det aktiva objektet, kan en återuppringningsstruktur användas för att informera fjärrobjektet om eventuella förändringar i tillståndet.