AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Klasse an Klasse gleichen Typs übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse an Klasse gleichen Typs übergeben

Ein Thema von Lenth · begonnen am 16. Aug 2006 · letzter Beitrag vom 16. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Lenth

Registriert seit: 16. Aug 2006
21 Beiträge
 
#1

Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:00
Hallo,

ich versuche mich mal möglichst kurz auszudrücken:


Delphi-Quellcode:
tMatrixClass = Class (tObject)
               Private
                 Matrix_da_e : TDA_e; //Soll gekapselt werden
               {Schnipp}
               Public
                 Constructor CreateByCrossProduct(Var AMatrixClass : tMatrixClass; Var BMatrixClass : tMatrixClass);
               {Schnipp}
End;

Hier werden zum Erzeugen einer Matrix, die in einem Objekt gekapselt ist, dem Konstruktor zwei Matrizen übergeben. Interessant dabei ist, dass die übergebenen Matrizen den gleichen Typ haben, wie das Objekt selber. Dass dies geht, habe ich schon ausprobiert. Ein solches Konstukt würde gewisse Probeme bei komplexeren Matrixoperationen vermeiden helfen.

Ich wollte Fragen, ob so etwas unter die Kategorie

"Programmiere nie mals in dieser Weise"

fällt, oder ob dies eine legitime Vorgehensweise ist.


Grüße

Christoph

[edit=Jelly]Delphi Tags gesetzt, Mfg, Jelly[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:04
Das ist nicht sonderlich gut. Der Rest deines Stils IMHO auch nicht ganz einwandfrei.

Delphi-Quellcode:
TMatrix = class(TObject)
protected
  FDA_e: TDA_e;
{Schnipp}
public
  class function Multiply(m1, m2: TMatrix): TMatrix;
  function Multiply(m2: TMatrix): TMatrix;
{Schnipp}
end;

{Schnipp}

implementation

class function TMatrix.Multiply(m1, m2: TMatrix): TMatrix;
var I, J: Integer;
begin
//Iteriere über alle Matrizenelemente von m1 und m2 mit I und J als Indizes und multipliziere
//kreuzweise, speichere Ergebnis in Result
end;


function TMatrix.Multiply(m2: TMatrix): TMatrix;
var I, J: Integer;
begin
//Iteriere über alle Matrizenelemente von self und m2 mit I und J als Indizes und multipliziere
//kreuzweise, speichere Ergebnis in Result
end;
So würde ich das machen.

Sieh dir mal die Delphi Code-Konventionen an.

Achja, das ist übrigens nur meine Meinung, die ist selbstverständlich NICHT repräsentativ.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:09
Hi,
gegen eine Verwendung von Variablen des Klassentyps in einer Klasse spricht überhaupt nichts. Insbesondere Methoden wie Assign würden ohne recht dumm nachgebaut werden müssen (gleiches gilt für z.B. Clone oder ähnliches!).
In deinem Fall würde ich dir trotzdem ein wenig davon abraten. Du gehst damit stark in die unsaubere Vermischung von verschiedenen Dingen. Das Rechnen sollte sicherlich mit verschiedenen Reealisierungen eines Vektors möglich sein. Ein Vektor ist hingegen nur ein reiner Datentyp. Hier bietet es sich also an, dass du die Logik der Vektorrechnung von seiner Repräsentation trennst. Du hast dann zwei Klassen, die nur eine bestimmte Funktionalität bieten. Der Vorteil ist, dass du hier einerseits mehr übersicht hast und andererseits sehr einfach eine der Komponenten austauschen kannst (z.B. eine effizientere Mathelogik verwenden könntest).
Zudem muss doch eigentlich ein Vektor nicht die Operationen kennen, die mit ihm gemacht werden. Das bietet den Vorteil, dass du mit beliebigen anderen Klassen diese Vektor verwenden könntest!

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:17
Herzlich willkommen bei uns,

eins mal vorweg... Du hast die Möglichkeit hier Tags zu benutzen, um deinen Code besser formatiert darstellen zu können... Dafür einfach dein Delphicode so formatieren
Code:
[delphi]Dein Delphi Code[/delphi]
Ich hab das mal in deinem ersten Post einmal für dich gemacht.

Aber zu deinem Thema:
Ich würde innerhalb eines Objektes lediglich Operationen ablegen, die einzig und allein das Objekt betreffen. Matrizenmultiplikation z.B. würd ich von ausserhalb erledigen lassen, eventuell von einer getrennten Klasse TMatrixOperations o.ä.

Innerhalb von TMatrix würd ich nur so Dinge reinschreiben wie
  • Invert
  • Negate
  • Power
also alles Dinge, die nur mit dem Objekt direkt arbeiten. Da gibts sicherlich noch mehr.

Aber ist auch nur meine Meinung. Geht bestimmt auch anders.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:19
Ja, zum Beispiel in Java. Ich merks schon, ich bin ein bissel Java-verseucht.

Also ich denke mal, eine Klassenmethode wie von mir vorgeschlagen mag eine nette Alternative sein.

TMatrix.Multiply(m1, m2);

Eine Alternative wäre natürlich eine "normale" Funktion:

MultiplyMatrices(m1, m2);

Aber ich würde keine Konstruktoren dafür "missbrauchen".
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Lenth

Registriert seit: 16. Aug 2006
21 Beiträge
 
#6

Re: Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:26
Hallo,

danke nochmal für die Tips.

Ich denke, ich werde mal aus der einen Klasse gemäß dem, was ich hier zu hören bekommen habe, zwei machen, um das ganze übersichtlicher zu gestalten.

Grüße

Christoph
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:27
Wieso zwei? Hab ich da was übersehen?

Die erste Klasse soll die Matrix sein, und die zweite?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:33
Zitat von 3_of_8:
Wieso zwei? Hab ich da was übersehen?
Zitat von Jelly:
Ich würde innerhalb eines Objektes lediglich Operationen ablegen, die einzig und allein das Objekt betreffen. Matrizenmultiplikation z.B. würd ich von ausserhalb erledigen lassen, eventuell von einer getrennten Klasse TMatrixOperations o.ä.
Zitat von Der_Unwissende:
Das Rechnen sollte sicherlich mit verschiedenen Reealisierungen eines Vektors möglich sein. Ein Vektor ist hingegen nur ein reiner Datentyp. Hier bietet es sich also an, dass du die Logik der Vektorrechnung von seiner Repräsentation trennst. Du hast dann zwei Klassen, die nur eine bestimmte Funktionalität bieten.
Nur alle anderen Beiträge?!
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:45
Ups...

Hab ich wohl überlesen.

Aber sowas wie TMatrixOperations finde ich auch nicht sonderlich toll...

Wie gesagt, ich bin für Klassenmethoden in TMatrix.

(TMatrixClass ist übrigens kein richtiger bezeichner, denn dass es eine Klasse ist, ist klar, eine TMatrixClass wäre eine class of TMatrix)
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
shmia

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

Re: Klasse an Klasse gleichen Typs übergeben

  Alt 16. Aug 2006, 13:47
Dein Konstruktor bringt so für das Design nicht so viel (Alternativen wurden ja genannt).
Aber als Copy-Konstruktor wäre die Sache schon interessant:
Delphi-Quellcode:
tMatrix = Class (tObject)
   Public
   Constructor Create; overload; // Null Matrix
   constructor Create(x,y:Integer); overload; // leere Matrix definierter Grösse
   Constructor Create(sourcematrix : tMatrix); overload; // Copy-Konstruktor
Andreas
  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 01:07 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