Il est préférable d'utiliser l'interface lorsque plusieurs implémentations partagent uniquement la signature de méthode. Il doit être utilisé lorsque différentes implémentations du même type partagent un comportement commun. Une interface ne peut pas contenir des propriétés. Une classe peut avoir des propriétés.
La notion d'interface est utilisée pour représenter des propriétés transverses de classes. Là où une classe abstraite doit être étendue et spécialisée, une interface nous dit juste que telle classe possède telle propriété, indépendamment de ce qu'elle représente.
En informatique, jonction entre deux matériels ou logiciels leur permettant d'échanger des informations par l'adoption de règles communes ; module matériel ou logiciel permettant la communication d'un système avec l'extérieur.
Classes abtraites et interfaces ont chacune une fonction bien distincte : les classes abstraites servent à factoriser du code, tandis que les interfaces servent à définir des contrats de service.
On les utilise : lorsqu'on a besoin de l'héritage (réutilisation du code ; méthodes concrètes dans la classe de base qui fonctionnent de la même manière quelque soit les classes dérivées). mais que certaines méthodes n'ont pas de sense à être définie.
A quel bonheur d'utiliser les interfaces en C# ! Elles permettent : Un code découplé de son implémentation, respectant les principes SOLID. Un code facilité pour utiliser l'injection de dépendance, et encore plus découpler son code.
La classe abstraite peut avoir un modificateur d'accès. Il est préférable d'utiliser l'interface lorsque plusieurs implémentations partagent uniquement la signature de méthode. Il doit être utilisé lorsque différentes implémentations du même type partagent un comportement commun.
Définition du polymorphisme
Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes. Cette caractéristique est un des concepts essentiels de la programmation orientée objet. Alors que l'héritage concerne les classes (et leur hiérarchie), le polymorphisme est relatif aux méthodes des objets.
Implémentation d'une interface
Une classe signale les interfaces qu'elle implémente grâce au mot-clé implements. Une classe concrète doit fournir une implémentation pour toutes les méthodes d'une interface, soit dans sa déclaration, soit parce qu'elle en hérite.
L'intérêt principal de définir une classe comme abstraite va être justement de fournir un cadre plus strict lorsqu'ils vont utiliser notre code en les forçant à définir certaines méthodes et etc. En effet, une classe abstraite ne peut pas être instanciée directement et contient généralement des méthodes abstraites.
Plusieurs types d'interface utilisateur
Celles que nous utilisons le plus, dans la vie de tous les jours, sont l'interface graphique et l'interface Web.
Une interface doit refléter lavision logique du système qu'ont les utilisateurs. Le modèle des Objets de Domaine (cf. 1.6 ) est la base conceptuelle qui nous permet de décrire les concepts et la sémantique du système d'une façon cohérente avec la vision logique qu'en ont les utilisateurs. et son comportement effectif.
Une interface ne peut pas être instanciée directement. Ses membres sont implémentées par une classe ou un struct qui implémentent l'interface. Une classe ou un struct peuvent implémenter plusieurs interfaces. Une classe peut hériter d'une classe de base et également implémenter une ou plusieurs interfaces.
L'interface Comparable modélise les objets qui possèdent un ordre total : la seule méthode est compareTo(autre) qui renvoie un entier positif si l'objet est supérieur à l'autre, 0 s'ils sont égaux, et négatif sinon. Cette interface permet d'utiliser des collections d'objets ordonnés comme TreeSet.
Le polymorphisme est un mécanisme important dans la programmation objet. Il permet de modifier le comportement d'une classe fille par rapport à sa classe mère. Le polymorphisme permet d'utiliser l'héritage comme un mécanisme d'extension en adaptant le comportement des objets.
Le terme interface est généralement utilisé en informatique pour désigner un programme permettant un échange de données : Il peut s'agir d'un échange entre deux logiciels : l'interface est, par exemple, un programme qui reformate les données pour assurer la compatibilité entre ces deux logiciels.
La réponse est simple : on ne peut pas l'exécuter en l'état. Une classe abstraite ne peut pas être instanciée. Il est nécessaire de créer une classe concrète (c'est-à-dire non abstraite !) qui l'étende, et d'instancier cette classe concrète.
L'abstraction est l'un des concepts clés dans les langages de programmation orientée objet (POO). Son objectif principal est de gérer la complexité en masquant les détails inutiles à l'utilisateur.
L'encapsulation est un mécanisme consistant à rassembler les données et les méthodes au sein d'une structure en cachant l'implémentation de l'objet, c'est-à-dire en empêchant l'accès aux données par un autre moyen que les services proposés.
L'objectif de la programmation orientée objet est de se concentrer sur l'objet lui-même et les données, plutôt que sur la logique nécessaire et les actions à mener pour faire cette manipulation.
Une sous-classe d'une classe abstraite sera encore abstraite si elle ne définit pas toutes les méthodes abstraites dont elle hérite. Les classes abstraites sont très utiles pour définir des méthodes dépendant d'autres méthodes qui ne sont pas précisées.
La raison derrière cela est d'éviter toute ambiguïté. Considérons un cas où la classe A hérite la classe B et la classe C. Les classes B et C ont la même méthode show(). Maintenant, le compilateur Java ne peut pas décider quelle méthode show() il doit hériter.
En Java, l'héritage est indiqué par le mot clé extends après le nom de la classe. On dit donc qu'une classe en étend une autre. La classe qui est étendue est appelée classe mère ou classe parente et la classe qui étend est appelée classe fille ou classe enfant.