Delphi-PRAXiS

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 19:36


unterschied VERERBUNG & POLYMORPHIE
 
hallo leute,

mir steht morgen eine infoklausur bevor und ich ahbe beim lernen gerade ein problem gefunden... ich verstehe alles was es mit mehreren units und klassen auf sich hat, kann es auch anwenden aber nun bin ich über die worte polymorphie und vererbung gestolpert... ich kann damit nichts anfangen... ich weiß nicht genau worin da der unterschied besteht und wie man den unteschied erkennt... könnt ihr mir vllt helfen?!

mfg
speedax23

DeddyH 4. Nov 2009 19:45

Re: unterschied VERERBUNG & POLYMORPHIE
 
Hilft Dir der Wikipedia-Artikel weiter?

speedax 4. Nov 2009 19:50

Re: unterschied VERERBUNG & POLYMORPHIE
 
ehrlich gesagt nein ich weiß das das beides was damit zu tun hat das man vorherig geschaffene sachen auch in anderen verwenden kann... aber was genau is der unterschied ...kann ja nich das einzige sein das polymorphie immer was mit virtual und abstrakt zutun hat... iw ie muss ich ihm die sache morgen ja nachweisen und begründen könne...

Namenloser 4. Nov 2009 19:58

Re: unterschied VERERBUNG & POLYMORPHIE
 
Ich würde sagen, beides ist eng miteinander verknüpft, ich bin kein Experte was solche Definitionen angeht, also nagel mich bitte nicht darauf fest, ich kann dir nur sagen, wie ich diese Bezeichnungen auffassen würde.
Vererbung ist es, wenn ich eine Klasse von einer anderen ableite, um neue Funktionen hinzuzufügen, also die Klasse zu erweitern. Polymorphie ist es, wenn ich die Basisklasse eigentlich als Schnittstelle verwende, um auf diese abgeleiteten Klassen zuzugreifen. Ich könnte z.b. die Klasse TFahrzeug mit der Methode "Fahre" deklarieren, dann TAuto und TFahrrad davon ableiten und erst in diesen Klassen die Methode implementieren (bzw. überschreiben). Weil beide den gleichen Vorfahren haben, brauche ich nicht zu wissen, um was es sich bei einem x-beliebigen Fahrzeug handelt, und kann trotzdem "Fahre" aufrufen. IMO einer der größten Vortteile von OOP.
Delphi-Quellcode:
interface

types
  TFahrzeug = class
    procedure Fahre; virtual; // virtual ist hier wichtig, erzwingt "Späte Bindung", was für's Überschreiben notwendig ist
  end;
  // Vererbung: (hier wird allerdings nur eine leere Methode geerbt)
  TAuto = class(TFahrzeug)
    procedure Fahre; override;
  end;
  TFahrrad = class(TFahrzeug)
    procedure Fahre; override;
  end;
implementation

procedure TFahrzeug.Fahre; // wenn man sowas vermeiden will soltle man natürlich abstract benutzen
begin
end;

procedure TAuto.Fahre;
begin
  ShowMessage('Ich bin ein Auto');
end;

procedure TFahrrad.Fahre;
begin
  ShowMessage('Ich bin ein Fahrrad');
end;

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

  UnbekanntesFahrObjekt := TFahrrad.Create:
  UnbekanntesFahrObjekt.Fahre;
  UnbekanntesFahrObjekt.Free;
end

speedax 4. Nov 2009 20:00

Re: unterschied VERERBUNG & POLYMORPHIE
 
also würdest du die bezeichnung vererbung als ein nutzen besetehender und dannd as verändern bezeichnen und als polymorphie das nutzen nur an sich?

Namenloser 4. Nov 2009 20:04

Re: unterschied VERERBUNG & POLYMORPHIE
 
Vererbung ist für mich an sich einfach das Ableiten einer Klasse von einer anderen. Polymorphie ist es, wenn ich über einen Vorfahren auf ein Objekt zugreife bzw. einer Variable die Instanz einer vom typen der Variable abgeleiteten Klasse zuweise.

speedax 4. Nov 2009 20:07

Re: unterschied VERERBUNG & POLYMORPHIE
 
habs nichso mit fachbegriffen muss ich sagen... aber is das nich das was ich gerade meinte oder lieg ich falsch?

Namenloser 4. Nov 2009 20:12

Re: unterschied VERERBUNG & POLYMORPHIE
 
Zitat:

Zitat von speedax
habs nichso mit fachbegriffen muss ich sagen... aber is das nich das was ich gerade meinte oder lieg ich falsch?

Weiß ich nicht, weil ich meinerseits nicht ganz verstanden habe, was du in deinem letzten Post sagen wolltest.

speedax 4. Nov 2009 20:14

Re: unterschied VERERBUNG & POLYMORPHIE
 
*verdammt* ... naja ich versuchs nochmal also cih erstelle eine klasse... dann leite ich eine andere klasse von dieser ab... das ist vererbung...glaub ich(?)... und wenn ich diese abgeleitete dann verwende und mit ner ausgabe verknüpfe is das polymorphie????

semo 4. Nov 2009 20:17

Re: unterschied VERERBUNG & POLYMORPHIE
 
Polymorphie bedeutet zum Beispiel, dass eine procedure / function mehrfach mit dem selben Namen vorhanden sein kann, aber zum Beispiel einen anderen rückgabewert liefert.

edit: polymorphie ist natürlich KEINE Mehrfachvererbung.

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.

speedax 4. Nov 2009 20:58

Re: unterschied VERERBUNG & POLYMORPHIE
 
Tut mir ja leid, aber mir geht ganz schön die "Muffe" da hab ich persönlich nicht so auf die Formulierung geachtet und werde in Zukunft darauf achten.
Mein Problem ist einfach nur das ich es immmernoch nicht begriffen habe weil ich nicht klar trennen kann worin jetzt anhand eines Beispiels der Unterschied besteht. Haltet mich für blöde, aber sonst bin ich was das Programmieren angeht eigentlich ganz gut ... halt so gut wie man nach 3 Jahren LEistungskurs Info ist... aber diese 2 Worte machen mich WAHNSINNIG.

Namenloser 4. Nov 2009 21:09

Re: unterschied VERERBUNG & POLYMORPHIE
 
Zitat:

Zitat von speedax
aber diese 2 Worte machen mich WAHNSINNIG.

Wahrscheinlich grübelst du schon zu lange darüber nach. Ich glaube, dein Problem ist, dass dir noch nicht ganz klar ist, dass es nicht "den Unterschied" zwischen Polymorphie und Vererbung gibt. Du kennst ja sicher diese Scherzfragen à la "Was ist der Unterschied zwischen einem Eichhörnchen und einem Klavier?" - das hier ist so ähnlich, deswegen bekommst du auch keine für dich befriedigende Antwort. Polymorphie und Vererbung sind einfach zwei Prinzipien, die man nicht direkt miteinander vergleichen kann. Es ist kein Gegeneinander, sondern ein Miteinander - Polymorphie wäre ohne Vererbung nicht möglich. Allerdings ist Vererbung ohne Polymorphie möglich.

Was ist der Unterschied zwischen Microsoft und Windows?

Codewalker 4. Nov 2009 21:34

Re: unterschied VERERBUNG & POLYMORPHIE
 
Zitat:

Zitat von M. Hassmann
Polymorphie bedeutet zum Beispiel, dass eine procedure / function mehrfach mit dem selben Namen vorhanden sein kann, aber zum Beispiel einen anderen rückgabewert liefert.

Das ist schlichtweg falsch. Von Polymorphie spricht man nur im Zusammenhang mit Klassen. Das nutzen mehrerer gleichnamiger Methoden mit unterschiedlicher Signatur (und dazu gehört NICHT der Rückgabewert) heißt Überladung. Zwei Überladene Funktionen müssen sich in Reihenfolge, Anzahl und Datentyp der Parameter in mindestens einem Punkt unterscheiden. Der Rückgabewert ist egal. Konkret:
Delphi-Quellcode:
function MachWas(A: Integer): Integer; overload;
function MachWas(A: String): Integer; overload; // Geht, Parametertyp unterschiedlich
function MachWas(A: Integer; B: String): Integer; overload; // Geht, Parameteranzahl unterschiedlich
function MachWas(B: Integer; A: String): Integer; overload; // Geht nicht. Namen sind egal. Anzahl, Reihenfolge und Datentypen sind gleich --> gleiche Signatur --> Fehler
function MachWas(A: String): String; overload; // Geht nicht. Rückgabewert gehört nicht zur Signatur --> gleiche Signatur --> Fehler

speedax 4. Nov 2009 21:48

Re: unterschied VERERBUNG & POLYMORPHIE
 
aber mein lehrer hat so formuliert... er gibt uns morgen u.A. auch aufgaben wo wir nen quelltext sehen und wir anhand genau diesen Textes entscheiden sollen ob polymorphie oder vererbung und es auch beweisen...

Namenloser 4. Nov 2009 22:00

Re: unterschied VERERBUNG & POLYMORPHIE
 
Zitat:

Zitat von speedax
aber mein lehrer hat so formuliert... er gibt uns morgen u.A. auch aufgaben wo wir nen quelltext sehen und wir anhand genau diesen Textes entscheiden sollen ob polymorphie oder vererbung und es auch beweisen...

Sorry, hab mein bestes versucht. Ich kann dir jetzt nur noch den Tipp geben, noch ein bisschen zu recherchieren (Wikipedia, Google...), aber ich denke mal, dass du das schon getan hast. Vielleicht hilft es ja auch einfach, die Nacht drüber zu schlafen, und morgen kommt dir dann die Erleuchtung.

speedax 5. Nov 2009 16:07

Re: unterschied VERERBUNG & POLYMORPHIE
 
hey Leute,
ich wollte mich nochmal bei euch bedanken! Wie ihr teilweise vermutet habt, kam mir früh beim erneuten durcharbeiten die sogenannte "Erleuchtung..." das war gestern wirklich zu viel nach 6h lernen habe ich einfach nichts mehr in den Schädel bekommen und die Klausur heute verlief zufriedenstellend. Nochmal: tausend dank!

mfg
speedax


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