On Sun, 7 Apr 2002, F�lix Hauri wrote:
> > D'ailleurs ceux-ci sont �galement assez bien fournis au niveau des
> > resources de plus il sont nettements mieux structur�s et un poil plus
> > stricts (j'exag�re mais c'est un peut comme comparer du C avec de
> > l'ADA ou avec du Pascal).
> Voui, alors l�, tes propos n'engagent que toi!
> Mais tu l'as dis au d�but: l'�gout, lait cool heure;)
Je ne dirai rien, je donnerai un exemple acad�mique, simplifi� et non
comment�, pour seconder ce que dit F�lix, afin de montrer que Perl propose
des paradigmes assez int�ressants:
use strict;
use Croak;
package Rectangle;
sub new {
my ($class, $length, $width) = @_;
return bless { 'length' => $length,
'width' => $width
},
$class;
}
sub DESTROY {
my $self = shift;
}
sub set_length {
my ($self, $length) = @_;
$self->{'length'} = $length;
}
sub set_width {
my ($self, $width) = @_;
$self->{'width'} = $width;
}
sub get_length {
my $self = shift;
return $self->{'length'};
}
sub get_width {
my $self = shift;
return $self->{'width'};
}
sub get_surface {
my $self = shift;
return $self->get_width() * $self->get_length();
}
sub get_representation {
my $self = shift;
return "RECT[" . $self->get_length() . ", " . $self->get_width() . "]";
}
sub is_bigger_than {
my ($self, $other) = @_;
if ($self->get_surface() > $other->get_surface()) {
return 1;
}
else {
return 0;
}
}
package Square;
use vars qw(@ISA);
use Carp;
@ISA = qw (Rectangle);
sub new {
my ($class, $side) = @_;
my $self = Rectangle->new($side, $side);
return bless $self,
$class;
}
sub get_representation {
my $self = shift;
return "SQUARE[" . $self->get_side() . " ^2] ";
}
sub set_side {
my ($self, $side) = @_;
$self->SUPER::set_length($side);
$self->SUPER::set_width($side);
}
sub get_side {
my $self = shift;
my $side = $self->SUPER::get_length();
if ($side != $self->SUPER::get_width()) {
confess("assertion failed: side == length; !=width");
}
return $side;
}
package main;
use Carp;
print "Starting program.\n";
my $rectangle_1 = Rectangle->new(3, 4);
if (defined($rectangle_1)) {
my $square_1 = Square->new(5);
if (defined($square_1)) {
if ($square_1->is_bigger_than($rectangle_1)) {
print "This square instance is bigger than this rectangle.\n";
}
print "Deleting object: ", $rectangle_1, ".\n";
undef $rectangle_1;
print "Deleting object: ", $square_1, ".\n";
undef $square_1;
}
else {
croak "Couldn't allocate Square instance.\n";
}
}
else {
croak "Couldn't allocate Rectangle instance.\n";
}
print "Ending program.\n";
exit(0);
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se d�sabonner aussi.