AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit Tpbject

Ein Thema von R2009 · begonnen am 17. Jul 2009 · letzter Beitrag vom 19. Jul 2009
Antwort Antwort
Seite 2 von 2     12   
shmia

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

Re: Problem mit Tpbject

  Alt 18. Jul 2009, 11:56
Deine Assign-Methode ist auch falsch; ich hab das mal verbessert:
Delphi-Quellcode:
TYPE
  Tarray=class(TPersistent)
  private
    arr:array of integer;
    maximum,minimum:integer;
    procedure setl(a:integer);
    function Maxa:integer;
    function Mina:integer;
  public
    { Public-Deklarationen } 
    procedure Assign(Source: TPersistent); override;
  end;
implementation

procedure Tarray.Assign(Source: TPersistent);
var n:integer;
begin
  if Source is Tarray then
  begin
// arr := Copy(TArray(Source).arr, 0, length(TArray(Source).arr)-1);
    arr := Slice(TArray(Source).arr, length(TArray(Source).arr)-1);
  end
  else
    inherited;
end;
Andreas
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: Problem mit Tpbject

  Alt 18. Jul 2009, 12:37
Zitat von shmia:
Deine Assign-Methode ist auch falsch; ich hab das mal verbessert:
Was für ein Schwachsinn. Warum ist man verpflichtet TPersistent als Basisklasse zu nutzen? Er kann eine eigene Assign() Funktionalität einfügen - hat er auch gemacht. Ab TObject selbst implementiert - wo liegt das Problem? Nur weil Assign() ab TPersistent eingeführt wird? Wie kommt man auf solche Ideen das dann gleich als notwendig zu deklarieren?

Man sich ohne Problem sein eigenes System inklusive Assign() bauen ohne auch nur TPersistent zu verwenden. Das maximale was man hätte sagen können an der originalen Implementierung, dass er lieben einen Typ beim Parameter verwenden sollte (TIntegerDynArray aus Types z.B. oder eigener Type) und Assign() für Erweiterungen virtual zu machen. Aber das mit TPersistent sehe ich nicht ein und vor allem das die nicht Nutzung von TPersistent hier als falsch gebrandmarkt wird.

/EDIT: und zu deiner nun "richtigen" Version auch mal ein paar Anmerkungen:
- warum gibst du bei Copy() noch Anfang und Ende an? Bei einer Array Kopie ist dies nicht möglich, dafür gibt es Slice(). Bei Copy mit Array gibt es nur einen möglichen Parameter: das Quell-Array.
- warum verwendest du Slice() wo du doch keinen Teilabschnitt haben willst vom Original? Der Slice() Code ist entsprechend aufwendiger als Copy
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Problem mit Tpbject

  Alt 18. Jul 2009, 12:39
Hi shmia,

falsch ist wohl relativ. Hab halt Tobject verwendet. Das aus gutem Grund.
In diesem Fall ist mein eigenes assign völlig korrekt.

Aber jetzt zu deiner Lösung:

Delphi-Quellcode:
procedure Tarray.Assign(Source: TPersistent);
var n:integer;
begin
  if Source is Tarray then
  begin
    arr := Slice(TArray(Source).arr, length(TArray(Source).arr)-1) <<<----------------------
    Sort;
    Maxa;
    MinA;
    kleinster_fehlender_Wert:=Min_wert;
  end
  else
    inherited;
end;
Fehlermeldung beim compilieren. Slice erlaubt nur Open array element!

Vielen dank und viele Grüsse
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
shmia

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

Re: Problem mit Tpbject

  Alt 18. Jul 2009, 12:53
Zitat von Muetze1:
Zitat von shmia:
Deine Assign-Methode ist auch falsch; ich hab das mal verbessert:
Was für ein Schwachsinn.
Oha! - dir ist wohl gerade eine Laus über die Leber gelaufen, sonst wäre dein Ton nicht so.
Ich sag mal wenn man irgendwo eine Methode Assign nennt, dann muss man im Universum der VCL auch richtig machen.
(wird ja immer wieder falsch gemacht, weil das Prinzip dahinter nicht ganz einfach ist)
Man darf natürlich jederzeit eigene Zuweisungsmethoden schreiben, dann sollte man aber nicht direkt den Namen Assign verwenden:
Delphi-Quellcode:
TYPE
  TIntArray = array of integer; // oder gleich TIntegerDynArray

  Tarray=class(TPersistent)
  private
    arr:TIntArray;
    maximum,minimum:integer;
    procedure setl(a:integer);
    function Maxa:integer;
    function Mina:integer;
  public
    { Public-Deklarationen } 
    procedure Assign(Source: TPersistent); override;
    procedure AssignArrray(const value:TIntArray);
  end;
Mit dem Vorschlag oben, geht die Klasse sowohl konform mit den Regeln der VCL
und erfüllt ausserdem die Forderung, dass man auch Arrays zuweisen kann.
Delphi-Quellcode:
var
  a, b : Tarray;
  test : TIntArray;
begin
  a := Tarray.Create;
  b := Tarray.Create;
  setLength(test, 3);
  test[0] := 7; test[1] := 23; test[2] := 29;
  a.AssignArray(test);
  b.Assign(a); // b enthält jetzt den Inhalt von "test"
Was jetzt noch fehlt, sind zwei weitere Konstruktoren:
Delphi-Quellcode:
constructor Create; overload;
constructor Create(const AArray:Tarray); overload; // das ist ein sogenannter Copy-Konstruktor
constructor Create(const AArray:TIntArray); overload;
Andreas
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Problem mit Tpbject

  Alt 18. Jul 2009, 13:05
Zitat von shmia:
Oha! - dir ist wohl gerade eine Laus über die Leber gelaufen, sonst wäre dein Ton nicht so.
Nein, mich regt auf wenn Wissen falsch vermittelt bzw. falsches Wissen vermittelt wird.

Zitat von shmia:
Ich sag mal wenn man irgendwo eine Methode Assign nennt, dann muss man im Universum der VCL auch richtig machen.
Was hat TObject mit VCL zu tun? Rein gar nichts. VCL ist die Visual Component Library, also im Endeffekt TButton, etc. Dies hat nichts mit TObject zu tun. TObject ist die Basisklasse aller Objektorientiertkeit von Delphi. Es gibt nichts anderes. Und da die VCL objektorientiert ist, basiert sie schlussendlich auf TObject. Aber was die VCL implementiert kann jedem anderen OO Nutzer in Delphi schnuppe sein, wenn er nichts entsprechendes nutzen will bzw. entwickeln will.

Zitat von shmia:
(wird ja immer wieder falsch gemacht, weil das Prinzip dahinter nicht ganz einfach ist)
Das Prinzip ist mehr als einfach und es ist auch nichts mysteriöses dran.

Zitat von shmia:
Man darf natürlich jederzeit eigene Zuweisungsmethoden schreiben, dann sollte man aber nicht direkt den Namen Assign verwenden:
Das nächste Ding. Warum sollte man dies nicht Assign() nennen? Darf ich bei einer Ableitung von TObject auch meine Methoden nicht Paint, Resize, SetBounds etc nennen weil die VCL sie in einem ganz anderen Zweig des Klassenbaums einführt und so nennt? Wenn man ein eigenes System entwickelt - objektorientiert, also von TObject abgeleitet - dann muss man diese anders nennen obwohl man sich selbst die gesamte Struktur ausdenkt? Na dann sollten den heutigen Entwicklern bei Delphi ja bald die Namen für die Methoden ausgehen, da schon viele Jahre zuvor andere Entwickler ihnen die besten Namen wegschnappen konnten in dem sie sie verwendet haben.

Grundlegend: Der Delphi Compiler kann objekt-orientierten Code übersetzen und dabei gelten nur die Regeln die dieser definiert. Dabei gibt es bis auf die paar Schlüsselwörter und Basisklasse TObject (was optional ist bei der Angabe) nichts weiter zu beachten. Alles was man dann implementiert oder nennt ist in seinem eigenen Interesse.

/EDIT:

Zitat von shmia:
Was jetzt noch fehlt, sind zwei weitere Konstruktoren:
Warum fehlen die? Was willst du damit erreichen? 20 Constructoren in dern 6. Ableitung? Und was ist wenn man mal im Constructor was initialisieren muss? 20 Constructoren neu definieren und implementieren? Wenn ich Arbeit suche, dann frage ich beim Arbeitsamt und mache mir nicht selber Überstunden mit so etwas.

Vor allem da man sich für ein sauberere OOP Konzept diese überladenen Konstruktoren sparen sollte, stellen sie nichts anderes dar als eine Zusammenfassung des Standardkonstruktoraufrufs und anschliessendem Assign() Aufruf. Wenn du nun schon Assign() implementierst, dann brauchst du keine überladenen Konstruktoren mehr.

Vor allem sehe ich auch hier nicht ein, dass dieses als "fehlend" gekennzeichnet wird. Die fehlen ganz und gar nicht. Die sind überflüssig und erschweren jede weitere Ableitung.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Problem mit Tpbject

  Alt 18. Jul 2009, 14:58
Hi Leute,

bleibt ruhig ihr braucht doch deswegen nicht zu streiten.
Muetze, obwohl ich auf deiner Seite stehe, dein Ton ist schon etwas rau.
Shmia: wenn du schon meinen Code korrigierst dann solltest du das auch so machen, dass es funktioniert.

Viele Grüsse, danke und ruhig bleiben!
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#17

Re: Problem mit Tpbject

  Alt 18. Jul 2009, 20:35
@R2009
[OT]
Vielleicht solltest auch Du mal an Deinem Ton arbeiten.

1. Wenn ein Moderator Dich bittet, den Titel Deines Beitrages zu ändern, dann solltest Du Dir das auch zu Herzen nehmen, denn diese Bitte kommt wohl kaum ohne Grund - und wenn es nur um die Korrektur Deiner Rechtschreibfehler ginge....
Aber unter 'Problem mit Tpbject' kann man sich in der Tat sehr viel oder sehr wenig vorstellen. Etwas präzisieren hätte man es wohl können, oder? Oder willst Du damit erreichen, dass möglichst viele Leute Deinen Thread lesen, um herauszufinden, um was es geht?

2.
Zitat:
Shmia: wenn du schon meinen Code korrigierst dann solltest du das auch so machen, dass es funktioniert.
Jemandem, der Dir helfen will, kann man das auch etwas freundlicher mitteilen. Ich würde Deinen Namen nach so einer 'Attacke' jedenfall auf die schwarze Liste setzen... Merke: niemand ist fehlerfrei!

Du versuchst hier im Forum, Leute, die irgendetwas falsch machen, zu bekehren, bist aber selber keinen Deut besser und kannst dann nichteinmal Dein Fehlverhalten eingestehen, wenn man (ein Moderator) Dich darauf aufmerksam macht.
[/OT]
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#18

Re: Problem mit Tpbject

  Alt 19. Jul 2009, 07:26
Hi worker,

wenn du etwas gegen mich hast machen wir das bitte ausserhalb des Threads ab.

Viele Grüsse
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 20:13 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