AGB  ·  Datenschutz  ·  Impressum  







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

Instanz welcher abgeleiteten Klasse?

Ein Thema von stoermi · begonnen am 6. Dez 2004 · letzter Beitrag vom 7. Dez 2004
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#11

Re: Instanz welcher abgeleiteten Klasse?

  Alt 6. Dez 2004, 19:06
Zitat von stoermi:
Zitat von nailor:
du könntest mit dem is/as operator arbeiten. aber das ist in deinem falle wohl nicht im sinne von OOP.
Das heißt? Hast du einen besseren Vorschlag?
wenn du in der basisklasse wissen willst, welche abgeleitete variante du hast, hast du mit hoher wahrscheinlichkeit eine aufgabe nicht weit genug nach unten durchdelegiert. wenn du zum beispiel eine meldung ausgeben willst "ich bin ein MOTORRAD" könntest du das mit dem "is"-operator in der basisklasse machen. sauberer wäre eine abstrakte methode, die die nachkommen implementieren müssen. und da diese wissen, welchen typ sie haben, braucht man keinen "is" operator.

ja, es mag auch fälle geben, wo man den operator braucht, aber das sollte die ausnahme sein.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
stoermi

Registriert seit: 1. Dez 2004
Ort: im Wald von Thüringen
75 Beiträge
 
Delphi 6 Enterprise
 
#12

Re: Instanz welcher abgeleiteten Klasse?

  Alt 6. Dez 2004, 19:13
Zitat von stoermi:
Zitat von jim_raynor:
oh sorry. Hatte was verwechselt. Statt ClassInfo nimm ClassType. :duck:
Danke! So funktionierts.
Warum funktioniert es jedoch nicht mit case .. of?
Delphi-Quellcode:
case objekt.ClassType of
    TAuto : edKat.Text := 'Auto';
    TMotorrad : edKat.Text := 'Motorrad';
    TFahrrad : edKat.Text := 'Fahrrad';
  end;
Compiler bringt:Ordinalty erforderlich!?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Instanz welcher abgeleiteten Klasse?

  Alt 6. Dez 2004, 20:21
Zitat von stoermi:
Warum funktioniert es jedoch nicht mit case .. of?
Delphi-Quellcode:
case objekt.ClassType of
    TAuto : edKat.Text := 'Auto';
    TMotorrad : edKat.Text := 'Motorrad';
    TFahrrad : edKat.Text := 'Fahrrad';
  end;
Compiler bringt:Ordinalty erforderlich!?
Na weil deine Klassentypen keine Ordinalwerte sind! Ordinalwerte sind Werte, die alle einen eindeutigen Nachfolger und einen eindeutigen Vorgänger haben. Nur so können case-Anweisungen implementiert werden, da dort eine Sprungtabelle aufgebaut wird.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
stoermi

Registriert seit: 1. Dez 2004
Ort: im Wald von Thüringen
75 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: Instanz welcher abgeleiteten Klasse?

  Alt 6. Dez 2004, 22:33
Zitat von Chewie:
Na weil deine Klassentypen keine Ordinalwerte sind! Ordinalwerte sind Werte, die alle einen eindeutigen Nachfolger und einen eindeutigen Vorgänger haben. Nur so können case-Anweisungen implementiert werden, da dort eine Sprungtabelle aufgebaut wird.
Heißt das, dass dies hier Ordinalwerte sind?
Beispiel aus Delphi-Hilfe...
Delphi-Quellcode:
case MyColor of

  Red: X := 1;
  Green: X := 2;
  Blue: X := 3;
  Yellow, Orange, Black: X := 0;
end;

case Selection of

  Done: Form1.Close;
  Compute: CalculateTotal(UnitCost, Quantity);
else
  Beep;
end;
Dann sind diese Beispiel sehr irreführend...!
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#15

Re: Instanz welcher abgeleiteten Klasse?

  Alt 6. Dez 2004, 22:40
ja sind (verkappte) ordinal-werte.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#16

Re: Instanz welcher abgeleiteten Klasse?

  Alt 7. Dez 2004, 06:44
MyColor ist ja so definiert.

MyColor = (Red,Green,Blue,Yellow,Orange,Black); Das bedeutet, das nach Red Green kommt, nach Green Blue usw. Wird halt einfach durchnummeriert

Red=0
Green=1
Blue=2

Es ist ein Ordinaltyp weil es immer einen definierten Vorgänger und Nachfolger gibt.

Bei Klassen ist es so, dass zum Beispiel TAuto nur auf die Klasseninformationen zeigt könnte also $123456 oder $654321 liegen. TMotorrad könnte dann bei $765432 oder $234567 liegen. Du kannst also nicht sagen, dass nach TAuto TMotorrad kommt. Sind halt nur Zeiger.

Vielleicht kann man es einfach mit einem Trick lösen in dem man ClassType zu Interger castet. Kann es leider nicht testen.

Delphi-Quellcode:
case Integer(objekt.ClassType) of
    Integer(TAuto) : edKat.Text := 'Auto';
    Integer(TMotorrad) : edKat.Text := 'Motorrad';
    Integer(TFahrrad) : edKat.Text := 'Fahrrad';
  end;
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#17

Re: Instanz welcher abgeleiteten Klasse?

  Alt 7. Dez 2004, 13:06
Zitat von stoermi:
...Warum funktioniert es jedoch nicht mit case .. of?
Delphi-Quellcode:
case objekt.ClassType of
    TAuto : edKat.Text := 'Auto';
    TMotorrad : edKat.Text := 'Motorrad';
    TFahrrad : edKat.Text := 'Fahrrad';
  end;
Compiler bringt:Ordinalty erforderlich!?
IMO sind explizite abfragen auf klassen-typen nicht sehr dynamisch und behindern nur die OOP. Und für diesen zweck drängt sich eine virtuelle geradezu auf. Warum lääst du nicht das fahrzeug sagen, wie sein 'DisplayTypeName' ist.

Und es gilt auch hier: 'Wer case verwendet, der hat objektorientiere programmierung nicht verstanden' ...Ist vielleicht ein bisschen drastisch formuliert, aber was wahres drann *duck*

mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Instanz welcher abgeleiteten Klasse?

  Alt 7. Dez 2004, 13:19
Zitat von nailor:
Zitat von stoermi:
Zitat von nailor:
du könntest mit dem is/as operator arbeiten. aber das ist in deinem falle wohl nicht im sinne von OOP.
Das heißt? Hast du einen besseren Vorschlag?
wenn du in der basisklasse wissen willst, welche abgeleitete variante du hast, hast du mit hoher wahrscheinlichkeit eine aufgabe nicht weit genug nach unten durchdelegiert. wenn du zum beispiel eine meldung ausgeben willst "ich bin ein MOTORRAD" könntest du das mit dem "is"-operator in der basisklasse machen. sauberer wäre eine abstrakte methode, die die nachkommen implementieren müssen. und da diese wissen, welchen typ sie haben, braucht man keinen "is" operator.

ja, es mag auch fälle geben, wo man den operator braucht, aber das sollte die ausnahme sein.

is brauchst Du dann, wenn Du zum Beispiel Objecte in einer Liste speicherst, welche nicht unbedingt aller derselben Basisklasse (außer TObject) angehören.
Günter
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Instanz welcher abgeleiteten Klasse?

  Alt 7. Dez 2004, 13:52
Zitat von GuenterS:
is brauchst Du dann, wenn Du zum Beispiel Objecte in einer Liste speicherst, welche nicht unbedingt aller derselben Basisklasse (außer TObject) angehören.
Wieso? Von den Objekten, die ich in eine Liste reinspeicher, sollte ich doch wissen, was es für welche sind.

Ich denke auch, dass man bei OOP in "Reinform" kein is braucht, nur: Wem bringt es was, ein Programm zu haben, das als Musterbeispiel in einem Buch über OOP gelten könnte, das Programm dafür aber viel einfacher und schneller implementiert hätte werden können, wenn man die OOP weniger streng ausgelegt hätte?
IMHO muss man da stets zwischen Theorie und Realität abwägen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Instanz welcher abgeleiteten Klasse?

  Alt 7. Dez 2004, 13:57
Zitat von Chewie:
Zitat von GuenterS:
is brauchst Du dann, wenn Du zum Beispiel Objecte in einer Liste speicherst, welche nicht unbedingt aller derselben Basisklasse (außer TObject) angehören.
Wieso? Von den Objekten, die ich in eine Liste reinspeicher, sollte ich doch wissen, was es für welche sind.

Ich denke auch, dass man bei OOP in "Reinform" kein is braucht, nur: Wem bringt es was, ein Programm zu haben, das als Musterbeispiel in einem Buch über OOP gelten könnte, das Programm dafür aber viel einfacher und schneller implementiert hätte werden können, wenn man die OOP weniger streng ausgelegt hätte?
IMHO muss man da stets zwischen Theorie und Realität abwägen.

Das muss nicht sein, dass Du das unbedingt immer wissen musst.

Könnte ja auch sein, dass Du diese Liste zur Laufzeit füllst, mit Buttons, StringListen, CheckBoxen, Panels, Frames, eigenen Objekten, etc.

Es gibt auch Componenten ich denke da an GridComponenten beispielsweise an ein VerticalGrid, da kann man verschiedenartige Spalten bzw. Zeilen einfügen (auch zur Laufzeit). Wenn Du jetzt durchiterierst über alle Spalten oder Zeilen kannst nicht mehr wissen was das genau ist und nimmst daher den is operator.
Günter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 05: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