AGB  ·  Datenschutz  ·  Impressum  







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

Methoden - "Vererbung"

Ein Thema von Neutral General · begonnen am 15. Dez 2009 · letzter Beitrag vom 18. Jan 2010
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Methoden - "Vererbung"

  Alt 15. Dez 2009, 20:51
Hi,

Also man kann ja einfach Methoden überschreiben etc...
Bin mir eigentlich recht sicher, dass das was ich vorhabe NICHT geht aber ich frage nochmal nach obs da irgendwas gibt, bzw ob man da was basteln/improvisieren könnte...

Angenommen ich habe eine Klasse mit einer Methode "Auto" und eine Nachfolgerklasse hat die Methoden "VW", "Audi", "BMW" und "Mercedes". Alle Methoden sollen quasi von "Auto" erben, also es soll bei jeder Methode am Anfang der Code von "Auto" ausgeführt werden. Geht das? Naja gut es ginge so:

Delphi-Quellcode:
TAuto = class
  procedure Test; virtual;
end;

TAuto2 = class(TAuto)
  procedure VW;
  procedure Audi;
end;

procedure TAuto2.VW;
begin
  inherited Test;
end;

procedure TAuto2.Audi;
begin
  inherited Test;
end;
Aber das ist irgendwie nicht was ich suche...
Ja ich weiß.. Blöd wenn man selbst nicht weiß was man sucht/will

Aber vielleicht hat jmd eine besonders gute Glaskugel und kann mir trotzdem helfen

Edit: Ich will quasi dass inherited Test automatisch aufgerufen wird, ohne dass in der Methode selbst nochmal aufrufen zu müssen.

Sagen wir mal sowas wie:

Delphi-Quellcode:
TAuto2 = class(TAuto)
  procedure VW; inherits from Test;
  procedure Audi; inherits from Test;
end;



Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Methoden - "Vererbung"

  Alt 15. Dez 2009, 22:04
Du kommst echt immer auf seltsame Ideen

Ich kann mir erstmal nicht vorstellen dass sich sowas hinbügeln lässt - zumindest nicht im Rahmen reiner theoretischer OOP - aber auch mit Tricksen und Hacksen kann ich mir im Moment nicht wirklich was vorstellen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Methoden - "Vererbung"

  Alt 16. Dez 2009, 05:23
Glasskugel dreh...du sucht das Strategie Design Pattern.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Methoden - "Vererbung"

  Alt 16. Dez 2009, 16:55
Zitat von sx2008:
Glasskugel dreh...du sucht das Strategie Design Pattern.
Ist das nicht einfach nur Polymorphie?

Ich will ja sowas:

Delphi-Quellcode:
TBase = class
  procedure BaseProc;
end;

TAbleitung = class(TBase)
   procedure Blubb; of BaseProc; // oder so :-D
   procedure Foo; of BaseProc;
end;

procedure TBase.BaseProc;
begin
  ShowMessage('Base');
end;

procedure TAbleitung.Blubb;
begin
  ShowMessage('Blubb');
end;

procedure TAbleitung.Foo;
begin
  ShowMessage('Foo');
end;
Jetzt soll wenn man TAbleitung.Blubb; aufruft erst BaseProc aufgerufen werden und dann Blubb selbst.
Bei procedure TAbleitung.Foo das gleiche Prinzip. Erst BaseProc, dann Foo.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Methoden - "Vererbung"

  Alt 16. Dez 2009, 17:01
Du wirst wohl um ein inherited nicht herumkommen. Wozu auch? Ist doch viel sinnvoller, wenn du bestimmen kannst, WANN die Methode aufgerufen werden soll. Oft ist es ja nötig, vor dem Aufruf noch Daten zu verändern oder anschließend aufzuräumen.

Eventuell wäre es gut, wenn du mal erläutern könntest, was du eigentlich konkret vorhast.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Methoden - "Vererbung"

  Alt 16. Dez 2009, 17:06
Hi,

Generell hast du recht.. Naja es geht um das gleiche Problem, was ich schonmal hier auf eine andere Weise lösen wollte.
Es geht darum Änderungen von Properties eines Objekts mitzubekommen und darauf reagieren zu können.

Bedingungen:
- es muss eine Set-Methode für die jeweilige Property existieren
- ... Wobei es genial wäre, wenn nichtmal das nötig wäre
- Der Nutzer dieses Features soll seine eigene Klasse möglichst wenig anpassen müssen.
D.h. er bestimmt, dass seine Klasse TFoo überwacht werden soll und muss dazu IM IDEALFALL nichts an TFoo ändern/anpassen.
1 oder 2 kleine Änderungen wären noch OK.

Aber es wäre halt nervig wenn er in jede Set-Methode daran denken müsste inherited BlaBla; aufzurufen. Wenn ers vergisst, funktionierts mit der Property nicht und er wundert sich warums nicht geht.

Verstanden was ich will?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Methoden - "Vererbung"

  Alt 16. Dez 2009, 17:36
Zitat von Neutral General:
Verstanden was ich will?
Ja, verstanden, glaub ich. Hmm, also ich fürchte, dass das nicht wirklich machbar ist. Allerdings kannst du dir unter Umständen das Delphi-Konstrukt Delphi-Referenz durchsuchenindex zu Nutze machen:
Delphi-Quellcode:
type
  TBaseClass = class
  private
    FFields: array of integer;
  protected
    function GetField(Index: integer);
    procedure SetField(Index: integer; Value: integer);
    procedure SetFieldCount(Count: integer);
  end;

  TDerivedClass = class(TBaseClass)
  public
    property Value1: integer index 0 read GetField write SetField;
    property Value2: integer index 1 read GetField write SetField;
    property Value3: integer index 2 read GetField write SetField;
    constructor Create;
  end;

implementation

function TBaseClass.GetField(Index: integer);
begin
  Result := FFields[Index];
end;

procedure TBaseClass.SetField(Index: integer; Value: integer);
begin
  FFields[Index] := Value;
end;

procedure TBaseClass.SetFieldCount(Count: integer);
begin
  SetLength(FFields, Count);
end;

constructor TDerivedClass.Create;
begin
  SetFieldCount(3);
end;
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Methoden - "Vererbung"

  Alt 19. Dez 2009, 11:40
Jetzt hab ich verstanden, was du eigentlich erreichen möchtest.
Du hast eine x-beliebige Klasse, die nicht verändert werden soll.
Dann möchtest du dich von Aussen an bestimmte Methoden und/oder Properties einhaken und
das Verhalten verändern.
http://upload.wikimedia.org/wikipedi...rammierung.png
Du könntest dann vor und nach dem Methodenaufruf zusätzliche Dinge ausführen, von denen die orginal Klasse nichts weiss.
In dem Bild steckt das in dem roten Kreis.
Mit dieser Technik des Abfangens von Methodenaufrufen könntest du Dinge tun, an die der Programmierer der Klasse nicht gedacht hat.
Man nennt das Aspektorientierte Programmierung.
Leider ist Delphi (wie auch die meisten anderen Prog.Sprachen) dazu noch nicht in der Lage.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Methoden - "Vererbung"

  Alt 18. Jan 2010, 10:59
Zitat von sx2008:
Man nennt das Aspektorientierte Programmierung.
Leider ist Delphi (wie auch die meisten anderen Prog.Sprachen) dazu noch nicht in der Lage.
Meinst du, es könnte irgendwie möglich sein, dass selbst nachzurüsten?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:11 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