Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi unterschied VERERBUNG & POLYMORPHIE (https://www.delphipraxis.net/142840-unterschied-vererbung-polymorphie.html)

speedax 4. Nov 2009 20:21

Re: unterschied VERERBUNG & POLYMORPHIE
 
gut, keine ahnung was interfaces sind aber wir haben die ganze sache in verbindung mit einer unit in der wir ne klasse erstellen und meinetwegen dort beschreiben wie die variable eingeliefert wird mithilfe einer pocedure und in einer anderen unit im selben projekt nutzen wir dann die klasse ausm ersten als basisklasse für eine 2. und bums soll das wohl vererbung und/oder polymorphie vom fachbegriff her sein

Namenloser 4. Nov 2009 20:28

Re: unterschied VERERBUNG & POLYMORPHIE
 
Zitat:

Zitat von M. Hassmann
Polymorphie ist mehrfachvererbung und ist meines wissens nach in delphi mit klassen nicht möglich.

Davon steht bei Wikipedia nichts. Hab ich auch ehrlich gesagt noch nie gehört, ich glaube du verwechselst da was.

@speedax:
Delphi-Quellcode:
// bezieht sich auf meinen code von oben
var
  Fahrzeug: TAuto;
begin
  Fahrzeug := TAuto.Create;
  Fahrzeug.Fahre;
  Fahrezeug.Free;
end;

// Das ist KEINE Polymorphie (jedenfalls nach meiner Definition)
// Folgendes IST Polymorphie:
var
  Fahrzeug: TFahrzeug;
begin
  Fahrzeug := TAuto.Create;
  Fahrzeug.Fahre;
  Fahrezeug.Free;
end;
// Siehst du den Unterschied?
Und bitte gib dir mehr Mühe mit deinen Beiträgen. Ich habe teilweise echt Mühe zu verstehen, was du sagen willst, und deine Beiträge strotzen nur so vor Tippfehlern. Du willst schließlich was von uns, also bitte mache es den Menschen, die dir helfen wollen nicht unnötig schwer.

Medium 4. Nov 2009 20:30

Re: unterschied VERERBUNG & POLYMORPHIE
 
Dieser Artikel ist eventuell passender. Bei Polymorphie geht's letztlich darum, dass Methoden einer Klasse auch die Implementierung einer "späteren" Ableitung verwenden kann - hat also an sich erst mal herzlich wenig mit Mehrfachvererbung zu tun (was das oben beschriebene Ableiten von mehreren Klassen bzw. Implementieren von Interfaces wäre). Das heisst bisher waren alle Antworten in diesem Thread falsch.
Wichtig ist in diesem Zusammenhang auch noch das Konzept virtueller Methoden/Klassen, die in der Regel Polymorphie ermöglichen.

Vererbung und Polymorphie sind also keine nebeneinander stehenden Konzepte, sondern Polymorphie kann in einer Vererbungshierachie gegeben sein, oder auch nicht.

Edit: Namenlozer liegt nicht ganz daneben übrigens. Was du zeigst, ist wie eine Polymorphie angewendet aussehen kann, es ist aber nicht klar, dass bei dir TFahrzeug die Methode Fahre der Klasse TAuto aufruft - dann wäre diese nämlich polymorph. Sie könnte aber auch einfach überschrieben/reintroduced sein!

speedax 4. Nov 2009 20:31

Re: unterschied VERERBUNG & POLYMORPHIE
 
ich sehe ihn tfahrzeug und taut...aber warum ist das untere welche und das obere nicht ...weil die klasse auf die du dich beziehst tfahrzeug ist?

speedax 4. Nov 2009 20:35

Re: unterschied VERERBUNG & POLYMORPHIE
 
kann ich das so erklären?

wenn ich sage ich habe eine klasse eins function rechnen(addiet 2 zahlen) und ich leite jetzte die klasse einsplus ab dann hat die ja auch die function rechnen geerbt
wenn ich aber will das die function rechnen auch subtrahiert oder nur subtrahiert dann definiere cih die mit diesem override neu...is das dann plymorphie?

Namenloser 4. Nov 2009 20:36

Re: unterschied VERERBUNG & POLYMORPHIE
 
Zitat:

Zitat von Medium
Dieser Artikel ist eventuell passender. Bei Polymorphie geht's letztlich darum, dass Methoden einer Klasse auch die Implementierung einer "späteren" Ableitung verwenden kann - hat also an sich erst mal herzlich wenig mit Mehrfachvererbung zu tun (was das oben beschriebene Ableiten von mehreren Klassen bzw. Implementieren von Interfaces wäre). Das heisst bisher waren alle Antworten in diesem Thread falsch.
Wichtig ist in diesem Zusammenhang auch noch das Konzept virtueller Methoden/Klassen, die in der Regel Polymorphie ermöglichen.

Vererbung und Polymorphie sind also keine nebeneinander stehenden Konzepte, sondern Polymorphie kann in einer Vererbungshierachie gegeben sein, oder auch nicht.

Gut, der Preis für die schönste Formulierung geht an dich :mrgreen: Das gleiche habe ich aber im Grunde auch sagen wollen...

@speedax: Bitte keine Doppel-Posts.

[EDIT]
(verdammt, ich bin langsam)

Zitat:

Zitat von Medium
Edit: Namenlozer liegt nicht ganz daneben übrigens. Was du zeigst, ist wie eine Polymorphie angewendet aussehen kann, es ist aber nicht klar, dass bei dir TFahrzeug die Methode Fahre der Klasse TAuto aufruft - dann wäre diese nämlich polymorph. Sie könnte aber auch einfach überschrieben/reintroduced sein!

Ah, ich verstehe was du meinst. Ja, ist vielleicht etwas missverständlich, gebe ich zu. Ich hatte versucht, dass Beispiel so schlank wie möglich zu halten.

Ich habe es mal etwas abgeändert:
Delphi-Quellcode:
interface

types
  TFahrzeug = class
    procedure MacheGeraeusch; virtual; abstract;
    procedure Fahre;
  end;

  TAuto = class(TFahrzeug)
    procedure MacheGeraeusch; override;
  end;

  TFahrrad = class(TFahrzeug)
    procedure MacheGeraeusch; override;
  end;

implementation

procedure TFahrzeug.Fahre;
begin
  ShowMessage('Start');
  MacheGerauesch;
  ShowMessage('Ziel erreicht');
end;

procedure TAuto.MacheGeraeusch;
begin
  ShowMessage('Brumm');
end;

procedure TFahrrad.MacheGeraeusch;
begin
  ShowMessage('Quietsch?');
end;

var
  UnbekanntesFahrObjekt: TFahrzeug;
begin
  UnbekanntesFahrObjekt := TAuto.Create:
  UnbekanntesFahrObjekt.Fahre;
  UnbekanntesFahrObjekt.Free;

  UnbekanntesFahrObjekt := TFahrrad.Create:
  UnbekanntesFahrObjekt.Fahre;
  UnbekanntesFahrObjekt.Free;
end
[/EDIT]

Medium 4. Nov 2009 20:43

Re: unterschied VERERBUNG & POLYMORPHIE
 
Zitat:

Zitat von NamenLozer
Gut, der Preis für die schönste Formulierung geht an dich :mrgreen:

:cheer:

Delphi-Quellcode:

TBaseClass = class
  private
  public
    procedure Foo; virtual; abstract;
end;

TOneDerivate = TBaseClass
  private
  public
    procedure Foo; override;
end;

implementation

var
  AnObject: TBaseClass;

TOneDerivate.Foo;
begin
  DoSomething;
end;

begin
  AnObject := TBaseClass.Create;
  AnObject.Foo; // ***
end;
An der Stelle *** wird TOneDerivate.Foo ausgeführt, obwohl TBaseClass.Foo aufgerufen wird. Das ist Polymorphie.

speedax 4. Nov 2009 20:47

Re: unterschied VERERBUNG & POLYMORPHIE
 
wo hab ich doppelgepostet?

was haltet ihr von meiner erklärung mit dem rechnen-beispiel

Medium 4. Nov 2009 20:51

Re: unterschied VERERBUNG & POLYMORPHIE
 
1) Auf Seite 1 ganz unten

2) Das Beispiel ist falsch. Das ist lediglich Überschreiben, und wenn du die Methode auf einer Variablen der Basisklasse (eins) aufrufst, wird auch diese ausgeführt, und nicht die von einsplus, was bei Polymorphie passieren müsste.

Namenloser 4. Nov 2009 20:53

Re: unterschied VERERBUNG & POLYMORPHIE
 
Zitat:

Zitat von speedax
wo hab ich doppelgepostet?

was haltet ihr von meiner erklärung mit dem rechnen-beispiel

Das [Beispiel] ist grammatikalisch so ein Schwachsinn, dass es unmöglich kaum zu verstehen ist. Lies du dir deine Posts eigentlich durch, bevor du sie abschickst? Übrigens ist das auch genau die Stelle, wo du doppelt gepostet hast.

Bitte guck dir noch mal den editierten Teil meiner obigen Nachricht an. Vielleicht ist es so verständlicher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr.
Seite 2 von 3     12 3      

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