Existen muchas "una clase es un plano, un objeto es algo construido a partir de ese plano", pero como solicitó un ejemplo específico usando Moose y Perl, pensé en proporcionar uno.
En este ejemplo siguiente, vamos a tener una clase llamada 'Hacker'.La clase (como un plano) describe lo que los hackers son (sus atributos) y lo que pueden hacer (sus métodos):
package Hacker; # Perl 5 spells 'class' as 'package'
use Moose; # Also enables strict and warnings;
# Attributes in Moose are declared with 'has'. So a hacker
# 'has' a given_name, a surname, a login name (which they can't change)
# and a list of languages they know.
has 'given_name' => (is => 'rw', isa => 'Str');
has 'surname' => (is => 'rw', isa => 'Str');
has 'login' => (is => 'ro', isa => 'Str');
has 'languages' => (is => 'rw', isa => 'ArrayRef[Str]');
# Methods are what a hacker can *do*, and are declared in basic Moose
# with subroutine declarations.
# As a simple method, hackers can return their full name when asked.
sub full_name {
my ($self) = @_; # $self is my specific hacker.
# Attributes in Moose are automatically given 'accessor' methods, so
# it's easy to query what they are for a specific ($self) hacker.
return join(" ", $self->given_name, $self->surname);
}
# Hackers can also say hello.
sub say_hello {
my ($self) = @_;
print "Hello, my name is ", $self->full_name, "\n";
return;
}
# Hackers can say which languages they like best.
sub praise_languages {
my ($self) = @_;
my $languages = $self->languages;
print "I enjoy programming in: @$languages\n";
return;
}
1; # Perl likes files to end in a true value for historical reasons.
Ahora que tenemos nuestra clase Hacker , podemos empezar a hacer Hacker objetos:
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
use Hacker; # Assuming the above is in Hacker.pm
# $pjf is a Hacker object
my $pjf = Hacker->new(
given_name => "Paul",
surname => "Fenwick",
login => "pjf",
languages => [ qw(Perl C JavaScript) ],
);
# So is $jarich
my $jarich = Hacker->new(
given_name => "Jacinta",
surname => "Richardson",
login => "jarich",
languages => [ qw(Perl C Haskell) ],
);
# $pjf can introduce themselves.
$pjf->say_hello;
$pjf->praise_languages;
print "\n----\n\n";
# So can $jarich
$jarich->say_hello;
$jarich->praise_languages;
Esto se traduce en la siguiente salida:
Hello, my name is Paul Fenwick
I enjoy programming in: Perl C JavaScript
----
Hello, my name is Jacinta Richardson
I enjoy programming in: Perl C Haskell
Si quiero me ca Tengo tantos objetos Hacker como me gusta, pero todavía hay una sola clase de Hacker que describe cómo funcionan todos estos.
Todo lo mejor,
Paul
Guau, SUPER respuesta ... resumen conciso al principio, luego una muestra del mundo real y tutorial en alce! ¡GRACIAS! – lexu
Ver ahora, pensé que era demasiado prolijo, pero oye, eso es solo yo. Buena respuesta sin embargo. :) – cletus