Contrat d'interface, objet de classe?
Est un contrat d'interface que l'objet est de classe?
Quel est le besoin de se différencier à l'identique des choses comme ça, à partir du code à l'exécution de code? J'ai eu l'idée derrière la dénomination d'une classe une classe et le instancié de l'exécution de la classe d'un objet, mais dans l'ensemble, est-ce la seule raison de ces semi-redondant?
source d'informationauteur Adron | 2008-10-20
Vous devez vous connecter pour publier un commentaire.
Pas vraiment. Il y a quatre conditions ici, donc je vais aller sur chacun d'eux:
Interface
Une interface est une classe abstraite (dans des langues comme Java où il n'y a pas d'héritage multiple, parfois il y a d'autres restrictions, telle qu'un type de données) qui est destiné à être utilisé comme une base commune pour accéder à un certain nombre de de même se comportent les objets. Sur le plan conceptuel, il n'est pas nécessaire pour l'abstraction, mais généralement, une interface aura au moins une méthode abstraite. Une interface est une méthode pour que votre programme puisse communiquer avec d'autres classes, chacune avec des sémantiques différentes, mais le même but.
Contrat
Un contrat est un accord implicite entre les utilisateurs et les responsables de l'implémentation d'une classe ou d'interface. Par exemple, les préconditions et les postconditions (les invariants sont généralement un contrat au sein de la classe de mise en œuvre - en général, des choses comme la relation entre les membres internes n'ont pas besoin d'être exposé). Le cahier des charges pour une valeur de retour ou un argument peut également faire partie du contrat. Il représente essentiellement comment utiliser la fonction/classe/interface, et n'est généralement pas entièrement représentable dans n'importe quelle langue (certaines langues, comme Eiffel, vous permettent de mettre de contrats explicites, mais même ceux-ci ne peuvent pas toujours pleinement étoffer les besoins). Lors de l'implémentation d'une interface ou dériver de la classe, vous êtes toujours les avoir à répondre aux exigences d'interface, ou, lors du remplacement d'un non-classe abstraite, à se comporter suffisamment similaires pour que la visionneuse externe ne remarque pas la différence (c'est le Principe de Substitution de Liskov; un objet dérivé doit être capable de remplacer la base avec aucune différence dans le comportement de l'extérieur de la perspective).
Classe
Une classe n'a pas besoin de beaucoup de, car il est clair que vous avez utilisé avant. Une classe est le type de données, et dans certaines langues, est un sur-ensemble des interfaces (qui n'ont pas de définition formelle, comme en C++), et dans d'autres est indépendant (comme en Java).
Objet
Un objet est une instance d'un type de classe (ou de non-type de classe, généralement). La définition exacte d'un objet est très spécifique à une langue, mais la définition générale est la chose réelle visée par de multiples références/pointeurs de la même chose - par exemple, dans certaines langues comme Java, == compare que deux variables sont le même objet, pas forcément si ils sont sémantiquement identiques. Les objets sont indépendants des classes ou des interfaces - ils représenter une instance unique. Une autre façon de penser, c'est que la classe ou de l'interface est le moule, et l'objet est un objet physique qui sort du moule (une plutôt mauvaise analogie, mais c'est le mieux que je puisse venir jusqu'à maintenant).
Non, pas vraiment. Une classe est un modèle que vous définissez. Chaque objet qui instancie la classe suit le modèle. Ils ne sont pas vraiment redondant, car les deux choses ne sont pas identiques. Vous pouvez penser à une classe comme un type de données utilisateur. Les Classes et les objets sont différents les uns des autres exactement de la même manière que le type de données primitif
int
est différente de la valeur littérale 3.Une interface définit un ensemble de méthodes de mise en œuvre de classes à prendre en charge. L'interface elle-même est le contrat que vous définissez pour la mise en œuvre de classes. Il dit seulement que toute classe qui implémente l'interface, doit avoir cette interface est un ensemble de méthodes publiques.
Eh bien, je suppose... si une interface spécifie un contrat que d'une classe spécifie un (ou plusieurs) exemple(s) d'un objet particulier.
Terminologie est moins importante que la demande.
En fait, une interface est un contrat, lorsqu'un objet est une instance d'une classe - ce sont des choses différentes qui n'ont pas trop de choses en commun.
L'interface fournit juste une façade pour les objets, ou d'une garantie de l'appelant que l'objet peut faire une opération, même sans le savoir la mise en œuvre.
Par exemple, vous pouvez avoir deux classes qui implémentent la même interface/contrat, mais ne totalement différente de choses (même si le sens de le faire peut être la même).
Prendre l'interface IDisposable par exemple: Chaque objet peut libérer les ressources qu'il utilise, mais il peut le faire de différentes manières, il peut choisir de ne pas publier quoi que ce soit. C'est l'objet de choix.
Au moins ce serait le POV .NET
Pour compléter les réponses précédentes, un mot sur les interfaces:
Si la classe est plus qu'un modèle d'un objet (en raison de ses caractéristiques globales indépendant de toutes les instances), l'interface peut également être décrit comme un point de vue
D'une classe implémentant plusieurs interface:
"Point de vue" signifie que vous pouvez à l'aide d'un objet en se concentrant uniquement sur le contrat de définir par cette interface.
C'est dans cet aspect une interface est une "classe abstraite", comme dans une "abstraction" (quelque chose qui prend après certaines des caractéristiques d'une classe, mais de laisser quelques autres). Dans le monde java, une interface laisse beaucoup, puisqu'il ne peut être appliquée pour définir contrat par exemple, pas pour les méthodes statiques ou des fonctions.
"Classe" et "Objet" sont deux choses différentes; elles sont liées, mais ce qu'ils représentent EST différent, assez fortement.
La meilleure façon de décrire cette méthode est de regarder Statique. Une classe peut avoir des membres statiques, qui est complètement indépendant de toute INSTANCE de cette classe. Les objets de cette classe peuvent ou ne peuvent pas utiliser ces membres statiques; mais l'instance de l'objet de cette classe est complètement séparée de la statique utilise de cette classe (ou devrait être, à tout le moins).
Ou penser le pattern singleton. Le stockage d'une instance de la classe de l'objet dans une classe statique accesseur est une pratique courante, et montre la différence. Vous vous référez à la classe statique accesseur pour obtenir le instance de l'objet d'une classe singleton; si le classe membre statique ne dispose pas d'un instance de l'objet pour les consulter, les classe crée la instance de la objet.
Mettre une autre façon; un objet est une instance d'une classe; mais une classe peut être plus que juste un modèle à partir duquel les objets sont instanciés. Les membres statiques de classes ont une représentation en mémoire qui est complètement indépendant de l'objet des instances de ces classes.