Schrift
[thread]8928[/thread]

Perl Objekt orientierte Programmierung: objekte suchen und anzeigen



<< >> 5 Einträge, 1 Seite
Gast Gast
 2007-04-18 15:41
#76026 #76026
hallo @lle!
ich habe eine frage bezüglich Objektorientierte programmierung in Perl:
ich möchte eine Package erstellen, die alle neue objekte und unterobjekte annimmt und speichern, so dass ich später diese objekte finden kann. Dafür habe ich folgende Code geschrieben.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package test;
use strict;
sub new{
my $class = shift;
my $self = {};
$self->{NAME}=undef;
$self->{PROPERTIES}=[];
bless($self, $class);
return $self;
}
sub name {
my $self = shift;
if (@_) {$self ->{NAME}=shift};
return $self->{NAME};
}
sub properties {
my $self = shift;
if (@_) {@{$self->{PROPETIES}} = @_}
return @{$self->{PROPERTIES}};
}
1;

Als Beispiel, stelle ich mich vor(in haupt programm)
use test;
$ob = test ->new;
$ob->name("Jason");
$ob->Properties("rte","fgh");
....
ob1 = test-> new;
...
wie geht denn es, wenn ich ein Objekt(zb Jason) finden will?(eine sub routine soll geschrieben werden);
wenn das Objekt gefunden ist, wie kann ich den Properties anzeigen lassen?
jedes neue gespeicherte Objekte sollen numeriert werden. wie geht es ?
Vielen Danke in vorraus
renee
 2007-04-18 15:58
#76027 #76027
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich verstehe zwar nicht so ganz, worauf Du hinaus willst, aber vielleicht hilft Dir das:

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
package TestObjects;

use strict;
use warnings;

my @objects;

sub new{
    my ($class) = @_;
    my $self = {};
    bless $self,$class;
    push @objects,$self;
    return $self;
}

sub name{
    my ($self,$name) = @_;
    $self->{NAME} = $name if defined $name;
    return $self->{NAME};
}

sub properties{
    my ($self,@properties) = @_;
    $self->{PROPERTIES} = [@properties] if @properties;
    my @array;
    @array = @{$self->{PROPERTIES}} if defined $self->{PROPERTIES};
    return @array;
}

sub find{
    my ($class,$name) = @_;
    
    for my $obj( @objects ){
        if( $obj->name eq $name ){
            print $obj->name," -> ",join("..",$obj->properties),"\n";
        }
    }
}

1;


Skript:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;
use warnings;
use TestObjects;

my $obj1 = TestObjects->new();
$obj1->name( 'Jason' );
$obj1->properties( 'a','b' );

my $obj2 = TestObjects->new();
$obj2->name( 'Hugo' );

TestObjects->find( 'Jason' );
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
blaise4714
 2007-04-18 19:32
#76028 #76028
User since
2007-04-18
22 Artikel
BenutzerIn
[Homepage] [default_avatar]
hallo Renee!
vielen Dank für deine Antwort.
Wie kann ich jetzt für @lle neue eingefügte Objekte eine Nummer übergeben?
danke
renee
 2007-04-18 20:34
#76029 #76029
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was für eine Nummer? Was soll die machen?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
PerlProfi
 2007-04-18 21:09
#76030 #76030
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Wenn du zum Beispiel eine id als Objektattribut haben möchtest, kannst du das mit einem weiteren Klassenattribut realisieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package TestObjects;
...
my @objects;
my $id;

sub new{
my ($class) = @_;
my $self = {id=>++$id};
bless $self,$class;
push @objects,$self;
return $self;
}

sub first { 1 }
sub last { $id }
...
1;


Oder mit dem Array @objects:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package TestObjects;
...
my @objects;

sub new{
my ($class) = @_;
my $self = {id=>$#objects+1};
bless $self,$class;
push @objects,$self;
return $self;
}

sub first { 0 }
sub last { $#objects }
...
1;
<< >> 5 Einträge, 1 Seite



View all threads created 2007-04-18 15:41.