Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Profil pro Renaud MENGELLE
    Inscrit en
    mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Nom : Renaud MENGELLE

    Informations forums :
    Inscription : mai 2010
    Messages : 3
    Points : 0
    Points
    0

    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
    Invité de passage
    Profil pro Renaud MENGELLE
    Inscrit en
    mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Nom : Renaud MENGELLE

    Informations forums :
    Inscription : mai 2010
    Messages : 3
    Points : 0
    Points
    0

    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
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2002
    Messages : 144
    Points : 233
    Points
    233

    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
    Invité de passage
    Profil pro Renaud MENGELLE
    Inscrit en
    mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Nom : Renaud MENGELLE

    Informations forums :
    Inscription : mai 2010
    Messages : 3
    Points : 0
    Points
    0

    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
    275
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 275
    Points : 816
    Points
    816

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •