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 :

Double héritage, interface


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut Double héritage, interface
    Bonjour,
    je dois faire un programme contenant 3 classes. La première, la classe composite contient une liste générique d'objet. La deuxième , la classe Composant, est une classe ayant comme attribut, un objet instance de la classe composite. Enfin j'ai une classe composant composite qui hérite de ces deux classes. Je sais qu'il n'y a pas de double héritage en java. Et qu'il faire une interface, mais je ne sais pas trop comment . En fichier joint , je vous met le shéma de ce que je pense faire.

    J'ai fait le code de Composant et composite que voici :

    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
    public class ComposantDeElement<T> implements InterfaceComposant{
     
     
    	protected T objet;
     
    	//Implémentaiton des méthodes de l'interface
    	public void Composant(T objet)
    	{
    		this.objet=objet;
    	}
     
    	public T getComposant()
    	{
    		return this.objet;
    	}
     
    	public void setComposant(T object)
    	{
    		this.objet=objet;
    	}
     
     
    }

    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
    37
    38
    public class CompositeDeElement<T> {
     
    	protected LinkedList<T> ListeDeComposants;
     
    	public CompositeDeElement()
    	{
    		this.ListeDeComposants=new LinkedList<T>();
    	}
     
    	public void ajouter(T Composant)
    	{
    		this.ListeDeComposants.add(Composant);
    	}
     
    	public T supprimer(int i)
    	{
    		return this.ListeDeComposants.remove(i);
    	}
     
    	public int chercher(T Composant)
    	{	
    		int i=0;
    		while ((i < this.ListeDeComposants.size()))
    		{
    			if (this.ListeDeComposants.get(i).equals(Composant))
    				return i;
    			i++;
    		}
    		return -1;
    	}
     
    	public void afficher()
    	{
    		System.out.println(this.ListeDeComposants.toString());
    	}
     
     
    }
    Voilà, mais je ne sais pas du tout comment coder l'interface et composant composite. Pouvez vous m'aidez please
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Par défaut
    Salut !

    Alors, si j'ai bien compris :

    Classe Composite
    Classe Composant
    Classe ComposantComposite

    avec :

    Composite associé à Composant
    ComposantComposite qui prend les deux...

    Alors ton problème est le suivant : pour "hériter" de 2 classes, en fait tu vas devoir en effet faire une interface qui reprend les propriétés de la classe dont tu veux hériter. Ce qui veut dire que tu vas devoir implémenter les méthodes de cette interface dans ComposantComposte... Pff. C'est lourd.

    Précise mieux ton problème et ton contexte et on verra ca plus clairement.
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut
    En fait mon projet est le suivant. C'est une application de traitement de texte. Un document est une séquence de page, une page un séquence de paragraphe, un paragraphe une séquence de ligne, et une ligne une séquence de mot. Donc par exemple Mot est un composant de ligne, ligne est donc un composite mais aussi un composant (de paragraphe).

  4. #4
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut
    Que pensez vous de ca :

    code de l'interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public interface InterfaceComposant<T> {
     
    	public void Composant(T Composant);
    	public T getComposant();
    	public void setComposant(T Composant);
     
    }
    code de composantcomposite:

    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
    public class ComposantComposite<T1, T2> extends CompositeDeElement<T2> implements InterfaceComposant<T2>{
     
    	protected T1 Composite;
    	protected T2 Composant;
     
    	//Implémentation des méthodes de l'interface
    	public void Composant(T2 Composant)
    	{
    		this.Composant=Composant;
    	}
     
    	public T2 getComposant()
    	{
    		return this.Composant;
    	}
     
    	public void setComposant(T2 Composant)
    	{
    		this.Composant=Composant;
    	}
     
     
     
    }
    Mais ca me parait pas super

  5. #5
    Membre émérite
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Par défaut
    La logique que j'aurais adopté serait plutôt la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class ComposantComposite<T1,T2> implements IComposite<T2>,IComposant<T1>
    {
       /*
          tu implémentes les fonctions des interfaces
          et tu complètes avec les spécificités de la classe courante
       */
    }
    C'est plus joli à mon goût.
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  6. #6
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Conceptuellement parlant, je ne vois pas l'intérêt d'une interface de type Composite ni Composant.



    Ce qui nous intéresse ici ( et qui sera le service rendue par l'interface ) est la capacité d'un élément à donner l'adresse des éléments suivants, donc à être parcouru.

    Voila ce que je te propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public interface Parcourable {
     
    	public List getAll(  );
            public void Add( Parcourable  );
     
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Element implements Parcourable()
    {
            //
    	private List mesElementsSuivants;
     
           public List getAll( ){ //ramène mesElementsSuivants
    }
            public void Add( Parcourable  ){ //ajoute un elt dans la list 
    }
     
    }
    si tu es sur un element feuille, getAll() ramène une liste vide et basta !



    hope it helps !

Discussions similaires

  1. Double héritage (virtuel et non virtuel)
    Par oodini dans le forum Langage
    Réponses: 9
    Dernier message: 09/11/2012, 14h15
  2. Double héritage de classe template, quelques questions
    Par the_angel dans le forum Langage
    Réponses: 2
    Dernier message: 29/07/2012, 12h26
  3. [PHP 5.0] Héritage, Interfaces et Type Hinting
    Par alejandro dans le forum Langage
    Réponses: 2
    Dernier message: 07/10/2010, 22h18
  4. [POO] Héritage, interface et composition
    Par remyli dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2009, 10h08
  5. [1.1] double héritage
    Par CUCARACHA dans le forum VB.NET
    Réponses: 12
    Dernier message: 05/11/2007, 09h54

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