AGB  ·  Datenschutz  ·  Impressum  







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

Weiterentwickelndes Object???

Ein Thema von Kedariodakon · begonnen am 7. Mär 2005 · letzter Beitrag vom 7. Mär 2005
Antwort Antwort
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#1

Weiterentwickelndes Object???

  Alt 7. Mär 2005, 15:57
Ich hätte da mal wieder so eine kleine Frage

Ist es möglich, dass sich ein Object selber weiterentwickelt, oder besser selbstständig upgradet?

Angenommen ich habe eine Klasse TTestyBase = Class mit einer Procedure Readstring...
Ist es nun möglich, dass sich das Object durch diese Procedure in eines von ihm Abgeleiteten Klassen wandelt?
z.B.:
Ist im String ein Integer, dann in die Klasse TTestyInteger = Class( TTestyBase )
oder es ist im String ein Float, dann in die Klasse TTestyFloat = Class( TTestyBase )

Geht sowas?
Ohne das ich jetzt noch eine Klasse benötige, die die Sache Händelt?

Bye
Christian
  Mit Zitat antworten Zitat
uschi
(Gast)

n/a Beiträge
 
#2

Re: Weiterentwickelndes Object???

  Alt 7. Mär 2005, 16:03
AI - künstliche Intelligenz
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Weiterentwickelndes Object???

  Alt 7. Mär 2005, 16:06
Zitat von uschi:
AI - künstliche Intelligenz
Wenns sowas gibt, bräcuhte ich keine Programme mehr schreiben, dann würd ich schreiben lassen...

OK Spass beiseite, dass hilft mir nicht wirklich weiter...

Bye
Christian
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Weiterentwickelndes Object???

  Alt 7. Mär 2005, 16:15
Zitat von Kedariodakon:
Ist es möglich, dass sich ein Object selber weiterentwickelt, oder besser selbstständig upgradet?

Angenommen ich habe eine Klasse TTestyBase = Class mit einer Procedure Readstring...
Ist es nun möglich, dass sich das Object durch diese Procedure in eines von ihm Abgeleiteten Klassen wandelt?
z.B.:
Ist im String ein Integer, dann in die Klasse TTestyInteger = Class( TTestyBase )
oder es ist im String ein Float, dann in die Klasse TTestyFloat = Class( TTestyBase )

Geht sowas?
Ohne das ich jetzt noch eine Klasse benötige, die die Sache Händelt?
Ich sach mal das geht nicht.
Beim Erzeugen eines Objekts muss die Klasse schon feststehen.
Mit undokumentierten Tricks kann man nachträglich die Klasse eines Objekts verändern; das ist
aber absolut nicht zu empfehlen.
Du kannst allerdings eine Factory-Klasse benützen, um deine Objekte zu erzeugen.
Die Verwendung einer Factory-Klasse mag im 1. Augenblick umständlich erscheinen, ist aber das Mittel der Wahl.
Andreas
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#5

Re: Weiterentwickelndes Object???

  Alt 7. Mär 2005, 16:23
Also das ganze ist schon prinzipiell möglich.

Delphi-Quellcode:
type
  Base = class
    procedure Convert;
  end;

  Derived = class(Base)
    procedure Message;
  end;

{...}

procedure Base.Convert;
begin
  Self.Destroy;
  Self := Derived.Create;
end;

procedure Derived.Message;
begin
  ShowMessage('Hat funktioniert.');
end;

{...}

var
  C: Base;
begin
  C := Base.Create;
  C.Convert;

  if (C is Derived) then (C as Derived).Message;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Weiterentwickelndes Object???

  Alt 7. Mär 2005, 16:26
Zitat von shmia:
Beim Erzeugen eines Objekts muss die Klasse schon feststehen.
Die TTestyBase Klasse wüßte in der Procedure ReadString, dass es die anderen Klassen gibt, dass ist klar, Sie soll ja nur die Umwandlung machen wenn Sie sich 100% sicher ist!

Zitat von shmia:
Mit undokumentierten Tricks kann man nachträglich die Klasse eines Objekts verändern; das ist
aber absolut nicht zu empfehlen.
Hmm da sie ja undokumentiert sind, werd ich sie wohl nicht finden

Zitat von shmia:
Du kannst allerdings eine Factory-Klasse benützen, um deine Objekte zu erzeugen.
Die Verwendung einer Factory-Klasse mag im 1. Augenblick umständlich erscheinen, ist aber das Mittel der Wahl.
Hmm ka was das ist, über das Ding muss ich mich erst mal schlau machen

Edit: Finde in dem Zusammenhang nur was mit Web-Diensten

Sonst noch wer Ideen

Bye
Christian
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#7

Re: Weiterentwickelndes Object???

  Alt 7. Mär 2005, 16:35
Nach meiner Methode würde es gehen. Du musst halt bei jeder Verwendung abfragen, um welche Art von Objekt es sich handelt.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

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

Re: Weiterentwickelndes Object???

  Alt 7. Mär 2005, 16:39
Zitat von Oxmyx:
Nach meiner Methode würde es gehen. Du musst halt bei jeder Verwendung abfragen, um welche Art von Objekt es sich handelt.
Aber die bereits vorhandenen Daten gehen verloren. Nur als Erinnerungen, falls es nicht so gewollt ist
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 Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

Re: Weiterentwickelndes Object???

  Alt 7. Mär 2005, 16:45
Möchtest du dein TTestyBase-Objekt schon mit Daten ein Properties bestücken oder dient es nur der Erzeugung eines von ihm abgeleiteten Objekts?
Ansonsten könntest du das ganze mit virtuellen Methoden machen...

Delphi-Quellcode:
interface

TTestyBase = class
  function SagWas: string; virtual; abstract;
end;

TTestyFloat = class(TTestyBase)
  function SagWas: string;
end;

TTestyInteger = class(TTestyBase);
  function SagWas: string;
end;

function CreateObject(ClassType :string): TTestyBase;

{...}

implementation

function TTestyFloat.SagWas: string;
begin
  Result := 'Ich bin ein TTestyFloat-Objekt';
end;

function TTestyInteger.SagWas: string;
begin
  Result := 'Ich bin ein TTestyInteger-Objekt';
end;

function CreateObject(ClassType :string): TTestyBase;
begin
  Result := nil;
  if ClassType = 'Integerthen
  begin
    Result := TTestyInteger.Create;
    Exit;
  end;
  if ClassType = 'Floatthen
  begin
    Result := TTestyFloat.Create;
    Exit;
  end;
end;

{...}

procedure Test;
begin
  with CreateObject('Integer') do
  begin
    ShowMessage(SagWas);
    Free;
  end;
  with CreateObject('Float') do
  begin
    ShowMessage(SagWas);
    Free;
  end;
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Weiterentwickelndes Object???

  Alt 7. Mär 2005, 17:12
Zitat von Stevie:
Möchtest du dein TTestyBase-Objekt schon mit Daten ein Properties bestücken oder dient es nur der Erzeugung eines von ihm abgeleiteten Objekts?
Ansonsten könntest du das ganze mit virtuellen Methoden machen...
Also die BasisKlasse hat viele Virtuelle, Abstracte Methoden, welche vielerlei Informationen zur Verfügung stellen, einlesen speichern...
Eingelesen wird immer im selben verfahren, mit 2 Strings: TypString, InformationsString.

Bis jetzt mach mit mach ich es mit Hilfe eines 2.ten Objects.
Dies macht eine Fallunterscheidung (anhand des Typ-Strings) und Erstellet dementsprechend das Object, welches den zweiten String (InformationsString) zerlegt und daraus die Informationen bereitstellt...

Abrufen tu ich die Informationen aber immer mit dem BasisObject mit den Abstrakten Virtuellen Methoden...

Da die Erstellung nun aber zunehmend unübersichtlicher wird, wollte ich gleich die Erstellung der Objecte dem Object selber überlassen, auch deswegen, da ich an vielen stellen die Liste mit den BasisObjecten fülle und da immer ein Object zum Handeln zu erstellen is mir auf dauer zu blöd

Edit: Fast vergessen, dass BasisObject hat natürlich auch Propertys, die aber schon befüllt sind, auch müssen, weil sonst findet es die Strings auch nicht ...
irgendwie total verworren, ich glaub ich konsilidiere das ganze mal...

Bye
Christian
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:11 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