Thread Klassen-Attribut auch in der Base-Klassen nutzen
(5 answers)
Opened by Hagen at 2021-04-14 23:15
Ich weiß nicht, ob ich Deinen Ansatz richtig verstehe...
Momentan würde ich an folgendes denken:
Z.B. Beispiel: 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 #! /usr/bin/env perl use strict; use warnings; use 5.020; package DB::Base { sub foo { my $self = shift; printf "%s: foo\n", ref($self); } sub bar { my $self = shift; printf "%s: bar\n", ref($self); } sub show_table { my $self = shift; printf "%s: %s\n", ref($self), $self->{table}; } }; package DB::Service { use base "DB::Base"; my $table = "service"; # DB::Service specific constructor sub new { my $class = shift; my %attr = @_; my $self = { table => $table, }; bless $self, ref($class)||$class; return $self; } }; package DB::Customer { use base "DB::Base"; my $table = "customer"; # DB::Customer specific constructor sub new { my $class = shift; my %attr = @_; my $self = { table => $table, }; bless $self, ref($class)||$class; return $self; } }; package main; my $customer = DB::Customer->new(); $customer->show_table(); my $service = DB::Service->new(); $service->show_table(); __END__; Alternativ könnte man auch den Konstruktor in die DB::Base Klasse verlagern und in den Klassen DB::Service und DB::Customer nur die jeweils relevanten Methoden definieren und die gewünschte Tabelle bei der Objekt-Konstruktion übergeben. 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 #! /usr/bin/env perl use strict; use warnings; use 5.020; package DB::Base { sub new { my $class = shift; my $self = { table => shift, }; bless $self, ref($class)||$class; return $self; } # general methods sub foo { my $self = shift; printf "%s: foo\n", ref($self); } sub bar { my $self = shift; printf "%s: bar\n", ref($self); } sub show_table { my $self = shift; printf "%s: %s\n", ref($self), $self->{table}; } }; package DB::Service { use base "DB::Base"; # define methods for service actions }; package DB::Customer { use base "DB::Base"; # define methods for customer actions }; package main; # provide table information as argument my $customer = DB::Customer->new('customer'); $customer->show_table(); # provide table information as argument my $service = DB::Service->new('service'); $service->show_table(); __END__; Details müssten noch weiter ausgearbeitet werden (z.B. "echte" Tabelle statt Skalar). Last edited: 2021-04-15 01:53:30 +0200 (CEST) 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! |