Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
COM gör en grundläggande skillnad mellan gränssnittsdefinitioner och deras implementeringar.
Ett gränssnitt är faktiskt ett kontrakt som består av en grupp relaterade funktionsprototyper vars användning definieras men vars implementering inte är det. Dessa funktionsprototyper motsvarar rena virtuella basklasser i C++-programmering. En gränssnittsdefinition anger gränssnittets medlemsfunktioner, som kallas metoder, deras returtyper, antal och typer av parametrar och vad de måste göra. Det finns ingen implementering associerad med ett gränssnitt.
En gränssnittsimplementering är koden som programmeraren tillhandahåller för att utföra de åtgärder som anges i en gränssnittsdefinition. Implementeringar av många av de gränssnitt som en programmerare kan använda i ett objektbaserat program ingår i COM-biblioteken. Programmerare kan dock ignorera dessa implementeringar och skriva sina egna. En gränssnittsimplementering ska associeras med ett objekt när en instans av objektet skapas och implementeringen tillhandahåller de tjänster som objektet erbjuder.
Ett hypotetiskt gränssnitt med namnet IStack kan till exempel definiera två metoder med namnet Push och Pop, som anger att efterföljande anrop till Pop-metoden returnerar värden i omvänd ordning som tidigare skickats till push-metoden. Den här gränssnittsdefinitionen anger inte hur funktionerna ska implementeras i kod. När du implementerar gränssnittet kan en programmerare implementera stacken som en matris och implementera push- och pop-metoderna på ett sätt som gör det möjligt att komma åt matrisen, medan en annan programmerare kan använda en länkad lista och implementera metoderna i enlighet med detta. Oavsett en viss implementering av push- och pop-metoderna bestäms den minnesinterna representationen av en pekare till ett IStack-gränssnitt och därmed dess användning av en klient helt av gränssnittsdefinitionen.
Enkla objekt stöder endast ett enda gränssnitt. Mer komplicerade objekt, till exempel inbäddningsbara objekt, stöder vanligtvis flera gränssnitt. Klienter har endast åtkomst till ett COM-objekt via en pekare till ett av dess gränssnitt, vilket i sin tur gör att klienten kan anropa någon av de metoder som utgör gränssnittet. Dessa metoder avgör hur en klient kan använda objektets data.
Gränssnitt definierar ett kontrakt mellan ett objekt och dess klienter. Kontraktet anger de metoder som måste associeras med varje gränssnitt och vad beteendet för var och en av metoderna måste vara när det gäller indata och utdata. Kontraktet definierar vanligtvis inte hur metoderna ska implementeras i ett gränssnitt. En annan viktig aspekt av kontraktet är att om ett objekt stöder ett gränssnitt måste det ha stöd för alla gränssnittsmetoder på något sätt. Alla metoder i en implementering behöver inte göra något. Om ett objekt inte stöder funktionen som en metod antyder kan dess implementering vara en enkel retur eller kanske returnera ett meningsfullt felmeddelande , men metoderna måste finnas.
Relaterade ämnen