AGB  ·  Datenschutz  ·  Impressum  







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

Eine Frage an die Cracks: erben

Ein Thema von Popov · begonnen am 16. Nov 2012 · letzter Beitrag vom 16. Nov 2012
Antwort Antwort
Seite 1 von 2  1 2      
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 07:17
Soweit ich weiß, erbst du mit dem Erstellen einer neuen Klasse aus einer vorhandenen alle Methoden und Properties. Es wird also eine neue eigenständige Klasse angelegt, die alle Methoden und Properties der Eltern-Klasse enthält, weil sie die eben geerbt hat. Führst du neue Methoden und Properties ein, erweiterst du deine neue Klasse um dieselben. Wählst du für eine neue Methode oder ein neues Property einen Variablen-Namen, der bereits in der Eltern-Klasse für eine Methode oder ein Property Verwendung fand, überschreibst du diese Methode bzw. dieses Property nur in deiner neuen Klasse, nicht in der Elternklasse. Für alle Methoden und Properties, die unverändert von der Eltern- in die Kindklasse übernommen werden, existieren selbstverständlich keine Kopien für deine neue Klasse, sondern lediglich Referenzen auf die Elternklasse. Wenn du das aus irgend einem Grund nicht willst, mußt du dir den gesamten Code der Elternklasse in deine neue Klasse kopieren. Das wäre letztlich aber nicht im Sinne der Vererbungstechnik.

Meine Einschränkung "soweit ich weiß" bezieht sich auf meine einzige Erfahrung mit der Vererbung einer Klasse, als ich vor einiger Zeit eine TjvRichText-Komponente geklont habe, um ihr diverse neue Methoden zu verpassen. Natürlich besteht die Funktionalität der neuen Klasse auf dem Vorhandensein der alten: Ohne Jedi-Komponenten würde meine neue Klasse nicht funktionieren, weil dann der Vererbungsvorgang scheitern würde.

Geändert von Perlsau (16. Nov 2012 um 07:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 07:22
Meine Einschränkung "soweit ich weiß" bezieht sich auf meine einzige Erfahrung mit der Vererbung einer Klasse, als ich vor einiger Zeit eine TjvRichText-Komponente geklont habe, ...
Das glaube ich ja mal gar nicht ...

Jede Form die du erstellst ist eine Ableitung einer Klasse (TForm) die du entsprechend erweiterst.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 07:29
Zitat:
Natürlich besteht die Funktionalität der neuen Klasse auf dem Vorhandensein der alten: Ohne Jedi-Komponenten würde meine neue Klasse nicht funktionieren, weil dann der Vererbungsvorgang scheitern würde.
Wäre es eine Kopie, würde das Original nicht mehr benötigt werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 07:31
Wäre es eine Kopie, würde das Original nicht mehr benötigt werden.
Exakt!
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 08:36
Muss man das nicht trennen nach Feldern und Methoden? Sprich was passiert bei Vererbung mit Feldern, sprich welcher Speicher wird wo wofür reserviert! Und wie werden die Methoden zugeordnet? Gibt es da nicht irgendwelche Tabellen (Mir schwirrt aus der Schule noch das Stichwort Method-Table im Kopf rum) wo (vom Compiler?) geguckt wird, welche Methode gerade gefragt ist (Polymorphie)?
Ralph
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 09:09
Muss man das nicht trennen nach Feldern und Methoden? Sprich was passiert bei Vererbung mit Feldern, sprich welcher Speicher wird wo wofür reserviert! Und wie werden die Methoden zugeordnet? Gibt es da nicht irgendwelche Tabellen (Mir schwirrt aus der Schule noch das Stichwort Method-Table im Kopf rum) wo (vom Compiler?) geguckt wird, welche Methode gerade gefragt ist (Polymorphie)?
Ich glaube nicht, daß ich genau wissen möchte, welcher Speicher wann, wo und wofür reserviert wird, dazu ist die Speicherverwaltung von Delphi für meine Verhältnisse einfach zu komplex. Soweit ich aber weiß, wird genau die Speichergröße reserviert, die für die Referenzen auf das Eltern-Objekt notwendig ist. Gibst du neue Methoden oder Properties ein, wird entsprechend weiterer Speicher reserviert, dito auch beim Überschreiben von Methoden und Properties. Alles, was darüber hinausgeht, hält mich nur vom Arbeiten ab , deshalb klinke ich mich jetzt hier auch wieder aus.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 09:25
Methoden(properties) sind grundsätzlich nur Zeiger, egal ob die Methode geerbt ist oder nicht.
http://docwiki.embarcadero.com/RADSt...e_Datenformate

Mach dich mal nach der VMT schlau
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 09:32
Muss man das nicht trennen nach Feldern und Methoden? Sprich was passiert bei Vererbung mit Feldern, sprich welcher Speicher wird wo wofür reserviert! Und wie werden die Methoden zugeordnet? Gibt es da nicht irgendwelche Tabellen (Mir schwirrt aus der Schule noch das Stichwort Method-Table im Kopf rum) wo (vom Compiler?) geguckt wird, welche Methode gerade gefragt ist (Polymorphie)?
Nein, aber man muss unterscheiden zwischen einer Klasse und einer Instanz.

Die Instanz ist ein Speicherbereich, der mit dem "Klassenstempel" eine besondere Struktur bekommt. Das war es schon.
Die Methoden werden wie eine procedure einfach ausgeführt (der einzige Unterschied ist das Mitführen von Self einer Referenz auf die eigene Instanz => Speicherbereich)

Greift man innerhalb der Methode nicht auf die Instanz zurück, so kann man diese auch einfach aufrufen.

Delphi-Quellcode:
TFoo = class
private
  FValue : Integer;
public
  function Calc( a, b : Integer) : Integer; overload;
  function Calc( a : Integer ) : Integer; overload;
end;

function TFoo.Calc( a, b : Integer ) : Integer;
begin
  Result := a + b;
end;

function TFoo.Calc( a : Integer ) : Integer;
begin
  Result := Calc( a, FValue );
end;

var
  LFoo : TFoo;
begin
  LFoo.Calc( 3, 4 ); // Keine AV obwohl es keine Instanz gibt
  LFoo.Calc( 3 ); // es gibt eine AV, weil in der Methode auf die Instanz zugegriffen wird
end;
Was allerdings gleich ist, sind Klassenvariablen, die werden nicht geklont, sondern die sind in jeder Ableitung da und vor allem gleich!

Delphi-Quellcode:
TFoo = class
  class var _Value : Integer;
end;

TFoo2 = class( TFoo )
end;

begin
  TFoo._Value := 42;
  Assert( TFoo._Value = TFoo2._Value );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 09:39
Zur VMT und DMT hat sirius in diesem Thread eine IMO sehr gute und ausführliche Beschreibung geschrieben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 08:43
Machen wir ein simples Experiment

Delphi-Quellcode:
type
  TMyBitmap = class(TBitmap)
  end;

procedure TForm1.Button2Click(Sender: TObject);
var
  MyBitmap: TMyBitmap;
begin
  MyBitmap:= TMyBitmap.Create;
  MyBitmap.LoadFromFile('c:\abc.bmp');
end;
Führe ich das Schritt für Schritt aus, dann lande ich nicht in meiner geerbten Methode von TMyBitmap, die physikalisch nicht da ist, sondern von TBitmap. Die Frage ist nur was da abläuft. Entweder dem Debuger fällt die Alternative, also greift er zum zeigen auf die Methode von TBitmap, oder was wohl wahrscheinlich ist, TMyBitmap erbt nicht die Methode, sondern nur ihre Adresse drau. Die Klasse hat nichts geerbt, sondern nur die Adresse des Vorgängers und gibt den Auftrag an den Vorgänger weiter. Oder kann man das so deuten: die Klasse hat schon alles geerbt, aber nur theoretisch. Aber wozu die Methode zwei mal im Speicher haben wen die vom Vorgänger identisch ist.

Natürlich sehe ich was ich sehe, mich interessiert eher die Philosophie dahinter.
  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 21:28 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