Quelle est la différence entre package, module et classe dans Perl orienté objet?Quelle est la différence entre package, module et classe dans Perl orienté objet?
Répondre
Les modules sont un fichier unique, un fichier .pm qui fournit le code. Cela pourrait ne pas être des paquets, un seul paquet ou plus d'un paquet. Un module ne se soucie pas vraiment de ce qu'il contient, il peut donc s'agir d'un code qui s'insère dans le même espace de noms, d'un ensemble plus traditionnel de sous-routines dans une bibliothèque, ou de définir l'idée de classe de Perl. Un package, également appelé espace de noms, contient ses propres variables et sous-routines. C'est une façon de séparer les différentes parties de votre programme. Vous créez le paquet et mettez votre code dedans:
package SomePackage;
sub some_subroutine { ... } # really SomePackage::some_subroutine
Vous chargez le module pour obtenir l'accès au package:
use SomePackage; # read and compile the module file
SomePackage::some_subroutine(...);
Une classe Perl est un package et son comportement associé. Les méthodes dans une classe sont des sous-routines tout à fait normal, bien que lorsque nous traitons les sous-routines que les méthodes, le premier paramètre est la chose (un nom de paquet ou un objet, également connu sous le référent) qui a appelé la méthode:
package SomeClass;
sub class_method { my($class, @args) = @_; ... }
sub instance_method { my($self, @args) = @_; ... }
Depuis la classe est juste un paquet comme tout autre paquet, et vit probablement dans un module, vous accédez à la même manière avec use
:
use SomeClass;
my $i = SomeClass->class_method(...);
la syntaxe flèche OO ne des choses spéciales pour laisser le sous-programme some_method
savoir qu'il est être appelé comme une méthode. Perl met le référent (le SomeClass
dans ce cas) comme premier argument. En outre, lors de l'utilisation de la syntaxe OO, Perl sait utiliser ses fonctionnalités d'héritage.
Les méthodes appelées par « -> » obtenir le référent comme premier paramètre à la méthode, donc cet appel:
SomeClass->new('world');
est syntaxiquement si vous aviez appelé avec le nom de classe comme premier paramètre:
SomeClass::new('SomeClass' ,'world'); # no inheritance this way
Cela fonctionne de la même manière pour les objets. Lorsqu'un objet est le référent:
my $i = SomeClass->new();
$i->bar('world');
l'objet est le premier paramètre comme la méthode:
SomeClass::bar($i, 'world');
C'est une façon assez détournée de dire que Perl <6 n'a pas de classes ;-) – innaM
Bien que, cela dit, j'ai un peu * aimé * ce comportement. Principalement obtenu par PHP pour avoir cette façon de penser bien, je veux dire, il n'a pas, (et n'aura jamais, (* met les doigts dans les oreilles *)) le soutien de l'espace de noms de travail. –
Les packages ne sont pas des étendues. Ils sont étendus lexicalement, mais ne définissent pas de portée. –
Perl n'a pas cours. Il a des espaces de noms que vous modifiez avec package
. Pour les détails complets de Perl OOP, voir Intermédiaire Perl ou Orienté objet Perl. Vous pouvez également voir la documentation perltoot et perlboot. En bref, Perl simule ce que les gens attendent des classes «réelles» avec des paquets, des sous-routines normales et des références.
Un module est un élément de code distribuable contenu dans un fichier. Voir perlmod.
dire de plus à ce sujet dans mon post pour The Effective Perler, Find a module's release managers. Je ne parle pas des choses OO, mais je parle des autres termes autour de "module".
- 1. Quelle est la différence entre include et extend dans Ruby?
- 2. En Perl, quelle est la différence entre l'utilisation et le besoin de charger un module?
- 3. Quelle est la différence entre new Some :: Class et Some :: Class-> new() dans Perl?
- 4. Quelle est la différence entre rediriger et transférer dans Symfony?
- 5. quelle est la différence entre:.! et: r !?
- 6. Quelle est la différence entre = et: =
- 7. Quelle est la différence entre dict() et {}?
- 8. Quelle est la différence entre parent et base dans Perl 5?
- 9. Quelle est la différence entre la classe Query et la classe Gqlquery dans Google App Engine?
- 10. Quelle est la différence entre cmpStr et cmpStrHard dans FreezeThaw de Perl?
- 11. Quelle est la différence entre% Q et% {} dans ruby?
- 12. Quelle est la différence entre // et /// dans Visual Studio?
- 13. Quelle est la différence entre memset et memcpy dans C
- 14. Quelle est la différence entre latin1_general_ci et utf8_bin dans MYSQL
- 15. Quelle est la différence entre -I et -L dans makefile?
- 16. Quelle est la différence entre utf8_general_ci et utf8_unicode_ci dans MySql?
- 17. Quelle est la différence entre Int et Integer dans Scala?
- 18. Quelle est la différence entre bcc32 et bcc32ide dans Borland?
- 19. Dans ASP.Net, quelle est la différence entre <% = et <% #
- 20. Quelle est la différence entre rediriger et rendre dans CakePHP?
- 21. Quelle est la différence entre DOCUMENT_URI et URI_REQUEST dans SSI?
- 22. Quelle est la différence entre% c et% C dans printf?
- 23. Quelle est la différence entre AddConcreteType et TheDefaultIsConcreteType dans StructureMap?
- 24. Quelle est la différence entre un objet fonction et un objet appelable?
- 25. Quelle est la différence entre Perl (ou, et) et (||, &&) opérateurs de court-circuit?
- 26. Différence entre classe et classe <?>
- 27. Quelle est la différence entre les classes span-x et la classe 'column' dans blueprint-css?
- 28. jQuery: Quelle est la différence entre '$ (this)' et 'this'?
- 29. Quelle est la différence entre la forme et la structure d'un objet?
- 30. Quelle est la différence entre un espace de noms et un module en F #?
Avant de poser ce genre de questions, commencez par lire la documentation Perl. Si vous ne comprenez pas ce que vous lisez, posez des questions à ce sujet. –
Qu'est-ce qui vous rend si certain qu'il n'avait pas RTFM? – spoulson
@spoulson: regarde son histoire de question. Ce n'est pas une seule fois. –