Wie Interfaces aus OOP imitieren?



  • Aus der OOP bin ich es gewohnt, Interfaces für die Vereinbarung von Schnittstellen zu benutzen. Jetzt möchte ich möglichst elegant folgendes Problem umsetzen:
    Ein Softwaremodul wird für zwei verschiedene Projekte entworfen, von denen es unabhängig sein soll. Trotzdem muß es eine Möglichkeit geben, eine Art Log-Funktion aufzurufen, welche in beiden Projekten vollkommen anderes implementiert ist. Bislang habe ich es nur so gelöst, dass eine Headerdatei definiert wird, in der die Prototypen der Log-Funktionen stehen. Diese wird von dem unabhängigen Modul für den Aufruf eingebunden, ebenso von den Projektdateien (wo sie letztendlich implementiert werden).

    Das funktioniert zwar, ist aber eher eine formelle Angelegenheit, da nicht garantiert wird, dass die Log-Funktionen tatsächlich implementiert werden. Gibt es da vielleicht eine bessere Lösung?



  • Hast du ein "Objekt" auf dem du operieren musst?

    Hier gibt es 2 Mainstream Ansaetze die mir spontan einfallen:

    Variante 1:
    du modellierst ein "komplettes" (halt so komplett wie noetig) OO-System. Mit Funktionszeigern in dem "Objekt" (struct) zum aufrufen der "virtuellen" Methoden.

    Macht viel arbeit, erlaubt aber ein ziemliches OO-Like Interface.

    Variante 2:
    Switch
    Du hast eine struct mit dem Member "type" oder aehnliches. Und wenn du dann do_foo(bar); sagst, dann ist in do_foo mal n switch auf den type und das ruft dann immer die passende implementierung auf.

    uU ist aber eine andere Loesung besser - erklaer mal was du genau willst. Denn oft muss man nicht das Konzept der OOP nach C uebertragen - oft kann man die Problemstellung einfach komplett anders loesen.


Anmelden zum Antworten