Was ist der Unterschied zwischen Paket, Modul und Klasse in objektorientiertem Perl?Was ist der Unterschied zwischen Paket, Modul und Klasse in objektorientiertem Perl?
Antwort
Module sind eine einzelne Datei, eine .pm Datei, die Code bereitstellt. Das können keine Pakete, ein einzelnes Paket oder mehr als ein Paket sein. Ein Modul kümmert sich nicht wirklich darum, was darin enthalten ist. Es kann sich also um Code handeln, der sich selbst in denselben Namespace, eine traditionellere Unterroutine in einer Bibliothek einfügt, oder Perls Idee einer Klasse definiert.
Ein Paket, auch bekannt als Namespace, enthält seine eigenen Variablen und Subroutinen. Es ist eine Möglichkeit, verschiedene Teile Ihres Programms zu trennen. Sie das Paket erstellen und setzen Sie Ihren Code ein:
package SomePackage;
sub some_subroutine { ... } # really SomePackage::some_subroutine
Sie das Modul laden Zugriff auf das Paket zu erhalten:
use SomePackage; # read and compile the module file
SomePackage::some_subroutine(...);
Ein Perl-Klasse ist ein Paket und die dazugehörige Verhalten. Die Methoden in einer Klasse sind nur ganz normale Subroutinen, obwohl, wenn wir die Subroutinen als Methoden behandeln, der erste Parameter ist die Sache (ein Paketname oder das Objekt, das auch als referent bekannt), das Verfahren genannt:
package SomeClass;
sub class_method { my($class, @args) = @_; ... }
sub instance_method { my($self, @args) = @_; ... }
Seit die Klasse ist nur ein Paket wie jedes andere Paket, und wahrscheinlich lebt in einem Modul, greifen Sie es auf die gleiche Weise mit use
:
use SomeClass;
my $i = SomeClass->class_method(...);
die OO Pfeil Syntax hat einige spezielle Sachen die some_method
Unterroutine wissen zu lassen, dass es als eine Methode aufgerufen werden. Perl setzt den Referenten (das SomeClass
in diesem Fall) als das erste Argument. Wenn Perl die OO-Syntax verwendet, kann Perl außerdem seine Vererbungsfunktionen verwenden.
Methoden aufgerufen, mit ‚->‘ erhalten die referent als ersten Parameter der Methode, so diesen Aufruf:
SomeClass->new('world');
ist syntaktisch das, wenn man es mit dem Klassennamen als ersten Parameter genannt hatte:
SomeClass::new('SomeClass' ,'world'); # no inheritance this way
Das funktioniert für Objekte auch gleich. Wenn ein Objekt der referent ist:
my $i = SomeClass->new();
$i->bar('world');
das Objekt ist der erste Parameter als Methode:
SomeClass::bar($i, 'world');
Das ist eine ziemlich umständliche Art zu sagen, dass Perl <6 keine Klassen hat ;-) – innaM
Obwohl, das sagte, ich mag * dieses Verhalten irgendwie *. Hauptsächlich von PHP kurzgeschlossen, um diese Art des Denkens zu bekommen, ich meine, es hat keine Namespace-Unterstützung (und wird es auch nie haben (* legt die Finger in die Ohren *)). –
Pakete sind keine Bereiche. Sie sind lexikalisch begrenzt, definieren jedoch keinen Gültigkeitsbereich. –
Perl keine Klassen haben. Es hat Namespaces, die Sie mit package
ändern. Die vollständigen Einzelheiten zu Perl OOP finden Sie unter Intermediate Perl oder Objektorientierte Perl. Sie können auch die Dokumentation perltoot und perlboot sehen. Kurz gesagt, Perl täuscht, was die Leute von "echten" Klassen erwarten, mit Paketen, normalen Subroutinen und Referenzen.
Ein Modul ist ein verteilbarer Code, der in einer Datei enthalten ist. Siehe perlmod.
sage ich mehr darüber in meinem Beitrag für The Effective Perler, Find a module's release managers. Ich komme nicht in das OO-Zeug, aber ich spreche über die anderen Begriffe rund um "Modul".
- 1. Was ist der Unterschied zwischen "Paket" und "Modul" in Frege?
- 2. In Perl, was ist der Unterschied zwischen einer .pm (Perl-Modul) und .pl (Perl-Skript) -Datei?
- 3. Unterschied zwischen Modul und Paket Ocaml
- 4. Was ist der Unterschied zwischen "||" und "oder" in Perl?
- 5. Was ist der Unterschied zwischen grep und map in Perl?
- 6. Was ist der Unterschied zwischen 'for' und 'foreach' in Perl?
- 7. Was ist der Unterschied zwischen aufgeblähter Klasse und markierter Klasse?
- 8. Perl Tkx, Was ist der Unterschied zwischen "button" und "ttk__button"?
- 9. Was ist der Unterschied zwischen Perl-Modulen Autodie und Fatal?
- 10. Was ist der Unterschied zwischen Modul, Paket und Bibliothek in Haskell?
- 11. Was ist der Unterschied zwischen einer Schließung und einem Modul?
- 12. Was ist der Unterschied zwischen NodeJS http und https-Modul?
- 13. Unterschied zwischen einer Klasse und einem Modul
- 14. Was ist der Unterschied zwischen einem Objekt und einer Klasse in Perl?
- 15. Unterschied zwischen $ @ und $! in Perl
- 16. Unterschied zwischen einem Modul und einem Paket in Node?
- 17. Was ist der Unterschied zwischen render() der DjangoTemplates Klasse und render() Methode im django.shortcuts Modul?
- 18. Was ist der Unterschied zwischen URI und Uri Klasse
- 19. Was ist der Unterschied zwischen URL-Verbindung und Socket-Klasse?
- 20. Was ist der Unterschied zwischen Struktur und Klasse
- 21. Was ist der Unterschied zwischen -keep Klasse und -dontwarn
- 22. Javascript: Was ist der Unterschied zwischen Funktion und Klasse
- 23. Was ist der Unterschied zwischen Syncano Klasse und SyncanoDashboard?
- 24. Was ist der Unterschied zwischen `==` und `ist`?
- 25. Was ist der Unterschied zwischen Entity und Klasse?
- 26. Was ist der Unterschied zwischen EntityReference und CrmEntityReference Klasse
- 27. Was ist der Unterschied zwischen Enum-Struktur und Enum-Klasse?
- 28. Was ist der Unterschied zwischen Verilog! und ~?
- 29. Was ist ein Unterschied zwischen dart: js und js Paket?
- 30. Was ist der Unterschied zwischen sendmail via CGI vs. Perl?
Bevor Sie diese Art von Fragen stellen, lesen Sie zuerst die Perl-Dokumentation. Wenn Sie nicht verstehen, was Sie gerade lesen, stellen Sie Fragen dazu. –
Was macht dich so sicher, dass er nicht RTFM hatte? – spoulson
@spoulson: Schau dir seine Frage Geschichte an. Dies ist keine einmalige Sache. –