Entwurf von Algorithmen

By , 23. September 2008

Im Laufe des Entwicklungsprozesses einer Access-Anwendung, hat der Entwickler eine Fülle an kleinen, funktionell abgegrenzbaren Aufgabenstellungen zu bewältigen. Der Kunde gibt vor, welche Funktionalitäten bzw. Abläufe die Anwendung abbilden muss. Im besten Falle hat er das noch schriftlich und sogar mit einem dezidierten Ablaufplan. Dem Entwickler seine Aufgabe ist es dabei, aus mündlichen Angaben, E-Mails, Telefax, eigenen Aufzeichnungen, Pflichtenhefte oder aus eigener Erfahrung Code-Algorithmen zu entwerfen und in VBA-Codezeilen niederzuschreiben. Dieser Artikel gibt Auskunft über die notwendigen Techniken und Methoden die ein Entwickler kennen muss um dabei effektiv vorzugehen.

Man unterscheidet zwischen Entwurfsprinzipien und Entwurfstechniken. Erstere sind als allgemeingültig und anerkannt zu betrachten. Entwurfsprinzipien sind universell anwendbar. Hingegen Entwurfstechniken im speziellen anwendbare Techniken und Vorgehensweisen darstellen.

Die 3 wichtigsten Entwurfsprinzipien:

  • schrittweise Verfeinerung
  • Modularisierung
  • Strukturierung

Das erstere Entwurfsprinzip halte ich für Entwickeln von Access-Anwendung als das brauchbarste, da die beiden anderen beiden auf große bis sehr große Softwareprojekte abzielen. Im nachfolgenden werde ich auf die schrittweise Verfeinerung eingehen und die beiden anderen Prinzipien außer acht lassen.

Prinzip der schrittweisen Verfeinerung:

  1. Entwurf eines groben Algorithmus mit eigenen Worten und abstrakten Funktionen und Datentypen
  2. Verfeinerung der im ersten Schritt erstellen Funktionen und Datentypen, also eine erste Implementierung mit wenigen Codezeilen
  3. Mehrfache Wiederholung der Verfeinerung bis eine vollständige Implementierung in VBA-Code erfolgt ist.

Diese Vorgehensweise wird auch Top-Down Entwurf genannt. Nach Wikipedia ist ein Top-Down Entwurf:

„In der Informatik bezeichnet man einen Entwicklungsprozess für Software als Top-down, wenn der Entwurf mit abstrahierten Objekten beginnt, die dann konkretisiert werden“

Ein Beispiel:

Problem: Aus einer kommaseparierten Liste soll der größte und kleinste Wert ermittelt werden
Vereinbarung: a(i) ist Element der Liste an Position i

1. Schritt:
ErmittleMinMaxWert("a1,a2,a3... an")

2. Schritt:
minWert = 1. Element
maxWert = 1. Element
For i = 2 to n
Wenn i-tes Element größer als maxWert dann maxWert = i-tes Element
Wenn i-tes Element kleiner als minWert dann minWert = i-tes Element
Next i

3. Schritt 1. Durchgang:

Sub ErmittleMinMaxWert("a1,a2,a3... an")
Dim minWert, maxWert
Dim Splitvariable
Splitvariable = Split("a1,a2,a3... an", ",")
minWert = Splitvariable(0)
maxWert = Splitvariable(0)
For i = 1 to ubound(Splitvariable)-1
if Splitvariable(i) größer als maxWert dann maxWert = Splitvariable(i)
Wenn Splitvariable(i) kleiner als minWert dann minWert = Splitvariable(i)
Next i
End sub

3. Schritt 2. und hier letzter Durchgang:
Private Sub getMinMax(Liste As String)
Dim minWert As Long, maxWert As Long, i As Long
Dim arr1 As Variant
arr1 = Split(Liste, ",")
minWert = arr1(0)
maxWert = arr1(0)
For i = 1 To UBound(arr1) - 1
If arr1(i) > maxWert Then maxWert = arr1(i)
If arr1(i) < minWert Then minWert = arr1(i) Next i End Sub

Die Schrittweise Verfeinerung erfordert, dass Verfeinerungen bzw. Konkretisierungen von Funktionen, Ablaufstrukturen und Datenflüssen aufeinander abgestimmt werden, d.h. alle Teile des Algorithmus im gleichen Maße verfeinert bzw. konkretisiert werden.

In der Praxis hat es sich mir als äußerst hilfreich gezeigt, wenn man ein Problem visualisieren kann. D.H. mit einem Stift und einem Blatt Papier aufzeichnen. Abläufe, die in einer zeitlichen Beziehung stehen, werden von mir stets anhand eines Zeitstrahls entschlüsselt. Also auf einem Blatt eine Linie gezogen und irgendwo t=0 gesetzt.

Beim Arbeiten mit Zeichenketten ist es auch hilfreich, die Zeichenkette buchstabengetreu aufzuschreiben und die Zeichen durchnummerieren. Z.B. bei dem Beispiel wo die langen Strings aufgeteilt werden. Da muss man sich erst mal visuell klar machen welche verschiedenen Fälle es gibt und wo man dann tatsächlich den String abschneidet.

Ein weiterer Praxistipp von mir ist, direkt im VB-Code vor der Implementierung eines Ablaufs, sämtliche relevanten Schritte in Pseudocode als Kommentarlinien eingefügt, und dann schrittweise die einzelnen Schritte implementieren und die entsprechende Kommentarzeile löschen. Soweit, bis zum Schluss als Kommentarlinien, in denen der Pseudocode steht, entfernt sind. Danach ist der implementierte Code zuerst zu Validieren indem alle geladenen Module kompiliert werden, und danach mit dem Debugger Zeilenweise geprüft weden.

Beispiel für einen (ausführlichen) Pseudocode (WordAutomation late Binding):
' Objekt Deklarieren
' WordObjekt erstellen
' Vorlage laden
' WordInstanz visble
' Schleife Start
' Textmarke ansteuern
' Text schreiben
' Schleife Ende
' Aufräumen

Auch den Pseudocode kann man verfeinern. Z.B. fehlt oben Angaben zu einem möglichen Recordset, oder man hätte "Aufräumen" auch im Detail beschreiben können. Wie weit das weiter heruntergebrochen werden kann, kommt auf die eigene Abstraktionsfähigkeit an. So lange man dem Pseudocode sämtliche erforderlichen Informationen entnehmen kann, bzw. sich daran erinnert was man sich bei einer Zeile Pseudocode gedacht hat, ist dies m.E. nicht weiter notwendig. 😉

AV 2008

Leave a Reply

You must be logged in to post a comment.

OfficeFolders theme by Themocracy