Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
COM maakt een fundamenteel onderscheid tussen interfacedefinities en hun implementaties.
Een interface is eigenlijk een contract dat bestaat uit een groep gerelateerde functieprototypes waarvan het gebruik is gedefinieerd, maar waarvan de implementatie niet is. Deze functieprototypes zijn gelijk aan pure virtuele basisklassen in C++-programmering. Een interfacedefinitie geeft de lidfuncties van de interface, genaamd methoden, hun retourtypen, het aantal en de typen van hun parameters, en wat ze moeten doen. Er is geen implementatie gekoppeld aan een interface.
Een interface-implementatie is de code die een programmeur levert om de acties uit te voeren die zijn opgegeven in een interfacedefinitie. Implementaties van veel van de interfaces die een programmeur in een objecttoepassing kan gebruiken, zijn opgenomen in de COM-bibliotheken. Programmeurs kunnen deze implementaties echter negeren en hun eigen implementaties schrijven. Een interface-implementatie moet worden gekoppeld aan een object wanneer een exemplaar van dat object wordt gemaakt en de implementatie de services biedt die het object biedt.
Een hypothetische interface met de naam IStack kan bijvoorbeeld twee methoden definiëren, genaamd Push en Pop, waarmee wordt opgegeven dat opeenvolgende aanroepen van de Pop-methode, in omgekeerde volgorde, waarden retourneren die eerder zijn doorgegeven aan de Push-methode. Deze interfacedefinitie geeft niet op hoe de functies in code moeten worden geïmplementeerd. Bij het implementeren van de interface kan één programmeur de stack implementeren als een matrix en de Push- en Pop-methoden op een zodanige manier implementeren dat deze matrix toegankelijk is, terwijl een andere programmeur een gekoppelde lijst kan gebruiken en de methoden dienovereenkomstig zou implementeren. Ongeacht een bepaalde implementatie van de Push- en Pop-methoden, wordt de in-memory weergave van een aanwijzer naar een IStack-interface, en daarom het gebruik door een client, volledig bepaald door de interfacedefinitie.
Eenvoudige objecten ondersteunen slechts één interface. Complexere objecten, zoals insluitbare objecten, ondersteunen doorgaans verschillende interfaces. Clients hebben alleen toegang tot een COM-object via een aanwijzer naar een van de interfaces, waardoor de client op zijn beurt een van de methoden kan aanroepen waaruit die interface bestaat. Deze methoden bepalen hoe een client de gegevens van het object kan gebruiken.
Interfaces definiëren een contract tussen een object en de bijbehorende clients. Het contract geeft de methoden op die moeten worden gekoppeld aan elke interface en wat het gedrag van elk van de methoden moet zijn in termen van invoer en uitvoer. Het contract definieert doorgaans niet hoe de methoden in een interface moeten worden geïmplementeerd. Een ander belangrijk aspect van het contract is dat als een object een interface ondersteunt, alle methoden van die interface op een of andere manier moeten worden ondersteund. Niet alle methoden in een implementatie moeten iets doen. Als een object de functie die door een methode wordt geïmpliceerd niet ondersteunt, kan de implementatie een eenvoudig resultaat zijn of misschien het retourneren van een zinvol foutbericht, maar moeten de methoden bestaan.
Verwante onderwerpen