AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vererbung von Methoden verhindern

Ein Thema von .chicken · begonnen am 18. Mai 2008 · letzter Beitrag vom 19. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#1

Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 10:43
Hi, ich habe ein Problem. Ich habe in meiner Basisklasse T2DXSprite zwei Methoden "Load" mit overload deklariert.
Jetzt brauche ich in der abgeleiteten Klasse T2DXAnimatedSprite auch genau zwei Methoden "Load", allerdings mir anderen Parametern. Ich möchte also verhindern, dass die alten Load Methoden angezeigt werden und möchte nur die neuen haben. Wie kann ich das erreichen?

Grüße
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 10:45
Indem du die Sichtbarkeit verringerst
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#3

Re: Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 11:01
Sollte man aber nicht machen. Verstecken von Methoden ist im OOP nich drin, da eine speziellere Klasse immer auch die Methoden der allgemeineren Klasse haben soll.
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 11:08
sichtbarkeit verringern geht nicht da durch einen cast auf die vorgängerklasse wieder alle Methoden zur Verfügung stehen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#5

Re: Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 11:10
Ja aber was soll ich denn dann machen? Die Load Methoden der alten Klassen sind ohne die neuen Parameter in der neuen Klasse sinnlos und können unter Umständen auch zu Fehlern führen, wenn sie statt den neuen Load-Methoden aufgerufen werden!?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#6

Re: Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 11:14
Dann stimmt was an Deinem Klassendesign nicht.

Sauberste Idee: Du überdenkst Dein Klassendesign und sorgst dafür, dass das Verwenden einer Klasse auch dann noch funktioniert, wenn Du eine Ableitung dieser Klasse verwendest. Wenn man sich mal OOP zu herzen nimmt, dann muss man immer eine Ableitung der Klasse genauso benutzen können wie die Basisklasse, ohne das es zu Fehlern kommt.

Alternative (aber deutlichst schlechtere) Lösung:
Du überschreibst die beiden alten Methoden und anstelle was zu machen wirfst Du ne Exception.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 11:16
eine andere Variante wäre noch die alten Methoden zu überschreiben und daraus die neuen Methoden mit Standardparamtern aufrufen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#8

Re: Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 11:20
Vielleicht wäre es dan besser, T2DXAnimatedSprite nicht von T2DXSprite abzuleiten, sondern beide einer abstrakte Basisklasse abzuleiten, in der bereits alle Methode und Eigenschaften deklariert werden, die die beiden abgeleiteten Klassen gemeinsam haben.

MfG,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#9

Re: Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 11:41
Hm, ok ich überdenke das nochmal
Danke
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Vererbung von Methoden verhindern

  Alt 18. Mai 2008, 12:13
Also wenn ich folgendes deklariere:

Delphi-Quellcode:
TSprite = class
    public
       procedure Load; overload;
       procedure Load(i : integer) ; overload;
end;

TSprite2 = class(TSprite)
    public
      procedure Load(i, j : integer) ;
end;
dann erhält man Folgendes Verhalten:

Delphi-Quellcode:
procedure TForm2.cmd1Click(Sender: TObject);
var
   sprite : TSprite2;
begin
      sprite := TSprite2.Create;
      sprite.Load(1, 2) ; // Es steht nur die Load Methode aus TSprite2 zur Verfüung
end;
bzw.

Delphi-Quellcode:
procedure TForm2.cmd1Click(Sender: TObject);
var
   sprite : TSprite;
begin
      sprite := TSprite2.Create;
      sprite.Load(1) ; // Es stehen die Load Methode aus TSprite zur Verfüung
end;
Also was stört dich an diesem Verhalten...
Wenn du unbedingt willst, dass die Load Methode NUR DANN auch ausgeführt werden, wenn du direkt eine Instanz über TSprite.Create erstellst, dann kannst du das höchstens zur Laufzeit in der Load Methode selbst prüfen, z.B. so:

Delphi-Quellcode:
procedure TSprite.Load;
begin
     if (Self.ClassNameIs('TSprite')) then
    begin
        showmessage('No param') ;
    end;
end;

procedure TSprite.Load(i: integer);
begin
    if (Self.ClassNameIs('TSprite')) then
    begin
        showmessage(inttostr(i)) ;
    end;
end;
Aber schön ist das nicht, weil es, wie es von Jens und Sebastian bereits angedeutet wurde, nicht im Sinne der Objektorientierung ist.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:32 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