Le concept d'interface est la pierre angulaire de la programmation modulaire, un précurseur et un élément standard de la programmation orientée objet. Dans la programmation orientée objet, l'interface d'un objet consiste en un ensemble de méthodes que l'objet doit suivre. C'est le "contrat de service" du composant. Les variables d'instance de l'objet ne font pas partie de l'interface - on y accède spécifiquement via des accesseurs.
Certains langages orientés-objet nécessitent de définir séparément l'interface et l'implémentation. Par exemple, en Objective-C, l'interface est définie dans un fichier d'en-tête et l'implémentation dans un fichier source. Par exemple, de par le typage et le chargement dynamique d'Objective-C, il est possible d'envoyer un message à n'importe quel objet, l'interface spécifiant quelle méthode doit y répondre (parmi les méthodes de la classe de l'objet et les méthodes des classes parentes).
Les interface sont historiquement dérivées des fichiers d'entête C avec un contexte et un contenu restreints, devenant une partie de la sémantique du langage (par opposition aux fonctionnalités du préprocesseur C).
Le langage Java adopte une approche différente du concept d'interface qui existe normalement dans d'autres langages orientés objet (ie., que l'interface spécifiée est l'interface avec la classe), en ce qu'une interface spécifie un ensemble de méthodes qui implémente des fonctionnalités spécifiques, communes à un ensemble de classes. Voir protocole (programmation orientée objet).
Certains langages de programmation (e.g. D, Java, Logtalk) autorisent la définition de hiérarchies d'interface. Ceci autorise une définition de, par exemple, à la fois la version minimale et étendue d'une interface.
Certains langages de programmation (e.g. Logtalk) supportent une implémentation privée et protégée d'une interface. Ainsi, les méthodes (publiques) déclarées dans une interface peuvent facilement devenir des méthodes privées ou protégées d'une classe qui implémente l'interface.
Le langage Eiffel inclut dans l'interface d'une classe son invariant et la pré- et postconditions des méthodes de la classe. Ceci est essentiel à la méthodologie de conception par contrat, et peut être considéré comme une extension des conditions imposées par les types d'arguments. Ces règles peuvent être spécifiées dans l'implémentation d'une classe ou dans un ancêtre qui peut quitter les méthodes non implémentées.
Ces règles peuvent être extraites dans l'environnement de développement par l'analyseur syntaxique afin de fournir à l'utilisateur une vue de l'interface de ces classes. Au niveau de la compilation, elles permettent de définir des assertions c'est-à-dire des conditions déclenchant des exceptions ; on parle de contrat de la méthode.
Les assertions peuvent avoir des comportements différents selon le mode debug ou release : généralement en mode debug l'application s'arrête ce qui permet de repérer l'erreur contrairement au mode release qui favorise la continuité de service.
Le langage assure aussi que les classes dérivées obéissent aux contrats de leurs ancêtres.
Certains langages de programmation ont différentes méthodologies pour permettre la réalisation d'interfaces. En général, tout langage de programmation peut implémenter une interface, mais les langages de programmation suivants offrent des facilités d'interfaçage spécifiques d'une façon ou d'une autre :
ActionScript in Flash, Ada, C#, C (langage), D, Delphi, Eiffel, Java, Logtalk, Mesa, ML, Modula, Modula-2, Modula-3, Oberon, Objective-C, PHP, Ocaml Python, REALbasic, Unified Modeling Language, Visual Basic
Une interface de programmation (Application Programming Interface ou API) définit les fonctions publiées par une bibliothèque logicielle, utilisables par les applications clientes.