Schrift
[thread]12935[/thread]

OOP: Auf Objekt einer Klasse von einer anderen Klasse aus zugreifen

Tags: Ähnliche Threads

Leser: 2


<< >> 4 Einträge, 1 Seite
trequ
 2008-12-26 12:37
#117436 #117436
User since
2008-07-30
7 Artikel
BenutzerIn
[default_avatar]
Hallo.

Ich arbeite mich gerade wieder in Perl ein und möchte nun auch einige Sachen welche ich früher geschrieben habe ein wenig umschreiben.

Früher habe ich recht viel unleserlichen Code geschrieben, den ich jetzt in Klassen und Funktionen auslagern möchte.

Ich habe jetzt ein Script, welches im Grunde nicht viel macht:
- öffne ein Logfile
- Öffne ein Netzwerk-Socket
- Sende und Empfange Netzwerk-Pakete
- Schließe das Socket
- Schließe das Logfile

Das Script bestand vorher aus 1 großen Datei und ich hatte nicht wirklich sinnvollen Quelltext.

Ich möchte jezt 2 Klassen schreiben, was bis jetzt auch funktioniert: Die Klasse Logfile und die Klasse Communication.

Der Code wird dadurch recht überblicklich:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
use LOGFILE;
use Communication;

$log = new LOGFILE (...);
$com = new COMMUNICATON (...);

$log->open(...);
$log->write(...);
$com->do_something();
$log->close(...);

So weit ok.
Aber wie kann ich jetzt $log in der Funktion Communication -> do_something nutzbar machen, dass ich auch in dieser Klassen-Sub einfach wieder $log->write(...) nutzen kann?

Danke,
Daniel
nepos
 2008-12-26 13:17
#117438 #117438
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Einfach das Log-Objekt als Parameter mit übergeben?
Gast Gast
 2008-12-26 13:25
#117439 #117439
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;
use Logfile;
use Communication;

my $log = new Logfile (...);
my $com = new Communication (...);

$log->open(...);
$log->write(...) if($log->is_open());
$com->do_something();
$log->write($com->get_status()) if($log->is_open());
$log->close(...);


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
use strict;
use warnings;
use Logfile;
use Communication;

my $log = new Logfile (...);
my $com = new Communication ($log, ...);
$log->open(...);
$log->write(...) if($log->is_open());

$com->do_something();

$log->close(...);

....
package Communication;

sub new
{
  my $class=shift;
  my $log=shift;
  ....
  $self->{LOG}=$log;
  ....
  bless($self, $class);
  return $self;
}

sub do_something
{
 my $self=shift;
  ....
  my $log=$self->{LOG};
  $log->write(...) if($log && $log->is_open());
  ....
}

....


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
use Logfile;
use Communication;

$log = new Logfile (...);
$log->open(...);

my $func;
$func=sub{
  $data=shift;
  $log->write($data) if($log->is_open());
}

$com = new Communication ($func, ...);

$log->open(...);
$log->write(...) if($log->is_open());

$com->do_something();

$log->close(...);

....
package Communication;

sub new
{
  my $class=shift;
  my $log=shift;
  $log=sub{} if(!($log and ref($log) eq 'CODE'));
  ....
  $self->{LOG}=$log;
  ....
  bless($self, $class);
  return $self;
}

sub do_something
{
 my $self=shift;
  ....
  $self->{LOG}->(...);
  ....
}
....
trequ
 2008-12-26 20:18
#117451 #117451
User since
2008-07-30
7 Artikel
BenutzerIn
[default_avatar]
Hat funktioniert, danke dir!
<< >> 4 Einträge, 1 Seite



View all threads created 2008-12-26 12:37.