Was ist ein Wrapper?



  • Hallo,

    ich höre ständig was von wrapper hier und wrapper dort. Was genau ist ein wrapper bzw. wie ist der zusammenhang zur programmierung? shell-scripting oder c++ ?

    Danke für hinweise





  • viele dank - nur leider verstehe ich weder punkt 1 noch punkt 2. Ich wollte eigentlich ein anschauliches beispiel. Wie darf mich ich mir sowas vorstellen?



  • z.B. ein Deutsch-Wickler für die Klasse std::string:

    class Zeichenkette
    {
    private:
        std::string objekt;
    
    public:
        Zeichenkette( char const* text ) : objekt( text ) 
        {}
    
        char gib_zeichen( size_t position ) const
        { 
            return objekt[ position ]; 
        }
    
        void ersetze( size_t position, size_t laenge, Zeichenkette const& ersatz )
        {
            return objekt.replace( position, laenge, ersatz.objekt );
        }
    
        /* ... */
    };
    


  • das ist ja einfach sogesehen nur eine eigene klasse die von string erbt und vielleicht mal zusatzmethoden hat. ist das schon ein wrapper?



  • Nich erbt, sondern enthält (bzw. implementiert ist in Form von). Kurz gesagt ist ein Wrapper etwas, was eine bestimmte Schnittstelle (z.B. die von string) auf eine andere Schnittstelle (z.B. eine, die die Funktion "gib_zeichen" fordert) abbildet.



  • gastxxy schrieb:

    das ist ... eine ... klasse die von string erbt...

    Nö.
    ...in dem Beispiel "erbt" da nix.

    Aber vielleicht hilft Dir leo.org weiter:
    "wrapper" = "Hülle"

    Genau das trifft's eigentlich ganz gut: Wenn Du mit einem Ding etwas anstellen willst, nimmst Du es nicht selbst in die Hand, sondern nur seine "Hülle".
    Sie verhindert den "direkten Kontakt" und schützt Euch voreinander (bei Tresor eher den Inhalt vor Dir, beim Plutonium eher Dich vor ihm), indem es lediglich bestimmte Eigenschaften durchleitet.

    In C++ gibt's verschiedene Techniken, wrapper zu erstellen. Vererbung ist eine davon, aber nicht die einzige und sollte auch nicht die erste Wahl für einen Wrapper sein.

    Gruß,

    Simon2.



  • Du hast eine Datenbank mit einer sehr komplexen API.

    Die möchtest Du aber nicht dauernd verwenden da es viele Methoden braucht um Daten zu bekommen.

    Nun baust Du dir eine Wrapper.

    Dort gibt es 3 Methodem.

    oeffnedb
    gibdaten
    schliessedb

    In der Wrapper selbst befindet sich natürlich aus der API alles was dafür notwendig ist. Dies machst du einmal.

    In Zukunft wird nur der Wrapper verwendet mit seinen 3 Methoden.
    Der Wrapper erledigt dann den Rest.

    z.B. ist die MFC im Grunde nur ein Wrapper um die WINAPI.



  • In der Wrapper selbst befindet sich natürlich aus der API alles was dafür notwendig ist. Dies machst du einmal.

    In Zukunft wird nur der Wrapper verwendet mit seinen 3 Methoden.
    Der Wrapper erledigt dann den Rest.

    Nur als Ergänzung:
    Die Vorteile davon sind dann z.B.

    1. dass man in dem Programm überall nurmehr den Wrapper verwendet, irgendwelche "Details" der speziellen Datenbank API (in diesem Beispiel) werden auf einen Punkt konzentriert, nämlich den Wrapper

    2. wenn man die Datenbank API (in diesem Beispiel) mal gegen eine andere auswechseln muss ist das meist viel einfacher möglich als wenn man ohne "Wrapper" gearbeitet hätte, da man nurmehr den Wrapper neu implementieren muss, den Rest des Programmes aber oft ganz oder grösstenteils unverändert lassen kann

    3. dass man - wenn man seinen Wrapper entsprechend "sauber" und "modern" schreibt - überall schönes C++ (mit RAII und was-nicht-alles) verwenden kann, auch wenn die Datenbank API (in diesem Beispiel) eine reine C-API ist



  • in der literatur oder google gibt vielleicht die suche nach dem "adaption pattern" ein bisschen mehr her.


Anmelden zum Antworten