begin process at 2012 05 28 19:28:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Avis sur la façon de procéder ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Administrateur CodeS-SourceS
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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,763 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales