IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dart Discussion :

Dart : l’alternative de Google à JavaScript prête pour la conquête du Web


Sujet :

Dart

  1. #141
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    Pour moi lorsque une classe qui m'est fournie par un acteur du maché comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Class Toto {
      private a;
      private b;
     
      public getA() {...};
      public setA(a) {...};
      public getB() {...};
      public setA(b) {...};
     
    }
    Je suis peut être un vieux con qui ne veux pas comprendre la conception, mais je n'ai pas le choix je NE PEUX PAS FAIRE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    obj = new Toto();
     
    foreach (member : obj.getMembers()) {
      // traitement sur un champ de l'objet
    }
    C'EST le principe même de la POO à base de classe que de l'INTERDIRE.

    du coup comme un con je dois faire pour chaque classes pour lequel je rencontre ce genre de difficultée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Map maMap = new MAP();
    maMap.put("a", obj.getA());
    maMap.put("b", obj.getB());
    foreach (member : maMap) {
      // traitement sur un champ de l'objet
    }
    Et que vous preniez le problème par tout les bout lorsque la classe Toto NE VOUS APPARTIENT PAS et qu'elle à cette contrainte la seule et unique façon d'accéder à un membre c'est de passer par le getter. et c'est NORMAL vu que la POO à base de CLASSE a été concue pour ça.

    Ce n'est pas un problème de conception c'est uin problème de langage.

    Je pourais construire ma prope classe qui offre cette possibilité de parcour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Classe TotoBis {
      Map maMap = new MAP();
     
      TotoBis (Toto obj) {
        maMap.put("a", obj.getA());
        maMap.put("b", obj.getB());
      }
     
      Map getMembers() {...}
    }
    Mais il suffit de regarder le code de cette classe pour comprendre que ça ne change rien à la donne. Il FAUT acéder aux getter l'or du DEV un à un pour allimenter la MAP.

    La seule et unique façon de pouvoir accéder au membres de façon itérative est de CASSER ce modèle de la POO classique.
    certain langages le permètent de façon plus où moins élégante. d'autre comme java propose l'introspection.
    Je devrais revoir ma conception pour obtenir une classe à moi et Redévelopper moi même des librairies lourdes industrialisées, normalicée certifiées.

    Puis il y a des langage qui CHOISSISSENT de ne surtout pas contraindre trop fortement les objets.
    c'est UN CHOIX tout aussi RESPECTABLE que la POO à base de CLASSE STATIQUES.

    Ce genre de situation qui pour vous est rarissime est mon lot quotidien. Dans un cas comme celui-ci répété à longueur de journée un langage plus souple est plus que bien venu c'est un gage de QUALITE, de ROBUSTESSE, d'EVOLUTIVITE, de PERENITE, c'est GAIN de TEMPS, d'ARGENT.
    Et ça demande comme pour tous language de MAITRISER les capaciter de sont outil.

    cela n'en fait ni un meilleur outil ni un moins bon. cela en fait un outil différent adapté à des usages différent. un outil capable de proposer des solution SIMPLE et ELEGANTE là où le typage fort et statique est INCAPABLE de proposer une solution.

    Au même titre qu'il y a un besoin dans le web d'un langage plus structures pour faire des appli. il y a dans le monde des grand secteur d'activité où l'information déstructures est le meilleurs gage de succes. et pour ces activitées utiliser un lagage dont les concepts sont aussi souple que de l'information est déstructurée est une bénédiction.

    A+JYT
    En parlant de maîtrise d'outil ...
    Je pense qu'une des choses importante est d’être humble en informatique et avant de dire que quelque chose est impossible, être sûr d’être un expert dans le domaine et d'en connaitre tous les tréfonds !

    Donc je réitère, SI c'est possible avec la réflexion !

    En gros en C# ça ressemble à ça (mais cela existe aussi en java) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    // type User a copier vers UserDto
    var userType = typeof(User);
    var userDtoType = typeof(UserDto);
     
    var user = new User();
     
    var userDto = new UserDto();
     
    foreach(var property in userDtoType.GetProperties())
    {
        var propertyName = property.MemberName;
        var value = userType.GetGetMethod(propertyName).Invoke(user);
        userDtoType.GetSetMethod(propertyName).Invoke(userDto, value);
    }
    Donc voila certes c'est plus verbeux mais ce genre de code est encapsulé (comme dans automapper qui lui optimise ce code a la première utilisation).

    On a d'autres trucs sympa comme le mot clef dynamique qui permettre de taper n'importe quoi sans check a la compilation comme un langage dynamique mais qui va garder le polymorphisme de C#

    Sinon langage dynamique plus robuste que du langage statique ? humm ...
    Je veux bien que cela permette d’écrire du code un peu plus vite mais il ne faut pas oublié que le developpeur ne code que 20% du temps, les 80% restant sont en grande partie dédié au debug qui lorsque l'on a pas un modèle correctement structuré peut être très très long si les règles business sont complexes.

    Bref C# (et java) peuvent parfaitement répondre à ce type de problématiques, et je n'ai jamais dit que c’était rarissime j'ai eu des approches similaire a faire de nombreuses fois.

  2. #142
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Bon je crois que ça commence à troller fort.

    je vais arrêter. car lorsqu'on dis
    le fait que js soit différent ne le rend ni meilleur ni moin bon qu'un autre et qu'on interprète ça
    ainsi :
    Citation Envoyé par la.lune Voir le message
    Mais pourquoi pas Changer en mieux?


    Tu veux supprimer le terme faiblaisses comme si JavaScript est parfait il n a aucune de faiblesse? .
    Là je jette l'éponge

  3. #143
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    dans navigateur les fonctions globales sont attachée à l'objet window. et lorsque on fait <tag id="t5" onclic="clic1();"> on crée en fait une méthode qui est attachée à l'objet tag dont le corps est clic1()l'équivalent de getElementById("t5").onclic=function() {clic1(); return true;}>
    En C# on a la notion de Binding qui permet de faire du déclaratif et pas de l'abonnement aux événements coté code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Button id="t5" Command="{Binding Clic1}"/>
    On arrive a un résultat similaire.

  4. #144
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    Bon je crois que ça commence à troller fort.

    je vais arrêter. car lorsqu'on dis
    le fait que js soit différent ne le rend ni meilleur ni moin bon qu'un autre et qu'on interprète ça
    ainsi :


    Là je jette l'éponge
    D'un autre coté tu casses du sucre a mort sur les faiblesses des langage typé mais sur javascript tu remplaces le terme "faiblesses" c' est juste "une autre approche du développement web".
    (Entre Dart et TypeScript ? Quelle approche vous semble la meilleure pour [...])

    Bref chacun son point de vue ...

  5. #145
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    // type User a copier vers UserDto
    var userType = typeof(User);
    var userDtoType = typeof(UserDto);
     
    var user = new User();
     
    var userDto = new UserDto();
     
    foreach(var property in userDtoType.GetProperties())
    {
        var propertyName = property.MemberName;
        var value = userType.GetGetMethod(propertyName).Invoke(user);
        userDtoType.GetSetMethod(propertyName).Invoke(userDto, value);
    }
    AU mince exactement le code que je donne depuis le début
    un langage qui autorise le parcours des membres par introspection
    A c'est con mais maintenant tous les langage staique ne suprote pas cela.

    et ce truc là est exactement mon propos. les langage à typage statique trop rigide ont été confronté à ce genre de problème est certains on ajouté ce genre de mécanisme, pas tous. et la présence même de ce genre de mécanisme qui est le contraire même de la théorie de la POO à base de classe. cela montre bien qu'il y a un besoin et donc de la place pour d'autre approches, d'autres langages.

    imagine une minute ne pas disposer de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var userType = typeof(User);
    var userDtoType = typeof(UserDto);
    je crois que tu va t'en mordre les doigts.

    imagine que si un en dispose, 95% de ton code soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myObj.GetMethod(Name).Invoke(value);
    là tu commence à te dire mince j'ai un problème mon langage n'est peut être pas adapté à mon besoin.

    Je suis dans ce dernier cas. et l'introspection en java est couteuse.
    A+JYT

  6. #146
    Membre chevronné
    Avatar de la.lune
    Homme Profil pro
    Directeur Technique
    Inscrit en
    Décembre 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 545
    Points : 2 084
    Points
    2 084
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    Bon je crois que ça commence à troller fort.
    Je ne suis pas entrain de troller, j'ai posé une question et puis j'ai interpreté directement ce que tu as dis. Je dis ça, parce que je ne pense pas que tout le monde va à côté de la plaque, avec CoffeScript, TypeScript, Dart .. si ceux qui conçoivent les languages qu'on utilise y pensent revoir alors il y a une raison logique dedans qui ne demande pas d'être expert pour la comprendre. Avec les extention, les surcouches, la multitude de framwork pas juste pour automatiser un ensemble de taches répétitives et courantes mais pour faciliter le codage en soi, ça laisse comprendre il y a bien sûr de quoi combler. Alors tout ça n'a rien de troll c'est une réalité observé.

  7. #147
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par anthyme Voir le message
    D'un autre coté tu casses du sucre a mort sur les faiblesses des langage typé mais sur javascript tu remplaces le terme "faiblesses" c' est juste "une autre approche du développement web".
    (Entre Dart et TypeScript ? Quelle approche vous semble la meilleure pour [...])

    Bref chacun son point de vue ...
    mais non Je dis au contraire que c'est très bien pour beacoup de chose
    mais comme tout langage ce ne s'applique pas toujours.

    et si je dis que je rencontre des cas où ce n'est pas un avantage on me dis que je ne sais pas concevoir mes applis.
    J'essais de donner des cas simplifiés que je rencontre

    Mais comme si la pensé unique s'appliquait c'est encore moi qui développe comme un pied.

    Mon propos est depuis le début qu'il y a de la place pour toous le monde que beaucoup de langage existent et que cette diversité n'est pas qu'une question d'amour personnel pour l'un ou l'autre. mais parce qu'il y a des besoins divers et variés.

    Après 30 ans de developpement à base de classes de fonction de prototype de prédicats etc. dans une floppées de langages. Je maintiens que le typage faible n'est pas une faiblaise. c'est une caractéristique à utiliser à bon éssiant.
    je maintient que le typage fort n'est pas la réponse à tout, c'est une caractéristique à utilise rà bon esiant.

    A+JYT

  8. #148
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    AU mince exactement le code que je donne depuis le début
    un langage qui autorise le parcours des membres par introspection
    A c'est con mais maintenant tous les langage staique ne suprote pas cela.

    et ce truc là est exactement mon propos. les langage à typage statique trop rigide ont été confronté à ce genre de problème est certains on ajouté ce genre de mécanisme, pas tous. et la présence même de ce genre de mécanisme qui est le contraire même de la théorie de la POO à base de classe. cela montre bien qu'il y a un besoin et donc de la place pour d'autre approches, d'autres langages.
    Ok pas tous mais ca me fait pas plus chaud que cela. Et on s’éloigne du débat quand même ... a savoir classe POO vs Javascript

    Citation Envoyé par sekaijin Voir le message
    imagine une minute ne pas disposer de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var userType = typeof(User);
    var userDtoType = typeof(UserDto);
    je crois que tu va t'en mordre les doigts.
    Serieusement !!!??? Je vais pas coder un framework pour te montrer comment faire !

    tu fais et c' est réglé ...

    Citation Envoyé par sekaijin Voir le message
    imagine que si un en dispose, 95% de ton code soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myObj.GetMethod(Name).Invoke(value);
    là tu commence à te dire mince j'ai un problème mon langage n'est peut être pas adapté à mon besoin.
    Je peux le faire avec mon langage donc il est adapté a ce besoin.

    après si l'api te dérange je fais des méthodes d'extension sur object et ca donne ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach(var prop in userDto.GetPropertyName())
    {
        userDto.Set(prop, user.Get(prop));
    }
    Voila API similaire au JS donc on répond au même besoin, ensuite pour les perfs on parle quand même de Javascript en face ...
    Mais bon admettons que la réflexion c#/java soit plus lente que Javascript il reste plein de solutions : mise en cache des MemberInfo récupérés ou mieux, utilisation d'expression lambda compilés ou encore mieux emit de bytecode (qu'on me dise pas que c'est pas faisable, je l'ai deja fait en projet réel !).
    Mais comme je te l'ai dit tout à l'heure pas besoin de se préoccuper de tout cas pour le développeur lambda, des outils font déjà cela de manière automatisé.

  9. #149
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par la.lune Voir le message
    Je ne suis pas entrain de troller, j'ai posé une question et puis j'ai interpreté directement ce que tu as dis. Je dis ça, parce que je ne pense pas que tout le monde va à côté de la plaque, avec CoffeScript, TypeScript, Dart .. si ceux qui conçoivent les languages qu'on utilise y pensent revoir alors il y a une raison logique dedans qui ne demande pas d'être expert pour la comprendre. Avec les extention, les surcouches, la multitude de framwork pas juste pour automatiser un ensemble de taches répétitives et courantes mais pour faciliter le codage en soi, ça laisse comprendre il y a bien sûr de quoi combler. Alors tout ça n'a rien de troll c'est une réalité observé.
    Je pense que le besoin de structurer certains développement web existent et que Dart et TypeScript ou CoffeScript tentent d'y répondre.
    Je pense que c'est une excélente igniciative. et je ne pense pas que les avancés de chacun soient suffisentes pour que je pravienne aujourd'hui à les départager.

    Je pense aussi que le typage dynamique est une force de javascript qu'il convient d'utiliser pour ce qu'elle est lorsqu'on en a besoin.
    Je pense que le typage statique est un excélent outil pour faire du développement.

    Je constate que les dommaines qui utilisent traditionnellement des langages fortements dynamiques cherchent aujourd'hui au travers de nouveaux langages à aller vers un dévelepement plus structuré et c'est une très bonne chose. c'est preuve de maturité.
    Je constate que les dommaines qui utilisent traditionnellement des langages fortement statiques chrechent aujourd'hui au travers de nouveaux langage à aller vers des développement plus dynamique et moins contriants. et c'est une très bonne chose. c'est aussi une preuve de maturité.

    Je suis peut-être un vieux con de l'arrière garde qui ne sais pas développer et concevoir. mais j'ai les yeux ouverts. et je constate. que les gisement de données sont passés de structures très rigides à des structures très organisées (relationnel) pour voir ensuite apparaitres des déstructurations (base collones) et ariver aujourd'hui à des chose peut structurées (bases clef/valeurs) et on pourait ajouter tout un tas d'autres gisement de données qui vont des plus contraints à la soupe la plus totale.

    on ne se pose pas la question de savoir si l'un est meilleur que l'autre. on possède divers outils ont connait leur caractéristiques et on les utilisent là où c'est opportun.
    Je fais exactement pareil avec les langages. je ne me pose pas la question de savoir si la POO à base de classe et meilleur que la POO à base de prototype, si la prog fonctionnelle et meilleur que la prog impérative, je prends chaque approche pour ces caractéristiques et je les emplois (j'essais) là où elle sont le plus adaptées.

    Pour moi aujourd'hui le principal défaut de JavaScript c'est java sans lib le moteur de compilation C# sans aucun objet ni classe c'est C sans stlib c'est C++ sans STL etc.
    un langage nu. Mais le langage en lui-même, je n'ai pas grand chose à redire. un moteaur minuscule, une extensibilité maximal, rapide à l'exé conci à l'écriture. quelques détail mais rien de facheux.

    A+JYT

  10. #150
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par anthyme Voir le message
    tu n'a pas compris je dit j'ai des langage où cette instruction n'existe pas. j'ai des langage où linstruction invoke n'existe pas

    je sais faire aussi en java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Object lancerMethode(Object o, Object[] args, String nomMethode) throws Exception
    {
      Class[] paramTypes = null;
      if(args != null)
      {
        paramTypes = new Class[args.length];
        for(int i=0;i<args.length;++i)
        {
          paramTypes[i] = args[i].getClass();
        }
      }
      Method m = o.getClass().getMethod(nomMethode,paramTypes);
      return m.invoke(o,args);
    }
    mais
    Si tu as le choix ?
    A quoi te sert la structuration par classe quand dans ton dev 95% du travail se résout via l'introspection ?

    Moi je conclus que dans CE cas là js est plus adapté. Je ne dis pas que les classes sont une mauvaise chose. dans cette activité là elle sont une contrainte plus qu'un gain de productivité.

    A+JYT

  11. #151
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 740
    Points
    3 740
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par anthyme Voir le message
    public Piece {
    this.MutationStrategy = new PionMutationStrategy(this); //a setter dans une factory mais bon c'est du quick and dirty
    }
    Ne pas déléguer this à un autre objet dans le constructeur


    Citation Envoyé par anthyme Voir le message
    class PionMutationStrategy : PieceMutationStrat{
    public ArrivedInEnemyCamp(){ // ce code serait encapsulé dans une méthode "TransformPionToDame"
    this.piece.MovementStrategy = new DameMovementStrategy();
    this.piece.MutationStrategy = new DameMutationStrategy();
    }
    }
    Je connais le pattern Strategy, mais celui-ci ne contient pas une référence de la pièce, elle fait passer les objets pièces dans les paramètres de la méthode de l'interface (ici PieceMutationStrat).
    C'est la classe Pièce qui possède une référence vers les interfaces Strategy, afin de déléguer son contenu à celui-ci.
    -> http://rpouiller.developpez.com/tuto...e=page_4#LVI-I

    A la lecture de ArrivedInEnemyCamp(), on ne va pas forcément comprendre son utilité, car elle n'est censé rien faire pour la Dame, et les méthodes qui ne font rien c'est pas le top du top.

    Si j'ai pris l'exemple des jeux de dames ce n'est pas pour rien, c'est un cas auquel je me suis confronté, mais j'aurais aussi pu prendre l'exemple des Handler. Considérons que tu manipules un arbre de noeud, chacun de ces noeuds possède un type différent (dossier et fichiers de type différents). Tu as le choix entre connaitre le type de l'objet via instanceof pour afficher un simple petit pop-up (légèrement différent en fonction du noeud), ou bien créer autant de classe supplémentaire que de type de noeud existant.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  12. #152
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par Gugelhupf Voir le message
    Ne pas déléguer this à un autre objet dans le constructeur
    T'es pas sympa je me prend le chou a coder sur un IDE pire qu'une console (le forum) tu vas chipoter pour des détails ... J'ai dit que c’était à l'arrache.
    Si tu veux tu le passe en argument mais cela ne change pas grand chose ... (pour info le pattern strategy laisse libre court à la création et son application)
    De plus c'est pas parce que tu utilises un smiley comme ca que c'est une vérité absolu, passer this dans un constructeur revient a étendre une classe en l'encapsulant dans une autre (plutôt que raajouter des méthodes), ce qu'on peut faire ici pour ne pas avoir a faire d’héritage sur Piece.


    Citation Envoyé par Gugelhupf Voir le message
    Je connais le pattern Strategy, mais celui-ci ne contient pas une référence de la pièce, elle fait passer les objets pièces dans les paramètres de la méthode de l'interface (ici PieceMutationStrat).
    C'est la classe Pièce qui possède une référence vers les interfaces Strategy, afin de déléguer son contenu à celui-ci.
    -> http://rpouiller.developpez.com/tuto...e=page_4#LVI-I
    Oui comme dans mon code ... piece.MutationStrategy

    Citation Envoyé par Gugelhupf Voir le message
    A la lecture de ArrivedInEnemyCamp(), on ne va pas forcément comprendre son utilité, car elle n'est censé rien faire pour la Dame, et les méthodes qui ne font rien c'est pas le top du top.
    C' est subjectif, moi ca me parle et c'est un cas métier qui fait parti du jeu donc il peut très bien être la. (ça fait plutôt DDD mais après on pourrait mettre la logique coté Case cela serait plus logique, encore une fois c’était un exemple a l'arrache pas une modelisation reflechie.
    Comme je te l ai dit un pattern Visitor avec la classe Case serrait surement mieux genre t aurai des méthodes Accept(CasePlateau) Accept(CaseCampNoir) ou dans l autre sens Accept (dame) Accept(pion)...

    Citation Envoyé par Gugelhupf Voir le message
    Si j'ai pris l'exemple des jeux de dames ce n'est pas pour rien, c'est un cas auquel je me suis confronté, mais j'aurais aussi pu prendre l'exemple des Handler. Considérons que tu manipules un arbre de noeud, chacun de ces noeuds possède un type différent (dossier et fichiers de type différents). Tu as le choix entre connaitre le type de l'objet via instanceof pour afficher un simple petit pop-up (légèrement différent en fonction du noeud), ou bien créer autant de classe supplémentaire que de type de noeud existant.
    Ça me parait encore plus simple ( mais je l ai peut être mal compris ?)
    Tu fais un contrat sur tablasse de base (GetPopupContent, un truc dans le genre) sur chacun de tes type de noeud et tu renvois un texte différent selon le type dans l’implémentation.
    Apres tu parle surement de faire une classe a part (encore Strategy ? mais bon la il vaudrait mieux s' en servir si c'est réutilisable et non pas 1 type de fichier = 1 strategy sinon autant le mettre dans la classe du type de fichier ?)
    En tout cas je préfère 1000 fois avoir 15 classes avec 15 implémentations au problème qu' une approche mega switch multi instanceOf avec 15 case: (ou des if qui se chaînent c'est pareil) pour la règle d'encapsulation et de séparation des concerns.
    Egalement, ces classes peuvent partager du comportements alors que le switch ...

    Bref c'est encore évitable, vive la POO !

    Bon week-end messieurs.

  13. #153
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Dart 1.3 : amélioration de performance côté serveur et meilleur support d’Angular
    l’alternative à JavaScript de Google sort

    Moins de deux mois après la publication de Dart 1.2, Google sort une nouvelle version de son langage de développement Web.

    Dart 1.3 est disponible en téléchargement et promet d’entendre les performances du langage. Google note essentiellement un gain de performance important côté serveur.

    Pour le SDK Dart 1.3, les ingénieurs de Google ont amélioré les performances pour le code asynchrone en cours d’exécution dans la machine virtuelle Dart et des améliorations importantes ont également été apportées à la bibliothèque « dart:io ». Le résultat de ces travaux est l’exécution deux fois plus rapide du code pour Dart I/O.




    En ce qui concerne l’éditeur Dart, la fonction « Run as JavaScript » a été mise à jour pour utiliser désormais « pub serve », qui exécute votre application en utilisant un serveur de développement intégré « pub ». Selon Google, cela rend les taches de développement plus simples et plus rapides.

    Pour les utilisateurs du Framework AngularDart, l’éditeur Dart offre désormais une meilleure prise en charge, avec notamment le support de l’achèvement de code Angular et une meilleure analyse du code, la prise en charge de la refactorisation. Selon Google, les applications Web développées avec Dart et Angular gagnent en productivité.

    Dart 1.3 est disponible en téléchargement sur le site du projet. Pour ceux disposant déjà de Dart Editor, ils peuvent effectuer la mise à jour via le menu « A propos de Dart Editor ».

    Dart se positionne comme une alternative robuste à JavaScript, qui se distingue essentiellement par son typage fort et optionnel, tout comme TypeScript de Microsoft, qui a atteint sa première version la semaine dernière et qui contrairement à Dart, est un sur-ensemble de JavaScript.

    Télécharger Dart 1.3

    Source : Google
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  14. #154
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Points : 21
    Points
    21
    Par défaut
    Maintenant un mois que j'ai migré mon projet en dart côté serveur et dartangular côté client.

    Un vrai bonheur, les possibilités qu'ils proposent donnent un confort de conception que j'ai rarement pu avoir dans pas mal de technologies. Ce que j'aurais fait en un mois auparavant je le fais maintenant en une semaine. Cela reste bien sûr un outil et le développeur fait la différence mais je ne regrette pas mon choix du tout et j'ai hâte de tester cette 1.3 ce soir.

  15. #155
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 006
    Points
    2 006
    Billets dans le blog
    1
    Par défaut
    Je serais bien tenté de m'y mettre, toutefois est-ce que ça ne rend pas la phase de développement plus laborieuse s'il faut recompiler le code à chaque modification ?
    Il y a bien-sûr l'option de bosser sous Chrome mais je suis attaché à mon Firefox.

  16. #156
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    1 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 030
    Points : 4 203
    Points
    4 203
    Par défaut
    Je travaille actuellement sur un projet massivement client, en Dart + Polymer, et Web Service WCF (.NET) + BrightstarDB côté serveur.
    Que du bonheur ! J'ai pu faire mes premiers éléments dynamiques quasiment sans consulter la moindre documentation !

    Dès qu'on a intégré les quelques subtilités (notamment les répertoires clés de l'arborescence et le fait qu'il faut faire "pub build" pour Angular/Polymer), c'est vraiment très intuitif, structuré et agréable ! Le langage est compilé donc on voit instantanément nos erreurs dans l'IDE, à l'exécution on a un débugger qui se lance, traitant les points d'arrêts (et la navigation) mais doté également d'un espion sur les objets en cours. L'IDE est plutôt bien fichue et légère (les quelques problèmes que j'avais rencontrés sont corrigés depuis la 1.3.0). Le Dart fonctionne bien sous Dartium. Je n'ai pas encore testé Dart2JS mais je suis assez optimiste.

    Bref, je ne peux pas revenir à Javascript. A part pour un projet demandant une expertise de Javascript (exigence de performances sur des navigateurs ne supportant pas Dart), je négocierai avec mes employeurs pour utiliser Dart. J'espère que JQuery sera porté sur Dart.

    Je démarre un deuxième projet parallèlement au premier (celui-là est pour la communauté de Crysis 3) basé sur Angular.dart côté client, et .NET + SQL Server côté serveur.

    Le proverbe "L'essayer c'est l'adopter" fonctionne bien pour moi ^^

  17. #157
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    1 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 030
    Points : 4 203
    Points
    4 203
    Par défaut
    Citation Envoyé par Sodium Voir le message
    Je serais bien tenté de m'y mettre, toutefois est-ce que ça ne rend pas la phase de développement plus laborieuse s'il faut recompiler le code à chaque modification ?
    Il y a bien-sûr l'option de bosser sous Chrome mais je suis attaché à mon Firefox.
    La solution, c'est de tester sous Dartium d'abord. Et une fois que ça fonctionne comme tu veux, tu testes en Dart2JS, et ça utilisera ton navigateur par défaut (Cyberfox pour moi).

  18. #158
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Dart 1.8 : le langage de programmation structuré pour le Web de Google s’enrichit des énumérations
    son support intégré à App Engine

    Google vient de publier une nouvelle itération de son langage de programmation Dart. Dart 1.8 apporte quelques nouveautés qui feront le plaisir des développeurs qui ont adopté le langage.

    Pour rappel, Dart est un langage de programmation structuré pour le Web. L’objectif inavoué de Google avec ce langage est de mettre JavaScript à la retraite, en proposant un langage qui offre la même flexibilité, mais qui se distingue par son typage fort et optionnel.

    La version 1.8 enrichit la bibliothèque Dart de nouveautés pour manipuler des collections, des connexions sécurisées et traiter des objets d’erreurs.

    Avec cette itération, Google répond à l’une des principales demandes des programmeurs : l’ajout des énumérations au langage. Encore au stade expérimental, cette nouveauté offre au langage une nouvelle structure de données qui permet de contenir une série de données constantes ayant un type sûr, ce qui veut dire que ni le type, ni la valeur réelle de chaque constante n'est précisé.

    Le support des énumérations va permettre aux développeurs d’écrire du code semblable à ce qui suit :


    Parallèlement, Google a ajouté le support de Dart à App Engine, sa plateforme PaaS (Platform as a Services) pour l’exécution d’applications dans le Cloud. Il sera désormais possible d’exécuter des applications Dart côté serveur sur des machines virtuelles App Engine, et bénéficier de la souplesse qu’offre la plateforme (temps de réponse, montée en charge, stockage, etc.).

    Google a mis en place un runtime personnalisé pour Dart qui permet de développer et déployer facilement des applications serveur Dart qui vont s’exécuter dans le Cloud. Le runtime permet de disposer d’un environnement de développement local complet qui simule Google App Engine (Datastore, Memcache, Logging, etc.) sur votre ordinateur.

    Ce support de Dart dans App Engine permet d’étendre les possibilités du langage, présenté comme une alternative à JavaScript, qui s’exécute dans le navigateur. Le support de Dart dans App Engine est encore au stade de bêta.

    Après un démarrage plutôt lent, Dart semble petit à petit séduire des développeurs. Le langage s’est hissé dans le top 20 de l’indice Tiobe le mois dernier, occupant la 17e place. Mais, il faut noter, cependant que les développeurs se tourneraient vers le langage parce que son compilateur Dart-to-JavaScript permettrait de générer du code JavaScript plus performant que du JavaScript idiomatique.

    Actuellement, pour exécuter des applications Dart, vous devez utiliser Dartium, une version personnalisée de Chrome disposant de la machine virtuelle Dart. Jusqu’ici, le langage n’a pas été adopté par les navigateurs, y compris Chrome de Google.

    Télécharger Dart 1.8

    Plus de détails sur Dart sur App Engine

    Source : Notes de version


    Et vous ?

    Dart représente-t-il une menace sérieuse pour JavaScript ?
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  19. #159
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Google publie Dart 1.9
    qui apporte le support de la programmation asynchrone

    L’univers Dart est sceptique suite à l’annonce de l’abandon du développement d’une machine virtuelle (VM) Dart pour le navigateur Chrome. Par cette nouvelle Google, à demi-mot, met fin à son ambition d’offrir Dart comme une alternative à JavaScript.

    Au contraire, Google va investir pour faire de Dart l’outil qu’il faut pour l’écriture du code JavaScript de qualité et performant. Pour ceux qui voyaient en cette annonce une fin probable du jeune langage Dart, ils devront attendre.

    D’ailleurs, 24 heures après cette annonce, Google a publié une nouvelle version de Dart pour montrer que le langage compte bien se tailler une place dans l’écosystème du Web. Mais, cette fois aux cotés de JavaScript, tout comme des outils tels que JQuery et Node.js.

    Dart 1.9 apporte une nouveauté qui fera plaisir à de nombreux fans du langage : le support de la programmation asynchrone.

    Cette version introduit les méthodes async et les expressions await. Grace à ces nouveautés, les développeurs pourront écrire plus facilement du code qui ne bloque pas l'UI et ne monopolise pas inutilement des threads de travail.

    A titre d’exemple, le code ci-dessous :


    Devient plus simple avec le support de la programmation asynchrone :


    En plus du support de la programmation asynchrone, Dart 1.9 apporte d’autres améliorations, dont :
    • le support complet des énumérations (enum). Une fonctionnalité très demandée par les développeurs ;
    • le déplacement de « Dart Analyzer » à « Dart Analysis Server ». Cela rend plus facile l’intégration de l’analyseur de code Dart avec d’autres EDI ;
    • une mise à jour du moteur d’expressions régulières pour la machine virtuelle Dart. Il est désormais 150x plus rapide que la mise en œuvre précédente ;
    • l’intégration de l’API Isolate dans la VM Dart, ce qui rend plus facile la création d’applications qui ciblent plusieurs processeurs.


    Dart 1.9 et ses outils sont disponibles en téléchargement sur le site du projet.

    Télécharger Dart 1.9

    Source : Blog Dart


    Et vous ?

    Etes-vous sceptique par rapport à l’avenir de Dart ou pensez-vous que le langage a encore un futur glorieux ?
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  20. #160
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Points : 2 528
    Points
    2 528
    Par défaut
    C'est moi ou Google commence à partir dans tous les sens ?

Discussions similaires

  1. [JavaScript Console] Pour I E 6 ?
    Par Jean_Benoit dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/06/2006, 15h30
  2. [Javascript] PB pour récupérer des valeurs !
    Par chaser_T dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/04/2006, 11h26
  3. [Javascript] code pour boutton back
    Par jack_1981 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/01/2006, 00h04
  4. Javascript pour charger une page web depuis un menu déroulan
    Par tomguiss dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/10/2005, 09h58
  5. [Javascript] variable pour accéder à element d'un formulaire
    Par aurelienalix dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/08/2005, 11h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo