¿Cuál es la diferencia entre paquete, módulo y clase en Perl orientado a objetos?¿Cuál es la diferencia entre paquete, módulo y clase en Perl orientado a objetos?
Respuesta
Los módulos son un solo archivo, un archivo .pm que proporciona el código. Eso podría no ser paquetes, un solo paquete o más de un paquete. A un módulo realmente no le importa lo que contiene, por lo que puede ser un código que se inserte en el mismo espacio de nombres, un conjunto más tradicional de subrutinas en una biblioteca o definir la idea de una clase de Perl.
Un paquete, también conocido como espacio de nombres, contiene sus propias variables y subrutinas. Es una forma de segregar diferentes partes de tu programa. Crear el paquete y poner su código en él:
package SomePackage;
sub some_subroutine { ... } # really SomePackage::some_subroutine
Se carga el módulo para obtener acceso al paquete:
use SomePackage; # read and compile the module file
SomePackage::some_subroutine(...);
clase A Perl es un paquete y su comportamiento asociado. Los métodos en una clase son subrutinas simplemente normal, aunque cuando tratamos las subrutinas como métodos, el primer parámetro es la cosa (un nombre de paquete u objeto, también conocido como el referente) que llama al método:
package SomeClass;
sub class_method { my($class, @args) = @_; ... }
sub instance_method { my($self, @args) = @_; ... }
Desde la clase es sólo un paquete como cualquier otro paquete, y probablemente vive en un módulo, se accede a él de la misma manera con use
:
use SomeClass;
my $i = SomeClass->class_method(...);
la sintaxis OO flecha hace algunas cosas especiales para permitir que el some_method
subrutina saber que es siendo llamado como un método. Perl pone el referente (el SomeClass
en este caso) como primer argumento. Además, al usar la sintaxis de OO, Perl sabe usar sus características de herencia.
Métodos llamadas con '->' conseguir el referente como el primer parámetro del método, por lo que esta llamada:
SomeClass->new('world');
es sintácticamente el si hubiera llamado con el nombre de la clase como primer parámetro:
SomeClass::new('SomeClass' ,'world'); # no inheritance this way
Eso funciona igual para los objetos también. Cuando un objeto es el referente:
my $i = SomeClass->new();
$i->bar('world');
el objeto es el primer parámetro como el método:
SomeClass::bar($i, 'world');
Esa es una forma bastante indirecta de decir que Perl <6 no tiene clases ;-) – innaM
Aunque, dicho esto, me gusta * ese comportamiento. Sin embargo, PHP se encargó principalmente de obtener esa forma de pensar, es decir, no tiene, (y nunca tendrá, (* pone los dedos en los oídos *)) compatibilidad con el espacio de nombres. –
Los paquetes no son alcances. Tienen un alcance léxico, pero no definen un alcance. –
Perl no tiene clases. Tiene espacios de nombres que cambia con package
. Para obtener los detalles completos de Perl OOP, consulte Intermedio Perl o Perl Orientado a objetos. También puede ver la documentación perltoot y perlboot. En resumen, Perl simula lo que la gente espera que sean las clases "reales" con paquetes, subrutinas normales y referencias.
Un módulo es un fragmento de código distribuible contenido en un archivo. Ver perlmod.
decir más sobre esto en mi post para The Effective Perler, Find a module's release managers. No entiendo las cosas de OO, pero hablo sobre los otros términos en torno al "módulo".
- 1. ¿Cuál es la diferencia entre un lenguaje orientado a componentes y orientado a objetos?
- 2. ¿Cuál es la diferencia entre módulo y distribución en CPAN?
- 3. ¿Cuál es la diferencia entre un programa de procedimiento y un programa orientado a objetos?
- 4. ¿Cuál es la diferencia entre @ y @@ en un módulo?
- 5. ¿Cuál es la diferencia entre referencias y objetos en Java?
- 6. ¿Cuál es la diferencia entre 'eq' y '= ~' en Perl?
- 7. ¿Cuál es la diferencia entre open y sysopen en Perl?
- 8. ¿Cuál es la diferencia entre BAREWORD y * BAREWORD en Perl?
- 9. ¿Cuál es la diferencia entre grep y map en Perl?
- 10. ¿Cuál es la diferencia entre los modelos de aplicación centrados en datos y orientados a objetos?
- 11. En Perl, ¿cuál es la diferencia entre usar y requerir para cargar un módulo?
- 12. ¿Cuál es la diferencia entre Perl modules autodie y Fatal?
- 13. En Perl, ¿cuál es la diferencia entre un archivo .pm (módulo Perl) y un archivo .pl (script Perl)?
- 14. Sintaxis del constructor Perl orientado a objetos
- 15. ¿Cuál es la diferencia entre "perl test.pl" y "./test.pl"?
- 16. ¿Cuál es la diferencia entre "incluir módulo" y "extender módulo" en Ruby?
- 17. Diferencia entre una clase y un módulo
- 18. ¿Cuál es la diferencia entre un objeto y una clase en Perl?
- 19. Cuál es la diferencia entre instalación de paquete --deployment y paquete de paquete
- 20. ¿Cuál es la diferencia entre $ a y $$ a en php?
- 21. ¿cuál es la diferencia entre una clase y una biblioteca?
- 22. ¿Cuál es la diferencia entre incluir y extender en Ruby?
- 23. ¿Cuál es la diferencia entre importar y extender una clase?
- 24. Perl - Paquete Temas/Módulo
- 25. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 26. ¿Cuál es la diferencia entre include y require en Ruby?
- 27. ¿Cuál es la diferencia entre padre y base en Perl 5?
- 28. ¿Cuál es la diferencia entre preferredLocalization y preferredLanguage?
- 29. ¿Cuál es la diferencia entre ".equals" y "=="?
- 30. Cuál es la diferencia entre $ y jQuery
Antes de hacer este tipo de preguntas, intente leer primero la documentación de Perl. Si no comprende lo que está leyendo, haga preguntas al respecto. –
¿Qué te hace estar tan seguro de que no tenía RTFM? – spoulson
@spoulson: mira su historial de preguntas. Esto no es una excepción. –