Einzelnen Beitrag anzeigen

Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Sinn und Zweck von Interfaces

  Alt 20. Dez 2008, 12:59
Hallo!

Ich beschäftige mich gerade erstmalig tiefer mit COM und hier spielen Interfaces ja eine entscheidende Rolle. Allerdings verstehe ich den Sinn und Zweck dahinter nicht so ganz.

Bislang hatte ich eigentlich eine recht klare Vorstellung davon was ein Interface ist und wofür man es braucht. Bei den Tutorials zu COM ist das Ganze aber ins Schwanken geraten. Am Besten erkläre ich erstmal was ich unter einem Interface verstehe und wenn ich Blödsinn erzähle könnt ihr mich gerne korrigieren.


Was ich bislang unter einem Interface verstehe:
Ein Interface definiert eine Schnittstelle, also eine Menge von Methoden. Hierbei wird nur gesagt welche Methoden es gibt und wie diese aussehen (Name und Signatur), nicht aber wie diese implementiert sind. In dieser Hinsicht ist ein Interface nichts anderes als eine abstrakte Klasse: In beiden Fällen werden Methoden definiert aber nicht implementiert. Einziger Unterschied ist, dass ein Interface ausschließlich Definitionen enthält, während eine in einer abstrakten Klassen neben abstrakten Methoden durchaus auch konkrete vorhanden sein können.

Interfaces sind also ein Zusicherung, dass eine Klasse die ein Interface implementiert bestimmte Methoden anbietet. Interfaces sind notwendig, weil es in Delphi keine Mehrfachvererbung gibt. Andernfalls könnte man auch nur mit abstrakten Klassen arbeiten.

Was bei COM anders ist
Soweit ich das Verstanden habe muss jedes Interface mit einer GUID versehen und von IUnknown abgeleitet werden. Die GUID ist notwendig, damit ein Interface eindeutig identifiziert und im System registriert werden kann. IUnknown ist das "Oberinterface" aller anderen Interfaces. Hier wird die Implementierung für die Referenzzählung, etc. gefordert.


Habe ich das soweit richtig beschrieben? Dann ergeben sich für mich ein paar Fragen die ich mir nicht beantworten kann:

Wofür brauche ich die die GUID und IUnknown bei der "normalen" Programmierung?
Den Sinn und Zweck den diese Teile bei COM verwenden habe ich durchaus verstanden, aber was ist wenn ich gar kein COM verwende sondern mir ein Interface einfach nur eine Schnittstelle zusichern soll? Wozu brauche ich dann eine GUID? Wozu brauche ich dann einen Referenzzähler? Gibt es bei Delphi gar keine "normalen" Interfaces die nur für die "normale" Programmierung genutzt werden und nicht für COM?

Wozu sind Interface-Objekte notwendig?
In mehreren Tutorials werden Interfaces quasi als Objekte verwendet. Hier ein Beispiel:

Delphi-Quellcode:
type
  IMyInterface = interface
    ['{6675C5C0-D95C-11D4-BDE0-00A024BAF736}']
    procedure DisplaySomething;
  end;

  TMyClass = class(TInterfacedObject, IMyInterface)
    procedure DisplaySomething;
  end;

  TMyForm = class(TForm)
    TestBtn: TButton;
    procedure TestBtnClick(Sender: TObject);
  end;

var
  MyForm: TMyForm;

implementation

{$R *.DFM}
procedure TMyForm.TestBtnClick(Sender: TObject);
var
  MyClass : TMyClass;
  MyInterface : IMyInterface;
begin
  // Warum erstellt man ein "Interface Objekt"?
  MyInterface := TMyClass.Create;
  MyInterface.DisplaySomething;

  // Warum erstellt man nicht direkt ein "echtes" Objekt und benutzt das?
  MyClass := TMyClass.Create;
  MyClass.DisplaySomething;
end;
Welchen Sinn/Vorteil/Nutzen/Zweck hat dieses Vorgehen? Warum erstellt man nicht einfach ein "normales" Objekt der Klasse die das Interface implementiert und verwendet dieses?

Herzlichen Dank
Ares
  Mit Zitat antworten Zitat