Précédent   Forum des professionnels en informatique > Java > Général Java
Général Java Java SE, Java ME, APIs, Persistance, JDBC, Spring, XML. Avant de poster -> FAQ Java, Sources Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2012, 16h36   #1
Futur Membre du Club
 
Homme domdom
Développeur informatique
Inscription : mars 2011
Messages : 69
Détails du profil
Informations personnelles :
Nom : Homme domdom
Localisation : Angola

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

Informations forums :
Inscription : mars 2011
Messages : 69
Points : 19
Points : 19
Par défaut Les Foncteurs en Java

salut,
j'ai quelque questions diverse a vous poser:

premier exemple:
Code :
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
momedalhouma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 16h43   #2
Membre émérite
 
Avatar de anisj1m
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2006
Messages : 1 055
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Tunisie

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

Informations forums :
Inscription : juillet 2006
Messages : 1 055
Points : 929
Points : 929
Envoyer un message via Yahoo à anisj1m
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.
__________________
Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.
anisj1m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 17h02   #3
Membre Expert
 
Avatar de kolodz
 
Homme Patrick Kolodziejczyk
Étudiant
Inscription : avril 2008
Messages : 441
Détails du profil
Informations personnelles :
Nom : Homme Patrick Kolodziejczyk
Âge : 24
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : avril 2008
Messages : 441
Points : 1 559
Points : 1 559
Envoyer un message via MSN à kolodz
Le black-out est fini :
http://fr.wiktionary.org/wiki/foncteur
Citation:
(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 :
Citation:
2) oui dans une classe abstraite on peut définir des méthodes, mais pas avec des interfaces.
__________________
N'oubliez pas de marquer vos discussions
Si une réponse vous a été utile pensez à voter Pour
Pensez à la javadoc
kolodz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 18h11   #4
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 092
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 092
Points : 7 019
Points : 7 019
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 :
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 :
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.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/01/2012, 20h09   #5
Futur Membre du Club
 
Homme domdom
Développeur informatique
Inscription : mars 2011
Messages : 69
Détails du profil
Informations personnelles :
Nom : Homme domdom
Localisation : Angola

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

Informations forums :
Inscription : mars 2011
Messages : 69
Points : 19
Points : 19
merci a vous tous ,
même si je trouve le code difficile a comprendre surtout cette partie

Code :
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);
}
momedalhouma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 22h49   #6
Modérateur
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 16 196
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 16 196
Points : 25 344
Points : 25 344
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
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?
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
"Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973)
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/01/2012, 23h58   #7
Futur Membre du Club
 
Homme domdom
Développeur informatique
Inscription : mars 2011
Messages : 69
Détails du profil
Informations personnelles :
Nom : Homme domdom
Localisation : Angola

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

Informations forums :
Inscription : mars 2011
Messages : 69
Points : 19
Points : 19
ce que je comprends pas est ça :
Code :
public static final TriInsertion instance = new TriInsertion();
a quoi sert de créer une instance ??

et pour ça :
Code :
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 :
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é.
momedalhouma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 00h03   #8
Modérateur
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 16 196
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 16 196
Points : 25 344
Points : 25 344
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
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 :
Type[] tableau = new Type[quantité];
ou
Code :
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 :
1
2
3
for (Type nomLocal : CollectionDeType){
   // faire quelque chose
}
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
"Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973)
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2012, 00h07   #9
Futur Membre du Club
 
Homme domdom
Développeur informatique
Inscription : mars 2011
Messages : 69
Détails du profil
Informations personnelles :
Nom : Homme domdom
Localisation : Angola

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

Informations forums :
Inscription : mars 2011
Messages : 69
Points : 19
Points : 19
un très grand merci
momedalhouma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 15h59   #10
Membre du Club
 
Homme Claude RICHARD
Chef de projet NTIC
Inscription : novembre 2011
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Claude RICHARD
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet NTIC
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2011
Messages : 50
Points : 40
Points : 40
mais normalement pour la méthode appelé qqChose() ça devait être de l'objet b!!

Lorsque B est initialisé, A l'est aussi et les instructions et méthodes du Constructeur sont exécutées.

Comme qqChose() est placé dans ce Constructeur, la méthode est appelée.

C'est visible en suivant le déroulement du programme pas pas avec le débogueur.
Claude
cylere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 16h30   #11
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 092
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 092
Points : 7 019
Points : 7 019
Citation:
Envoyé par cylere Voir le message
mais normalement pour la méthode appelé qqChose() ça devait être de l'objet b!!

Lorsque B est initialisé, A l'est aussi et les instructions et méthodes du Constructeur sont exécutées.

Comme qqChose() est placé dans ce Constructeur, la méthode est appelée.

C'est visible en suivant le déroulement du programme pas pas avec le débogueur.
Vrai, mais c'était pas la question.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h49.


 
 
 
 
Partenaires

Hébergement Web