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 PHP Discussion :

[POO] [conception] aborescence


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [POO] [conception] aborescence
    Bonjour à tous

    Je suis nouveau sur le forum et la POO n'etant pas vraiment mon fort, j'ai toutes les difficultés du monde à résoudre un problème de conception qui me semble pourtant simplissime

    Je travaille sur un outil qui se base sur un repository svn et qui affiche son contenu. Pour complexifier la chose j'ai des repertoires virtuels qui sont stockés dans des fichiers xml... Afin de recréer l'arborescence et lister des dossiers et leur contenu (dossiers virtuels ou non) j'ai créé plusieurs objets imbriqués
    Hum.. Je ne sais pas si je suis très clair

    Voyons un bout de code plutôt (j'ai essayé de simplifier au maximum)
    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
    39
    40
    41
    42
     
    class dossier1
    {
        private $label;
        private $initpath;
        private $dossier2Array = array();
     
        public __construct()
        {
              // constructeur avec appel de la methode getdossiers2
        }
     
        public getdossiers2()
        {
              // je liste le contenu du dossier1 et je stocke dans dossier2Array les objets dossier2 obtenus
        }
     
        // getters et setters des attributs
    }
     
    class dossier2
    {
        private $label;
        private $dossier3Array = array();
     
        public __construct()
        {
              // constructeur avec appel de la methode getdossiers3
        }
     
        public getdossiers3()
        {
              // je liste le contenu du dossier2 et je stocke dans dossier3Array les objets dossier3 obtenus
        }
     
        // getters et setters des attributs
    }
     
    class dossier3
    {
        private $label;
    }
    Je stocke ainsi un tableau d'objets "dossier3" dans chaque objet "dossier2" et un tableau de "dossier2" dans chaque "dossier1"
    J'ai comme ca une arborescence jusqu'à 8 niveaux dans mon code et la se pose la question : comment je fais pour connaitre la valeur de l'attribut initpath de l'objet dossier1 qui contient un objet dossier3 donné ?

    Je n'arrive qu'à finir par passer tout mes objets en paramètre dans les methodes "getdossiers" mais je suis persuadé qu'il y a plus simple, surtout qu'avec tous mes niveaux d'arborescence mon code devient rapidement illisible.

    Quelqu'un a t'il déja eu le même genre de pb ? Avez vous des conseil à me donner ? Help

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    prouquoi ne crees-tu pas qu'une seule classe pour tes différents niveaux de dossier avec une référence au dossier supérieur dans le genre :
    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
     
    class dossier
    {
      protected $label;
      protected $initpath;
      protected $Parent;
     
      public function __construct()
      {
        $this->Parent=null;
      }
      public function ConnectEnfant($dossier)
      {
         $dossier->ConnectParent($this);
      }	
      public function ConnectParent($dossier)
      {
        $this->Parent=$dossier
      }
      public function getInitPath()
      {
        if($this->Parent!=null)
          return $this->Parent->getInitPath();
        else
          return $this->inipath;	  
      }
    }

    De cette façon il est facile de connecter les dossier entre eux.
    si on admet que c'est le dossier racine qui stocke l'initpath, il devient facile de remonter recursivement l'arorescence :
    la fonction getInitPath appelle la fonction getInitPath du parent tant qu'il y en a un et dans le cas contraire renvoie la variable

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton aide Pascal22, je vais essayer de mettre ton idée en pratique dans mon code

Discussions similaires

  1. [POO] conception d'un logiciel de dessin vectoriel
    Par rodymary dans le forum VB.NET
    Réponses: 8
    Dernier message: 01/12/2007, 01h33
  2. [POO] Conception et AddEvent
    Par yudao dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 30/05/2007, 12h20
  3. [POO] Concept général
    Par delphi+ dans le forum Delphi
    Réponses: 5
    Dernier message: 28/02/2007, 16h49
  4. [POO] Conception d'un système de template
    Par iwf-fr dans le forum Langage
    Réponses: 8
    Dernier message: 06/02/2007, 13h29
  5. [POO] conception des classes
    Par poukill dans le forum C++
    Réponses: 229
    Dernier message: 19/07/2006, 08h28

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