Laden...

Frage zur Verwendung von Interfaces

Erstellt von Scarface vor 18 Jahren Letzter Beitrag vor 18 Jahren 4.335 Views
S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren
Frage zur Verwendung von Interfaces

Ich hab mich ein bischen mit Interfaces bescäftigt. Hab auch schon einige Beiträge aus dem Forum gelesen und, so denke ich, es auch einigermaßen verstanden.

Nun habe ich mit Hilfe einer Anleitung ein Interface für eine .NET dll zur Benutzung in VB 6.0 geschrieben. ( http://support.sourcegear.com/viewtopic.php?t=1180&highlight=accessing+vault+api+visual+basic )
Meine Frage ist nun: Warum wird in diesem Fall ein Interface verwendet? Ich kann da irgendwie keine Notwendigkeit erkennen. Geht das ohne nicht oder gibt es einen anderen Grund?

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Scarface,

in den Beiträgen Interface, Klassen und Vererbung ? und Erklärungsbedarf Schnittstelle wird doch der Sinn und die Abgrenzung von Interfaces zu anderen Konzepten sehr ausführlich beschrieben. Das hilft nicht?

Wenn es nicht hilft: kannst du das Szenario bitte in eigenen Worten schildern?

herbivore

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Ich hab schon einige Beiträge aus dem Forum hier gelesen und gegoogelt hab ich auch. Mir ist auch klar was ein Interface ist und wofür man es normalerweise benutzt.
Nur in diesem speziellen Fall versteh ich nicht wieso eins benutzt wird.
Dort wird ja eine DLL als Wrapper von einer .NET dll erstellt um diese in VB 6.0 zu benutzen. (Was für ein Satz.) Das habe ich auch gemacht und noch ein paar Methoden dazugeschrieben. Funktioniert ja auch einwandfrei. Nur wenn ich in VB 6.0 in die Objektbibliothek gehe sehe ich sowohl das Interface als auch die Klasse, die davon "erbt". Da es nur eine Klasse gibt sehe ich die Notwendigkeit des Interfaces nicht, oder muss ich das benutzen, da VB 6.0 die Funktionen sonst nicht erkenn???

Ich hoffe ich habe mich einigermaßen verständlich ausgedrück. Wenn nicht kannst du ja nochmal genauer nachfragen.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Scarface,

das du schon verschiedenes über Interfaces gelesen hattest, war mir bewußt. Aber ich wusste ja nicht, ob du auch diese beiden Threads gefunden hattest.

Wenn es einen Wrapper (der ja zwangsläufig eine Klasse ist) gibt, ist in der Tat nicht unmittelbar klar, wofür man noch ein Interface braucht. Allerdings habe ich die Beschreibung nicht ganz genau verstanden.

Wie heißt den die Klasse und wie das Interface? (Ich hab's nicht runtergeladen).

herbivore

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Die Klasse heißt VaultInterface und das Interface IVaultinterface.

Bin ja schon froh das es funktioniert. Hab nur drüber nachgedacht ob ich meine Praxisarbeit in diesem Semester über das Projekt schreiben soll und da sollte ich das ja schon verstehen. Vor allem, da ich das ja später auch vorstellen muss.

104 Beiträge seit 2005
vor 18 Jahren

Hallo!

Habe hier euren Thread gelesen und da stellte sich mir eine Frage die einer Erklärung bedarf:

Was sind Wrapper und wofür braucht man das?

Nach dem ich das hier gelesen habe, denke ich mal das man diese Wrapper braucht um z.B. eine dll in C# und auch in VB zu nutzen?
Liege ich da richtig, oder vollkommen falsch?
Kann mir leider nicht richtig einen Reim darauf machen.

=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)
S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Ein Wrapper ist eine Hülle. Es wird also einen Hülle um die DLL gebaut, damit sie eben in VB oder so benutzt werden kann.
Vielleicht kann das jemand anderes noch besser erklären. Beschäftige mich auch noch nicht lang damit.

I
1.739 Beiträge seit 2005
vor 18 Jahren

"Meine Frage ist nun: Warum wird in diesem Fall ein Interface verwendet? Ich kann da irgendwie keine Notwendigkeit erkennen. Geht das ohne nicht oder gibt es einen anderen Grund?"
Nach meiner Ansicht wird das Interface verwendet, um die Austauschbarkeit der Basis zu gewährleisten. Also früher oder später wird für die entsprechende Funktionalität eine andere Technologie benutzt. Die neue Implementation verwendet das selbe Interface. Ergo ist die eigentliche Logik des Programms, mit Hilfe des Interfaces, unabhängig von diversen Ressourcenzugriffen(im Sinne des WIE).

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Versteh ich nicht. Wenn sich die Logik ändert muss ich zwar die Methoden umschreiben. Die können doch aber ihre Namen behalten. Die musste ich ja sowieso selber da rein schreiben.
Ob ich da nun ein Interface für hab oder nicht ist da doch egal, oder hab ich dich falsch verstanden?

I
1.739 Beiträge seit 2005
vor 18 Jahren

"Ob ich da nun ein Interface für hab oder nicht ist da doch egal, oder hab ich dich falsch verstanden?"
Vermutlich.
Sinn und Zweck des Ganzen ist es die eigentliche Logik des Programms von Resourcenzugriffen zu trennen.
Einfaches Beispiel: Du hast eine Klasse Person mit bestimmten Eigenschaften, Methoden und Abhängigkeiten. Demzufolge hast du einerseits Code zu schreiben, der sich um die Belange dieser Klasse kümmert, weiterhin um Herkunft der Daten und die Visualisierung/Eingabe. Mit Hilfe von Interfaces kann man diese Dinge entkoppeln, womit weniger Abhängigkeiten entstehen.
Im konkreten Fall wird davon ausgegangen das die entsprechende DLL irgenwann ersetzt wird. Mit Hilfe des Interfaces wird sichergestellt das nur eine Klasse von den Änderungen betroffen ist.

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Das mag ja normalerweise sein. Aber in meinem Fall seh ich da den Unterschied nicht, da es eh nur die eine Klasse gibt.

S
127 Beiträge seit 2004
vor 18 Jahren

Original von Scarface
Versteh ich nicht. Wenn sich die Logik ändert muss ich zwar die Methoden umschreiben. Die können doch aber ihre Namen behalten. Die musste ich ja sowieso selber da rein schreiben.
Ob ich da nun ein Interface für hab oder nicht ist da doch egal, oder hab ich dich falsch verstanden?

Nun stell dir aber vor das eine neue Klasse hinzukommt die auch die gleichen Methoden haben soll. Über das Interface ist dann gewährleistet das das in allen Klassen die Methoden gleich heißen und du so deinen VB 6 Code nicht mehr ändern musst. (so kann man dan beide Klassen ansprechen ohne den Code zuändern)

Ich versuche es mal an einem Beispiel:

public interface IAuto
{
float GetMaxGeschwindigkeit()
}

public class Trabbi : IAuto
{
public float GetMaxGescwindigkeit()
{
return 100;
}
}

public class Ferari : IAuto
{
public float GetMaxGescwindigkeit()
{
return 300;
}
}

Tipp schau dir mal den PlugIn-Patter an der zeigt sehr gut zu was man Interfaces einsetzt. (Sollte hier im Forum auch mehrere Beiträge geben)

I
1.739 Beiträge seit 2005
vor 18 Jahren

Wenn du der Meinung bist, dass ein Interface in deinem Fall nur Overhead ist kannst du die Klasse auch direkt ansprechen(die Verwendung von Interfaces ist kein Zwang). Allerdings macht das aus dem Code heraus wenig Unterschied, und man verbaut sich nur Möglichkeiten.

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Ich brauch eigentlich nur drei Methoden aus der Klasse. Das wird sich auch nicht weiter ändern, da alles weitere, was in Verbindung mit dieser API geschrieben wird hächstwahrscheinlich eh in .NET geschrieben werden wird.