Accueil > Forum > > > > Avis sur la façon de procéder ?
Avis sur la façon de procéder ?
mardi 11 mars 2008 à 13:49:08 |
Avis sur la façon de procéder ?

g_barthe
|
Bonjour, Je me suis mis il y a déjà quelques mois à développer un outils de gestion de collections (BD, CD, étiquettes de vins...) pour les collectionneurs en tous genres un peu comme moi. Le tout est modulaire pour permettre l'ajout d'une collection initialement pas prévu. Et là après plusieurs méditations, je me dis la POO est pour moi. Donc je me suis documenté, j'ai appris pas mal de choses et je modifie mon application pour la rendre orientée objet. J'ai donc créé une classe "user" qui permet de gérer les identifications, droits... de chaque utilisateur. Et lorsque j'arrive aux collections proprement dites, je vois les choses comme cela mais j'ai un doute. Une classe "collection" avec un attribut qui correspondrait à l'objet collectionné comme attribut et des méthodes "ajouter", "lister", "modifier", "supprimer" qui permettrent de faire les opérations de base. Après je me voyais bien créer une classe "BD" par exemple pour la collection de BD qui bien entendu serait dérivée de la classe "collection". Elle aurait les attributs "série", "titre", "numéro", "possesseur". Mais là où j'ai un doute c'est qu'elle n'aurait pas de méthode propre vu que les méthodes de la classe "collection" suffisent. Et pour les autres types de collections c'est pareil. Mais je me dit une classe enfant doit elle forcément avoir des méthodes ? si celles de sa classe parent suffisent. Dans ce cas, je pourrais également créer une classe "CD" avec juste des attributs et les méthodes seraient une fois de plus héritées de la classe parent "collection". Un expert de la POO pourrait-il me donner son avis sur la question, savoir si je suis parti à l'ouest ou si je suis plutôt dans un schéma réellement orienté objet. Merci d'avance à tous. --------------------------------------------------------- Forum perso : http://le-genie-climatique.positifforum.com Forum travaux manuels : http://pausebroderie.fr
|
|
mardi 11 mars 2008 à 14:05:13 |
Re : Avis sur la façon de procéder ?

malalam
|
Hello,
non, ton schéma est à peu près correct dans l'idée... Et puis, tu n'as pas de méthode propre à tes enfants POUR L'INSTANT...l'avantage est que si tu en as besoin un jour, tu pourras en implémenter. Dans l'idée donc, parce que par contre, je ne saisis pas ta passerelle entre une collection d'objets, et l'objet unique ? En fait pour moi, la collection est un objet composé. Il est composé d'autres objets (c'est une collection d'objets). On peut lui en ajouter, enlever, etc... A la limite, il prend comme attribut un type d'objet qu'on peut lui attacher. Regarde A mon sens, tu dois avoir une classe abstraite objet, avec ses propriétés (et éventuellement ses méthodes). Puis des classes dérivées de cet objet : bd, cd, etc... Mais tes objets ne doivent pas étendre ta collection. Regarde dans un de mes tutos (le 3) sur les design pattern, le pattern OBSERVATEUR, il y a une classe s'appelant SplObjectStorage dedans (provenant de php.net). http://www.phpcs.com/tutoriaux/DESIGN-PATTERNS_753.aspx Voilà à quoi doit ressembler ta collection à minima.
|
|
mardi 11 mars 2008 à 22:04:37 |
Re : Avis sur la façon de procéder ?

MasterCent
|
Tout à fait d'accord avec Malalam : dans ton modéle, il faut distinguer collection et objet. Et aussi object ( et l'objet collectionné).
La class collection est une classe qui peut stocker un ensemble d'objects., Si la classe BoiteAllumettes existait, la class collection pourrait les contenir (par l'entremise d'une base de données ou d'un autre stystème de stockage). $maCollection->add ( $uneBoite ).
L'idée étant que l'on ignore de quoi seront faites les collections, une classe générique par exemple Piece pourrait servir pour le développement de la class Collection. Collection->Add(Piece)
Si Piece propose la methode ->toString() , qui renvoit un descriptif de l'objet, alors toute classe dérivée pourra surcharger cette methode (c'est à dire une réécriture de la fonction), pour s'adapter à l'objet et à ses attributs.
Du coup, dans ta Collection, tu pourrais avoir une methode showAll () , qui dans une boucle, appelle successivement la methode -> toString() de chaque item (objet), quel qu'il soit puisque cette méthode existera forcement.
Courage !
|
|
jeudi 13 mars 2008 à 16:31:32 |
Re : Avis sur la façon de procéder ?

g_barthe
|
Merci de vos réponses.
C'est un peu hard quand même. J'ai regardé ton tuto malalam.
Je nage un peu à savoir dois-je utiliser avoir un truc du genre :
class BD expends collection avec la classe abstract collection qui contiendrait mes méthodes communes (ajout, supp...)
ou plutot
class BD implements collection et dans ce cas la classe collection aurait uniquement les déclarations de méthodes et variables.
Je suis parti avec l'héritage mais la notion d'implémentation me laisse songeur et me fait douter.
Sachant que mes méthodes ajouter, supprimer... doivent faire appel à une classe qui gèrent les opération liées à ma bdd mysql.
Je voulais faire dériver ma classe abstraite "collection" de la classe "bdd" mais après je me retrouve avec de l'héritage multiple qui n'est pas faisable en php c'est ça ? Sinon il faut que je transmette mon objet "bdd" à chaque fonction (ou en $_SESSION) mais c'est pas un peu lourd ?
Je sens que j'avance dans la compréhension mais c quand même vachement abstrait comme concept je trouve.
PS : auriez-vous un bouquin qui traiterais de la POO sous PHP ? J'ai vu celui ci http://www.eyrolles.com/Informatique/Livre/9782212120844/livre-l-oriente-objet.php qui me tente bien mais pas feuilleté et celui-là http://www.eyrolles.com/Informatique/Livre/9782212122701/livre-conception-et-programmation-orientees-objet.php qui me parait plus pointu et moins abordable. Mais sont-ils vraiment applicable à PHP ?
Merci beaucoup à vous. --------------------------------------------------------- Forum perso : http://le-genie-climatique.positifforum.com Forum travaux manuels : http://pausebroderie.fr
|
|
vendredi 14 mars 2008 à 10:35:33 |
Re : Avis sur la façon de procéder ?

MasterCent
|
Salut g_barthe,
Je pense que tu mélanges deux choses différentes : les objets que tu convoites et le local où tu les mets.
J'emploie volontairement "convoitise" et "local" pour bien marquer la différence avec les mots object et collection qui appartiennent aux notions informatiques.
Réfléchis de manière très générique : Qu'est ce que tu convoites ? Des boîtes d'allumettes, des BDs, des pin's, etc... Qu'ont en particulier toutes ces convoitises ? Un nom, un prix , une date d'acquisition, un descriptif, une valeur sentimentale, une anecdote, une identification ?
/* Le code ci-après est tapé de tête, IL NE FONCTIONNE PAS, mais ILLUSTRE le propos !!! La version corrigée viendra dès que je suis sur ma becane de développement ! et pourra faire l'objet d'un tuto ! */
En PHP5 :
<? class Convoitise {
// valeur qui sera retournée si l'identifiant n'existe pas dans la base, ... const VIDE = false ; // les attributs par defaut ( faut-il mettre var ? je ne sais plus ) $id ; $description ; $nature = "GENERIQUE" ; // " boite d'allumette, BD , ...
// le constructeur ( nom à vérifier ) function __construct ( $identification = false ) { ' ICI appel de la fonction $this->_Init ( $identification ) ; } // retourn une string qui parle de l'objet de convoitise function Info () { if ( $this->id == self::VIDE ) return "- VIDE-" ; $result = $this->id . " : " . $this->description ; '... return $result ;
}
// fonction qui "sauve" l'objet dans la DB par exemple (Abstract à vérifier) abstract function Write() { } // obligation de definir cette fonction dans l'héritage function _Init ( $identification ) { ' A FAIRE : lecture dans la DB selon $identification }
function Delete () { // par exemple ::: $sql = "DELETE FROM '" . $this->table . "' WHERE ID = " . $this->id . " LIMIT 1 "; ' ... traitement de la suite ... }
// retourne un tableau contenant tout les $id abstract function All () {}
} // -------------------------------------------------------------------------------------
class Pins extends Convoitise{ $nature = "Pins" $annee ;
function Write () { ' ... ici le code qui update ou insert l'objet }
function All () { $sql = "SELECT ID from T_PINS " ; '... appel sql
return mysql_fetch_array ( $result ) ; }
} // ------------------------------------------------------------------------------------- // exemple d'utilisation 1: création
// création d'un pins $monPins = new Pins () ; $monPins->description = "Collector Star Wars" ; $monPins->annee = 1990 ;
// sauvegarde $monPins->Write() ;
// exemle 2 : info sur un Pins existant $monPins = new Pins (10); echo $monPins->Info() ; // affchage de l'ensemble de mes Pins : $maCollection = Pins::All() ; while ( list ( $key , $id ) = each ( $maCollection ) ) { $monPins = newPins ( $id ) ; echo $monPins->Info() ; } ?> // C'EST UNE ILLUSTRATION --- LA VERSION CORRIGEE SUIVRA !!!
|
|
Cette discussion est classée dans : méthodes, classe, avis, collection, collections
Répondre à ce message
Sujets en rapport avec ce message
fusion php-html-mysql : votre avis ? [ par skrol29 ]
Bonjour,Je suis en train de terminer une classe PHP pour la fusion de page HTML avec variables PHP et données MySQL.Le principe : une page HTML modèle
probleme de classe en php [ par Elkaire ]
Donc voila mon probleme!!dans une premiere page je rensegne les insances de mon objet. Une fois renseigné je peux réutiliser les instances cet objet d
Parametre de ma classe connexion et connexion/deconnexion [ par sebos63 ]
Bonjour, 1. J'ai une classe de connexion et je souhaiterais savoir où il est judicieux de spécifier les paramètres d'une connexion. (Dans mon construc
template.inc [ par joedalton ]
bonjourVoila, je possede un fichier template.inc qui me permet de définir ma classe template, mais le probleme c'est que ce fichier est valable pour l
Avis sur un hébergeur ? [ par fred89 ]
Bonjour , pourais je avoir votre avis sur cette hébergeur www.dp3306.bizcordialement,Fred
Inversion de matrice [ par VanSama ]
Bonjours, pour les besoins d'analyse d'une image, je recherche un algorithme de d'inversion d'une matrice NxN.J'ai lue beaucoup de chose sur le site d
Initiation [ par THEpatate69 ]
Slt je suis élève en terminale S-SI et jai choisi comme sujet de TPE le cryptage informatique. Je cherche des liens de site retraçant l'historique de
Quand on parle de Classe [ par Tomcube ]
C'est une question très vaste,On parle de plus en plus de programmation objet. Qui dit programmation objet dit classe. D'ailleurs, c'est fou le nombre
problème de classe [ par guixyz ]
Hello! Voila je suis en train d'apprendre a me servir des classes en php. Et j'en ai fait une pour gérer mes formulaires Donc j'ai ma classe, une fcti
Pb avec classe en php, Affichage [ par matou82 ]
Je voudrais savoir comment surcharger l'affichage d' echo ou print pour une classePour avoir:$obj = new Maclass;echo $obj;Cela affiche : "Object" Je s
Livres en rapport
|
Derniers Blogs
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 LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
XML ET PHPXML ET PHP par karouani
Cliquez pour lire la suite par karouani
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
|