Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Programm auf OOP umschreiben


HenryHux - Mo 31.01.11 16:51
Titel: Programm auf OOP umschreiben
Hi, da ich mittlerweile die Vorzüge von OOP erkannt habe, wollte ich auch anfangen diese zu nutzen.
Ich kenne die Grundlagen, dadran sollte es nicht allzusehr scheitern.
Doch ging mein erster Versuch weit daneben, deswegen wollte ich mal fragen, was denn wohl die beste Konzeptplanung ist.
Ich habe ein recht umfangreiches Programm, ohne Klasse.
Die will ich zusammen in Klassen fassen um die dann als Thread ausführen zu lassen.
Doch will ich die auf jede Fall auf mehrere Klassen verteilen, oder zumindest wegen der Übersichlichkeit auf mehrere Units.
Funktioniert es eine Klasse auf mehrere Units zu verteielen?
Oder muss ich die jeweils voneinander erben lassen?

Lg


Bergmann89 - Mo 31.01.11 17:38

Hey,

für die Konzeptplanung eignet sich ein UML-Tool, damit kann man die Klassen gut darstellen und planen.
Eine Klasse auf mehrere Units ist nicht möglich, da musst du das ganze dann vererben. Dann kannst du die abgeleitete Klasse in eine extra Unit auslagern.

MfG Bergmann.


HenryHux - Mo 31.01.11 17:49

Ok, danke das hatte ich schon probiert.
Gab aber Probleme mit Variablen.
Ich dachte public Variablen würden den Erben ihr Werte auch mitgeben - leider nicht.
Und da ich die ganze Klassengeschichte zum Threaden mache, kommen mir globale Variablen da sehr ungelegen.
Jetzt muss ich sehn, wie ich Variablen übergebe.
Sind ca 20 die für mehrere Klassen zugänglich sein müssen, aber nicht Global sein dürfen.
Wie kann ich das am besten machen?

So sieht das bei mir aus

Klasse Nr.1 ruft Klasse Nr.2 auf, welche per Funktionen Werte übergibt. Soweit kein Problem, könnte bis dahin auch alle Vars in Klasse 1 definieren.
Danach muss Klasse Nr.1 die Variablen aber an 2 weitere Klassen weitergeben. 20 Variablen sind viel um die per Parameter zu übergebe.
Wie mache ich das also am besten?
In Klasse Nr.1 ein Record anlegen und das weitergeben?

Lg


Regan - Mo 31.01.11 17:50

Hallo,

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe ein recht umfangreiches Programm, ohne Klasse.

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Doch ging mein erster Versuch weit daneben, deswegen wollte ich mal fragen, was denn wohl die beste Konzeptplanung ist.

Wenn du keinen Termin für das Ausliefern dieses Programmes hast, dann würde ich vorschlagen, dass du das alte Programm wegwirfst (also gedanklich) und komplett von vorne beginnst. Dieses von dir beschriebene "Umschreiben" funktioniert nicht. Das Problem liegt darin, dass du einfach versuchen wirst, deine Methoden in Klasse zu packen. Allerdings ist das kein OOP.

Viele Grüße
Regan

Edit: Zu langsam :(


HenryHux - Mo 31.01.11 18:00

Ich habe ja schon neu angefangen, aber das Problem bleiben die Variablen.
Gibt es denn eine Möglichkeit records als Parameter zu übergeben?


jaenicke - Mo 31.01.11 18:05

Ja, Records kannst du dafür nehmen. Oder sogar eine eigene Klasse wiederum, kommt ganz darauf an was du damit genau machst.


HenryHux - Mo 31.01.11 21:49

So, danke hat so wunderbar geklappt.
War zwar viel Umschreibearbeit, aber alleine wegen der Threadbarkeit war es das Wert.

Lg


Bergmann89 - Mo 31.01.11 22:13

Hey,

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Ich dachte public Variablen würden den Erben ihr Werte auch mitgeben - leider nicht.

eigentlich werden die schon weitergegeben?! Das soltle funktionieren:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
TTestClass1 = class(TObject)
public
  TestVar: Integer;
end;

TTestClass2 = class(TTestClass1)
public
  procedure ShowTestVar;
end;

procedure TTestClass2.ShowTestVar;
begin
  ShowMessage(IntToStr(TestVar));
end;


alle Felder und Methoden, die als protected, public oder published deklariert sind sollten in der abgeleiteten Klasse verfügbar sein. Und wenn sich die 2 Klassen in der selben Unit befinden, dann sollten auch die Felder und Methoden die unter private stehen sichtbar sein.

MfG Bergmann.


HenryHux - Mo 31.01.11 23:45

Ja, die Variablen sind verfügbar, aber nicht die Werte.
D.h wenn ich in der einen Klasse die Variable Klasse1.a veränder, verändert sich nicht Klasse2.a ..
Das war mein Problem.

Lg


jaenicke - Di 01.02.11 06:30

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Ja, die Variablen sind verfügbar, aber nicht die Werte.
D.h wenn ich in der einen Klasse die Variable Klasse1.a veränder, verändert sich nicht Klasse2.a ..
Wie meint du das? Du hast doch ein konkretes Objekt. Und innerhalb des Objektes kannst du die Variable bzw. das Feld nutzen.

Wenn du zwei verschiedene Objekte hast, hast du natürlich auch je eine unabhängige Variable.