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

Architecture Discussion :

classe normale/méthodes statiques ou classe abstraite/méthodes normales


Sujet :

Architecture

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut classe normale/méthodes statiques ou classe abstraite/méthodes normales
    Bonjour,
    J'espère que le sujet de ce post n'a pas déjà été traité, à priori je n'ai rien vu qui y réponde précisement.
    Je voulais avoir votre avis sur une question de modélisation POO entre abstraite/statique, je suis en train de développer une application php en n/tiers et je rencontre ce problème:

    J’ai une classe utilisateurBLL qui appelle pour la persistance de l’utilisateur
    une classe utilisateurDAL (celle-ci génére le SQL et instancie un objet de la classe mysql qui possède les infos de connexion et les méthodes d’accès).

    J’ai mis toutes les méthodes de utilisateurDAL en statique car je n’ai à aucun moment besoin d’instancier cet objet.
    Et du coup je me demande si je ne devrai pas plutôt mettre ma classe utilisateurDAL en abstract et remettre des méthodes normales,
    car dans ce cas de figure je ne vois pas de différence entre une classe normale avec toutes ses méthodes statiques et une classe abstraite avec toutes ses méthodes normales. Existe-t-il une différence applicative entre les deux dans ce cas particulier ?
    (je n’ai pas besoin ici d’utiliser le polymorphisme/override qui est pourtant au fondement du concept de classe abstraite).

    Merci de vos réponses/solutions/avis
    Cordialement.

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut réponse (à priori) à ma question
    Bon alors à priori:
    La classe UtilisateurDAO étant utilisée directement par l'appel de méthodes concernant l'accès aux données, je ne peux pas (conceptuellement parlant bien sûr) la déclarer abstraite.
    En revanche si j'ai bien compris, en créant 2 classes dérivées de utilisateurBLL: externeBLL et interneBLL et en n'instanciant que les classes enfants, il serait logique que je déclare ma classe parent utilisateurBLL en abstract :p

  3. #3
    Provisoirement toléré
    Homme Profil pro
    Inscrit en
    Août 2002
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 143
    Points : 261
    Points
    261
    Par défaut
    Citation Envoyé par Renaud MENGELLE Voir le message
    En revanche si j'ai bien compris, en créant 2 classes dérivées de utilisateurBLL: externeBLL et interneBLL et en n'instanciant que les classes enfants, il serait logique que je déclare ma classe parent utilisateurBLL en abstract :p
    Une classe est abstraite si elle possède au moins l'une de ses méthodes abstraites.
    De plus une classe abstraite ne peut pas être instanciée.

    Donc tout dépend de ton besoin, souhaites-tu pouvoir instancier utilisateurBLL, c'est à dire créer une instance de cet classe ?
    Apparemment ce n'est pas le cas, un utilisateur est soit externe soit interne d'après tes explications donc instancier un utilisateurBLL ne semble rien apporter.

    L'intérêt d'avoir une classe abstraite c'est aussi de pouvoir se dire :
    - Entre mes 2 classes filles j'ai du code commun => donc dans la classe mère
    - Certaines méthodes dépendent du type d'utilisateur => donc déclarées dans la classe mère mais implémentées dans les filles

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse,

    J'aurais donc :

    1/ Une classe UtilisateurDAO composé de méthodes statiques (ça existe pas des classes statiques en php ? je crois me souvenir qu'il y en a en C#) qui génère le SQL et l'objet mysql pour la persistance.

    et

    2/ Une classe abstraite UtilisateurBLL dont seules les classes dérivées ExterneBLL et InterneBLL seront instanciées.

    Il me reste encore deux questions :
    Une classe est abstraite si elle possède au moins l'une de ses méthodes abstraites.
    a/ OK mais en inversant la causalité, la classe peut-elle être abstraite si aucune de ses méthodes ne l'est ? (ce qui est dit dans la définition est que s'il y a une méthode abstraite alors la classe doit l'être aussi). A priori je dirai oui mais je ne suis pas sûr du tout. L'intérêt de la manipulation ne serait plus dans les propriétés polymorphique mais dans les propriétés de non-instanciation de l'objet.
    b/ La méthode voirUtilisateur() sera déclarée et implémentée dans la classe parent UtilisateurBLL pour récupérer l'ensemble des utilisateurs et override dans les classes dérivées pour ne récupérer que les externes ou internes. Le diagnostic est bon, docteur ?

    Cordialement

  5. #5
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Statique et abstrait sont deux notions parallèles qui ne se rejoignent pas. D'ailleurs dans la plupart des langages orientés objet (j'imagine que c'est pareil en PHP), le polymorphisme ne s'applique pas aux méthodes statiques et celles-ci ne peuvent pas être abstraites.

    Je n'ai pas souvent vu de DAO qui soient statiques. En effet ils ont souvent besoin de conserver des variables d'instance, comme une connexion à une base de données. En faire des objets statiques serait peu pratique.

    En plus, pour boucler la boucle, on a justement souvent besoin d'une classe abstraite au-dessus de tous les DAO pour factoriser leur comportement commun. Ce n'est pas possible avec une classe statique.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/09/2013, 21h38
  2. Réponses: 17
    Dernier message: 14/01/2011, 16h56
  3. Réponses: 1
    Dernier message: 31/05/2010, 14h38
  4. Réponses: 13
    Dernier message: 26/06/2009, 15h19
  5. Interfaces/Classes abstraites et méthodes statiques
    Par Zakapatul dans le forum VB.NET
    Réponses: 7
    Dernier message: 06/01/2009, 14h38

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