Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/10/2011, 18h23   #1
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 43
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : novembre 2007
Messages : 43
Points : 32
Points : 32
Par défaut conception POO (héritage) : une galerie d'image

Bonjour à tous,

J'utilise des classes pour faire des requête SQL sur des tables. Cela fonctionne parfaitement, mais j'ai un problème lorsqu'il y a plusieurs tables

Dans une appli de galerie d'image par exemple. Actuellement j'ai :
  • une classe pour gérer les albums (ajout, suppression ...)
  • une autre pour gérer les photos (ajout, suppression ...)
Cela fonctionne mais j'ai un doute sur la bonne utilisation des objets.

Je comprend les tutos sur l'héritage des classes (véhicule, animaux, personnages), mais je n'arrive pas à l'appliquer à ma galerie d'images.

Ne devrai-je pas déclarer la classe photo comme fille de la classe album ?
Ou alors faire une grosse classe qui gère les albums ET les photo ?

Je suis perdu.
greg91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 18h36   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
Bonjour,

Un grand principe en POO : ne jamais faire de l'héritage fonctionnel. En clair, ne jamais dériver une classe que dans le but de récupérer ses fonctions. Conceptuellement, l'héritage va dans le sens d'une forme de spécialisation. Le lien conceptuel doit être très fort. Il faut toujours pouvoir répondre à la question est-ce que la classe dérivée est de même nature que la classe parent.

Dans ton cas, il est évident qu'une photo n'est pas un album, donc dériver la classe Photo de la classe Album est une erreur conceptuelle.
Un Album est une collection de Photos...
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 06/10/2011, 18h47   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Citation:
Ne devrai-je pas déclarer la classe photo comme fille de la classe album ?
Surtout pas !

Pour ce qui est de la relation d'héritage, une classe B peut éventuellement hériter d'une classe A si et seulement si B est un(e) espèce de A. Dans ton cas on voit bien que c'est innaplicable car une image n'est pas une espèce de gallerie et vice-versa.

Citation:
Ou alors faire une grosse classe qui gère les albums ET les photo ?
Encore moins !

Une classe qui gère les albums ainsi que les photos n'est pas non plus envisageable car cette chose ne caractérise pas une entité propre (ou alors un monstre sorti de l'imaginaire de David Cronenberg).

La solution ? Tu as besoin d'une gallerie bien. Une gallerie comporte des images ? Bien. On utilise alors ce qu'on appelle en OOP une aggrégation: une instance de Gallerie porte plusieurs images - en réalité, il s'agit simplement d'un tableau d'image porté par une propriété de Gallery.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 19h03   #4
Nouveau Membre du Club
 
Aurélien LEQUOY
Inscription : février 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : Aurélien LEQUOY

Informations forums :
Inscription : février 2011
Messages : 33
Points : 35
Points : 35
Citation:
En clair, ne jamais dériver une classe que dans le but de récupérer ses fonctions
+1

Certains pseudo idéaliste sont malheureusement tombé dans l'excès j'ai déjà vu un pseudo framwork développer par un boite ou il fallait passer par pas moins de 5 class pour uploader un fichier, ça va s'en dire 100* plus dure à déboguer que du code procédurale aussi pourri soit-il !!!!!!!!!!

pas de fonction à réutiliser = pas d'héritage
Aurélien LEQUOY est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/10/2011, 21h16   #5
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 43
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : novembre 2007
Messages : 43
Points : 32
Points : 32
Citation:
Conceptuellement, l'héritage va dans le sens d'une forme de spécialisation
Effectivement! Ça je le comprend bien

Donc je garde mes 2 classes Ça me rassure !

Merci à tous pour vos réponses rapides et précise
greg91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h05.


 
 
 
 
Partenaires

Hébergement Web