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] Classe Abstract : problème de conception


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Par défaut [POO] Classe Abstract : problème de conception
    Salut !!!

    Bon, là j'ai du mal. Je sais que je dois utiliser une classe Abstract, mais je ne sais pas par ou commencer.....

    Voilà, dans ma BDD, j'ai 4 tables "rendez-vous" qui contiennent le même type d'info (il s'agit d'une démarche, on a alors : R0, R1, R2, R3...... dans l'ordre des rendez-vous)

    J'ai donc décidé, pour utiliser ma base, de construire une classe par rendez-vous. Et puis j'ai remarqué, à quelques petites exceptions (notamment le nom de mes clés primaires : id_R0, id_R1....), que les types d'infos étaient les mêmes, ainsi que les traitements.... Donc, je trouvais ridicule de "dupliquer" ma classe par autant de "rendez-vous".....

    Et je me suis souvenu de la classe virtuel, me permettant de décrir un comportement "général", dont hériterait mes classes "rendez-vous"....Mais je ne sais pas trop comment m'y prendre !!!

    Voilà le code que j'ai pour l'instant :
    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 RZero extends BaseJcb implements ShowAttributs {
     
    	public $id_r0=null; 
    	public $date_intro=null; 
    	public $realise=null; 
    	public $id_prospect=null; 
    	public $echec=null;
     
    	function __construct($id_r0, $date_intro, $realise, $id_prospect, $echec){
    		$this->id_r0=$id_r0; 
    		$this->date_intro=$date_intro; 
    		$this->realise=$realise; 
    		$this->id_prospect=$id_prospect; 
    		$this->echec=$echec;
    	}
     
    	public function tabAttributs(){
    		$attributs['id_r0']=$this->id_r0;
    		$attributs['date_intro']=$this->date_intro;
    		$attributs['realise']=$this->realise;
    		$attributs['id_prospect']=$this->id_prospect;
    		$attributs['echec']=$this->echec;
    		return $attributs;
    	}
     
    	public function insertRZero(){
     
    	}
     
    	public function updateRZero(){
     
    	}
     
    	public function deleteRZero(){
     
    	}
     
    	function __destruct(){
     
    	}
    }
    ....Et ceci par autant de rendez-vous !!!!!

    Alors je me suis dis, faisons cette classe abstraite et héritons tout ca !!!

    Mais je bloque, je ne vois pas ma démarche plus loin :
    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
     
    abstract class RGeneral extends BaseJcb implements ShowAttributs {
     
    	public $id_r=null; 
    	public $date_intro=null; 
    	public $realise=null; 
    	public $id_prospect=null; 
    	public $echec=null;
    	protected $type;//r0 ou r1 ou R2....
     
    	public function tabAttributs(){
    		$attributs['id_r']=$this->id_r;
    		$attributs['date_intro']=$this->date_intro;
    		$attributs['realise']=$this->realise;
    		$attributs['id_prospect']=$this->id_prospect;
    		$attributs['echec']=$this->echec;
    		return $attributs;
    	}
     
    	public function insertR(){
     
    	}
     
    	public function updateR(){
     
    	}
     
    	public function deleteR(){
     
    	}
     
    }
    Quelqu'un peut il m'aider, à voir, concrètement, comment utiliser une classe abstraite ?!!! (je sais, le jeux de mot concret et abstrait... )

    Merci pour votre aide futur !!!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  2. #2
    NoT
    NoT est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Par défaut
    Salut,

    T'as besoin de tes 4 tables pour gérer exactement le même genre de données ?
    T'as l'air d'aimer les trucs compliqués quand même

  3. #3
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Par défaut
    Salut


    Tu crées une classe abstraite, donc elle ne pourra par etre instancié, ok, maintenant toutes tes classes comportent les meme methodes qui doivent imperativement etre dans tes classes enfants ?? donc ces methodes aussi doivent etre abstraite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    abstract public function insertR();
    m'enfin dans ton cas, peut etre que des methodes static et jouer avec les parametres aurais suffit non ?

  4. #4
    Membre émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Par défaut
    Voici les codes que j'ai pondu ce matin : (ca m'a fait mal.... )

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    /************************************************************************************************
     * Classe abstraite définissant en général les rendez vous (R), et forcant la redéfinition des
     * méthodes __construct et __destruct.
     * Classe abstraite héritant de BaseJcb, implémente l'interface ShowAttributs
     * Les autres méthodes (public) sont des délégués des classes enfant
     *
     ***********************************************************************************************/
     
    abstract class RGeneral extends BaseJcb implements ShowAttributs {
     
    	/**
    	 * Force la définition de la méthode __construct, initialise différents attributs
    	 *
    	 * @param unknown_type $id_r
    	 * @param unknown_type $date_intro
    	 * @param unknown_type $realise
    	 * @param unknown_type $id_prospect
    	 * @param unknown_type $echec
    	 * @param unknown_type $type
    	 */
    	abstract protected function __construct($id_r,$date_intro,$realise,$id_prospect,$echec,$type);
     
    	/**
    	 * Méthode de listage des attributs, sous forme de tableau. Permet une manipulation aisée des attributs
    	 *
    	 * @return attributs[]
    	 */
    	public function tabAttributs(){
    		$attributs['id_r']=$this->id_r;
    		$attributs['date_intro']=$this->date_intro;
    		$attributs['realise']=$this->realise;
    		$attributs['id_prospect']=$this->id_prospect;
    		$attributs['echec']=$this->echec;
    		return $attributs;
    	}
     
    	public function insertR(){
     
    	}
     
    	public function updateR(){
     
    	}
     
    	public function deleteR(){
     
    	}
     
    	/**
    	 * Force la définition de la méthode __destruct
    	 *
    	 */
    	abstract protected function __destruct();
     
    }
    Et l'une des classes enfant :

    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
    43
    44
    45
     
    /*****************************************************************
     * Classe de R0, héritant de la classe abstraite RGeneral.
     * Permet la manipulation de données concernant la table R0
     * Prend en parmètre les champs de la table R0
     *
     ****************************************************************/
     
    class RZero extends RGeneral  {
     
    	public $id_r=null; 
    	public $date_intro=null; 
    	public $realise=null; 
    	public $id_prospect=null; 
    	public $echec=null;
    	//Type de rendez vous
    	public $type=0;
     
    	/**
    	 * Constructeur de la classe RZero, intialisant différents attributs
    	 *
    	 * @param unknown_type $id_r
    	 * @param unknown_type $date_intro
    	 * @param unknown_type $realise
    	 * @param unknown_type $id_prospect
    	 * @param unknown_type $echec
    	 * @param unknown_type $type
    	 */
    	protected function __construct($id_r, $date_intro, $realise, $id_prospect, $echec,$type){
    		$this->id_r=$id_r; 
    		$this->date_intro=$date_intro; 
    		$this->realise=$realise; 
    		$this->id_prospect=$id_prospect; 
    		$this->echec=$echec;
    		$this->type=$type;
    	}
     
    	/**
    	 * Destructeur de la classe RZero
    	 *
    	 */
    	protected function __destruct(){
     
    	}
    }
    Qu'est ce que vous en pensez ?
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  5. #5
    Membre émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Par défaut
    Personne n'est capable de me dire si je suis sur la bonne voie ?!!!!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Pour mieux analyser ton code et répondre à tes questions, je monte d'un niveau d'abstraction: Quelles sont les différences entre un rendez-vous R0 et un redez-vous R1 ?

    Sinon concernant ton code, pourquoi ton constructeur est protected ? et pourquoi abstract ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/11/2008, 14h33
  2. [débutant]Problème de conception de class
    Par pingoui dans le forum Langage
    Réponses: 23
    Dernier message: 07/04/2008, 10h30
  3. [POO] Classe d'abstraction simple
    Par sami_c dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/11/2007, 14h04
  4. [POO] Problème de conception POO et requêtes sql
    Par redsaint0 dans le forum Langage
    Réponses: 4
    Dernier message: 13/02/2007, 19h59
  5. [POO]Classes abstract
    Par smag dans le forum Langage
    Réponses: 5
    Dernier message: 29/06/2005, 23h05

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