Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abgeleitete Klassen (https://www.delphipraxis.net/91836-abgeleitete-klassen.html)

conti 10. Mai 2007 16:18


Abgeleitete Klassen
 
Ich habe eine Klasse: THauptklasse mit den "public" Funktionen:
public
A();
B();
C();

... eine Klasse (die aus THauptklasse abgeleitet wurde): TKind_1 mit der Funkt:
D();

... eine 2-te Klasse( die aus THauptklasse abgeleitet wurde): TKind_2 mit der Funkt:
E();

... nun:
K1: TKind_1; // Ich möchte mit K1, D() aufrufen können, aber auch A(), B(), C()
K2: TKind_2; // Ich möchte mit K2, E() aufrufen können, aber auch A(), B(), C()

Das Problem: mir scheint das nicht als reine OOP, mir gefällt es nicht, dass A(), B(), C() "public" sind. Wenn ich "protected" verwenden würde, dann müsste ich in jeder Kindklasse die Funktionen neu definieren?!

Wie sollte ich vorgehen?

xaromz 10. Mai 2007 16:28

Re: Abgeleitete Klassen
 
Hallo,
Zitat:

Zitat von conti
mir scheint das nicht als reine OOP, mir gefällt es nicht, dass A(), B(), C() "public" sind. Wenn ich "protected" verwenden würde, dann müsste ich in jeder Kindklasse die Funktionen neu definieren?!

nein. Erstens ist das ganz sauber OOP. Zweitens ist der Vorteil von protected ja eben, dass die Funktionen außerhalb private, in der Klasse sowie in allen abgeleiteten Klassen aber frei zugänglich sind.

Gruß
xaromz

conti 10. Mai 2007 16:34

Re: Abgeleitete Klassen
 
Danke.
D.h. ich soll die Funktionen aus der Hauptklasse als protected definieren, und dann in jeder einzelne Kindklasse implementieren?

Gruss
conti

Udontknow 10. Mai 2007 16:35

Re: Abgeleitete Klassen
 
Butter bei die Fische! :)

Jedes sichtbare Steuerelement hat Funktionen zum Erhalten und zum Ändern der Positionskoordinaten. Es ist doch nur vernünftig, daß diese Sachen public sind, auch in den Nachfahren, denn schliesslich will man auch von aussen die Position ändern können, egal ob es sich nun um ein Editfeld oder ein DBGrid handelt!

(Jaja, schon gut, die Methoden sind in Delphi nicht public, dafür aber die Properties Left und Top, die diese ansprechen... Es soll ja nur als Veranschaulichung dienen.)

Cu,
Udontknow

Edit: Die Sichtbarkeit (private,protected,public) hat nix mit der Implementation zu tun!

Apollonius 10. Mai 2007 16:36

Re: Abgeleitete Klassen
 
Nein. Wenn du von außen auf die Funktionen zugreifen willst, musst du public verwenden. Protected nur, wenn es sozusagen eine Hilfsmethode ist, die außerhalb nicht benötigt wird.

xaromz 10. Mai 2007 16:38

Re: Abgeleitete Klassen
 
Hallo,
Zitat:

Zitat von conti
D.h. ich soll die Funktionen aus der Hauptklasse als protected definieren, und dann in jeder einzelne Kindklasse implementieren?

das habe ich nicht gesagt. Wenn Du eine Methode definierst, musst Du sie auch implementieren. Es sei denn, Du legst die Methode als abstract an und überschreibst sie dann in den abgeleiteten Klassen. Wenn die Methode allerdings immer das Gleiche machen soll, ist es natürlich sinnvoll, diese nur einmal in der Basisklasse zu implementieren. Ob die Sichtbarkeit dann private, protected, oder public ist, hängt davon ab, wer die Methode aufrufen dürfen soll: Nur die implementierende Klasse, auch abgeleitete Klassen oder jeder.

Gruß
xaromz

conti 10. Mai 2007 16:45

Re: Abgeleitete Klassen
 
Ich möchte, dass nur die abgeleiteten Klassen die Funktionen aufrufen können.

Gruss
conti

mkinzler 10. Mai 2007 16:52

Re: Abgeleitete Klassen
 
Dann liegst du doch bei protected gar nicht schlecht.

conti 10. Mai 2007 16:55

Re: Abgeleitete Klassen
 
Verstanden.
Danke allen.

Gruss
conti


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz