Schrift
[thread]7896[/thread]

keine Klassen in perl?! *heul*

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Noisebreath
 2006-04-14 17:36
#64982 #64982
User since
2006-04-14
72 Artikel
BenutzerIn
[default_avatar]
Perl-Klassen
Es gibt keine spezielle Syntax für Klassen in Perl. Ein Package kann als Klasse gelten, falls sie Subroutinen zur Verfügung stellt, welche Methoden sind. Ein solches Package kann Methoden von anderen Klassen ableiten, indem sie die Namen dieser Klassen in dem @ISA-Array angibt.

Code: (dl )
1
2
3
4
5
6
7
package subclass;
@ISA = (baseclass);
sub new {
   my $self = {};
   bless $self;
   return $self;
}


Ich gehe somit davon aus dass es in Perl wohl keine herkömliche Klassenart gibt. Meine Frage an euch:
Kann ich eine class irgendwie simulieren? ich würde gerne am ende ein arry haben in dem ich meine classobjekte speichern kann die attribute haben wie zb. child, parent, name etc
unter anderen programmiersprachen wie php ist das kein problem zb :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class tree_node
{
 var $parent;
 var $child;
 var $module;
 var $name;
 var $titel;
 
 
function tree_node($a=NULL, $b=NULL, $c=NULL, $d=NULL,$e=NULL){
$this->parent=$a;
$this->child=$b;
$this->module=$c;
$this->name=$d;
$this->titel=$e;
}
}


Also her mit dem Perlwissen bitte :)

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1145030287-->
Relais
 2006-04-14 17:56
#64983 #64983
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wohin guckst denn Du?

perlobj
perltoot
perltooc
perlboot
perlbot

Edit: Oder lies Damians Buch Objektorientiert Programmieren mit Perl\n\n

<!--EDIT|Relais|1145023067-->
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
Noisebreath
 2006-04-14 19:00
#64984 #64984
User since
2006-04-14
72 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package document;

use strict;


sub new {
my ( $class ) = @_;
my $self = {
parent => undef,
child  => undef,
doc_kind     => undef,
name  => undef
spalteninfo  => undef
};
bless( $self, $class );
return $self;
}

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


das ist zb so ein package. hab jetzt ein wenig rumgelesen und komme der sache näher. verstehe aber ehrlich gesagt nicht so ganz sinn und zweck der sub parent. wenn ich ein neues objekt dieser klasse erstelle (my $document = new document;)
und dann die einzelnen attribute anspreche mit (ich weiss nicht ob das syntaktisch richtig ist da ich noch nicht nachgeschaut habe ) $document->parent("Vater"); fülle ich doch die attribute auch so. ich verstehe nicht so ganz was die sub parent macht.wozu brauch ich die sub noch?

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1145030349-->
Ronnie
 2006-04-14 19:26
#64985 #64985
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=Noisebreath,14.04.2006, 17:00]verstehe nicht so ganz was die sub parent macht.wozu brauch ich die sub noch?[/quote]
Die Methode ist gleichzeitig setter und getter. Mit Parameter wird das Instanz-Attribut neu gesetzt, ansonsten nur ihr Inhalt zurückgegeben.
lichtkind
 2006-04-14 19:30
#64986 #64986
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
ja das ist ein package aber du siehst das da bless drin ist also objekte erstellt.
die sub parent ist ein kombinierter getter / setter mit dem man mutterobjekt in der hierarchie setzen und abfragen kann. kannst ja mit was einfachererem anfangen.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
lichtkind
 2006-04-14 19:44
#64987 #64987
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
übrigens mit bemerkungen wie heul sinken deine chancen eher hier eine sinnvolle antwort zu bekommen
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Strat
 2006-04-15 12:19
#64988 #64988
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
sub parent {
my ( $self, $parent ) = @_;
$self->{parent} = $parent if defined($parent);
return $self->{parent};
}

hat das problem, dass man parent nicht auf undef setzen kann. mit folgender syntax kann man sogar das erreichen.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub parent {
my ( $self, @parent ) = @_;
$self->{parent} = $parent[0] if scalar(@parent);
return $self->{parent};
}
# oder
sub parent2 {
my $self = shift @_;
my ($parent) = @_;
if( scalar @_ ) {
$self->{parent2} = $parent;
}
return $self->{parent2};
}

oder so aehnlich; das scalar(@list) gibt die anzahl der listenelemente zurueck, und so kann man auch undef abdecken
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2006-04-15 12:24
#64989 #64989
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn du eine abstraktere Klassensyntax willst, dann sind vielleicht die Module CPAN:Class:: wie z.B. CPAN:Class::Std für dich interessant
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
murphy
 2006-04-16 01:18
#64990 #64990
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Syntaktisch hübsch finde ich ja CPAN:Perl6::Classes. Außerdem kann man sich da gleich fit für die Zukunft machen ;-)
When C++ is your hammer, every problem looks like your thumb.
sri
 2006-04-16 07:01
#64991 #64991
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
my $foo = Foo->new;
$foo->child(...);
$foo->parent(...);


package Foo;
use Moose;
has 'parent';
has 'child';
1;


Wenn nochmal jemand Class::Std empfiehlt gibts aerger! :)\n\n

<!--EDIT|sri|1145156745-->
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2006-04-14 17:36.