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      
Popov
(Gast)

n/a Beiträge
 
#1

Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 06:08
Delphi-Version: 7
Ich erkläre gerade einem in einem anderen Forum etwas und will mit meinem nicht vorandenem Wissen prallen.

Also, ich erstelle meine eigene Klasse und leite sie aus einer anderen Klasse ab:

Delphi-Quellcode:
type
  TMyBitmap = class(TBitmap)
    function QuadratPixel: Integer;
  end;
Jetzt die Frage: erstelle ich nur eine Verbindung zu der anderen Klasse plus meiner Methode oder eine Kopie von der anderen Klasse inc. meiner Methode?

Nochmal: wenn ich meine Klasse erstelle, dann erbt meine Klasse alles von der Vorgänger-Klasse. Meine Frage bezieht sich drauf wie dieses Erben intern aussieht. Wird bei der Erstellung meines Objekts nur mein Einzeiler beachtet mit dem höflichen Vermerk, für den Rest mal bitte schön irgendwo bei der TBitmap zu gucken, oder es wird eine komplett neue Superklasse kreiert, die die Bitmap beinhaltet plus meine Methode. Oder wird einer Art Container erstellt der, um bei der Bitmap zu bleiben, alle sechs Klassen (meinetwegen Abbildungen) beinhaltet (jede schön für sich separat). Wie sieht der Vorgang des Erbens eigentlich aus?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 06:45
Ich schätze mal der eigentliche Code, also alle Methoden sind irgendwo statisch im Code gelinkt. Wenn ich mich recht erinnere wird vor dem Aufruf einer Methode die Instanz in ECX abgelegt. Also rein von dem Standpunkt aus gesehen erstellst du keine Kopie, sondern nur eine Erweiterung. Für die Klassendeklaration ansich gillt das selbe, wobei ich hier nicht ganz genau weiß, wie es bei virtuellen Methoden aussieht.

Prinzipiell gesehen trifft deine Beschreibung mit dem "höflichen Vermerk" wohl am besten zu.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

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
 
#4

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
 
#5

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
 
#6

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 07:29
Das glaube ich ja mal gar nicht ...
Jede Form die du erstellst ist eine Ableitung einer Klasse (TForm) die du entsprechend erweiterst.
Stimmt natürlich, das würde ich so auch nicht glauben

Ich hätte schreiben sollen "abgesehen von automatischer Vererbung beim Erstellen einer Form".
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

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
 
#8

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
Popov
(Gast)

n/a Beiträge
 
#9

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
mkinzler
(Moderator)

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

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 08:57
Es wäre ja unsinnig, dass beim Vererben der komplette Code kopiert wird. Wird eine Methode der superklasse nicht verdeckt, wird natürlich die der Superklasse aufgerufen ( referenziert).
Markus Kinzler
  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 06:16 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