Schnittstelle
-
Was ist denn eine Schnittstelle bezüglich Klassen?
Mir gefallen die Definitionen im Internet nicht.
Was bedeutet das konkret? Ich brauch keine präzise technische Erklärung.
Mir reicht ein grundsätzliches Verständnis von dem Begriff.
-
Hallo Ravend,
Ravend schrieb:
Was ist denn eine Schnittstelle bezüglich Klassen?
Ich versehe darunter Klassenfunktionen, die dir erlauben auf das Innenleben einer Klasse zuzugreifen, da diese z.B.
privatesind, siehe folgendes Minimalbeispiel:#include <iostream> class foo { public: foo():_i(0){} void set(int i){ _i = i; } void show(){ std::cout << _i << std::endl; } int get(){ return _i; } private: int _i; }; int main() { foo f; f.show(); f.set(2); f.show(); int a = f.get(); std::cout << a << std::endl; return 0; }An
_ikommst du nicht heran, aber dafür hast du diepublicFunktionen - also Schnittstellen -set,showundget, um_ibearbeiten zu können.Gruß,
-- Klaus.
-
für mich sind schnittstellen (abstrakte) basisklassen, die beschreiben WAS die klassen die von ihr erben anbieten müssen aber nicht bestimmen WIE sie das tun müssen.
beispiel aus sfml:
sf::drawable ist eine schnittstelle, sie bestimmt dass alle klassen, die von ihr erben, darstellbar sein müssen, sagt aber nicht wie sie es sein müssen.anders als in gewissen anderen sprachen bieten schnittstellen in c++ auch default-implementierungen mit sich.
beispiel aus der stl:
std::numpunct bietet einige methoden an die man auch tatsächlich benutzen kann, dennoch ist es eine schnittstelle. möchte man nun seine eigene numpunct-facette machen, kann man einfach die betroffenen virtuellen methoden überschreiben.http://de.wikipedia.org/wiki/Schnittstelle_(Objektorientierung)
edit: link gefixt
-
Ravend schrieb:
Was ist denn eine Schnittstelle bezüglich Klassen?
Das Wort Schnittstelle wird - ebenso wie das Englische Wort Interface - in der Programmierung für zumindest zwei unterschiedliche Dinge verwendet.
(Drei wenn man Dinge wie RS232 der USB Schnittstellen mitzählt.)Bedeutung #1:
Die Schnittstelle einer Klasse ist die Summe ihrer public und protected Member.
Und zwar ohne die "Implementierungsdetails", aber inklusive Semantik, Preconditions/Postconditions etc.Die Schnittstelle einer Klasse setzt sich aus allen Möglichkeiten zusammen, die man "von aussen" hat um mit der Klasse zu arbeiten. Also alles was man mit einer Klasse machen kann, ohne den Code der Klasse zu verändern. Sozusagen die "Grenze" zwischen der Klasse und dem Rest der Welt.
Vererbung oder das Keyword "interface" (Java, C#, ...) müssen dabei nicht im Spiel sein. Falls doch, dann schliesst die Schnittstelle einer Kindklasse natürlich die Schnittstelle der Basisklasse mit ein, sofern public oder protected abgeleitet wird.
Ein konkretes Beispiel: Die Schnittstelle (#1) der Klasse
System.Collections.ArrayList(.NET Framework) umfasst die Interfaces (#2)IList,ICollection,IEnumerableundICloneablesowie zusätzlich alle public und protected Member der Klasse die nicht Teil eines dieser Interfaces (#2) sind.
Die Schnittstelle (#1) vonArrayListumfasst z.B. auch die Information dass Sort mit durchschnittlich O(N log N) arbeitet, worst case aber O(N^2) brauchen kann. Der zu verwendende Algorithmus ist nicht definiert, und daher auch nicht Teil der Schnittstelle. (Wäre der Algorithmus allerdings dokumentiert, dann wäre diese Information auch Teil der Schnittstelle.)Diese Variante ist natürlich nicht auf Klassen beschränkt. Man kann genau so über die Schnittstelle einer ganzen Library sprechen, eines Moduls - manchmal ist sogar nur eine einzige Funktion z.B. einer DLL gemeint.
Bedeutung #2:
Siehe Wikipedia-Link von asfdlol, das Keyword "interface" der Sprachen Java oder C#, COM Interfaces etc.
Wenn man "die Schnittstelle der Klasse X" sagt/schreibt, meint man üblicherweise #1.
Wenn man #2 meint sagt man eher nur "die Schnittstelle Y" - die Schnittstellen im Sinne von #2 "gehören" ja nicht einer Klasse, sondern sind eigenständige Konstrukte.
-
@Klaus82
Deine Erklärung ist mir viel zu konkret. Über private Membervariablen macht man sich dabei eher keine Gedanken.
Das Wort Schnittstelle ist viel abstrakter. Und umfasst vor allem auch wirklich alles was man definierterweise mit einer Klasse machen kann/darf.Teil der Schnittstelle deiner Beispielklasse sind also z.B. auch der Konsturktor sowie die drei implizit definierten Memberfunktionen (Destruktor, Copy-Konstruktor und Assignment-Operator).
Und eben das was asfdlol (und ich) auch schon geschrieben haben: es geht darum was die Funktionen machen, aber nicht wie sie es genau machen.
-
@hustbear,
hustbaer schrieb:
@Klaus82
Deine Erklärung ist mir viel zu konkret. Über private Membervariablen macht man sich dabei eher keine Gedanken.
Das Wort Schnittstelle ist viel abstrakter. Und umfasst vor allem auch wirklich alles was man definierterweise mit einer Klasse machen kann/darf.Dass ich mal viel-zu-konkret als Kritikpunkt an den Kopf geworfen kriege finde ich interessant.

Aber mal im Ernst, ich habe extra auf meine bescheidenen C++ Kenntnisse hingewiesen und schätze, dass Ravend auch erst gerade die Grundlagen lernt, wie z.B. seine Frage hier zeigt.
So lehne ich mich mal aus dem Fenster und behaupte, dass deine und asfdlols Antwort viel weitreichender sind als meine, sie Ravend allerdings nichts nützen.
Gruß,
-- Klaus.