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

Langage Java Discussion :

Functional Reactive Programming en Java


Sujet :

Langage Java

  1. #21
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Alors voilà une petite démonstration de l'étendu des possibilités offertes par une telle librairie : à télécharger ici

    Ca ce lance évidement comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -jar ReactDemo-release.jar
    Et pour ceux pour qui Java est encore une option, une petite démo youtube de démontre le fonctionnement : à visionner ici


    Et une petite image pour attirer l'oeil :


    J'imagine assez bien les possibilité sympa qu'on pourrai avoir dans un framework de jeu vidéo, ou pour gérer les évènements d'un GUI, ou encore en robotique.

    vala, c'est tout pour le moment ;-)
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  2. #22
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Tu sais quoi ? Ca vaudrait vachement le coup de mettre ce que tu viens de dire dans l'article. On peut d'ailleurs mettre des vidéos Youtube aussi avec le lecteur qui va bien. Le seul truc chiant, c'est qu'il faut faire une vignette, mais je peux m'en charger et te donner le code xml qui va bien
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  3. #23
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par thierryler Voir le message
    Tu sais quoi ? Ca vaudrait vachement le coup de mettre ce que tu viens de dire dans l'article. On peut d'ailleurs mettre des vidéos Youtube aussi avec le lecteur qui va bien. Le seul truc chiant, c'est qu'il faut faire une vignette, mais je peux m'en charger et te donner le code xml qui va bien
    Suis en plein reactoring là.
    J'était partis avec trop d'objet complexe en tête de type event (comme on trouve en java) mais en fait, il fallait partir plus simple.

    Bref, je reste muet tant que je n'ai pas plus avancé.
    Je viens d'intégrer :
    - map transforme la donnée en une autre, déclenché lors de l'évènement
    - filter filtre l'évènement lui même, la periode à laquel il doit être émis
    - fold, ça j'ai mis un moment, permet de faire des opération sur la donnée de l’événement précédent et celui en cours.

    Ainsi que des méthode à moi :
    - merge concatène le flux de deux évènements
    - sync idem que merge, mais les flux s'attendent l'un l'autre de façon à en craché qu'un à chaque fois.

    merge est sync sont des opération binaires (un peu comme le ou (merge) et le et (sync) pour les nombres)
    - merge, émet si a ou b ont émis
    - sync, n'émet que lorsque a et b ont émis
    Du coup ça ce comporte très bien en cascade, c'est à dire que l'on peu créer un arbre binaire d’événements avec ces opérations.

    Bref, je commence à entrevoir les possibilités de ce type d'architecture, c'est tout bonnement démentiel.
    Je réfléchis à des application en robotique justement, c'est pour le moment le seul champ qui n'ai pas été exploré avec cette approche (en générale jeux vidéos, 3d et IHM).

    Vala. Je ne te raconte pas les tubes d'aspirines.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  4. #24
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Pour mieux ce rendre compte : http://elm-lang.org/
    Ils ont des exemples de jeux vidéo. Dommage que les langage fonctionnels soient si difficiles à lire.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  5. #25
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Un truc pour faire plaisir à Thierry :
    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
    16
     
    Var<Integer> a = new Var<Integer>(0);
    Var<Float> average = a.fold(0f, new Signal.AverageFold<Integer>());
     
    average.subscribe(new Procedure1<Float>() {
     
    	@Override
    	public void invoke(Float arg1) {
    		System.out.println("Average=" + arg1);
    	}
    });
     
    a.setValue(10);
    a.setValue(20);
    a.setValue(30);
    a.setValue(40);
    Et qui nous donne comme résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Average=5.0
    Average=10.0
    Average=15.0
    Average=20.0
    Avec un foncteur fold générique :
    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
    16
     
    public static class AverageFold<V extends Number> implements Function2<Float, Float, V> {
     
    	private float i;
     
    	public AverageFold() {
    		this.i = 1;
    	}
     
    	@Override
    	public Float invoke(Float arg1, V arg2) {
    		float sum = arg1 * i;
    		i++;
    		return (sum + arg2.floatValue()) / i;
    	}
    }
    hihi ^_^
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  6. #26
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    moi, ce que je voulais, c'est avoir la vidéo dans l'article.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  7. #27
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par thierryler Voir le message
    moi, ce que je voulais, c'est avoir la vidéo dans l'article.
    Quel article ? Celui sur les foncteurs ?
    Je comptais (mais vraiment pas tout de suite) faire une autre article dédié à la FRP.
    Et puis celui sur les foncteurs, il y a plein de coquilles, je m'en rend compte avec le temps :
    http://www.developpez.net/forums/d13...e/#post7538579

    Il faudra que je revoie plusieurs choses.
    Ou du moins signaler qu'idéalement ce n'est pas comme cela qu'il faut faire.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  8. #28
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    non je parle de la vidéo que tu as mis 3 messages plus haut
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  9. #29
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par thierryler Voir le message
    non je parle de la vidéo que tu as mis 3 messages plus haut
    tu veux que je la mette directement dans le forum ?
    je ne comprend pas !
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  10. #30
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Dans l'article :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <animation type="flash">
      <width>640</width>
      <height>360</height>
      <param-movie>http://www.youtube.com/v/0VGU9qcjnbM</param-movie>
      <param-loop>false</param-loop>
      <param-wmode>#000000</param-wmode>
      <image src="./images/todo.png"/>
    </animation>
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  11. #31
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par thierryler Voir le message
    Dans l'article :
    oui oui d'accord, mais dans quel article ?
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  12. #32
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Ah oui mince, j'oubliais que tu ne prévoyais pas un article pour ça...
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  13. #33
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par thierryler Voir le message
    Ah oui mince, j'oubliais que tu ne prévoyais pas un article pour ça...
    Disons, pas sûr. Il faudrait déjà que ma librairie fonctionne correctement.
    J'ai des soucis avec les threads. Il démarrent avant les subscribe, du coup on perd les premières itérations.
    Je ne sais pas comment les synchroniser vue que je ne maîtrise pas quel fonction imbriqué est la dernière....
    Bref c'est le casse tête.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  14. #34
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Ca y est, ça commence à ressembler à ce que je voulais :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    // when mouse is pressed say "pressed" otherwise say "released"
    // concatenate message with mouse position and update each time it is necessary
     
    // declare the mouse reactor
    Var<String> mouseAndTime = MouseReact.hold().filter(MouseReact.BUTTON1).map(new Function1<String, Integer>() {
     
        @Override
        public String invoke(Integer value) {
            // when mouse button is pressed
            return "button pressed";
        }
    }).otherwise(new Function1<String, String>() {
     
        @Override
        public String invoke(String arg1) {
            // when it is released
            return "button released";
        }
    }).toVar("no button yet !").merge(mouseX, new Function2<String, String, Integer>() {
     
        @Override
        public String invoke(String arg1, Integer arg2) {
            // add mouse x position
            return arg1 + " ( x=" + arg2;
        }
    }).merge(mouseY, new Function2<String, String, Integer>() {
     
        @Override
        public String invoke(String arg1, Integer arg2) {
            // add mouse y position
            return arg1 + ", y=" + arg2 + ")";
        }
    });
     
    label1.setText(mouseAndTime);
    Le nom du projet à également changé, il s'appelle React4J maintenant :
    https://bitbucket.org/yann_caron/react4j/wiki/Home

    J'ai pas mal refactoriser un peu tout ça pour bien séparer les responsabilités.
    Je vais maintenant m'employer à créer d'autres application de demos et faire rendre la librairie compatible avec le future JDK 8 (comme guava ne sera bientôt plus maintenu, c'est un meilleurs choix.)
    Dés que j'ai des exemples en J8, ce sera plus parlant. Là le code obtenu est un peu illisible (voire carrément).

    Vala. J'ai également pas mal rebosser le wiki parce que certaines notions n'étaient pas encore claire pour moi.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  15. #35
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Voici un petit synoptique des méthodes que j'ai développez dans la librarie :


    L'idée après c'est de créer des réseaux d'évènements avec tout ça ;-)
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  16. #36
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Héhé voici ce que j'obtiens avec le JDK8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Var<String> mouseAndTime = MouseReact.button1()
    		.map(arg1->arg1 ? "button pressed" : "button released")
    		.toVar("no button yet !")
    		.merge(mouseX, (arg1, arg2)->arg1 + " ( x=" + arg2)
    		.merge(mouseY, (arg1, arg2)->arg1 + ", y=" + arg2 + ")");
     
    label1.setText(mouseAndTime);
    Merci les lambdas....
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  17. #37
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    J'aime bien tes schémas T'as essayé de regarder les notations BPMN ou Sys-ML ?
    Sinon essaye d'avoir des noms plus parlant que S1, S1', S2, S3 ou Sf1

    Dans l'ensemble, je ne suis pas sûr d'avoir tout suivis.
    1. En gros, tu veux décrire un "Event Processor" ?
    2. A quoi correspond la classe React ? Une description d'une réponse à plusieurs événements ?
    3. Exemple de construction que je ne comprends pas new MouseReact().move().merge(new MouseReact().click());
    4. Plutôt que de manipuler des long pour les durées tu pourrais utiliser les TimeUnit et l'interface Delayed.
    5. Je comprends pas la différence entre "merge" et "sync". Les deux provoques une réaction dès que plusieurs événements se sont produits.
    6. Je ne comprends le principe de "otherwise". C'est pas rapport à "filter" ?
    7. Idem pour "toVar"
    8. mouseX et mouseY ne sont pas déclarés
    9. Je comprends pas comment fonctionne ton dernier exemple

    Bref je suis largué complet
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  18. #38
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Bref je suis largué complet
    Pas tant que cela car tes questions sont pertinentes (en plus comme ça je me sens moins seul snirfff )

    1 - oui, à la sauce Haskell (fonctionel), c'est à dire en partant de librairies comme react banana. Ou le langage elm fonctionel également.
    Je me base un peu sur mon article que j'avais écrit ou j'avais démontré que les langages à objet comme java acceptent les foncteurs grâce à des interfaces generiques et aux inner classes anonymes.

    2 - Le nom n'est peu-t-être pas très bien choisi. C'est la gestion d'un évenement. Un pattern observer mais qui n'accepte pas des listeners mais une "procedure" càd une fonction sans retour

    3 - MouseReact().move().merge(new MouseReact().click(), new Function2 ... mergeFunction);
    On merge deux signaux mouse move et mouse click, et on traite les deux signaux d'entrée avec le foncteur mergeFunction. Du coup on as qu'une valeur de retour à chaque fois.

    4 - Pourquoi pas ! Dans mon cas, ce sont des intervales de temps avec l'évènement précédent.
    Pour récupérer le temps total il faut écrire un truc du genre :
    TimeReact.every(100).fold (0, (t1, t2) -> t1 + t2)

    5 - Question très pertinente :
    merge, emet les deux signaux chaque fois que l'un des signal d'entrée à emit.
    sync, n'emet les deux signaux que lorsque les deux signaux d'entrée ont emit.
    then, n'émet les deux signaux que lorsque le premier suivi du second ont emits
    when, n'émet les deux signaux que lorsque le second suivi du premier ont emits.

    6 - Ce principe n'existe plus. Il y avait un emeteur "finish" sur la fin d'un signal long, cette notion compliquait beaucoup trop la gestion du tout.

    7 - En FRP il y a trois notion :
    Les Variables, qui varient dans le temps et ont une valeur d'initialisation.
    Les Signal, qui varient dans le temps mais ne possèdent pas de valeur initial (comme mouse button, time every etc.)
    Les constants, des valeurs qui ne varient plus mais ont une valeur initial

    8 - J'ai du refactoré, ils se nomment MouseReact.positionX et MouseReact.positionY maintenant

    9 - L'exemple crée un signal en concatenant dans une chaine des infos sur la souris :
    Si le bouton est pressé ou pas et la position.
    button1 retourne un booléen qui est transformé en String par le map juste après.
    Le toVar crée une variable et l'initialise avec une valeur par défaut
    On merge avec positionX de la souris, que l'on mapFolt (les deux en même temps) càd que arg1 contient la chaine précédement obtenue et arg2 la position integer en X de la souris.
    Idem avec la position en Y ensuite.

    Voilà. Ce qu'il faut comprendre en FRP c'est que l'idée derrière c'est que tout état du système doit pouvoir être vérifié à tout moment du programme comme vrai.
    Exemple en pseudo code :
    var a = 0;
    var b = 0;
    var sum = a + b;

    print (sum); // 0
    a = 7;
    b = 8;
    print (sum); // 15

    En Java classique la dernière ligne écrirait 0.
    Tout est là.
    Après le reste c'est du traitement d'évènements, de la transformation (comme les liste en fonctionnel avec le map/filter/fold) et de la mise en réseau (d'ou mon petit schemat)

    Vala.... Mais je suis d'accord avec toi, j'ai aussi mis un peu de temps au dépard pour bien comprendre de quoi il sagissait.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  19. #39
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Pour le schemat, merci.
    Il faudrai que j'ajoute la légende suivante:
    S1, S2 -> signal 1 et 2
    sf1 sf1 -> signal function 1 et 2

    Exemple d'interprétation du filter :
    Le Signal 1 émet vers le signal 2.
    Le signal est filtré pas une signalFunction qui détermine si l’émission doit ce faire ou pas.

    Exemple d'interprétation du map :
    Le signal 1 émet vers le signal 2, la valeur du signal 1 est transformé au travers la signalFunction

    Exemple d'interprétation du fold :
    Le signal 1 émet vers le signal 2, la valeur du signal 1 est transformé en fonction de la valeur d'émission en cours et la précédente (dans le temps)
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  20. #40
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    en plus comme ça je me sens moins seul
    Regarde le sujet sur Algoid et tu vas voir que t'es pas seul ;-)
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/10/2006, 11h42
  2. programer un timer Java
    Par karim86 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 21/07/2006, 17h34
  3. Probleme Programation JAVA débutant
    Par tomtom62136 dans le forum Langage
    Réponses: 1
    Dernier message: 03/03/2006, 12h07
  4. [xsl][Java] functions xpath non interpretees
    Par Pi2 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 30/01/2006, 12h01

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