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

Java Discussion :

Les Foncteurs en Java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Par défaut Les Foncteurs en Java
    salut,
    j'ai quelque questions diverse a vous poser:

    premier exemple:
    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
    class A {
      A() {
        System.out.println("constructeur de A") ;
        qqChose() ;
      }
      private void qqChose() {
        System.out.println("appel de qqChose de A") ;
      }
    }
    class B extends A {
      B() {
        System.out.println("constructeur de B") ;
      }
      void qqChose() {
        System.out.println("appel de qqChose de B") ;
      }
    }
    public class Herit06 {
      public static void main(String [] args) {
        B b = new B() ;
      }
    }
    la sorti c'est :
    constructeur de A
    appel de qqChose de A
    constructeur de B

    mais normalement pour la méthode appelé qqChose() ça devait être de l'objet b!!

    2-
    dans une classe abstraite est ce qu'on peut définir des méthodes ?
    la même question pour une interface?

    3- la dernière question c'est concernant les foncteurs: en vérité j'ai relu le cours mais j'ai même pas compris leur utilité, ce que je comprends des foncteur en java se sont des méthodes dans les argument sont des méthodes !! est ce que c'est vrai?
    j'aimerais bien une bonne explication pour ce point .
    merci bien

  2. #2
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Par défaut
    1) la méthode qqChose de l'objet B n'est pas du tout appellé.
    2) oui dans une méthode abstraite on peut définir des méthodes, mais pas avec des interfaces.

  3. #3
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Le black-out est fini :
    http://fr.wiktionary.org/wiki/foncteur
    (Informatique) Entité qui réunit les qualités d’objet et de fonction dans le cadre d’une programmation par objets.

    Pour cela nous avons besoin d’un objet fonction (on dit parfois fonction objet ou foncteur), c’est-à-dire d'un objet qui se comporte comme une fonction. — (Bjarne Stroustrup, Programmation: Principes et pratique avec C++, Éditeur Pearson Education France, 2010)
    J'avoue que c'est la première fois que je rencontre le terme. Mais j'évite justement de faire des "Foncteurs". C'est contre l'idée même de la programmation objet.

    Sinon petite correction :
    2) oui dans une classe abstraite on peut définir des méthodes, mais pas avec des interfaces.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Citation Envoyé par momedalhouma Voir le message
    mais normalement pour la méthode appelé qqChose() ça devait être de l'objet b!!
    Non, car A.qqChose() est private. Elle n'est donc pas héritée, et donc pas redéfinissable.

    B.qqChose() n'est qu'une méthode de même signature que A.qqChose(), ce qui n'a aucune incidence sur rien, puisque B ne sait même pas que A a cette méthode.

    Citation Envoyé par momedalhouma Voir le message
    3- la dernière question c'est concernant les foncteurs: en vérité j'ai relu le cours mais j'ai même pas compris leur utilité, ce que je comprends des foncteur en java se sont des méthodes dans les argument sont des méthodes !! est ce que c'est vrai?
    j'aimerais bien une bonne explication pour ce point .
    Les foncteurs sont des objets qui n'exposent qu'une seule méthode. Leur intérêt est d'être utilisé avec polymorphisme.
    En général, quand on utilise des foncteurs on définit d'abord une interface foncteur, avec une seule méthode donc, et plusieurs implémentations de cette interface.

    Exemple : les algorithmes de tri, et comment en utiliser un plutôt qu'un autre. Utilisons des foncteurs.

    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
    public interface AlgorithmeDeTri {
      /** trie le tableau donné, du plus petit int au plus grand. */
      void trier(int[] tableau);
    }
     
    public class TriInsertion implements AlgorithmeDeTri {
      public static final TriInsertion instance = new TriInsertion();
     
      public void trier(int[] tableau) {
        // implem du tri par insertion.
      }
    }
     
    public class TriABulles implements AlgorithmeDeTri {
      public static final TriABulles instance = new TriABulles ();
     
      public void trier(int[] tableau) {
        // implem du tri à bulles.
      }
    }
    Et maintenant supposons que je veuille tester mes tris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    AlgorithmeDeTri[] algos = new AlgorithmeDeTri[] {
      TriInsertion.instance,
      TriABulles.instance
    };
    for(AlgorithmeDeTri algo : algos) {
      int[] tab = new int[] {3, 2, 1};
      algo.sort(tab);
    }
    Voilà. Ou pour résumer, un fonctor est un objet comme un autre, sauf qu'il n'expose qu'une méthode.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Par défaut
    merci a vous tous ,
    même si je trouve le code difficile a comprendre surtout cette partie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    AlgorithmeDeTri[] algos = new AlgorithmeDeTri[] {
      TriInsertion.instance,
      TriABulles.instance
    };
    for(AlgorithmeDeTri algo : algos) {
      int[] tab = new int[] {3, 2, 1};
      algo.sort(tab);
    }

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Le premier code définis un tableau, la deuxième partie itère sur ce tableau pour appeler les méthodes, que ne comprenez vous pas dedans?

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Par défaut
    ce que je comprends pas est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final TriInsertion instance = new TriInsertion();
    a quoi sert de créer une instance ??

    et pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AlgorithmeDeTri[] algos = new AlgorithmeDeTri[]
    normalement un constructeur termine par des parenthésé et là des accolades ,
    cette ligne me semble étrange , est ce que c'est une référence sur un tableau d'interfaces??

    là aussi je comprends pas ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AlgorithmeDeTri algo : algos
    désolé si ce que je demande est un peu débile mais bon je suis encore débutant et je trouve beaucoup de difficulté.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    1) ça sert à l'utiliser partout. Comme l'algorithme n'a pas d'état, pas besoin de faire une nouvelle instance à chaque utilisation. Donc on se facilite la tâche en exposant un champ public qui est l'instance par défaut.
    2) Cette ligne crée un tableau. Un tableau se crée comme ça en java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type[] tableau = new Type[quantité];
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type[] tableau = new Type[]{element1, element2, element3};
    3) C'est une boucle for étendue, elle permet d'itérer sur des collection ou des tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (Type nomLocal : CollectionDeType){
       // faire quelque chose
    }

Discussions similaires

  1. Les futurs tutoriels Java sur DVP ?
    Par Ricky81 dans le forum Débats
    Réponses: 65
    Dernier message: 06/01/2012, 02h33
  2. [Avis] Les meilleurs programmes Java ?
    Par christopheJ dans le forum ImageJ
    Réponses: 69
    Dernier message: 07/10/2008, 01h12
  3. Réponses: 5
    Dernier message: 15/02/2005, 10h32
  4. [Stratégie] Ant pour les tests en Java ?
    Par franckR dans le forum Tests et Performance
    Réponses: 5
    Dernier message: 08/03/2004, 09h38

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