Laden...

Baum von Instanzen, wie nennt Ihr das?

Erstellt von vega vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.629 Views
V
vega Themenstarter:in
11 Beiträge seit 2007
vor 16 Jahren
Baum von Instanzen, wie nennt Ihr das?

Hallo zusammen,

Ein "Baum von Instanzen", wie nennt Ihr das?

Beispiel:
Ich habe eine Klasse "Stamm", diese Klasse kann Instanzen der Klasse "Ast" erzeugen und hält diese in einer Hashtable für späteren Zugriff über den Namen.
Die Klasse "Ast" wieder kann Instanzen der Klasse "Ast" und Instanzen der Klasse "Blatt" erzeugen und hält diese in Hashtables für späteren Zugriff über den Namen.
Alle haben ihre Eigenschaften und Methoden ...

Es entsteht also ein "Baum von Instanzen", vererbt ist ja nix.
Wie nennt man dieses Ding?

Ich frage, weil ich genau dieses Teil in einer DB mit verknüpften Tabellen ablegen will.
Eine Tabelle für Stämme, eine für Äste und eine für Blätter.
Jeweils mit Eigenschaften-Spalten. Verknüpft "1-oo" über einen Index.
Na und dafür wollte ich im Internet mal nach Schnipseln suchen, aber wonach suchen? 🙂

Es zu proggen ist nicht schwer - aber wie heißt es?

dank Euch,
vega

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo vega,

Wie nennt man dieses Ding?

Baum

Wobei a) Stamm normalerweise Wurzel, b) Ast normalerweise Knoten oder innerer Knoten heißt (denn ein Ast besteht aus eine Folge von Knoten) und c) man oft nur einen Knotentyp für alle drei Arten von Knoten verwendet (Wurzel, innere Knoten und Blätter).

herbivore

V
vega Themenstarter:in
11 Beiträge seit 2007
vor 16 Jahren

danke,

also einfach nur Baum 🙂 wie passend 🙂)

Aber wie meinst Du das mit "alle gleich"?
Die Eigenschaften und Methoden eines Blattes sind doch ganz anders,
als die eines Astes.

Das eine hat eine Größe, eine Farbe, kann welk sein und fallen.
Das andere hat eine Dicke, eine Länge und vielleicht ein Spechten-Nest.

Das kann doch nicht gleich sein!?
Wie unterscheidet man dann?

Würdest Du die Serialisierung (in die Datenbank) einer solchen Klasse (Stamm, Ast und Batt)
in der jeweiligen Klasse ausprogrammieren - oder in einer übergeordneten Klasse oder in der Klasse "Stamm" (in der alle Unterobjekte bekannt sind)

vega

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo vega,

Aber wie meinst Du das mit "alle gleich"?

viele, wenn nicht sogar die meisten Bäume in der Informatik, haben für alle Knoten die gleichen Methoden und Eigenschaften, egal ob Wurzel, innerer Knoten oder Blatt. Wenn das bei dir nicht so ist, dann hast du eben einen Ausnahmefall. Solche Ausnahmefälle sind aber schwerer zu behandeln. Was z.B. wenn es nur einen Knoten in dem Baum gibt. Der wäre dann gleichzeitig Wurzel und Blatt. Dafür hast du aber keine Klasse. Auch beim Durchlaufen/Traversieren des Baums ist es einfacher, wenn alle Knoten den gleichen Typ haben. Aber wie gesagt, wenn das bei dir so sein muss, dann musst du mit diesen Nachteilen leben.

Wie unterscheidet man dann?

An der Anzahl der Vorgänger bzw. Nachfolger. Eine Wurzel hat keine Vorgänger, ein Blatt keine Nachfolger.

Würdest Du die Serialisierung (in die Datenbank) ...

Ich würde einen ==> DAL (Data Abstraction Layer) verwenden.

herbivore

V
vega Themenstarter:in
11 Beiträge seit 2007
vor 16 Jahren

ok, vielen Dank!

Mit DAL komme ich im Moment noch nicht weiter,
nicht mal Wikipedia liefer eine vernünftige Zusammenfassung oder Info.

Ich stelle es mir im Moment so vor, dass ich von meinem "Klassen-Baum" eine Klasse "Speicherbarer Baum" ableite,
die neben allen Funktionen meines Baumes (Struktur) auch das speichern in die Datenbank anbietet.

Aber ich werd's mir ansehen!
vega

1.549 Beiträge seit 2004
vor 16 Jahren

wie wäre es wenn du deiner klasse baum einfach nur die Methode Speichern giebst die dann einfach den Baum Rekursiv durchläuft?

und was die Knoten angeht kann du ja die einzelnen teile Ast, Blatt usw. von ein und der Selben Klasse erben lassen so haben sie alle die Gleichen Methoden die du nur für jeden
einzelnen typ implementieren musst

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo vega,

Mit DAL komme ich im Moment noch nicht weiter,
nicht mal Wikipedia liefer eine vernünftige Zusammenfassung oder Info.

ich hatte ja nun extra ausgeschrieben, was DAL heißt.

herbivore

V
vega Themenstarter:in
11 Beiträge seit 2007
vor 16 Jahren

Original von herbivore
ich hatte ja nun extra ausgeschrieben, was DAL heißt.

danke! 🙂 Das habe ich schon gesehen und gesucht.

Im Moment scheint für mich ein Data Abstraction Layer einfach nur eine Sammlung von Methoden (also eine zusätzliche Schicht) zu sein, die mich vor den "bösen" Datenbank-Funktionen und dem "bösen" SQL schützen.
Ich verstehe den Sinn noch nicht, dem einen Namen und eine Schicht zu geben.

Ist das einfach nur eine Klasse, die eine Funktion "Speichere Stamm", eine Funktion "Speichere Ast" und eine Funktion "Speichere Blatt" enthält? - Alle inc. der jeweiligen SQL-Befehle und den DB-Zugriffen ...

Könntest Du mir einen Link senden, in dem dieses Thema erklärt wird?
Es muss doch mehr dahinter sein, wenn das so einen komplizierten Namen hat !?

danke
vage

I
1.739 Beiträge seit 2005
vor 16 Jahren

Im Moment scheint für mich ein Data Abstraction Layer einfach nur eine Sammlung von Methoden (also eine zusätzliche Schicht) zu sein, die mich vor den "bösen" Datenbank-Funktionen und dem "bösen" SQL schützen.
Ich verstehe den Sinn noch nicht, dem einen Namen und eine Schicht zu geben.

Der Sinn besteht darin den Speicher zu wechseln und Änderungen nur an dieser Schicht vornehmen zu müssen.
Die Programmlogik muss nicht wissen wo die Daten herkommen und erst recht nicht soll sie nicht abhängig von speziellen DB-Datentypen sein. Das darüberliegende Userportal(GUI) erst hat auch andere Aufgaben. Lediglich das DAL soll sich mit Details wie Connectionstrings, SQL-Abfragen usw. auseinandersetze. Damit wird die Datenquelle leichter austauschbar(heute Access, morgen ein Excelfile, übermorgen Oracle oder ein Webservice/Applicationservice). Das DAL wird idealerweise so strukturiert, das Code nicht ersetzt/umgeschrieben sondern der jeweils passende Adapter geladen wird.

V
vega Themenstarter:in
11 Beiträge seit 2007
vor 16 Jahren

ah! danke,
das verstehe ich!

macht Sinn 🙂
danke!