Mehrfachvererbung



  • Hallo!

    Kurze Frage:
    Kennt jemand von euch vielleicht Ressourcen im Netz, die sich mit dem Thema Simulation von Mehrfachvererbung in Java befassen.
    Man muss ja das Rad nicht zweimal erfinden!

    Danke!

    Grüße,
    TS++



  • Mehrfachvererbung simulieren? Du kannst wenn du möchtest die Interface-Architektur dafür nutzen. Allerdings wird so keine Funktionalität vererbt sondern einheitliche Schnittstellen Klassenübergreifend erzeugt ... Was genau willst du denn machen? In den seltensten Fällen wird Mehrfachvererbung wirklich gebraucht.



  • Hallo!

    Ich möchte eine Bibliothek für Kartenprojektionen schreiben!
    Kartenprojektionen sind i.d.R. gegliedert nach:

    1. Konstruktionsmethode
       a) echte Projektion
       b) unechte Projektion
    
    2. verwendete Projektionsfläche
       a) zylindrische Projektion
       b) azimuthale Projektion
       c) konische Projektion
    
    3. Lage des Projektionskörpers
       a) normale Projektion
       b) oblique Projektion
       c) transverse Projektion
    
    Aus diesen 3 Sammlungen an Kartenprojektionstypen kann ich nun völlig beliebige Kombinationen bilden. 
    z.B.: die Mercator-Projektion wäre eine echte, zylindrische Projektion in      Normallage.
    
    in C++ hätte die die Klassenhierarchie etwa so aufgebaut:
    
                           Projection
                                ^
                                |
                          MapProjection
                                ^
                                |
     +-----+--------+-------+---+----+------+-------+--------+
     |     |        |       |        |      |       |        |
    Real UnReal Cylindric Conic Azimuthal Normal Oblique Transverse
     ^              ^                       ^
     |              |                       |
     +--------------+-----------------------+
                    |
                 Mercator
    

    Nur dafür bräuchte ich ja Mehrfachvererbung!

    ==> Jetzt könnte man natürlich sagen:
    Dann bau doch in deine Projektion Attribute für die Konstruktionsmethode, die Projektionsfläche und die Lage ein. So könnte ich mir die Unterteilung in Klassen sparen! Stimmt zwar, aber:
    Dann hab ich zum Beispiel nicht mehr die Möglichkeit alle Projektionen in transverser Lage in besonderer Art und Weise zu bearbeiten. Da ja keine Schnittstelle für solche Projektionen existiert!

    Grüße,
    TS++



  • Diese Eigenschaften (normal, cyllindrich und real) lassen sich doch schön als Interface bestimmen? Das wäre dann eine Zwischenschicht zwischen MapProjection und den Ausprägungen.



  • Falls du das so meinst,

    RealIntf  CylindricIntf   NormalIntf 
     ^              ^             ^
     |              |             |
     +--------------+-------------+
                    |
                 Mercator
    

    so müsste die Implementierung ja in Mercator stattfinden.
    Falls eine andere Projektion XYZ aber auch zylindrisch und normal ist, so muss ein Grossteil der bereits in Mercator vorhandenen Routinen und Attribute nochmal in XYZ implementiert werden!



  • Du hast ebenfalls noch die Möglichkeit Mercator abstrakt zu definieren
    von denen dann die anderen abgeleitet werden und zusätzlich Interfaces implementieren.



  • Hast recht!

    Auf die Art und Weise könnte ich alle Kombinationen auf Klassen abbilden.
    => Das werden aber dann ganz schön viele Klassen: 2*3*3=18 Klassen nur um die Implementierungsschicht zwischen den Interfaces und den Endnutzerklassen aufzubauen!?



  • Ja stimmt wohl aber die Zahl der Klassen ist ja egal. Hauptsache es ist ein sauberes, erweiterbares Design - ohne Mehrfachvererbung 🙂 Außerdem werden wohl die Klassen nicht sehr groß werden.



  • Stimmt!

    Ich probier's mal so aus!

    Danke für deine Hilfe!:)
    Grüße,
    TS++


Anmelden zum Antworten