Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Versteckte Klasse entwickeln. (https://www.delphipraxis.net/137414-versteckte-klasse-entwickeln.html)

Christian18 20. Jul 2009 16:27


Versteckte Klasse entwickeln.
 
Hallo,

gibt es in Delphi die Möglichkeit eine ganze Klasse zu verbergen? Ich habe davon gehört, dass man einzelne Methoden verbergen kann.

Folgende Situation möchte ich damit ausschließen.

Ich hab eine Klasse TKörper die nicht sichtbar sein soll.(Nur die Klassen, die von TKörper erben dürfen alles sehen.)

Dann habe ich eine Klasse TWürfel und TQuader. Diese sollen sichtbar sein. Ich möchte einfach verhindern, dass jemand von der falschen Klasse ein Object erzeugt und dann damit arbeitet. Wenn dies möglich wäre, könnte ich mit eine menge arbeit spaaren.

MfG Christian18

Klaus01 20. Jul 2009 16:31

Re: Versteckte Klasse entwickeln.
 
Guten Abend,

kann man denn keine ganze Klasse abstract deklarieren?

Grüße
Klaus

DeddyH 20. Jul 2009 16:32

Re: Versteckte Klasse entwickeln.
 
Doch, kann man: http://edn.embarcadero.com/article/34324 (class abstract)

mkinzler 20. Jul 2009 17:07

Re: Versteckte Klasse entwickeln.
 
Aber warum sollte ien abtrakte Klasse versteckt sein?

DeddyH 20. Jul 2009 17:11

Re: Versteckte Klasse entwickeln.
 
Ich hab das so verstanden, dass diese Klasse nicht zu instanzieren sein soll. Dafür muss man sie ja nicht verstecken.

mkinzler 20. Jul 2009 17:13

Re: Versteckte Klasse entwickeln.
 
Mich irritiert das "versteckt". Eine abstrake Klasse ist ja nicht versteckt, genauso wenig wie abstrakte Methoden versteckt sind.

Neutral General 20. Jul 2009 17:14

Re: Versteckte Klasse entwickeln.
 
Hi,

Ich denke er will Klasse so verstecken wie man Attribute und Methoden mittels "private" bzw "protected" verstecken kann. Das geht soweit ich weiß allerdings nicht in Delphi.

Gruß
Neutral General

Christian18 20. Jul 2009 17:35

Re: Versteckte Klasse entwickeln.
 
Hallo,

naja der nutzer der klasse soll eigentlich gar nicht wissen, dass es diese klasse gibt. sicherlich könnte er in der unit nachschauen und würde sie dann sehen.

lf chris

Meflin 20. Jul 2009 17:38

Re: Versteckte Klasse entwickeln.
 
Zitat:

Zitat von Christian18
naja der nutzer der klasse soll eigentlich gar nicht wissen, dass es diese klasse gibt. sicherlich könnte er in der unit nachschauen und würde sie dann sehen.

Und wozu soll das gut sein? Damit trittst du die Hälfte von dem, wozu OOP gut ist, in die Tonne, weil man die abgeleiteten Objekte eben NICHT pauschal behandeln könnte. So wie ich das sehe hast du zwei halbwegs sinnvolle Möglichkeiten:
1) Du definierst die Klasse als abstract - sie ist weiterhin sichtbar, aber man kann davon keine Instanzen erstellen
2) Du führst ein Interface ein, dass die anderen Klassen implementieren. Dann gibt es keine Basisklasse.

DeddyH 20. Jul 2009 17:39

Re: Versteckte Klasse entwickeln.
 
Ich habe keine Ahnung, wie man das bewerkstelligen sollte. Reicht die abstrakte Klasse denn nicht aus?

Neutral General 20. Jul 2009 17:40

Re: Versteckte Klasse entwickeln.
 
Zitat:

Zitat von Meflin
Und wozu soll das gut sein? Damit trittst du die Hälfte von dem, wozu OOP gut ist, in die Tonne, weil man die abgeleiteten Objekte eben NICHT pauschal behandeln könnte.

Naja generell ist das soooo unsinnig nicht ( :arrow: Information Hiding). Wenn es nur eine kleine Hilfsklasse für eine größere Klasse ist..

Meflin 20. Jul 2009 17:42

Re: Versteckte Klasse entwickeln.
 
Zitat:

Zitat von Neutral General
Naja generell ist das soooo unsinnig nicht ( :arrow: Information Hiding). Wenn es nur eine kleine Hilfsklasse für eine größere Klasse ist..

Ist bei dem Beispiel, worum es ja konkret geht (Körper, Würfel, Quader) definitiv nicht der Fall. Das tolle daran ist ja nun gerade, dass man für gewisse Dinge nicht iwssen muss, obs nun ein Würfel oder Quader ist. So wie er das implementieren will aber eben schon.

Neutral General 20. Jul 2009 23:28

Re: Versteckte Klasse entwickeln.
 
Oh ja.. das hatte ich überlesen... :oops:

Das kommt davon wenn man nur den ersten Satz liest :mrgreen:

Das ist dann natürlich nicht im Sinne von OOP..

Ralf Kaiser 21. Jul 2009 08:31

Re: Versteckte Klasse entwickeln.
 
Zitat:

Zitat von Christian18
gibt es in Delphi die Möglichkeit eine ganze Klasse zu verbergen? Ich habe davon gehört, dass man einzelne Methoden verbergen kann.

Leider kennt Delphi keine Attribute für Klassen (in VB.NET oder C# kann man Klassen als "private" markieren).

Die beste Entsprechnung dazu in Delphi wäre eine Klasse die im "implementation" Teil der Unit deklariert wird. Diese kann dann nur innerhalb dieser Unit benutzt werden. Wenn man selbst davon andere Klassen ableiten will gibt es allerdings Probleme. Verwendet man eine Forward-Deklaration wie hier:

Delphi-Quellcode:

uses
  classes, [.....];

type
  TDefault = class;
  TDefaultAbgeleitet = class(TDefault)
    procedure Test; override; // hier Compiler Fehlermeldung!!
  end;

implementation

type
  TDefault = class(TObject)
    procedure Test; virtual;
  end;

end.
Dann erhält man vom Compiler die Meldung, dass die Klasse TDefault noch nicht vollständig implementiert sei.

Ein "verstecken" von Klassen im implementation-Teil ist also nur dann machbar wenn man die Klasse nicht selbst erweitern will. (dazu müsste man im Beispiel die Forward-Deklaration weglassen und könnte keine "TDefaultAbgeleitet" deklarieren) Immerhin könnte man so lokale Klassen mit Hilfsroutinen erzeugen die ausserhalb der Unit nicht sichtbar sind.

Ciao,
Ralf

himitsu 21. Jul 2009 08:43

Re: Versteckte Klasse entwickeln.
 
Forward-Deklarationen müssen innerhalb eines zusammenhängendem Type-Blocks liegen.

also es darf zwischen den Forward-/Typen-Deklarationen nichts außer Typen sein
> keine Konstanten, Proceduren und auch kein Bereichswechsel ala implementation

Phoenix 21. Jul 2009 08:56

Re: Versteckte Klasse entwickeln.
 
In Delphi Prism geht das. Dort kann man eine Klasse als internal deklarieren und dann nur innerhalb dieses Assemblies verwenden.

mkinzler 21. Jul 2009 09:47

Re: Versteckte Klasse entwickeln.
 
Wenn du diese im Implementation Teil deklarierst, ist sie auch nur innerhalb der Unit sichtbar

Cyf 26. Jul 2009 18:36

Re: Versteckte Klasse entwickeln.
 
Was spricht dagegen, die Klasse in einer extra Unit zu deklarieren und diese einzubinden, nach außen dürfte diese dann, nicht sichtbar sein?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:34 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