AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Interfaces + Factorys
Tutorial durchsuchen
Ansicht
Themen-Optionen

Interfaces + Factorys

Ein Tutorial von stahli · begonnen am 29. Jan 2015 · letzter Beitrag vom 22. Feb 2015
Antwort Antwort
Seite 6 von 7   « Erste     456 7      
Benutzerbild von stahli
stahli
Registriert seit: 26. Nov 2003
Ich habe länger gebraucht, um das Konzept und die Benutzung von Interfaces in Delphi zu verstehen.

Es gibt zwar einige Erklärungen und Beispiele, die waren jedoch nicht immer für Neulinge in dem Themenbereich geeignet.

Daher habe ich hier einmal versucht, meine Erkenntnisse und bisherigen Erfahrungen zusammenzufassen.
Die Videos sind nicht hochprofessionell, aber vielleicht helfen sie einigen Interessierten, die Interfaces in Delphi schneller zu verstehen und anwenden zu können...


Die Erläuterungen habe ich in 3 Blöcke aufgeteilt:

Einige Basics zu Interfaces in Delphi.
http://youtu.be/MEX1836SvgE

Etwas detaillierte Infos und Anwendungsbeispiele.
http://youtu.be/IyvqZAUSJGY

Verbergen der Klassen und Arbeiten nur mit Interfaces.
http://youtu.be/NcbIV0SUFJs


Wenn ich etwas fehlerhaft oder unvollständig erläutert habe, dann können wir das hier gern richtig stellen...
Angehängte Dateien
Dateityp: zip Interfaces_Factory.zip (89,1 KB, 72x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
 
mjustin

 
Delphi 2009 Professional
 
#51
  Alt 2. Feb 2015, 17:22
... ist Delphi keine objektorientierte Sprache,
so wie auch C# und insbesondere Java das nicht sind.
Dem ist wohl nichts hinzuzufügen. In diesem Kontext steht die Programmierung
in Delphi, Java und C# dem direkten Schreiben von Maschinencode näher als
echte Hochsprachen wie zum Beispiel Assembler, oder dem seit jeher bewährten
copy con > programm.exe.
Michael Justin
  Mit Zitat antworten Zitat
Dejan Vu
 
#52
  Alt 2. Feb 2015, 20:29
...
Zumindest in dieser Hinsicht ist Delphi keine objektorientierte Sprache,
so wie auch C# und insbesondere Java das nicht sind.
...Ohne Einsicht in die Implementierung
lassen sich diese Informationen nicht gewinnen. Man kann durch die Verwendung von Interfaces
oder abstrakter Klassen sicher einiges entkoppeln, aber letztendlich bleibt der Einblick in das
Innere einer Klasse unverzichtbar, wenn man in Delphi & Konsorten programmiert, leider.
Welche Programmiersprachen sind dann objektorientiert? Bei welcher Programmiersprache erkenne ich die komplette Spezifikation, ohne die Spezifikation zu lesen?

In einem normalen Kaufvertrag steht doch auch nicht, ob ich eins auffe Fresse kriege oder eine kolumbianische Krawatte bekomme, wenn ich nicht zahle. Es geht bei einem Vertrag doch gerade nicht um das Verhalten der Klassen/Objekte, sondern um die Interaktion. Oder willst Du das Verhalten eines Vertrages gleich mit deklarieren? Das wäre natürlich ein interessanter Ansatz. Wo gibt es das? Oder meinst Du aspektorientierte Programmierung sei ein Schritt in diese Richtung?
  Mit Zitat antworten Zitat
Jumpy

 
Delphi 6 Enterprise
 
#53
  Alt 3. Feb 2015, 08:42
@all
Sir Rufos Beispiel war ja grundsätzlich zutreffend. Ich fand es nur zu detailliert, um das Wesentliche hervozuhen. Und dieser Code zum Schluss ist (für mich) nicht nachvollziehbar und hat wohl erst die Verwirrung verursacht.
Dann ziehe ich meine Frage nach der Implementierung des TRoutedStreamHandler als OT zurück. Vielleicht hat Sir Rufo oder jemand anders ja Lust das in einem fortgeschrittenen Thread zu erläutern. Der Threadtitel hier heißt ja Interfaces + Factories und die Idee hinter dem TRoutedStreamHandler ist ja wie ich das verstehe eine alternative zu einer Factory(klasse/methode), welche einem die für eine Aufgabe passende Klasse erzeugt und auf das Interface liefert. Stattdessen werden ja scheinbar alle Möglichen Klassen für das Interface erzeugt und innerhalb von TRoutedStreamHandler verwaltet.
Ralph
  Mit Zitat antworten Zitat
Sailor

 
Delphi 2010 Professional
 
#54
  Alt 3. Feb 2015, 15:55
@Dejan Vu
Zitat:
Welche Programmiersprachen sind dann objektorientiert? Bei welcher Programmiersprache erkenne ich die komplette Spezifikation, ohne die Spezifikation zu lesen?
Bei keiner. Deshalb ist der Ansatz über Interfaces bestenfalls der erste Schritt in die richtige Richtung. Der müßte aufgebohrt werden:
1. Welche Bedingungen müssen die Parameter (nicht 0, nicht NIL, x < y usw.) einer Prozedur/Funktion erfüllen?
2. Was macht die Funktion/Prozedur? Aber ohne auf die Implementierung einzugehen. Da gibt es einige Ansätze, nur sind die eben sehr mathematisch und so schlecht unter die Masse zu bringen. Vielleicht läßt sich da etwas mit dem Gherkin/Cucumber approach machen.
Und dann gibt es noch die Möglichkeit, auf die operationale Programmierung zu verzichten und lokale, mathematisch fundierte, das aber gut versteckende Theorien zu benutzen. Beispiel Grammatiken: Mit wenigen Zeilen beschreibst Du eine komplexe Aufgabe. Dann ein Klick und Du hast ein ausführbares Programm. Letzteres ist entscheidend. Wenn ich eine solche Beschreibung zu Fuß in ein Programm umwandeln muß, ist sie nutzlos. Leider hat sich das bis zu den Theoretikern noch nicht rumgesprochen.
Irgendwas wird sich tun müssen. Die Hartware hat riesige Fortschritte gemacht, aber die Weichware wird zum großen Teil immer noch wie anno dunnemals hergestellt. Na ja, ist wohl nun ziemlich OT.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 11 Alexandria
 
#55
  Alt 3. Feb 2015, 17:22
[OT]
Ja das ist schon mehr als OT
Aber die Idee ist nicht uninteressant - wobei mein Ansatz ein anderer wäre.
Wenn Deine Profilangaben ernst zu nehmen sind, dann scheinst Du Dich ja in dem Bereich auszukennen.
Für weiterführende Diskussionen sollte man das aber mal aus dem Thread hier heraus ziehen...
[/OT]
  Mit Zitat antworten Zitat
Dejan Vu
 
#56
  Alt 3. Feb 2015, 19:15
Bei keiner. Deshalb ist der Ansatz über Interfaces bestenfalls der erste Schritt in die richtige Richtung. Der müßte aufgebohrt werden:
1. Welche Bedingungen müssen die Parameter (nicht 0, nicht NIL, x < y usw.) einer Prozedur/Funktion erfüllen?
Das ist, soweit ich mich erinnere, ein Ansatz, er vor 40 Jahren aufgegeben wurde. Ich kann mich dunkel an Ansätze dieser Art erinnern. In Ansätzen ist er jedoch mit den Schrottsprachen C# und Delphi (und den ganzen anderen Müll) über Attribute abzubilden und ein alter Hut.

Den Rest (also die mathematische Formulierung, das Kalkül, oder?) hatte ich im Studium in den 80er Jahren. Da wurde das mal versucht aber aufgegeben, da die beiden einzigen, die das weltweit verstanden haben, sich nicht mehr leiden konnten.

Insofern ist dein Einwand, das Delphi, C#, Java keine objektorientierten Sprachen seien, ziemlicher Quark, findest du nicht auch? Genauso könnte ich ja sagen, das das noch nicht mal Sprachen seien, also richtige Sprachen, richtig tolle, mit denen man richtig programmieren kann. Ich hab zwar auch keine Ahnung, wie eine richtige Sprache dann aussehen soll, aber 'NEIN!1!11' kann man schon mal präventiv sagen. Schadet ja nichts.

*Kopfschüttel*
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 11 Alexandria
 
#57
  Alt 19. Feb 2015, 16:07
Noch eine kleine Überlegung zu Properties...

Es wäre m.E. sehr hilfreich und der Übersichtlichkeit dienlich, wenn man die Getter und Setter im Interface nicht komplett definieren müsste:

Delphi-Quellcode:
  IFlieg = interface
     ['{0E839812-DAB3-47F0-AF3E-AB05FFDD6CE6}']
     procedure Flieg;
     // function get_X: Integer;
     // procedure set_X(Value: Integer);
     property X: Integer read write; // read get_X write set_X;
   end;
 
  TVogel = class(TInterfacedObject, IFlieg)
   private
     fX: Integer;
     function get_X: Integer;
     procedure set_X(Value: Integer);
   public
     procedure Flieg;
     property X: Integer read get_X write set_X;
   end;
Dann würde im Interface nur vorgegeben, DASS es eine Property mit Getter und/oder Setter geben muss und in der Klasse werden die Details geregelt.

Die Funktionalität der Interfaces müsste ja nicht verändert werden. Lediglich der Parser müsste das Konstrukt akzeptieren und der Compiler daraus alles ganz normal wie gehabt zusammenbauen.

Ich würde dies für eine nützliche Vereinfachung halten.


PS: Eine ShortKey für das Vervollständigen eines Klassenrumpfes mit den notwendigen Interface-Methoden gibt es nicht oder? (Ich meine: Taste drücken und der Klasse werden alle fehlenden Methoden der verwendeten Interfaces eingebaut)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

 
Delphi 12 Athens
 
#58
  Alt 19. Feb 2015, 16:33
PS: Eine ShortKey für das Vervollständigen eines Klassenrumpfes mit den notwendigen Interface-Methoden gibt es nicht oder? (Ich meine: Taste drücken und der Klasse werden alle fehlenden Methoden der verwendeten Interfaces eingebaut)
Fast! Wenn du in der Klassendefinition die Code-Vervollständigung mit <Ctrl>-<Space> aufrufst, zeigt Delphi dir die fehlenden Interfacemethoden an. Die kannst du dann alle markieren und mit <Enter> werden die Deklarationen erzeugt. Der Rest geht mit der Klassenvervollständigung <Ctrl>-<Shift>-C dann wie üblich.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 11 Alexandria
 
#59
  Alt 20. Feb 2015, 19:34
Ja danke, das hilft schon mal wenigstens etwas...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#60
  Alt 20. Feb 2015, 19:42
Ja danke, das hilft schon mal wenigstens etwas...
Diese Shortcuts sollten aber bekannt sein, denn damit kann man nicht nur die Interface-Methoden ratzfatz implementieren, sondern auch die virtuellen Methoden vom Klassenvorfahr (und denen davor ...).

Auch noch hübsch mit override gekennzeichnet und auch im gleichen Sichtbarkeitsbereich (private, protected, ...). Bis auf die Properties, die wandern in den published Teil.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 7   « Erste     456 7      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz