Object Oriented Programming for All

- Typen und Überladung von Methoden -

Bis jetzt kennen Sie die compilerinternen Typen long und String, wobei String nur eine Vereinfachung der Sprache darstellt.
Mit der Einführung von Typenprüfung beim Methodenaufruf ist der Weg freigemacht für Methodenüberladung. Als gültige Typen gelten alle einfachen Klassennamen also z.B. String,zahl,StringArray usw. Daraus ergibt sich zwar ein Problem der Eindeutigkeit , wenn in verschiedenen Packeten Klassen gleiche Namen haben, aber das liese sich nur mit Performanceeinbußen vermeiden, in dem immer der Packetname statt des Klassennamens geprüft wird. Zudem würden zwei Amiga Libraries mit dem gleichen Namen auch nicht unterschieden werden, daher ist von gleichen Klassennamen abzuraten, wenn sie nicht das gleiche Interface erfüllen.

Ein Argumenttyp wird wie folgt angegeben.

class unbekannt
{
    public test(long A,StringArray B)
    {
        ...
    }
}

Der Typ long ist dabei ein universal Typ, der alles annimmt was übergeben wird. Will man die Klasse Long haben, so muß man auch Long angeben. Groß/KleinSchreibung ist dabei zu unterscheiden!

Was ist den nun Überladung?

Als Überladung bezeichnet man die Eigenschaft einer Methode mehrere Implementierungen mit verschiedenen Argumentypen mitgeben zu können. Konkret bedeutet das, daß es in einer Klasse mehrere Methoden gleichen Namens geben kann. Die eigentlich auch gleiche Aufgaben versehen. Ein Beispiel macht dies deutlich:

class unbekannt
{
    public test(long A,StringArray B)
    {
        ...
    }
    public test(long A,String B)
    {
        ...
    }

}

ruft nun eine Klasse die Methode test der unbekannten Klasse auf, so kann Sie wahlweise einen String oder einen StringArray übergeben und erwarten das beides mal das gleiche passiert.

class unbekannt
{
    long A

    public add(Integer B)
    {
        A=A+B.tolong()        // diese Syntax wird noch nicht vom Compiler unterstützt.
    }
    public add(Long B)
    {
        A=A+B.getLong(B)
    }
    public add(Word B)
    {
        A=A+B.tolong(B)
    }

}

Wozu kann man das jetzt benutzen????

Naja, zunächst einmal lassen sich so Methoden zu Gruppen mit gleichen Aufgaben zusammenstellen, so daß sich der Programmierer nur den Namen einer Methode merken muß, um immer die richtige Funktion zubekommen. Ein gutes Beispiel ist hier die "print()" Methode. Damit man nicht für jedes Objekt eine eigene printXXXXX() Methode hat, die man sich ja merken müßte, überläd man einfach die Methode mit einer neuen Implementierung für einen neuen Typen und gut. So steht im Sourcecode später immer nur "print()" statt "printLong()" "printStringArray()" usw.. . Beim Lesen kann man sich also daraufverlassen, wenn man weiß was eine Implementierung von print() macht, dann machen alle anderen das auch. Natürlich nur , wenn der Programmierer der Überladenen Methode das auch so sieht. Das kann letzden Endes kein Compiler der Welt sicherstellen.

Kann man eigentlich alles überladen?

Hauptseite