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.

Répondre à