Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kreuzende Beziehung zw. zwei Objekten (https://www.delphipraxis.net/133147-kreuzende-beziehung-zw-zwei-objekten.html)

mkinzler 26. Apr 2009 21:53

Re: Kreuzende Beziehung zw. zwei Objekten
 
In Delphi kann man Klassen mit abstrakten Methoden trotzdem instantiieren. Erst beim Zugriff auf eine nicht implemnetierte Methode wird dann eine Exception ausgelöst.

mirage228 26. Apr 2009 21:55

Re: Kreuzende Beziehung zw. zwei Objekten
 
Zitat:

Zitat von SebE
NOCH nicht?
in Pascal gab's die mal, also kann man davon ausgehen, dass es sie auch in Zukunft nicht mehr geben wird (schade eigentlich).

Es ist nur möglich einzelne Methode mit "virtual; abstract" zu vershen (Beispiel: TStrings) - für die gesamte Klasse (wie z.B. bei Java) ist es nicht möglich.
Mit "noch nicht" meinte ich, dass dieses Feature ja evtl. in späteren Versionen hinzugefügt wird...

stoxx 26. Apr 2009 21:57

Re: Kreuzende Beziehung zw. zwei Objekten
 
reine Neugier, was kann man mit abstrakten Klasse machen, was man mit abstrakten Methoden nicht realisieren kann?

mkinzler 26. Apr 2009 22:01

Re: Kreuzende Beziehung zw. zwei Objekten
 
Eine Ableitung erzwingen. Dürfte aber für dieses Problem nicht entscheidend sein.

stoxx 26. Apr 2009 22:06

Re: Kreuzende Beziehung zw. zwei Objekten
 
Zitat:

Zitat von SebE
@stoxx:

Dieses "forward"-Deklarieren ist zwar hilfreich, aber entspricht nicht dem Ansatz: Erst Deklarieren, dann nutzen.

ist dieser Ansatz in Zeiten der Entwurfsmuster noch sinnvoll?
und warum hat dann Delphi nichts dagegen, Units im Implementationsteil dann doch wieder gegenseitig zu überkreuzen und eine Abhängigkeit herzustellen. Wenn es doch so gewollt ist, hätte man das doch auch unterbinden müssen, oder nicht?
Also doch eher eine Compilerschwäche (oder Stärke) .. ist halt schneller beim compilieren.

SebE 26. Apr 2009 22:19

Re: Kreuzende Beziehung zw. zwei Objekten
 
@stoxx:
mir persönlich gefällt diese (erlaubte) Kreuzverwendung überhaupt nicht.

Zitat:

Zitat von mkinzler
Eine Ableitung erzwingen. Dürfte aber für dieses Problem nicht entscheidend sein.

...aber für die Lösung.
Man kann bei der (abstrakten) Klasse A1 (aus meinem Beispiel) davon ausgehen, dass A2 verwendet wird.

mkinzler 26. Apr 2009 22:22

Re: Kreuzende Beziehung zw. zwei Objekten
 
War Antwort auf Frage von stoxx

stoxx 26. Apr 2009 22:28

Re: Kreuzende Beziehung zw. zwei Objekten
 
Zitat:

mir persönlich gefällt diese (erlaubte) Kreuzverwendung überhaupt nicht.
Warum nicht? Was ist daran so schlimm, wenn man seinen Code in mehrere Dokumente verteilt?
Ein Motor im Auto kann man auch herausnehmen. Klar, alleine ohne Auto kann man damit nix anfangen, aber zumindest ist er austauschbar.

Auch Deine Graphikkarte im Computer ist alleine nicht verwendbar, trotzdem kann man sie getrennt vom Computer lagern, wenn man dies möchte.


@ War Antwort auf Frage von stoxx

ah Danke .. da entfallen ja dann die Messageboxen mit der Angabe des Klassennamens, wenn man mal wieder eine virtual abstracte Methode vergessen hat zu programmieren :)

SebE 26. Apr 2009 22:34

Re: Kreuzende Beziehung zw. zwei Objekten
 
Hab ich schon einmal geschrieben.
Ich verfolge eine strikte Philosophie:
Erst sagen, wie etwas aussieht, bevor man es verwendet.

dieses Prinzip (wie es der Delphi-Compiler verwendet), dass man innerhalb des SELBEN Type-Konstruktes Kreuz-Deklarationen erzeugen darf, geht NOCH in Ordnung, da man dies Überschauen kann. Aber dieses Prinzip auf ganze Module angewandt, ist unübersichtlich und darf nicht erlaubt sein.

mkinzler 26. Apr 2009 22:41

Re: Kreuzende Beziehung zw. zwei Objekten
 
Lässt sich aber nicht verhindern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 2 von 4     12 34      

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