Autor Beitrag
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: So 22.06.08 12:53 
Hallo.

Ich habe letztens irgendwo gehört, dass Delphi auch Interfaces kann. Also nicht nur von einer Elternklasse erben sondern auch von Interfaces.
Nur finde ich leider in der OH von meinem Turbodelphi keine Infos darüber.
Kennt jemand ein Tutorial, oder einen Artikel in dem Interfaces beschrieben werden?

Danke,
Matze

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: So 22.06.08 13:29 
Hi,

Interfaces werden in Delphi im Endeffekt genauso definiert wie Klassen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type
  IMyInterface = interface
    procedure Foo(const Param: String);
    function Bar(var Param1: Integer; var Param2: Boolean): String;
  end;
Im Gegensatz zu abstrakten Klassen kannst du bei den Methodennamen das virtual; abstract; weglassen.

Vererben kannst du sie deinen Klassen dann genau wie normale Elternklassen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
type
  TMyNewClass = class(TMyParentClass, IMyInterface)
    public
      constructor Create(const MyParam: Variant);
      procedure Foo(const Param: String);    
      function Bar(var Param1: Integer; var Param2: Boolean): String;
  end;

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
matze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: So 22.06.08 17:16 
ah ok. Das ist ja cool. Aber ich kann eine Klasse von mehreren Interfaces etwas erben lassen oder?

BTW: Kennt denn jemand ein Tutorial, wie man nun mit Interfaces umgeht? Denn: Aus meiner Informatik-Vorlesung weiß ich zwar, wie man in Java mit Interfaces arbeitet, aber nicht, wie man das in Delphi macht...

_________________
In the beginning was the word.
And the word was content-type: text/plain.
hui1991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: So 22.06.08 19:00 
Schau dir mal diese Seite an:
www.delphi-treff.de/...t-pascal/interfaces/

Habe ich in Google mit dem Begriff "Interfaces in Delphi" gefunden. Das war der 2 Link von oben.
So wie ich das Verstanden habe, kann man mit Interfaces spezielle Befehle in eine Klasse einfügen.

Hm.. vllt das noch mit anschauen:
www.softwareschule.c...load/interfaces3.pdf
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 22.06.08 21:35 
user profile iconmatze hat folgendes geschrieben:
ah ok. Das ist ja cool. Aber ich kann eine Klasse von mehreren Interfaces etwas erben lassen oder?

BTW: Kennt denn jemand ein Tutorial, wie man nun mit Interfaces umgeht? Denn: Aus meiner Informatik-Vorlesung weiß ich zwar, wie man in Java mit Interfaces arbeitet, aber nicht, wie man das in Delphi macht...

Die Interface-Funktionalität in Delphi wird vor allem für COM Anwendungen verwendet, kann aber für jeden anderen Zweck auch gebraucht werden. Man sieht Interfaces in gewöhnlichen VCL Anwendungen relativ selten, obwohl meiner Meinung nach völlig unbegründet. Die VCL selbst verwendet Interfaces nicht an sehr vielen Orten. Ein Beispiel wäre TForm.Designer. Dort hängt sich der Design-Editor der IDE rein, um Mausklicks abzufangen, um die Komponenten verschiebbar zu machen (Dank Verwendung von Interfaces könntest du dort deine eigene Designer-Implementierung reinhängen).

Der Gebrauch von Interfaces verändert aber u.U. die Handhabung von Objekten etwas. Auch leidet die Geschwindigkeit bei Verwendung von Interfaces etwas darunter. Wenn eine Klasse ein Interface implementiert, fügt der Compiler automatisch Code für die automatische Referenzzählung der Objekte ein. So wird bspw. bei Verwendung von lokalen Interface-Variablen speziellen Code beim Austritt der Funktion generiert (analog zu Strings); und bei jeder Zuweisung an eine Interface-Variable werden zusätzlich zur Zuweisung Support-Funktionen aufgerufen, die die Referenzzählung updaten. Dies ist wie gesagt für COM-Anwendungen wichtig, damit die Objekte an "einem anderen Ort" auch automatisch wieder freigegeben werden, wenn diese nicht mehr verwendet werden. Oft verzichtet man jedoch innerhalb eines Delphi-Projekts auf die Referenzzählung (so ist dies z.B. bei TComponent der Fall, da diese Klasse über eine eigene Speicherfreigabe über einen Owner Mechanismus verfügt). Jedoch muss immer ein Handling für Referenzzählung gegeben sein, auch wenn die nur die Anweisung zurückgibt, dass keine Referenzzählung erwünscht ist. Wie du siehst kann dies enormen Overhead für nichts bedeuten.

Auf der anderen Seite machen die Interfaces die Verwendung verschiedener Design-Patterns und Architekturüberlegungen erst möglich. Dass eine Klasse mehrere Interfaces implementieren kann ist dabei natürlich zentral. In Delphi kannst du sogar eine Interface Implementation in einer separaten Klasse halten und diese in mehreren Klassen verwenden.

Last but not least: Nur dank voller Integration von (COM) Interfaces in die Sprache ist es möglich, ActiveX Komponenten mal so eben schnell in ein Delphi-Programm reinzuladen (z.B. Windows Media Player, eingebettetes Word-Fenster, Flash Plugin, oder auch Scripting Engines ...). Was in C++ nur mit "Smart Pointern" und viel Gemüse drumherum möglich ist, ist das ganze in Delphi in die Sprache integriert. So kannst du z.B. in weniger als 10 Zeilen Code einen JScript Interpreter in dein Delphi-Programm laden und z.B. über Delegation beliebige Delphi-Objekte dem JScript-Interpreter bekannt machen, sodass diese über JS-Skripts ansteuerbar werden.
matze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Mo 23.06.08 09:45 
Ja hallo! Da kennt sich aber einer aus :-)
Vielen Dank für die ausführliche Antwort. Damit sind eigentlich alle meine Fragen auf einen Streich erschlagen :-)

Danke an alle und im speziellen an user profile icondelfiphan. Ihr habt mir sehr geholfen!

_________________
In the beginning was the word.
And the word was content-type: text/plain.
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Do 26.06.08 21:06 
user profile iconmatze hat folgendes geschrieben:
Damit sind eigentlich alle meine Fragen auf einen Streich erschlagen :-)


Mist, da bin ich doch glatt zu spaet mit meinem Link:

www.dummzeuch.de/del...erfaces/deutsch.html

twm
matze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: So 29.06.08 15:03 
Nein. Zu spät ist nie :-) Aber bei mir geht der Link nicht.

_________________
In the beginning was the word.
And the word was content-type: text/plain.
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: So 29.06.08 17:56 
user profile iconmatze hat folgendes geschrieben:
Nein. Zu spät ist nie :-) Aber bei mir geht der Link nicht.


Bei mir schon?!?

Ansonsten: www.dummzeuch.de und dann durchklicken ueber Delphi / Interfaces.

twm
matze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Do 03.07.08 14:25 
alles klar. Jetzt gehts. Danke!

_________________
In the beginning was the word.
And the word was content-type: text/plain.