• # coms

    Posté par  . Évalué à 10.

    Salut,

    j'ai écris un commentaire sur http://renardjb.free.fr/test/coms.txt
  • # interface systématique ?

    Posté par  . Évalué à 3.

    D'accord avec le voisin du dessus.

    Soit dit en passant, j'ai atterrit sur un projet J2EE aux mille classes, et j'ai l'impression que la chaîne interface->implémentation ne fait que doubler le nombre de classes du projet... Bon ok, en théorie c'est génial, mais en pratique... ? A utiliser avec parcimonie ou systématiquement ?

    Sinon, je pense que tu devrais introduire ton texte par la fin (à partir de "En bref"). Vu que ce texte s'adresse à des débutants, autant éviter de les assommer avec du jargon dès le départ ;).

    Aussi il manque un exemple, simple et concret. Pour reprendre ton concept, tu peux définir ton interface "Distributeur" et deux implémentations "LaPoste" et euh "UPS".... mmhh tu as peut-être intérêt à trouver autre chose de plus approprié, genre "Authentification" : "AuthDB" et "AuthPlainText", ou que sais-je...

    Tu devrais aussi finir ton article par un lien vers d'autres ressources plus complètes, genre http://fr.wikipedia.org/wiki/Poo

    PS : vous me ferez 100 lignes :) :

    * J'ai écrit
    * maîtrise
    * La plupart
    * ...
    • [^] # Re: interface systématique ?

      Posté par  (site web personnel) . Évalué à 4.

      Bon ok, en théorie c'est génial, mais en pratique... ? A utiliser avec parcimonie ou systématiquement ?

      Les interfaces ça sert absolument à rien si c'est juste pour faire joli dans un fichier d'interfaces. Dans ce cas, au mieux, ça sert de documentation des classes. Ce billet n'est pas convainquant quant à la nécessité absolue d'utiliser des interfaces en PHP.

      Là où les interfaces deviennent vraiment intéressantes, c'est quand elles sont utilisée au milieu d'un framework qui les prend en compte intensivement (Zope3). Là les interfaces prennent tout leur intérêt, et sont utilisées pour faire marcher toute la mécanique. Les composants sont rangés dans des registres par leur interface, et peuvent être récupérés de la même manière. Les vues (par ex. pages HTML) sont associées aux objets via leur interface. Les objets peuvent être adaptés pour offrir une autre interface, les widgets HTML sont choisis automatiquement en fonction de l'interface offerte par un objet, l'authentification se base sur des interfaces pour pouvoir authentifier de n'importe quelle façon derrière, les droits d'accès aux objets sont séparés par interface (on peut par exemple autoriser pour un objet l'utilisation d' IReadContainer, mais pas IWriteContainer) et un objet peut bénéficier d'un tout un tas de fonctionnalités supplémentaires juste en lui ajoutant une simple interface vide (marqueur), qui va ramener automatiquement un adaptateur inscrit pour cette interface. Par exemple un objet de contenu pourra subitement offrir une gestion des commentaires juste en lui ajoutant l'interface ICommentable.

      Dans ces conditions, oui, c'est pas seulement génial en théorie, ça devient génial en pratique, et un réel plaisir à utiliser.
    • [^] # Re: interface systématique ?

      Posté par  . Évalué à 1.

      Du temps où j'apprenais le Java, j'avais du mal a saisir l'intérêt des interfaces. Quelle différence avec une classe purement abstraite ? A part pour pallier le manque de l'héritage multiple en Java, j'ai pas vu d'intérêt évident. Le billet du blog ne m'éclaire pas plus, à vrai dire je le trouve particulièrement léger.
      • [^] # Re: interface systématique ?

        Posté par  . Évalué à 5.

        Tu as tout à fait raison
        Une classe abstraite est complétement équivalente à un interface Java.

        La seule différence c'est que cette notion est explicitée en Java alors que tu dois parcourir la déclaration de la classe en c++ pour t'en apercevoir.

        Sinon, c'est une bonne pratique de ne recourir que lorsque c'est nécessaire à l'héritage de classe et de lui préferer une approche basée sur l'héritage d'interface.

        Ainsi plutôt que de faire hériter C de A et B, A et B étant des classes concrêtes, en java, on préfèrerera (ou plutôt on est contratint ce qui peut-être une bonne ou mauvaise chose) créer une classe C qui implémente des interfaces A et B.
        Si on veut réutiliser du code, on créera une classe A' qui impléménte A uniquement et une classe B' qui impléménte B uniquement. On encapsulera (agregation) alors dans C une réference à un objet de la classe A²' et B' et on délègue chaque opération des interfaces A et B qu'on implemente à nos réferences de A' et B' encapsulées.

        Le terme interface fait féreference à un comportement, un aspect d'une classe plutôt qu'à une entité autonome. Une classe c'est l'aggregation de comportement. C'est pourquoi
        on utilise souvent un adjectif plutôt qu'un nom (IObservable, Serializable, ...)

        Avec le c++ la tentation est grande de faire de l'héritage multiple mais en recourant à des classe abstraites on peut adopter la même approche.
        C'est juste qu'il faut faire plus attention car la même notion (classe) sert à 2 concepts différents.

        En quoi est-ce que le recours aux interface et à la délégation est une bonne pratique ?
        - il permet une approche dynamique (un objet C peut prendre une nouvelle référence de la classe A'' qui implemente l'intreface A différement alors qu'eve l'héritage la liaison est statique?)

        - il permet l'ajout de nouvelle caractéristiques sans modifier le code des classe terminales

        -Il permet d'éviter l'explosion combinatoire des classes
        si on a un A et B , A' et A'' spécialisent A, B' et B" spécialisent B.
        Il faudra 4 classes dérivées de la classe C pour obtenir la combinaison de tous les comportements de A et B. Avec des interfaces et la composition, on a toujours qu'une seule classe C qui respectent les contrats de A et B et chaque instance est construite en fonction des besoins à l'execution.
        • [^] # Re: interface systématique ?

          Posté par  . Évalué à 4.

          Une interface définit des services et la documentation de chaque méthode de l'interface doit être précise avec qu'un développeur souhaitant développé l'interface respecte scrupuleusement la description de ce que doit faire la méthode.

          Un bon exemple est l'interface java.util.Collection

          Une classe abstraite n'a pas pour role de définit des services mais données une base à de futur implémentation.

          Le code d'un framework doit s'appuyer sur des services, donc des interfaces alors que la classe abstraite doit etre vu comme un socle commun en vue d'implémentation d'une interface. Selon la nature des implémentation le socle commun poura etre différents.

          L'utilisation des interfaces se revèle indispensable quand il s'agit de modéliser un processs métier avec divers acteurs. Le "workflow" utilisera des interfaces mais la réelle implémentation des services dépendra de l'acteur final.

          Un exemple pris comme ca: vendre un billet de concert suit tjs le meme processus métier: rechercher un spectacle pour des dates, obtenir les prix, saisir les informations du client, confirmer l'achat, envoyer les billets et la facture. Derrière il peut y avoir plusieurs acteurs qui ont chacun leur système et l'implementation de chacun des méthodes dépendra du système final. Met pour l'application au plus haut niveau, cela restera le même processus métier.
        • [^] # Re: interface systématique ?

          Posté par  . Évalué à 2.

          Pour compléter un peu l'argumentaire, voici un article qui aborde le sujet en profondeur (C# inside)

          http://www.dotnetguru.org/articles/dossiers/heritageimpl/Fra(...)

          La délégation est un sujet récurrent dans le monde Java, notamment parce qu'elle doit être faite manuellement alors qu'en enrichissant un peu la syntaxe on s'épargnerait des lignes de code

          http://beust.com/java-delegation.html
          • [^] # Re: interface systématique ?

            Posté par  (site web personnel) . Évalué à 2.

            Dans la page de l'article dotnetguru, la mise en page est toute cassée avec Firefox. Il y a pas mal d'encadrés qui chevauchent le texte. Je ne sais pas si tu as quelquechose à voir avec ce site mais si oui, te voilà prévenu :-)
            • [^] # Re: interface systématique ?

              Posté par  . Évalué à 1.

              Non je n'ai rien à voir et j'avais remarqué le pb sous FF.
              Bizarre ca passe bien avec IE (dotnetguru porte bien son nom).

              D'ailleurs je vous conseille l'excellent plugin IETab pour FF.
              Très pratique lorsqu'on bosse dans un intranet qui ne respecte pas les standards.
  • # Petite faute dans l'article

    Posté par  . Évalué à 1.

    Au début du texte, il me semble qu'il ne devrait pas être écrit « plus part » mais plupart.

    Aussi, je ne vois pas en quoi cet article convainc d'utiliser les interfaces.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.