Eine Methode mit unterschiedlichen Objekttypen als Parameter?

trench140

Mitglied
Hallo allerseits,

ich portiere gerade ein Java-Programm (nicht von mir) auf C++. Da ich mich mit C++ noch nicht so lange beschäftige, stehe ich aktuell vor folgendem Problem:

Im Java-Programm existiert eine Methode "draw(Object object)" die in etwa wie folgt aussieht:

Code:
public int draw(Object object) {
    if(object.getClass().toString().equals("class Vertex")) {
    ...
    } else if(object.getClass().toString().equals("class Line") {
    ...
    }
    ...
}

Der Zweck der Methode ist es, verschiedene geometrische Objekte entgegenzunehmen und zu zeichnen. Meiner Meinung nach ist die vorliegende Umsetzung in Java bereits unschön, allerdings bin ich mir nicht ganz sicher, wie man es besser machen kann.
Jedes Objekt besteht im Grunde genommen aus einem oder mehreren Vertices, die jedoch eben, je nach Objekt, unterschiedlich vorliegen, so dass pro Objekt die Vertices in unterschiedlicher Weise ausgelesen und umgewandelt werden müssen. Meine erste Idee war es, dass man sowas in Java z.B. besser hätte lösen können. indem man jedes der Objekte ein Interface "Drawable" o.ä. gegeben hätte, in welchem eine Methode definiert worden wäre, welche z.B. ein Array von Vertcies zurückliefern muss. Allerdings gibt es ja in C++ keine Interfaces.

Wie kann man daher das Problem am besten lösen, dass man (idealerweise) eine Methode für (beliebig viele) unterschiedliche Objekte hat? Natürlch könnte man jetzt pro Objekttyp eine eigene Methode implementieren, aus Gründen der Wartbarkeit würde ich das Ganze jedoch gerne so übersichtlich wie möglich halten, damit man es später um z.B. komplexere oder sogar zusammengesetzte Objekte erweitern kann.

Gruß,
Trench
 
Hi:

Die Lösung lautet: Interfaces :D

Du hast zwar recht, dass es in C++ keine "Interface" im Java-Sinn gibt.
Aber: Da C++ auch Mehrfachvererbung erlaubt (im Gegensatz zu Java)
kannst du statt Interfaces immer abstrakte Klassen nehmen.

In Java kann eine Klasse ja nur von maximal einer (abstrakten) Klasse erben, aber viele Interfaces einbinden.
In C++ erbt deine Klasse eben von vielen abstrakten Klassen.

Gruß
 
Zurück