On continu ensemble les cours sur la programmation avancée et surtout sur les modèles de conception appliqué au langage PHP.
Aujourd’hui découvrez le pattern Observer, très utilisé en programmation événementielle.
Tout est dans la vidéo ci-dessous
[ppmaccordion][ppmtoggle title= »Afficher le texte de la vidéo »]
Comment utiliser le pattern Observer pour profiter des stratégies PHP avancées
Bonjour à tous et bienvenu sur Développement Facile.
On continu ensemble les cours de php avancés, dans PHP 5 avancé, combiné avec l’HTML 5, donc là vous allez continuer à découvrir des nouveaux modèles de conceptions que vous allez pouvoir utiliser dans votre code php mais pas seulement, un modèle de conception, une fois que vous le connaissez, il suffit juste d’adapter le code, donc vous pouvez utiliser vos modèle de conceptions dans tous les langages objets qui sont en javascript, en ActionScript, en java vous pouvez utiliser les modèles de conceptions, vous connaissez, il suffira juste d’adapter le code des classes au langage bien évidemment, d’adapter la syntaxe. Là vous allez découvrir dans ce cours un modèle de conception très utilisé, il s’agit d’observer, il est très simple à comprendre aussi.
Le modèle Observer
C’est basé sur la programmation événementielle, le principe du modèle observer est simple c’est être informé de la mise à jour d’un objet sans le modifier, à chaque fois qu’un objet se met à jour il doit vous informer vous, mais vous devez pas modifier cet objet c’est-à-dire il n’y a pas de couplages entre les objets, donc le modèle observer est très intéressant parce que les objets sont indépendants les uns des autres et ils arrivent quand même à se notifier les mises à jour entre eux grâce à l’envoi d’événements et d’informations avec ces événements.
Pour mettre en place le modèle de conception, l’objet qui est écouté il possédera un ou plusieurs observateurs indépendants, observer, qui vont surveiller cet objet, cet objet c’est appelé le sujet en principe ou subject ou observer, donc lors de la mise à jour de l’objet observer, qui correspond à l’apparition d’un événement particulier, l’objet observer il se met à jour et il va envoyer un événement à tous ces observateurs pour leur signaler sa mise à jour et après c’est les observateurs en fonction de l’’événement qu’ils reçoivent, des informations qu’ils reçoivent, ils vont choisir de déclencher ou pas des traitements tout simplement, c’est aussi simple que ça.
L’intérêt ce modèle c’est d’apporter une dimension événementielle à une application php, vous savez que le langage php il est plutôt procédurale, les actions s’enchaînent les unes à la suite des autres, l’un après l’autre les traitements s’enchainent, là vous allez amener une dimension événementielle dans php donc ça peut être très pratique, comme je vous l’ai dit, observer limite c’est à faible couplage entre les objets, donc c’est excellent en terme de programmation et vous avez des applications beaucoup plus souples, beaucoup plus évolutives grâce à ce design patterns, ce modèle de conception.
Exemple pratique
Avant de voir un exemple de code source, je voulais vous expliquer rapidement observer dans le monde réel, observer dans le monde réel vous avez par exemple un éditeur de journaux qui publient les magazines et il y a des abonnés donc des clients, l’éditeur de journaux c’est le sujet, c’est l’objet qui est observé et les clients c’est les observers, les personnes qui attendent les mises à jour du sujet donc les nouveaux magazines, donc à chaque fois que l’éditeur publie un nouveau magazine, un nouveau numéro il est mis à jour donc il informe les observateurs d’une nouvelle mise à jour, d’un nouveau numéro, les clients les observateurs reçoivent le nouveau numéro, la mise à jour, ils lisent le magazine et il choisit ou non d’effectuer certaines actions, un observateur bien évidemment, peut se désabonner du sujet donc un observateur résilie son abonnement au magazine et il ne recevra plus les mises à jour de la maison d’édition du magazine. Voilà un peu dans le monde réel le modèle de conception observateur, maintenant on passe à l’exemple de code source.
Alors voici une mise en œuvre du modèle de conception observer, alors je vais vous montrer déjà la classe abstraite donc ça veut dire la classe abstraite d’un observer, c’est les clients si vous vous rappelez l’exemple avec l’éditeur de magazine que j’ai donné au juste avant, les abonnés au magazine c’est les observers, ils doivent absolument avoir la méthode publique, pour le sujet donc la classe abstraite des sujets donc de l’éditeur de magazines, par exemple, ils doivent absolument, une méthode attache pour ajouter un observateur, une méthode des tâches pour enlever un observateur, donc abonnement d’un client, désabonnement d’un client et une méthode notifie pour informer les observers, c’est-à-dire pour informer les clients par exemple qu’il y a une nouvelle version du magazine, donc voici un exemple d’observer donc je dans sa méthode update c’est là où le sujet va appeler directement, c’est le sujet qui appelle directement la méthode update de l’observer, donc bien évidemment il étend la classe abstraite et c’est là ou vous faites vos traitements, en fonction des infos transmises par le sujet, donc là ça peut être abstract au sujet on passe le sujet lui-même, parce que l’on a besoin du sujet pour récupérer des informations dans cet exemple là, mais vous pouvez très bien passer à un autre objet, il suffit de se mettre d’accord et de le préciser dans la classe abstraite, vous précisez le type de sujet, en règle générale c’est pas le sujet qu’on transmet c’est un objet, un objet event qu’on transmet dans le update et à partir de l’objet event on récupère les informations, tout simplement. Là c’est un exemple mais sinon ici vous passerez un objet évent tout simplement, update event votre objet et donc du coup à partir de votre objet event vous récupérez les informations ou vous le souhaitez, donc l’éditeur de magazine le sujet, appelle la méthode update des observateurs et c’est là ou, en fonction des infos que vous recevez ici donc de l’objet event on va dire, vous faites un traitement différent, soit vous faites de l’affichage, soit vous en tenez compte, soit vous ajoutez des points dans un jeu c’est à vous de voir, pareil pour l’exemple deux le sujet donc on étend la classe abstraite, on implémente la méthode attache détache et notifie et qu’est-ce qu’on fait dans chacune ? On a une liste et les magazines favoris donc de l’éditeur donc ça c’est pour le traitement en fonction de comment vous utilisez le pattern, le modèle de conception observeur donc ça c’est en fonction de votre application, de votre code vous aurez des paramètres propres à votre sujet ce qui est normal donc vous aurez bien évidemment un tableau qui contient la liste de tous les observateurs donc des objets, donc on ajoute un observateur classe abstraite, on le rajoute dans le tableau, vous avez deux solutions, soit array push, soit comme ça cette solution, pour le détache on utilise array search pour rechercher directement l’observateur que l’on veut supprimer des écouteurs, c’est-à-dire c’est un abonné au magazine qui résilie son abonnement, on là trouvé, donc on a sa clé et on supprime cet abonné tout simplement donc de la liste du tableau, sinon vous parcourez tout le tableau bien évidemment, vous faites un test, est ce que c’est le bon observateur trouvé, le bon client qui veut se désabonner, trouvé, et pareil vous faites un offset. Pour notifier tous les observateurs, il suffit de parcourir tout le tableau, on récupère l’objet observer donc l’abonné et on appelle la méthode update sur cet objet observer c’est aussi simple que ça et on transmet this, en en fait ce sera event là on transmet this parce qu’on a dit que l’on transmettait l’objet sujet tout simplement, subject, donc c’est this ici sinon vous créerez, dans vos exemples, dans vos applications, un objet event avec toutes les données, les propriétés, les méthodes dont vous avez besoin et vous le transmettrez ici, et là on met à jour les favoris quand c’est nécessaire et là une méthode get favoris pour le sujet, comment ça fonctionne ?
On crée des nouvelles instances de sujet d’un observateur, l’observateur on l’ajoute à la maison d’édition donc la maison d’édition c’est elle qui édite les magazines, bien évidemment on inclut les deux classes, on crée un nouveau sujet maison d’édition, un lecteur, un observer, donc on attache au lecteur on ajoute le lecteur en tant qu’abonné au magazine de la maison d’édition et là, nouvelle version, nouveau magazine numéro un, donc ça va informer les le ou les sujet, il peut y en avoir plusieurs, là j’en ai créé qu’un mais on peut en faire bien évidemment plusieurs, encore un nouveau magazine, nouvelle édition donc on va informer le lecteur, là on détache le lecteur, le lecteur s’est désabonné, il ne veut plus recevoir les nouvelles éditions publiées, donc j’ai modifié légèrement le sujet, c’est-à-dire détache je l’ai simplifié en mettant juste un parcours du tableau et donc comme je vous l’ai dit on parcourt tout le tableau avec toutes les clés et les objets, dès que l’objet observer est reconnu en entrée on le supprime, j’ai utilisé plutôt le for each ce sera beaucoup plus simple pour vous et pareil pour le attache, ici on ajoute directement l’élément dans le tableau ce qui fait que quand vous attachez votre lecteur, vous mettez à jour nouvelle édition du magazine, ça informe les lecteurs, les écouteurs, pareil nouvelle édition vous informez les écouteurs, vous détachez le lecteur vous publiez une nouvelle édition mais vous savez qu’il n’y a plus d’abonnés, il n’y en avait qu’un seul, donc n’y aura pas d’affichage, donc ça vous donne ceci à l’écran, le nouveau magazine il y a un seul lecteur, on le voit, la deuxième édition du magazine il y a lecteur on le voit, mais rappelez-vous dans la troisième édition, le lecteur à résilié son abonnement donc on publie un nouveau magazine mais vu qui a plus d’écouteurs, personne n’est informé, donc c’est à la puissance du modèle de conception observer je vous invite vraiment à bien comprendre les tenants et les aboutissants de ce modèle de conception il énormément utilisé, il va simplifier votre développement php, très fortement, vous allez voir, une fois que vous aurez compris ce principe de fonctionnement, vous ne pourrez plus vous en séparer vous allez utiliser parce que c’est très pratique.
Alors vous avez vu un exemple de code source observateur, votre exercice cette fois, c’est à vous de créer une application beaucoup plus poussée, justement, reprenez l’exemple avec l’éditeur de magazines qui publient des magazines en prévenant les lecteurs, donc reprenez cet exemple et codez-le en vous appuyant sur le modèle de conception observer et tout en sachant que les lecteurs ont la possibilité de résilier un abonnement mais de ce réabonner derrière, donc avec le modèle de conception observer vous allez voir il n’y a rien de bien compliqué vous en êtes tout à fait capable sans aucun problème.
Votre plan d’actions !
Maintenant c’est à vous de jouer, faites les exercices que je vous conseille pour vous familiariser de plus en plus avec le modèle de conception observer, il faut savoir qu’il est présent dans une multitude d’applications et il est même présent dans d’autres modèles de conceptions, dans les prochaines semaines vous allez découvrir d’autres modèles de conceptions, ce sont des modèles de conceptions qui cumulent plusieurs modèles de conceptions, par exemple, il y a un modèle de conception ceux qui connaissent ils vont savoir tout de suite savoir duquel je parle, qui combine le modèle de conception observer, commande, singleton, il combine plusieurs de ces modèles de conceptions et à lui tout seul c’est un méga modèle de conception qui est utilisé dans énormément d’applications, c’est pour ça que je commence par les modèles de conceptions les plus simples dans développement facile, pour arriver, on va ensuite combiner plusieurs modèles de conceptions pour vraiment que vous soyez au top dans votre développement.
Si vous avez des questions posez les directement sous cette vidéo, l’équipe développement facile vous répondra comme d’habitude vous trouverez le code source en téléchargement sous cette vidéo et maintenant je vous invite à regarder la deuxième vidéo, juste au-dessus de moi il y a un lien, une image cliquez ici pour lancer la deuxième vidéo et dans la deuxième vidéo vous allez aller beaucoup plus loin dans la création d’applications performantes avec le php 5, avec html 5, vous allez découvrir des stratégies de développement avancées qui vont vous faire gagner un temps phénoménal dans votre développement, vous allez avoir des stratégies pour éliminer définitivement les bugs fatals de vos applications pour contrôler le processus, votre processus de développement du début jusqu’à la fin avec une parfaite maîtrise, pour faire évoluer des applications plusieurs mois après sans aucune difficulté, pour travailler en équipe, donc tout ça c’est dans la deuxième vidéo, cliquez simplement sur l’image là le lien juste au-dessus de moi cliquer ici pour lancer la deuxième vidéo, je vous retrouve dans la deuxième vidéo, à tout de suite.
[/ppmtoggle] [/ppmaccordion]
Télécharger l’exemple de modèle Observer en PHP
Retrouvez le code source commenté sur le pattern Observer qui vous a été présenté dans la vidéo
Téléchargement du code source 05-observer
Quel modèle de conception utilisez vous ?
Venez présenter dans la zone commentaire vos modèles de conception préférés.
Vous pouvez également utiliser la zone commentaire pour poser les questions sur l’exercice qui vous est proposé dans la vidéo.