Accueil > Forum > > > > Structure de classes
Structure de classes
lundi 26 novembre 2007 à 12:00:12 |
Structure de classes

codefalse
|
Bonjour à tous, j'ai un petit soucis de structure, histoire de bien faire. Alors voila, j'ai une classe abstraite (qui me permet d'utiliser différents types) pour une base de donnée. J'ai les classes filles mysql, mssql, postgreesql, etc. Maintenant, j'aimerai ajouter des fonctions spécifique à ces classes. Je pensais les étendres (extends mysql), car en théorie, ca ajouterai les fonctionnalités. Le probleme, c'est que je ne veux pas faire une classe étendue pour chaque classes filles, c'est un peu ... bête. Et je ne peux pas non plus étendre la classe abstraite sans hériter des classes filles... Enfin bref, je suis un peu coincé. Quelqu'un d'entre vous aurait des idées ? Merci à vous ! :)
|
|
lundi 26 novembre 2007 à 13:06:45 |
Re : Structure de classes

malalam
|
Hello,
heu...pourquoi tu ne rajoutes pas ces méthodes dans les classes filles directement...?
|
|
lundi 26 novembre 2007 à 13:34:29 |
Re : Structure de classes

neigedhiver
|
Salut,
Et pourquoi ne pas utiliser mon système de plugins ? Ca sert justement à ça : ajouter des fonctions à des classe, de manière dynamique.
|
|
lundi 26 novembre 2007 à 14:09:30 |
Re : Structure de classes

codefalse
|
@malalam : l'idée, c'est de pouvoir augmenter les fonctionalités de mes classes par des étendues (je suppose que c'est une des meilleurs solutions) : J'ai une classe de base (qui hérite d'une classe abstraite) et ensuite j'étends la classe de base pour lui ajouter de nouvelles fonctionnalités.
@neigedhiver : Ou se trouve ton systeme de plugins ?
Merci de vos réponses :)
|
|
lundi 26 novembre 2007 à 14:14:53 |
Re : Structure de classes
|
lundi 26 novembre 2007 à 14:32:26 |
Re : Structure de classes

codefalse
|
ralala quelle question :p
Bon, j'ai regardé, mais je prefere tout coder moi-même (oui je sais, j'abuse :p) mais c'est histoire de bien comprendre ce que je fait.
En fait, pour avoir un exemple plus concret, je réfléchis à la source postée recement sur la réduction d'image. Justement, neigedhiver, tu parle d'une possibilité de structures de classes pour des images.
J'envisage de me faire un petit moteur de news, donc avec l'histoire de la bdd. En fait, je pense que la meilleur solution c'est de travailler sur deux classes différentes : la classe abstraite DB les classes filles mysql, mssql, etc
et faire une autre classe à coté, news : news + add (titre, contenu) + update (id, titre, contenu) + delete
puis faire une classe newsExtended + add (titre, date, contenu, auteur, image) + upadte (id, titre, date, contenu, auteur, image) // pas de delete car elle ira sur la classe mere + withImage + etc
Bon c'est qu'un exemple, mais pour revenir à mon premier probleme, je pense qu'il ne fallait pas mettre à la suite, mais faire du travail à coté. Qu'en pensez-vous ?
@neigedhiver : Je repense à ce que tu a dit sur la fonction de redimenssionnement sur la page d'accueil : faire une classe abstraire imageHandler avec des classes filles pour gd, imagemagick, etc et ensuite de faire des classes à coté pour du png, gif, jpeg, etc Ma question, c'est, à ton avis, ne serait-il pas plus intéressant d'implémenter directement la gestion du type dans les fonctions de la classe abstraite ? genre createImage($sType = 'png', $etcValues); et ce pour les fonctions qui demandent un typage ?
enfin c'est mon avis, et j'aimerai bien le tiens :)
|
|
lundi 26 novembre 2007 à 14:54:05 |
Re : Structure de classes

neigedhiver
|
La gestion du type dans la classe abstraite, cela va de soi. Tout dépend comment il est géré au niveau du code.
Pour la gestion d'images, si tu te fends d'une classes d'abstraction de traitement complète, voilà comment je vois les choses :
- une interface qui fixe le cadre de la classe instanciée
- une classe abstraite qui va gérer les méthodes communes (gestion de la taille du fichier, du chemin : elle peut, au passage, étendre SplFileInfo).
- une classe abstraite par logiciel (GD, ImageMagick, etc), qui étend la classe sus-citée
- une classe ImageHandler qui étend la classe précédente
- une classe concrète par type mime (png, jpeg, gif) puisque les fonctions à utiliser ne sont pas les mêmes. Cette classe n'étend aucune classe : elle est instanciée par ImageHandler, qui va l'utiliser tout simplement.
Ainsi, quand on instancie une nouvelle image, on spécifie le logiciel utilisé (à moins que ce ne soit dans les options, mais autant le passer en paramètre avec un choix par défaut) et l'image.
La classe abstraite vérifie le type de l'image (type mime de préférence, ou extension du fichier en cas d'échec) et charge une instance de la classe Image en fonction de ce type, qu'elle stocke dans une propriété. C'est cette propriété qu'elle va manipuler.
Ainsi, pour redimensionner une image, on n'a plus du tout besoin de se soucier du type d'image (c'est géré par la classe ImageHandler) ni du logiciel utilisé (GD ou ImageMagick) : on se contente d'appeler la méthode redimensionne() avec les bons paramètres. Certaines valeurs par défaut pouvant d'ailleurs être gérées par ImageHandler (dans le cas où ImageHandler sert à gérer une collection d'images avec les mêmes paramètres, comme la taille maxi, etc).
On peut ensuite rajouter tout un tas de méthodes pratiques à cette classe ImageHandler :
- assombrir
- inverse
- rotation
- etc
Ces méthodes étant principalement liées au logiciel, pas au type d'image. Le type d'image, lui, sert pour créer une image GD à partir d'un fichier, l'enregistrer en tant que tel type d'image, etc.
J'espère que c'est clair et que je dis pas (trop) de conneries (je compte sur malalam pour me taper sur les doigts le cas échéant).
|
|
lundi 26 novembre 2007 à 15:30:22 |
Re : Structure de classes

codefalse
|
mais tu t'abstrait pas du type d'image aussi ? ta classe concrete pour chaque mime type, comment tu fait pour les fonctions je m'explique, pour png, tu a createFromPng, jpg: createFromJpeg, etc, mais ca, c'est par rapport aux fonctions gd. C'est là que je bloque dans ta classe en fonction du mime type, elle utilise les fonctions de la classe abstraite ? mais alors pourquoi ne pas l'étendre ?
Parce que comme tu le dit, les fonctions ne sont pas les memes, le but, c'est de généraliser l'usage., pourquoi ne pas faire "aussi" une classe abstraite mimetype (par exemple), qui contient les fonctions de type createImage Chaques classes (png, jpeg, gif) étends mimetype, et la fonction abstraite createImage, appel une fonction fille _createImage qui contient createFromJpeg pour jpeg, createFromPng pour png, etc.
De plus, tu dit - une classe abstraite par logiciel (GD, ImageMagick, etc), qui étend la classe sus-citée
- une classe ImageHandler qui étend la classe précédente
mais alors il faut faire n classe imageHandler, une pour chaque logiciel, vu que c'est une classe abstraite ? (la base de mon probleme :p)
Enfin bref pour moi c'est pas clair du tout :p désolé mais si t'es motivé tu peux expliquer plus ? :p T'a compris là ou je bloque ? (au cas ou : c'est que le type doit être intimement lié à la classe abstraite car les fonctions dépendent du logiciel, et comme chaque type à des fonctions unique, il faut séparer les types aussi pour s'en abstraire) (d'apres-moi)
Ton avis ?
|
|
lundi 26 novembre 2007 à 20:05:15 |
Re : Structure de classes

malalam
|
Re,
"C'est là que je bloque dans ta classe en fonction du mime type, elle
utilise les fonctions de la classe abstraite ? mais alors pourquoi ne
pas l'étendre ?" => c'est une sorte de client, ton interface. Elle utilise les autres classes, en te fournissant une interface unique, sans que tu aies besoin d'aller instancier LA classe qu'il faut en fonction du type d'image.
"Parce que comme tu le dit, les fonctions ne sont pas les memes, le but,
c'est de généraliser l'usage., pourquoi ne pas faire "aussi" une classe
abstraite mimetype (par exemple), qui contient les fonctions de type
createImage Chaques classes (png, jpeg, gif) étends mimetype, et la
fonction abstraite createImage, appel une fonction fille _createImage
qui contient createFromJpeg pour jpeg, createFromPng pour png, etc." => Justement, de la manière proposée par Neige, tu n'as même pas besoin de sélectionner le type. Pourquoi passer par une classe abstraite pour le mime type ? Tu n'auras aucune méthode commune, et si tu en as, elles se situeront dans ta première classe abstraite. La manière que tu proposes est plus lourde, simplement. Si ce n'était que pour imageCreateFromJpeg et cie, ça ne servirait à rien de toute manière, ni la méthode de Neige ni la tienne (dans cet exemple précis hein...mais ça s'applique à d'autres!) : on pourrait générer les méthodes dynamiquement avec create_function(). Mais il y a d'autres problèmes : la gestion de la transparence par exemple...totalement inutile pour les jpeg.
"mais alors il faut faire n classe imageHandler, une pour chaque
logiciel, vu que c'est une classe abstraite ? (la base de mon probleme
:p)" => Oui, il y a erreur de conceptualisation, là. La classe handler ne doit pas étendre ces classes abstraites. Elle doit fonctionner comme une usine (factory): tu lui donnes en paramètre l'extension à utiliser (GD, IMAGICK), et elle va la "charger". Il FAUT que tes classes abstraites implémentent les mêmes méthodes. Un exemple tout con, imagine cette interface : interface output { public function write($sContents); public function read($sContents); public function create($sCreation); public function finish($sFinishName = null); } Cette interface s'adapte à...la création d'un document PDF, DOC, TXT, etc...à un email (avec son envoi!), à une entrée dans une base de données, à la création d'un flux virtuel (échange entre 2 systèmes de type xml ou autre) etc... Bon faudrait la peaufiner hein...mais le principe est là. Le but est d'avoir une interface commune pour des classes distinctes.
Il y a d'autres solutions : http://www.phpcs.com/tutoriaux/DESIGN-PATTERNS_735.aspx Regarde le design pattern DECORATOR.
|
|
lundi 26 novembre 2007 à 20:23:41 |
Re : Structure de classes

codefalse
|
rololo !! je comprends pas grand chose au début de ton explication Malalam :/ "c'est une sorte de client, ton interface. Elle utilise les autres
classes, en te fournissant une interface unique, sans que tu aies
besoin d'aller instancier LA classe qu'il faut en fonction du type
d'image." Qui est l'interface ? qui est le client ?
Ce serait possible d'avoir le débat sous forme de diagramme ? histoire que je saisisse un peu mieu l'idée de neigedhiver, mais en corrigé de Malalam ? car là je plane totalement Moi je le vois comme ca
une classe abstraite imageMain qui implémente toutes (a peu pres) fonctions de gd (et donc de imagemagick (à peu de choses pres)), dont createFromJpeg, createFromPng, etc. Une classe fille libGd, libIm, etc
Ensuite on aura une classe imageHandler, qui prends en paramètre le type de fichier et une instance d'une fille de imageMain Cette classe imageHandler effectuera les actions sur imageMain en fonction du type donné.
Est-ce bien comme cela que vous le voyez ? Moi je le vois, ... flllllooouuuuuuu ;)
Merci de votre aide:)
|
|
Cette discussion est classée dans : classe, classes, abstraite, structure, filles
Répondre à ce message
Sujets en rapport avec ce message
Classe abstraite DataBase [ par codefalse ]
Hello les gens :)J'ai développé un petit ensembles de classes en php 5, et j'aimerai votre avis :)Je ne vous le cacherai pas, je me suis énormément ba
Appel d'une classe dans une classe [ par qntoinOo ]
Bonjour à tous,Je suis face à un petit problème, je fait appel dans mon site à plusieurs classes une pour mes requêtes mysql, une pour mon système de
Classes et vérification des données [ par TTMan ]
Bonjour à tous,Je viens pour poser une question peut-être stupide, mais je voudrais savoir s'il est plus intelligent et maintenable de vérifier les do
Design Patterns : Singleton et Classe Abstraite [ par neigedhiver ]
Salut, N'étant pas encore au point avec les motifs de conception, je me pose une question qui a sûrement une réponse toute bête. J'aimerais avoir un
Structure schématique pour une couche d'abstraction SGBD [ par codefalse ]
Bonsoir/Bonjour à vous tous Voila, je suis quelque peu en galère. J'aimerai me faire ma propre classe Database
structure d'un jeu en ligne [ par freekid ]
Bonjour tout le monde. voila un moment que 'ai des petites idées de mmorpg . cependant, quelques questions subsiste au niveau de l'agencement des clas
classes et sessions [ par davwart ]
Hello all,là je desespere..voial j'ai deux fichiers.fichier1: classe.inc.phpclass User{}?>fichier2: index.phpinclude("classe.inc.php")session_start();
fonction Autoload.... [ par Yemanjah ]
Bonjour , Après de multiples essais , je désespère et viens demander de l'aide ici.J'essaye de mettre en place un héritage et à vrai dire je cr
récupérer variable en post [ par artis ]
Salut à tousJ'explique mon problème, C'est dans un formulaire à plusieurs étapes, je demande le nombre de classes pour afficher ensuite, dans une deux
Class abstraite [ par abdoulax ]
Bonjour,Jusqu'à present, je n'ai réussi à faire que des classes virtuel pure. Est-t'il possible de faire des classes virtuel non pure afin de ne pas ê
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|