Hallo!
Also, ich habe ja neulich dieses Teil zum Visualisieren von Bäumen geschrieben. Das kann Tree::Simple-Objekte visualisieren.
Das ganze ist bislang so aufgezogen:
Tk::SyntayTreeGraph erbt von Tk::Canvas und Tk::Derived
Tk::SyntayTreeGraph arbeitet mit einer modifizierten Baum-Klasse Tk::SyntayTreeGraph::Node.
Tk::SyntayTreeGraph::Node erbt von Tree::Simple.
Nun habe ich für ein anderes Projekt eine ebenfalls von Tree::Simple erbende Klasse Tree::Simple::Extended (habe mir schon überlegt, dass in Tree::Simple::Complicated umzubenennen, um den Tree::Simple-Gedanken den Garaus zu machen).
Jedenfalls will ich jetzt auch diese Bäume visualisieren. Der Kniff ist, dass im gegensatz zu Tree::Simple in Tree::Simple::Extended zusätzliche Informationen in den Knoten gespeichert werden. Diese Felder sollen in den Methoden zum Zeichnen der Knoten auf der Canvas auch dargestellt werden.
Also dachte ich mir, überschreibe ich einfach Tk::SyntayTreeGraph::Node so, dass es nicht mehr von Tree::Simple erbt, sondern von Tree::Simple::Extended, und passe die Methoden so an, dass alles gemalt wird, was ich will.
Tk::SyntayTreeGraph::Node kann auch ohne weiteres passend überschrieben werden.
Nur, wenn ich sowas mache wie:
package Tk::SyntayTreeGraph::Node;
use strict;
use warnings;
use base qw/Tree::Simple::Extended/;
sub draw_node {
# ...
} # /draw_node
1;
dann habe zwar von Tree::Simple::Extended geerbt, $self->isa('Tree::Simple::Extended') gibt auch 1 aus, aber ich kann nciht auf die Tree::Simple::Extended-eigenen Methoden zugreifen (eine davon nennt sich followpos).
$self->can('followpos') gibt undef zurück.
Was mache ich falsch?
Gibt es eventuell einen viel einfacherern, eigentlich offensichtlicheren Weg, das Problem zu lösen? Gesetz dem Fall, ich bastle noch weitere Seminararbeiten über Bäume, dann kommen bestimmt noch mehr andere, von Tree::Simple abgeleitete Baum-Modelle, die alle Visualisiert werden wollen.
Grüße, pktm