147 votes

Quelle est la définition de "interface" dans la programmation orientée objet

Ok, un de mes amis d'aller d'avant en arrière sur ce que "l'interface" signifie dans la programmation.

Quelle est la meilleure description d'une "interface".

Pour moi, une interface est un modèle de classe, est-ce la meilleure définition?

236voto

Uri Points 50687

Une interface est l'un des plus surchargé et source de confusion en termes de développement.

Il est en fait un concept d'abstraction et d'encapsulation. Pour une "box", il déclare la "entrées" et "sorties" de cette boîte. Dans le monde des logiciels, cela signifie généralement les opérations qui peuvent être invoquées sur la boîte (avec des arguments) et, dans certains cas, les types de retour de ces opérations.

Ce qu'il ne le fait pas, c'est qu'il ne définit pas ce que la sémantique de ces opérations, même si c'est monnaie courante (et très bonne pratique) du document dans la proximité de la déclaration (par exemple, via les commentaires), ou choisissez la bonne conventions de nommage. Néanmoins, il n'existe aucune garantie que ces intentions soient suivies.

Voici une analogie: jetez un oeil à votre téléviseur lorsqu'il est éteint. Son interface sont les boutons, il a un et les différentes fiches et l'écran. Sa sémantique et le comportement qu'il prend des intrants (p. ex., câble de programmation) et a sorties (affichage sur l'écran, le son, etc.). Toutefois, lorsque vous regardez un TÉLÉVISEUR qui n'est pas branché, vous projetez votre sémantique dans une interface. Pour tous vous le savez, la TÉLÉVISION pourrait tout exploser lorsque vous la branchez. Toutefois, en se fondant sur son "interface", vous pouvez supposer qu'il ne fera pas de café car elle n'a pas une prise d'eau.

En programmation orientée objet, une interface définit généralement l'ensemble des méthodes (ou messages) qu'une instance d'une classe qui n'a que l'interface pourrait répondre.

Ce qui ajoute à la confusion, c'est que dans certains langages, comme Java, il y a une véritable interface avec son langage spécifique de la sémantique. En Java, par exemple, c'est un ensemble de déclarations de méthode, sans mise en œuvre, mais une interface correspond aussi à un type et obéit à diverses règles de typage.

Dans d'autres langages, comme le C++, vous n'avez pas d'interfaces. Une classe définit les méthodes, mais vous pourriez penser à l'interface de la classe que les déclarations de la non-méthodes privées. En raison de la façon dont C++ compile, vous obtenez des fichiers d'en-tête où vous pourriez avoir la "interface" de la classe sans réelle mise en œuvre. Vous pourriez également imiter les interfaces de Java classes abstraites avec des fonctions virtuelles pures, etc.

Une interface est certainement pas un modèle de classe. Un plan d'action, par une définition est un "plan d'action détaillé". Une interface ne promet rien au sujet d'une action! La source de la confusion, c'est que dans la plupart des langues, si vous avez un type d'interface qui définit un ensemble de méthodes, la classe qui implémente il "répète" les mêmes méthodes (mais fournit définition), de sorte que l'interface ressemble à un squelette ou un plan de la classe.

209voto

Jacob Spire Points 1492

Imaginons la situation suivante:

Vous êtes au milieu d'une grande salle vide, quand un zombie soudainement vous attaque.

Vous n'avez pas d'arme.

Heureusement, un compagnon de la vie de l'homme est debout dans l'embrasure de la porte de la chambre.

"Vite!" criez-vous à lui. "Jetez-moi quelque chose que je peut frapper un zombie!"

Considérons maintenant:
Vous n'avez pas spécifié (ni de soins) exactement ce que votre ami va choisir de le jeter;
...Mais il n'a pas d'importance, aussi longtemps que:

  • C'est quelque chose qui peut être jeté (Il ne peut pas mélanger les vous le canapé)

  • C'est quelque chose que vous pouvez attraper (espérons qu'il n'a pas lancer un shuriken)

  • C'est quelque chose que vous pouvez utiliser pour bash du zombie cerveau (Que les règles d'oreillers et autres)

Il n'a pas d'importance si vous obtenez une batte de baseball ou un marteau -
tant qu'il met en œuvre vos trois conditions, vous êtes bon.

Pour résumer:

Lorsque vous écrivez une interface, vous êtes essentiellement en disant: "j'ai besoin de quelque chose qui..."

41voto

Eugene Kuleshov Points 17757

L'Interface est un contrat, vous devez respecter ou donné, en fonction de si vous êtes responsable de l'implémentation ou d'un utilisateur.

23voto

Dave Costa Points 25282

Je ne pense pas que le "plan directeur" est un bon mot à utiliser. Un plan détaillé vous indique comment construire quelque chose. Une interface spécifiquement évite de vous dire comment construire quelque chose.

Une interface définit la façon dont vous pouvez interagir avec une classe, c'est à dire quelles sont les méthodes qu'il soutient.

7voto

Stephen C Points 255558

Pour moi, une interface est un modèle de classe, est-ce la meilleure définition?

Pas de. Un plan directeur comprend généralement les éléments internes. Mais l'interface est uniquement sur ce qui est visible sur le côté extérieur de la classe ... ou, plus précisément, d'une famille de classes qui implémentent l'interface.

L'interface se compose de les signatures des méthodes et des valeurs de constantes, et aussi un (généralement informel) "comportementale contrat" entre les classes qui implémentent l'interface et d'autres qui l'utilisent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X