Questiosn sur la structure des patrons

Programmation Avancée

Modérateur : Douin

Ruddy Reisberg
Messages : 21
Inscription : 01 nov. 2016 16:13

Questiosn sur la structure des patrons

Message par Ruddy Reisberg » 23 nov. 2016 16:40

Bonjour à tous,

Sur la carte des patrons, on voit sur chacun d'entre eux des boites qui sont soit des interfaces, soit des classes abstraites soit des classes "concretes".

Comment expliquer avec des mots le rôle d'une classe "concrete"? Quel code contient elle systématiquement (définition des fonctions du programme)?
Même question pour l'interface et la classe abstraite.

Je n'ai pas encore vu tous les patrons mais cela m'aiderait de savoir que la démarche liée à leur construction sera la même dans tous les cas, en fonction du fait que la classe soit "concrete", "abstraite" ou interface.

Par avance merci :)

David Bertrand
Messages : 34
Inscription : 20 oct. 2016 13:10

Re: Questiosn sur la structure des patrons

Message par David Bertrand » 23 nov. 2016 22:08

Bonjour,

Je tente d'apportée un peu de clarté (en essayant de ne pas dire de bêtise ...)

- Une classe concrète est une classe que tu peux instancier avec un new LaClasse()
Elle comporte des méthodes (toutes implémentées) et des attributs.
Elle peut hériter au plus d'une autre classe (abstraite ou concrète) (par le mot "extends") .
Elle peut implémenter autant d'interfaces que nécessaire (par le mot "implements") .

- Une classe abstraite est une classe déclarée "abstract".
Elle ne peut pas être instanciée par un new ClasseAbstraite()
Elle comporte des méthodes et des attributs. Mais certaines sont aussi déclarées "abstract" et ne possèdent pas de corps, ou d'implémentation.
Elle laisse aux classes qui en hérite le soin d'implémenter les méthodes abstraites. C'est un contrat avec des petits caractères en bas de la page : "je te garantis par héritage cette méthode abstraite, mais à toi d'en définir le contenu, de le rendre concret. Tant que toutes le méthodes abstraites ne seront pas réalisées, tu resteras abstraite".
Elle peut hériter au plus d'une autre classe (abstraite ou concrète) (par le mot "extends") .
Elle peut implémenter autant d'interfaces que nécessaire (par le mot "implements").

- Une interface est une sorte de classe abstraite déclarée "interface" à la place de "class".
Elle comporte des méthodes (toutes abstraites, sauf depuis java 8, voir plus bas) et des attributs (tous déclarés "final", des constantes).
Elle hérite du nombre nécessaire d'interfaces (par le mot "extends").
On ne peut bien sûr pas instancier une interface par new MonInterface().

- depuis java 8, pour des motifs de la plus haute importance :
Une interface peut comporter des méthodes concrètes, déclarées "default". C'est bien ce qu'elles sont, des méthodes fournies par défaut. Ceci permet de modifier les interfaces sans modifier les classes qui les implémentaient ...
Une interface qui ne comprends qu'une seule méthode abstraite est une interface fonctionnelle, qui permet de passer une fonction en paramètre (lambda) et l'inférence sûre des types à ce niveau.

Voilà pour les briques et les règles de base.
en résumé :
- Seule la classe concrète peut être instanciée.
- Une classe peut hériter d'une seule classe.
- Une classe peut implémenter plusieurs interfaces
- Une interface peut hériter de plusieurs interfaces.
- Une classe abstraite et une interface exposent des "contrats" qui devront être réalisés par les classes concrètes.

Je compléterai plus tard.

David

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité