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] Conseils pour conception logicielle en php [Fait]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par défaut [POO] Conseils pour conception logicielle en php
    Bonjour, je suis en train de développer un projet en php entièrement objet destiné au public d'un centre de formation pour adultes (gestion des stagiaires - parcours de formation - évaluations...). Ayant bien avancé, je me suis aperçu que mes classes avaient beaucoup de méthodes et de traitements en commun, et je me disais que le code pouvait être réduit de 50% par le biais de l'héritage. J'ai étudié la chose d'abord en java, mais impossible à mettre en place (pas de serveur assez costaud + temps de développement restreint). Je me suis aperçu que la chose était beaucoup moins facile en php. Voici par exemple une méthode statique chargée de générer la liste des éléments présents dans une table de la base de données (celles ci sont organisées par "objets-métier"): elle est présente dans chaque classe (Formation, Stagiaire, Module...). Seuls le nom de la table dans la requête et le type de l'objet instancié varient selon les classes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static function getListe() {
    		$i = 0;
    		$formations = array();
    		$sql = "SELECT id FROM formation ORDER BY libelle";
    		$query = mysql_query($sql);
    		if(mysql_num_rows($query) == 0) return null;
    		else {
    			while($datas = mysql_fetch_object($query)) {
    				$formations[$i++] = new Formation($datas->id);
    			}
    			return $formations;
    		}
    	}
    Comment placer cette méthode dans une classe parente afin qu'elle puisse être implémentée et convenir à toutes les classes filles? J'ai pensé au passage de paramètres précisant les éléments variables (requête, nom de la classe) mais je perds beaucoup du principe objet et je me rapproche d'une fonction banale.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Par défaut
    Je crois que php n'accepte pas l'héritage multiple, et c'est bien dommage, je comprend pas pourquoi il l'ont pas introduit dans la version 5

  3. #3
    Membre éclairé Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Par défaut
    Effectivement l'héritage multiple n'est pas possible, mais il y a peut-être moyen de contourner le problème. Je n'ai pas bien compris ta structure de classe, il y a donc plusieurs classe Formation, Stagiaire, Module, et la fonction getListe() qui retourne un tableau d'objets Formation dans ton exemple elle se situe où ?

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bonjour,

    Plusieurs possibilités existent, mais si c'est à cause du type d'objet instancié que tu coinces, il te suffit d'utiliser un pattern factory pour instancier ton objet.
    Faut que je retrouve le lien, il y a avait un bon tuto là-dessus ici-même je crois...

    Cela démontre s'il le fallait que l'héritage multiple n'est pas franchement utile, que ce soit en php ou en java.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par défaut
    Voici la structure de l'application: la base de données est constituée de tables représentant chacune un objet-métier: stagiaire, formation, module, formateur... et les classes sont calquées sur ces tables: Stagiaire... Chaque classe dispose de leurs propres méthodes de traitement: getListe() pour obtenir un tableau d'objets correspondant au type souhaité, les méthodes de traitement traditionnelles concernant l'encapsulation des champs privés getID(), getNom()... Ces méthodes sont redondantes dans chaque classe à quelques mots ou variables près; je pense que si je peux "généraliser" ces méthodes à toutes les classes, ces dernières se retrouveraient allégées d'un cinquantaine de lignes de code et seraient plus lisibles pour un développeur devant éditer le programme.
    De plus, il me semble que php n'autorse pas la surcharge et la redéfinition des méthodes, ce qui n'aide pas.

  6. #6
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Une classe abstraite pourrait faire l'affaire aussi pour la redéfinition de méthodes (abstraites pour le coup), non ?

  7. #7
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par défaut
    Trés intéressant! C'est çà qu'il me faut, merci pour les liens En fait j'aimerais pouvoir effectuer des traitements communs selon une reconnaissance automatique du type d'objet (Ex: Classe->traitement() selon le type d'objet, pas forcément connu au moment du traitement)

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Par défaut
    Je viens de voir un truc interessant uniquement avec php 5, on peux surcharger les méthode __set, __get, __isset, __unset

    Surcharge en php5

Discussions similaires

  1. [POO] conseils pour creation site en PHP Objet
    Par Clorish dans le forum Langage
    Réponses: 8
    Dernier message: 05/06/2008, 23h18
  2. Demande de Conseils pour migrer php4 vers php 5
    Par Apprentilinux dans le forum Langage
    Réponses: 1
    Dernier message: 31/03/2008, 19h06
  3. [POO] Conseils pour implémentation d'un catalogue
    Par SPKlls dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2008, 00h06
  4. conseil pour conception de base
    Par karidrou dans le forum Modélisation
    Réponses: 1
    Dernier message: 16/01/2007, 18h11

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