Object Oriented Programming for All

- Entwurfsmuster - Design Pattern -

Ein Wort vorweg: "Das ist ne sehr umfangreiche Geschichte, also füllt sich das nach und nach!"

Zunächst wäre da der Begriff des Designpattern, zu Deutsch: Entwurfsmuster. Ein Muster ist nichts anderes als eine Lösungsstrategie für ein Problem. Verschiedene Leute haben Ihre Programmierprobleme mal näher betrachtet und analysiert, in welche typischen Probleme man sie einteilen könnte. Dabei ist eine relativ kleine Liste mit wiederkehrenden Problemen zusammengekommen. Einige Probleme sind recht trivial zu lösen , andere erfordern viel mehr Aufwand. Zu diesen Problemen gibt es immer eine theoretische Lösung und einen Ansatz mit dem man das Problem sauber lösen kann.
Zwei von den einfacheren Problemen sind "das Anmatchen von Schnittstellen" und "Resourcenverwaltung".

Ersteres Muster heißt "Wrapper" und ist jedem Programmierer bekannt, egal ob er/sie OO oder prozederal programmieren.



Muster Wrapper

"Ein Wrapper ist eine Schnittstelle zwischen den Schnittstellen." (msc)

Nehmen wir ein typische Programmierproblem , ein altes Programm A wurde für ein neues Betriebssystem compiliert/emuliert/portiert und möchte dort nun die Serielle Schnittstelle verwenden. Auf dem alten Betriebssystem sah die Schnittstelle für das serial.device noch so aus:

class serial

    public setSpeed(long baud)
    public sendBytes(long buffer,long length)
    public recvBytes(long buffer,long length)

auf dem neuen System sieht die Schnittstelle nun so aus:

class serial

    public openSerialPort()
    public closeSerialPort(long port)
    public setSpeed(long baud)
    public setHandshake(long mode)
    public send(long port,long buffer,long length)
    public recv(long port,long buffer,long length)

Ohne den Quellcode des alten Programmes zu ändern ist hier nicht mehr an eine funktion zu denken. Aus irgendeinem Grund kann oder will man dieses Programm nicht verändern. Also muß ein Wrapper her.
Das ist eine Klasse die die alte Schnittstelle zur Verfügung stellt und selbst die neue benutzt. Eine solche Wrapperklasse finden Sie in den com.amiga.system Klassen. Für unser Problem könnte eine Klasse so aussehen.

class serialwrapper
{
    Object class serial serial
    long port 

    public Constructor()
    {
       port=serial.openPort()
    }

    public DeConstructor()
    {
       serial.closePort(port)
    } 
    
    public setSpeed(long baud) 
    {
       serial.setSpeed(Baud)
    }

    public sendBytes(long buffer,long length)
    {
       long res

       res=serial.send(long port,long buffer,long length)
       return res
    }

    public recvBytes(long buffer,long length)
    {
       long res

       res=serial.recv(long port,long buffer,long length)
       return res
    }
}

Damit ist das Problem gelöst. Würde man das alte Programm ändern, wäre das natürlich der bessere Weg.



Muster Singleton

"Singelton: Eine Anzahl Instanzen, welche als eine Instanz funktioniert."

Im Abschnitt über syncronisierte Methoden haben wir das Singleton kennen gelernt.

Ein Singleton ist Konstrukt das es nur einmal in Speicher gibt. In der OOP handelt es sich dabei um das Erzeugen des immer gleichen Objektes pro Instanz. In Java wird dies durch einen statischen Konstruktor gelöst, in OOP4A ist dies so nicht möglich und auch eigentlich nicht nötig.
Ein Beispiel wird dies verdeutlichen:

Class Test 
{
    static long counter

    static String Name    "OOP4A"
    static String Vorname "System"
    static String Strasse "MC68040"
    static String Ort     "Amiga"

    public getName()
    {
      return Name
    }

    public getVorname()
    {
      return Vorname
    }

    public getCounter()
    {
      return counter
    }

    public syncronized setCounter(long value)
    {
      counter==value
    }
}

Selbst wenn von dieser Klasse beliebig viele Objektinstanzen erzeugt werden, geben alle Methoden die gleichen Variablen zurück. Wenn es sich bei diesen Variablen nicht um Strings sondern um Informationen über z.b. eine Hardware handelt, so kann mit syncronisierten Zugriffsmethoden auf diese Informatinen zugegriffen werden. Es kann auch sichergestellt werden, daß immer nur ein Task auf die Hardware zugreift. Damit handelt es sich um ein Singelton, eine Anzahl Instanzen die als eine Instanz funktioniert.

OOP4A