[ 1 ] [ 2 ]
Aufteilung in verschiedene KlassenEntsprechend der Analyse einer Aufgabe werden
verschiedene Klassen erstellt. In diesen Klassen wird die Funktionalität
nochmals in verschiedene Ebenen verteilt. In den Methoden der dadurch
entstandenen Struktur werden nur noch die jeweils notwendigen Teilaufgaben
gelöst. Dies bedeutet, dass in den Methoden keine komplexen Funktionen
abgebildet werden müssen. Das wiederum kann sich bei einer späteren Erweiterung
durch Vererbung und anschließende Anpassung als Vorteil herausstellen. FazitBei der Aufteilung auf verschiedene Klassen erhöht sich zwar der Aufwand bei der Erstellung (es müssen mehr Klassen angelegt werden), aber der Codeumfang innerhalb der jeweiligen Methode Create reduziert sich auf ein Minimum. Bei der Variante „alles in einer Klasse“ erscheint der Code in der Methode Create im Vergleich dazu als umfangreiches Programm. Schritt 3: Die RealisierungDie Klassen und ihre Abhängigkeiten
Abbildung 3Die Abbildung 3 zeigt die Klassen mit den entsprechenden Abhängigkeiten untereinander. In dem Diagramm werden zwei Arten von Abhängigkeiten dargestellt. Zum einen ist das die Vererbung ( Custom à MenuBase à MenuExecuter ... ), zum anderen kommt die Aggregation von Klassen ( CollectionBase ßà MenuBase ) zum Einsatz. Einfach gesagt, bedeutet dies nichts anderes, als dass die Objekte nicht von einander abgeleitet werden, sondern miteinander verknüpft werden. Um komplexe Objektstrukturen zu erstellen, ist es sinnvoll, eine Kombination beider Varianten zu verwenden.
Methoden und Eigenschaftsnamen
Bei der Wahl eines Namens für eine Methode hat sich bei vielen Entwicklern schon durchgesetzt, dass der Datentyp als erste Stelle angegeben wird. Auch bei Methoden kann eine solche Klassifizierung unter Umständen sinnvoll sein. Beispiele dafür sind: DoXxxxxx – Methode, die bei Bedarf in der Ableitung durch spezialisierten Code überschrieben wird. Beim Klassendesign wird nur eine unbedingt notwendige Grundfunktionalität zur Verfügung gestellt. EventXxxxxx – Hook, um in Ableitungen auch in komplexen Methoden einzugreifen. IsXxxxxx – Prüfen einer Bedingung. Es wird immer True oder False zurückgegeben MenuBaseDiese Klasse ist die Grundlage für alle anderen Menüelemente. In dieser Klasse wird das grundlegende Interface definiert, über das später auf jedes Menüelement zugegriffen werden kann. Methoden und Eigenschaften:
MenuExecuterIm MenuExecuter werden die Aufgaben spezialisiert, die das Ausführen von Aufgaben ermöglichen. Methoden und Eigenschaften:
MenuCollectionIn der Klasse wird die Verbindung zwischen dem Interface
eines Menuelementes ( Klasse MenuBase ) und der Funktionalität einer Collection
hergestellt. Das Codebeispiel zeigt einen Auszug aus der Klasse, in der eine
solche Verknüpfung realisiert wird. Methoden und Eigenschaften:
MenuMenu, MenuPopup, MenuBar und MenuPadIn diesen Klassen wird das Interface eines allgemeinen Elementes mit dem jeweils notwendigen VFP – Code versorgt. Auf Basis der Klassen MenuMenu und MenuPopup können die entsprechenden Menüobjekte erstellt werden. CollectionBaseDiese allgemein zu verwendende Klasse bietet die Möglichkeit, einzelne Elemente in einem Array zu verwalten. Es besteht die Möglichkeit, auf diese Elemente über einen Index zuzugreifen. Weiterhin können der Collection Elemente hinzugefügt werden bzw. auch wieder entfernt werden. Methoden und Eigenschaften:
CmdExecuterAuch bei dieser Klasse handelt es sich um keine spezielle Menüklasse. Mit Hilfe dieser Klasse besteht die Möglichkeit, verschiedene Funktionalitäten als ein Objekt an ein weiteres Objekt weiterzugeben. Bei dem Menü – Objekt wird diese Möglichkeit genutzt, um Aktionen an den MenuExecuter zu übergeben. Methoden und Eigenschaften:
ZusammenfassungWie sie sehen, ist es gar nicht so schwer, mit den VFP – eigenen Mitteln ein Menüobjekt zu erstellen. Warum es in VFP noch keine OO – Menüs gibt, wird wohl weiterhin ein Geheimnis bleiben ....... Die aktuelle Version der hier beschriebenen Klasse finden Sie im Internet unter www.Prolib.de/DevCon2000. Sollten Sie Fragen oder Anregungen zu der Klasse oder der Session haben, stehe ich gern auf der Konferenz bzw. unter PeterS@Prolib.defür weitere Gespräche zur Verfügung.
|
[ 1 ] [ 2 ]