Was genau ist eine Schnittstelle?



  • Hallo,
    soweit ich verstanden habe ist eine schnittstelle einer Klasse eine als public deklarierte Elemetfunktion

    z.b

    class a {
    public:
    void Beispiel(int x); //schnittstelle 
    int X
    
    };
    
    a::Beispiel (int x){ // Initialisierung
    a::X =x;}
    

    Stimmt das und gibt es noch weiter Beispiel für Schnittstellen in c++? Ich hätte es am liebsten so ausführlich wie möglich.


  • Mod

    Es gibt im C++-Jargon keine spezielle technische Bedeutung des Wortes "Schnittstelle", die über die Wörterbuchbedeutung hinaus geht.



  • laut den duden:
    Verbindungsstelle zwischen Funktionseinheiten eines Datenverarbeitungs- oder -übertragungssystems, an der der Austausch von Daten oder Steuersignalen erfolgt

    soll das heißen das die schnittstelle vielmehr die Parameter, der Funktionsaufruf und der rückgabewert ist.


  • Mod

    name123457 schrieb:

    soll das heißen das die schnittstelle vielmehr die Parameter, der Funktionsaufruf und der rückgabewert ist.

    Wie gesagt:

    Es gibt im C++-Jargon keine spezielle technische Bedeutung des Wortes "Schnittstelle", die über die Wörterbuchbedeutung hinaus geht.

    Du kannst auf kein spezielles Sprachelement zeigen und sagen "das ist eine Schnittstelle und alles andere nicht".

    Du nimmst zudem das Wort "Wörterbuchbedeutung" ein bisschen zu, ähh, wörtlich. Ein bisschen Mitdenken und zwischen den Zeilen lesen ist hilfreich, dann klappt das auch besser mit den Hausaufgaben.



  • class Zahl{
        private n;
    public:
        bool isPositive() const{//Sicher Teil der Schnittstelle
           return n>0;
        }
        friend bool operator==(Zahl a,Zahl b){//friends wohl auch Teil der Schnittstelle
            return a.n==b.n;
        }
    };
    bool operator!=(Zahl a,Zahl b){//Globale Funktionen, die man im selben Header 
    ///ausliefert bestimmt auch Teil der Schnittstelle
        return !(a==b);
    }
    

    Stimmt das und gibt es noch weiter Beispiel für Schnittstellen in c++? Ich hätte es am liebsten so ausführlich wie möglich.

    Dann möchte ich als Schnittstelle einer Klasse alles definieren, was es ermöglicht, eine main()-Funktion zu schreiben, die wenn man die Klasse durch eine andere Klasse gleichen Namens ersetzt, etwas anderes ausgibt.
    Insbesondere gehören also auch dazu die Methoden dieser Klasse und die globalen Funktionen mit dieser Klasse als Argument, Ausgaben von sizeof, alignof, Basisklassen, …
    Swird nur blöd bei sowas wie wenn diese Klasse Konstruktorargument einer anderen Klasse ist. Da würde man jenen Konstruktor klar zur Schnittstelle der anderen Klasse zählen. Wobei man natürlich den Fall bedenken muss, dass die andere Klasse ein Iterator auf diese Klasse ist, dann ist die ganze andere Klasse und damit auch deren Konstruktor Teil der Schnittstelle dieser Klasse.

    Oh, Mist, man kann zwar ausführlicher werden als SeppJ, aber dabei verbessert man nichts. Und es ist unscharf.

    ostream& operator<<(ostream& out,char ch){
       out<<ch;
       return out;
    }
    

    Gehört klar zur Schnittstelle von ostream.

    ostream& operator<<(ostream& out,Zahl z){
       out<<z.n;
       return out;
    }
    

    Gehört klar zur Schnittstelle von Zahl.

    Das ist ja plemplem. 😮



  • name123457 schrieb:

    zwischen Funktionseinheiten eines Datenverarbeitungs-

    Da ist ja schonmal Voraussetzung, dass man überhaupt zwei Funktionseinheiten hat ... Bspw. eine netzwerkbasierte Anwendung, die Berechnungen auf mehrere Rechner aufteilt: die Durchführung und Aufteilung der Berechnung und der Aufbau/die Verwaltung der Sockets kann man als zwei Funktionseinheiten betrachten. Jede Einheit funktioniert für sich. Die Berechnung könnte für sich laufen, die Rechner könnten auch einfach nur so per Socket miteinander verbunden sein. Um beides effizient in Einklang zu bringen, muss eine Schnittstelle her. Wobei eine Schnittstelle dann streng genommen auch wieder eine Funktionseinheit wäre ...

    Ist aber nur meine Meinung, wie man eine Schnittstelle verstehen kann und ist weniger auf C++ direkt bezogen.

    Dein Beispiel wäre demnach wohl keine Schnittstelle. Sonst ist es, wie volkard so schön sagte, total "plemplem". Gegenfrage dazu: ist alles, was mindestens vier Wände hat ein Haus? Oder ist es vllt. auch nur ein 4x4cm Quader aus Papier? Wohl alles eine Frage der Auslegung, des gesunden Menschenverstandes und der intersubjektiven Verständigung.



  • Problem ist, das man wohl "Schnittstelle" ziemlich weitläufig interpretieren kann.

    Und ja C++ kann schnittstellen 🙂 jede Header Datei ist eine Schnittstelle (Deklaration).

    Problem ist, das die Anforderungen im OO Bereich was Schnittstelle anbetrifft da weiter gehen als was C++ per Haus bietet.
    Weiß jetzt nicht warum es im C++ Kommitee probleme damit gibt, das anzuerkennen oder umzusetzen, so das es keine "echten OOP" Schnittstellen in C++ gibt.
    Würde auch das Problem der Mehrfachvererbung (Diamond of death) lindern und dem Schnittstellenbasierten Baukastensystem mehr zu gute kommen.

    In der Praxis heisst das, das deine sprachlichen OOP Schnittstellen selber definieren musst.
    An das Konzept aus anderen Programmiersprachen kommst wahrscheinlich mit (fast) 100% abstrakten Basisklassen am nächsten.
    ALso Klassen die nur abstrakte virtuelle methoden haben und den virtuellen destruktor implementieren (deswegen fast).

    Ist halt auch nicht perfekt, und sicher werden kann man auch genügend argumente gegen sowas bringen ^^ (deswegen wurde es sicher nicht standardisiert ^^)

    Ciao ....



  • name123456 schrieb:

    Was genau ist eine Schnittstelle?

    Solange ich das nicht erklären muss ist alles klar.

    Wenn ich das erklären soll - keine Ahnung! Da könnte man bestimmt ein Buch drüber schreiben, bei dessen Lektüre man nur noch mehr verwirrt wird.

    Gruß
    Werner



  • Interface Principle, vielleicht interessant hier.


Log in to reply