Tuto interactif: Pattern Abstract Factory en Cocoa

GreensourceGreensource Membre
juillet 2009 modifié dans Objective-C, Swift, C, C++ #1
Bonjour tout le monde! J'ai décider de me remettre sérieusement à  revoir mes cours de conception pour bien engager ma dernière année d'étude. <3 <br />
Ma principale source de travail est le bouquin écrit par le Gang des 4 (Gang of Four) qui s'intitule en français: "Design Pattern, catalogues de modèles de conception réutilisables".
Les modèles de conception sont intéressant car ils répondent de manière élégante et efficace à  des problèmes que rencontre souvent les concepteurs de logiciel. Cocoa en regorge d'ailleurs pour notre plus grand bonheur.

Pour que ce soit efficace je me suis dit qu'une mise en pratique était nécessaire. Et pour que ça puisse servir mais aussi parce que je trouve ce forum vraiment sympa je me suis dit que j'allait faire un petit tuto.
Par contre j'ai voulu en faire un, un peu spécial. Ceux qui le ferons devrons s'il le souhaite compléter le tuto.

Pour celui-ci j'ai décider d'illustrer le Pattern Abstract Factory. Il consiste en l'élaboration d'une structure qui permet de s'abstraire de l'implémentation concrête d'un objet. Par exemple je souhaite fabriquer des avions, des fusées et des vaisseaux spaciaux dans une usine. Plutôt que fabriquer une usine spécifique de la NASA avec ses propres outils, technique etc... je vais déclarer des "normes" d'utilisation d'une usine. Ainsi la NASA devra se plier à  ces normes pour que je puisse lui dire de fabriquer ce que je veut.
Pourquoi faire ça? Et bien simplement si je veut que EADS fabrique aussi ces produits ça m'évite d'avoir à  réapprendre tout les codes spécifique de EADS, je n'ai qu'à  lui dire de respecter les normes et hop je sais déjà  me servir de ses nouvelles usines.

Voilà  pour le contexte, et c'est exactement ce que j'ai fait pour ce tuto! Sauf que j'ai juste préparer le terrain en construisant l'usine de la NASA, à  vous de construire les autres usines, comme par exemple EADS.

Le projet est en lien évidemment.

ps: C'est mon premier tuto et j'avoue qu'en Cocoa je suis encore novice donc je vais surement avoir besoin de vos avis pour le perfectionner! Je vous écoute... ;)

Réponses

  • GreensourceGreensource Membre
    04:41 modifié #2
    Primo: Déclarer les "normes".
    En Objective-C cela se traduit par la déclaration de "Protocol". Ils se trouvent tous dans le fichier FactoryProtocols.h
    • Il y a celui pour l'usine : AbstractFactoryProtocol qui déclare les méthodes de création de produit.
    • Ceux de chacun des produits : AbstractPlane,AbstractRocket,AbstractSpaceShip
    • Et enfin celui d'un produit en général : ProductionProtocol


    Donc une Usine devra se conformer au protocol AbstractFactoryProtocol,
    Un avion a AbstractPlane, une Fusée à  AbstractRocket... et chaque produit à  ProductionProtocol.
  • GreensourceGreensource Membre
    04:41 modifié #3
    Secondo: Construction concrète.

    J'ai donc créer une Usine de la NASA et tout les produits qu'elle peut créer. Ce sont toutes les classes qui commence par NASA... évidemment.
    Elles doivent toute implémenter au moins les méthodes du protocol qu'elles adoptent. Ne soyez pas choqué que ça ne fasse que renvoyer des chaines de caractère, j'ai pas encore les compétences pour envoyer une fusée dans l'espace  :)
  • GreensourceGreensource Membre
    04:41 modifié #4
    Tercio: Le client

    Pour finir il fallait créer un client qui s'occupe de commander à  l'usine des produit et les faire fonctionner. J'ai choisi de faire une interface Cocoa, d'une part pour m'entrainer, et aussi parce que c'est plus sympa qu'en ligne de commande.
    Je vais pas m'étaller là  dessus puisque ce n'est pas le propos.
    En gros l'interface donne le choix de l'usine, il faut l'initialiser. Ensuite on choisit le type de produit que l'ont veut et pour finir on fait faire à  ce produit les actions que l'on souhaite.
    C'est évidemment un controller qui gère tout ça pour respecter le Pattern MVC de Cocoa. J'ai commenté le code si cela vous intéresse!

    Voilà , à  vous de jouer, il me faut au moins une autre usine pour complêter ce Pattern, sinon il est un peu inutile  :P
  • DrakenDraken Membre
    04:41 modifié #5
    Plutôt que fabriquer une usine spécifique de la NASA avec ses propres outils, technique etc... je vais déclarer des "normes" d'utilisation d'une usine. Ainsi la NASA devra se plier à  ces normes pour que je puisse lui dire de fabriquer ce que je veut.


    Donner des ordres à  la NASA ? La forcer à  se plier à  des normes ?? Il est fou cet homme. Les hommes en noirs vont bientôt lui rendre une petite visite, et il passera le reste de sa vie à  regarder les rediffusions de la roue de la fortune, encore, encore et encore..

  • GreensourceGreensource Membre
    04:41 modifié #6
    En fait c'est un peu moi qui chapeaute les grands organisme américain, NASA,CIA,FBI,NSA...Faut bien quelqu'un qui organise tout ça tu comprends :)
  • yoannyoann Membre
    04:41 modifié #7
    Marrant comme idée.

    Petite précision sur les protocols, il existe un système d'héritage avec, tu pourrais par exemple écrire ceci :

    <br />@protocol AbstractPlane &lt;ProductionProtocol&gt;<br /><br />- (NSString*)flyInTheSky;<br /><br />@end<br />
    


    ça évite d'avoir à  marquer les deux ensuite comme ici :

    @interface NASAPlane : NSObject &lt;AbstractPlane , ProductionProtocol&gt;
    


    Et au moins tu es certain que les objet conforme à  AbstractPlane seront aussi conforme à  ProductionProtocol.

    Et dernière chose sur les protocoles, tu as les mots clef @optional et @required pour dire quels sont les méthodes obligatoire ou non. ça permettrait de coller un peut plus au sujet :-)
  • GreensourceGreensource Membre
    04:41 modifié #8
    En effet, merci c'est ajouté  ;)

    Mais je pensais en fait que les @required était implicite quand il n'y avait rien. Et comme dans mon cas il sont tous @required je pensais pouvoir m'en passer.
Connectez-vous ou Inscrivez-vous pour répondre.