Beispiel 'Wörterbuch Standard' ◦ Zusammenfassung ◦ ?

a) Aufgabe

Wir möchten ein Wörterbuch 'Deutsch-Englisch' für Fachbegriffe der Informatik erstellen. Das folgende Bild zeigt die Benutzerschnittstelle. Auf dem Tabellenblatt gibt man Begriffspaare ein und fügt sie durch Klicken der ersten Schaltfläche einer Datenstruktur des Internspeichers hinzu. Über die zweite Schaltfläche kann man sich die englische Übersetzung eines deutschen Begriffes ausgeben lassen. Schliesslich lässt sich ein bestimmtes Begriffspaar auch wieder aus dem Wörterbuch entfernen.

Das Projekt gleicht dem Telefonverzeichnis-Projekt. Anstelle der Namen und Telefonnummern treten deutsche und englische Begriffe. Die Klasse für das Verzeichnis möchten wir diesmal jedoch selber mit Hilfe eines Binärbaumes programmieren, um die Mechanismen hinter der Verwaltung grosser Datenmengen kennenzulernen. Wir werden sehen, dass die Suche in einem sortierten Binärbaum beinahe so schnell ist wie die binäre Suche in einem Datenfeld, dass aber die verkettete Struktur das Einfügen und Entfernen von Elementen erleichtert.

b) Entwurf des Objektmodells

Das nächste Bild skizziert die Module und Objekte der Anwendung. Den Kern der Implementation bildet die selbst entwickelte Auflistung cWörterbuch, die im wesentlichen die Aufgabe der Collection-Klasse im Telefonverzeichnis-Projekt übernimmt. Ihre fügeHinzu-Methode füllt neue Begriffspaare in alphabetischer Sortierung in einen Binärbaum ein.

Die Module erfüllen die folgenden Funktionen:

- Das Modul Prozeduren enthält die Ereignisprozeduren für die Klick-Ereignisse der Schaltflächen. Das Tabellenblattmodul mit den Steuerelementen ist nicht explizit dargestellt.

- Das Klassenmodul cEintrag beschreibt die Objekte, welche die Begriffspaare in den Eigenschaften Begriff und Definition speichern. Durch Verketten dieser Objekte entsteht der Binärbaum.

- Das Klassenmodul cWörterbuch beschreibt ein Objekt zur Verwaltung von cEintrag-Objekten. Die folgende Tabelle listet seine Methoden auf und nennt als Vergleich die entsprechenden Methoden der Collection-Klasse.

  cWörterbuch (Collection) | Beschreibung
  fügeHinzu Begriff, Definition (Add) | Die Subroutine fügt das übergebene Begriffspaar, sortiert nach dem ersten Argument ins Wörterbuch ein
  Eintrag Begriff (Item) | Die Funktion gibt das Objekt zurück, das die Definition des angegebenen Begriffs enthält, bzw. Nothing, falls der Begriff nicht definiert ist
  entferne Begriff (Remove) | Die Subroutine entfernt das Objekt, das den angegebenen Begriff definiert
  OErster() und ONächster(Eintrag) (For Each ... Next) | Die beiden Fuktionen werden zum sequentiellen Durchblättern des Wörterbuchs benötigt. Beide geben ein Objekt des Typs cEintrag oder Nothing zurück

  Die Klasse cWörterbuch unterscheidet sich von der Collection-Klasse vor allem darin, dass sie Objekte automatisch sortiert. Allerdings kann sie im Gegensatz zur Collection nur Objekte vom Typ cEintrag verwalten, und der Zugriff auf die Objekte ist nur über den Begriff (Schlüssel) möglich, während die Collection jedem Eintrag auch einen eindeutigen Index zuweist. Schliesslich ist es in VBA nicht möglich, die Klasse so zu implementieren, dass die verwalteten Objekte mit einer For Each ... Next-Schleife durchlaufen werden können. Als Alternative bietet die Wörterbuchklasse die Methoden OErster und ONächster an. Das 'O' steht für 'Ordnungsnachfolger'. Den Benutzern erscheint cWörterbuch damit als geordnete Liste, wie die Collection-Klasse auch. Die folgende Testprozedur illustriert das Arbeiten mit einem cWörterbuch-Objekt. Das nächste Bild zeigt die Ausgabe des Programms.

      Sub Test()
        Dim BuchDeEn As cWörterbuch
        Dim Eintrag As cEintrag

        '--- 1 Erstelle ein Wörterbuch-Objekt
        Set BuchDeEn = New cWörterbuch

        '--- 2 Trage drei Begriffe ein
        BuchDeEn.FügeHinzu "baum", "tree"
        BuchDeEn.FügeHinzu "ast", "branch"
        BuchDeEn.FügeHinzu "kind", "child"

        '--- 3 Durchlaufe alle Elemente und gib sie aus
        Set Eintrag = BuchDeEn.OErster()
        Do While Not Eintrag Is Nothing
          MsgBox Eintrag.Begriff & ":=" & Eintrag.Definition
          Set Eintrag = BuchDeEn.ONächster(Eintrag)
        Loop
      End Sub

  Das Programm erstellt ein Wörterbuch und fügt ihm drei Einträge hinzu. Die Funktion OErster gibt das erste Objekt, mit dem Begriff 'ast' zurück. In der Schleife wird dieses Objekt der Funktion ONächster übergeben, damit das Wörterbuch 'weiss', wessen Nachfolger es zurückgeben soll. Der Rückgabewert ist das Objekt mit dem Begriff 'baum'. Wird der Funktion ONächster das letzte Objekt ('kind') übergeben, so gibt sie Nothing zurück, da dieses Objekt keinen Nachfolger hat, und die Schleife bricht ab.

c) Implementation

Ein Wörterbuch-Objekt erscheint den Benutzern als Liste. Tatsächlich verwaltet es die Eintrag-Objekte aber intern in einer Binärbaumstruktur. Die Vorteile wurden in der Einleitung bereits angedeutet. Die Themen sortierter Binärbaum, ausbalancierter Binärbaum, verkettete Datenstrukturen und rekursive Algorithmen implementieren die Baumstruktur und die zugehörigen Algorithmen und diskutieren die Stärken und Schwächen gegenüber anderen Datenstrukturen eingehender.

LWoerterbuch.xls

©abo