[Perl] Aide pour logique en POO

Aide pour logique en POO [Perl] - Perl - Programmation

Marsh Posté le 23-04-2004 à 00:52:54    

Je désire faire une classe pour consulter le fichier /etc/passwd
 
grâce à celui-ci, je pourrais utiliser les méthodes suivantes:

  • uid_to_username($uid)
  • username_to_uid($username)


pas plus pour commencer
 
chacune des lignes du fichiercontient les éléments suivants:

  • username
  • uid
  • gid
  • description
  • home
  • shell


donc ca devrait ressembler à quelque chose comme ca:
 

Code :
  1. sub uid_to_username {
  2.   my $self = shift;
  3.   my $uid  = shift;
  4.   foreach ($self->lines) {
  5.     if ($_->uid eq $uid) {
  6.       return $_->username;
  7.     }
  8.   }
  9. }


 
mais voila, dans cette optique, une ligne se doit aussi d'être un objet, et j'ai donc besoin d'une classe Etc::Passwd::Entry
 
selon vous, vaut mieux faire un package pour "le fichier" et un pour "une entry" ou tout foutre dans le package principal? si c'est la dernière réponse, comment vous vous y prendriez
 
merci


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 23-04-2004 à 00:52:54   

Reply

Marsh Posté le 23-04-2004 à 01:02:22    

aucune.
 
ta classe ça peut être un singleton
 
et quand tu construits une instances, tu lis /etc/passwd, tu découpe par lignes, et tu mets chaque lignes dans un dictionnaire et voilà. pas la peine de rajouter une classe pour pas grand chose.

Reply

Marsh Posté le 23-04-2004 à 01:07:15    

bin l'idée général, c'est d'avoir un package (une classe quoi), qui sera dans une librairie commune pour la plupart de mes scripts, dans lesquels je pourrais faire appel à ce package (classe) lorsque j'en aurais besoin


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 23-04-2004 à 01:17:16    

bon disons qu'on reprend de cette facon
 
j'ai un package (mais pas classe) nommé Etc::Passwd
 

Code :
  1. package Etc::Passwd;
  2. use strict;
  3. use Bromont::File; # Package qui me permet divers trucs sur les fichiers; les acls, lire le fichier en retirant les lignes vides et commentaires, etc...
  4. my $file = new Bromont::File("/etc/passwd" );
  5. sub uid_to_username {
  6.   my $uid  = shift;
  7.   foreach ($file->lines) {
  8.     my $entry = new Etc::Passwd::Entry($_);
  9.     if ($entry->uid eq $uid) {
  10.       return $entry->username;
  11.     }
  12.   }
  13. }


 
c'est pas bien de me créer un package (classe dans ce cas) pour traiter une ligne de mon fichier? jsuis mieux de simplement me faire des subroutines dans le package Etc::Passwd?


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 23-04-2004 à 12:01:15    

Reply

Marsh Posté le 24-04-2004 à 22:17:17    

pourkoi tu veux faire un truc objet?
Tu pense que tu aura besoibn de plusieurs instance de cette classe? et tu pense que c'est vraiment utilise de faire de chaque ligne une instance d'une classe ...::Entry ?
 
Tu peux faire un package bien réutilisable et simple pour ce que tu veux faire sans faire de OO

Reply

Marsh Posté le 25-04-2004 à 01:20:06    

pospos a écrit :

pourkoi tu veux faire un truc objet?
Tu pense que tu aura besoibn de plusieurs instance de cette classe? et tu pense que c'est vraiment utilise de faire de chaque ligne une instance d'une classe ...::Entry ?
 
Tu peux faire un package bien réutilisable et simple pour ce que tu veux faire sans faire de OO


 
ouais bin je l'ai fait sans OO finalement, j'ai trouvé une Unix-ConfigFile dans lequel ca traite Passwd et Group alors jfais que le réutiliser pour faire du uid_to_name et ainsi de suite


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed