Thread Wie programmiere ich OOP & Moose? (28 answers)
Opened by hlubenow at 2016-12-13 09:58

Linuxer
 2016-12-12 19:41
#185764 #185764
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Doch, das geht auch im normalen Perl. ->state ist ein ganz normaler Methoden-Aufruf im "normalen" objekt-orientierten Perl.

Es wurde ein Attribut 'state' definiert. Mit ->state wird nun die Methode aufgerufen, die den Wert des Attributs ausliest und zurückliefert. Hier ist es nun so, dass diese Methode genauso heisst wie das Attribut selbst. Andere setzen auch "get_*"- und "set_*"-Methoden ein; dann wäre es ->get_state zum Abfragen und ->set_state( 'new value' ) zum neu Setzen.

Beispiel für ohne Moose:
more (7.5kb):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use strict;
use warnings;
use 5.010;

use Data::Dumper;

package foo;

sub new {
  my $class = shift;
  my $self  = {
    state => 'uninitialized',
  };

  bless $self, ref($class)||$class;

  return $self;
}

sub state {
  my $self = shift;
 
  return $self->{state};
}

sub set_state {
  my $self = shift;
  my $value = shift;

  $self->{state} = $value;
}

package main;

# make new object
my $foo = foo->new;

# show initial state
say $foo->state;

# change state
$foo->set_state('other value');

# show new state
say $foo->state;

# see what is $foo
say "This is \$foo:\n",
  Data::Dumper->new( [ $foo ], [ '*foo' ] )->Dump;



Ein Objekt in Perl ist eine "blessed reference"; in meinem Beispiel enthält $foo eine Hash-Referenz, die mit "foo" eingesegnet wurde. Methodenaufrufe erhalten als erstes Argument immer entweder die Klasse (z.B. bei CGI->new()) oder das Objekt (z.B. bei $object->new) als erstes Argument.

$self enthält also in aller Regel das Objekt, mit dem innerhalb der Methode gearbeitet werden soll.


Am besten mal in die Tutorials zur Perl-OO reinschauen:

http://perldoc.perl.org/perlobj.html
http://perldoc.perl.org/perlootut.html
Last edited: 2016-12-12 19:43:05 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Wie programmiere ich OOP & Moose?