Précédent   Forum du club des développeurs et IT Pro > Général Développement > ALM > Architecture
Architecture Forum d'entraide sur les choix d'architectures logicielles, de patterns architecturaux, ainsi que la gouvernance des Systèmes d'Information (Urbanisation, Interopérabilité, etc.)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/07/2012, 14h58   #1
Renaud MENGELLE
Invité de passage
 
Renaud MENGELLE
Inscription : 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.
Renaud MENGELLE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2012, 20h13   #2
Renaud MENGELLE
Invité de passage
 
Renaud MENGELLE
Inscription : 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
Renaud MENGELLE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2012, 21h46   #3
tmanta7
Membre confirmé
 
Homme
Inscription : août 2002
Messages : 134
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2002
Messages : 134
Points : 213
Points : 213
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
tmanta7 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 18/07/2012, 09h48   #4
Renaud MENGELLE
Invité de passage
 
Renaud MENGELLE
Inscription : mai 2010
Messages : 3
Détails du profil
Informations personnelles :
Nom : Renaud MENGELLE

Informations forums :
Inscription : mai 2010
Messages : 3
Points : 0
Points : 0
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
Renaud MENGELLE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2012, 15h01   #5
Luckyluke34
Membre éprouvé
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 407
Points : 407
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.
Luckyluke34 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h52.


 
 
 
 
Partenaires

Hébergement Web