[Dresden-pm] Objektorientierung unter Perl

Torsten Knorr create-soft at freenet.de
Fri Feb 20 19:46:00 GMT 2009


On Thu, 19 Feb 2009, at 17:04:09, Thomas Rittsche <thomas.rittsche at gmail.com> wrote:

>Hallo Mongers,
>hatten heute einen Dozenten hier, der uns in Sachen Objektorientiertes
>Perl fit machen sollte. Leider ist der schon an einem der ersten
>Beispiele gescheitert. Die Aufgabe war, eine Klasse "Auto" anzulegen,
>die von einer Klasse "Motor" erbt bzw. abgeleitet ist. Irgendwie ist
>da wohl was schief gegangen, am Ende war die Verwirrung perfekt,
>keiner wusste mehr, wann wo und warum zu blessen ist... ;)
>

 Vielleicht können wir dieses schöne Thema noch etwas fortführen?
 Hier mal ein bissel Code.

#------------------------------------------------
#/usr/bin/perl -w
#*** file: vehicle.pl ***#
#-------------------------------------------------
 use strict;
 use Car 0.01;
#-------------------------------------------------
 my $car = Car->new(
 	color		=> 'green',
 	size		=> 'big',
 	speed		=> 200,
 	running		=> 0,
 	oillevel		=> 'ok',
 	type		=> 'TDI'
 	);
 $car->Start();
 print("$_ : $car->{$_}\n") for(keys(%$car));
#-------------------------------------------------
#*** file: Car.pm ***#
#-------------------------------------------------
 package Car;
 use Motor 0.01;
 @Car::ISA = qw(Motor);
 $Car::VERSION = '0.01';
#-------------------------------------------------
 sub new
 	{
 	my ($class, %args) = @_;
 	my $self = $class->SUPER::new(%args);
 	$self->{_ . $_} = $_ for(keys(%args));
 	return $self;
 	}
#-------------------------------------------------
 sub DESTROY
 	{
 	my ($self) = @_;
 	return if($self->{DESTROY}{__PACKAGE__}++);
 	print("Car::DESTROY called\n");
 	$self->Motor::DESTROY();
 	}
#-------------------------------------------------
 1;
#-------------------------------------------------
#*** file: Motor.pm ***#
 package Motor;
 $Motor::VERSION = '0.01';
#-------------------------------------------------
 sub new
 	{
 	my ($class, %args) = @_;
 	bless(
 		{
 _running => defined($args{running}) ? delete($args{running}) : 'status unknown' ,
 _oillevel => defined($args{oillevel}) ? delete($args{oillevel}) : 'oillevel unknown',
 _type => defined($args{type}) ? delete($args{type}) : 'type unknown'
 		}
 		, ref($class) || $class
 		);
 	}
#-------------------------------------------------
 sub Status
 	{
 	my ($self, %args) = @_;
 	if(defined($args{running}))
 		{
 		$self->{_running} = $args{running};
 		}
 	return $self->{_running};
 	}
#-------------------------------------------------
 sub Start
 	{
 	my ($self) = @_;
 	$self->{_running} = 1;
 	print("Gestartet\n");
 	}
#-------------------------------------------------
 sub DESTROY
 	{
 	my ($self) = @_;
 	print("Motor::DESTROY called\n");
 	}
#-------------------------------------------------
 1;
#-------------------------------------------------

 G. Torsten
 


More information about the london.pm mailing list