Zitat von
Net7:
...Man kann doch nicht alles berücksichtigen.
Ich glaube, das Prinzip ist doch nicht so klar, wie Du denkst. 8) Es gibt ja so schöne Beispiele wie Fahrrad und LKW. Ich verwende mal lieber ein Delphi-Beispiel : TEdit. Ich will jetzt eines, das nur Zahlen aufnimmt. Das TEdit an sich braucht darüber aber überhaupt nichts zu wissen. Ich leite es aber davon ab, indem ich ihm eine neue OnKeyPress Eigenschaft verpasse :
Delphi-Quellcode:
TIntEdit = class(TEdit)
protected
procedure KeyPress(var Key: Char); override;
end;
Das
override sagt, daß die ursprüngliche Methode durch die neu definierte ersetzt wird. Das ganze ist im protected Teil, weil ich es eventuell später weiter ableiten will. Die konkrete Prozedur sieht nun so aus :
Delphi-Quellcode:
procedure TIntEdit.KeyPress(var Key: Char);
begin
inherited KeyPress(Key);
if not (Key in ['0'..'9']) then
key := #0;
end;
Durch das
inherited wird sichergestellt, daß alle dem TEdit bekannten Methoden auch dem neuen TIntEdit bekannt sind. Die Planung spielt hierbei nur eine untergeordnete Rolle. Was ist, wenn einem später bewußt wird, daß es auch Gleitkommazahlen gibt ?
Buchstaben sollen so oder so nicht zugelassen werden, wohl aber ein DecimalSeparator. Also geht man vom TIntEdit aus und ändert das ab :
Delphi-Quellcode:
TRealEdit = class(TIntEdit)
procedure TRealEdit.KeyPress(var Key: Char);
begin
inherited KeyPress(Key); // nur 0..9 werden zugelassen, sonst :
if (Key <> DecimalSeparator]) then // hier auch noch , oder . zulassen
key := #0;
end;
Sehr beliebt ist es allerdings auch, solche Konstrukte direkt von TControl abzuleiten, was bedeutet, das
Rad komplett neu zu erfinden. Wer so was macht, der hat
OOP einfach nicht verstanden. Denn das Geheimnis liegt lediglich darin, den am besten geeigneten Basistyp als Grundlage zu nehmen.