Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
@hum4n0id3: Ich tue mich schwer, mit deinem "Service" Begriff. Ich glaube man muss da aufpassen.
Für mich ist ein Service
A: Ein Windows Dienst (Unix: Daemon) https://en.wikipedia.org/wiki/Windows_service
B: Ein Webservice: https://de.wikipedia.org/wiki/Webservice
Bei beiden Begriffen sehe ich keine Überschneidung mit deinem "Service" Beispiel.
Aus meiner Sicht sprichst du hier einfach von https://de.wikipedia.org/wiki/Modularit%C3%A4t
Für mich ist ein Service
A: Ein Windows Dienst (Unix: Daemon) https://en.wikipedia.org/wiki/Windows_service
B: Ein Webservice: https://de.wikipedia.org/wiki/Webservice
Bei beiden Begriffen sehe ich keine Überschneidung mit deinem "Service" Beispiel.
Aus meiner Sicht sprichst du hier einfach von https://de.wikipedia.org/wiki/Modularit%C3%A4t
- stoffel_hessen
- Beiträge: 66
- Registriert: Sa 18. Jun 2022, 12:27
- OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
- CPU-Target: x86 64Bit
- Wohnort: Riedstadt
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Welchen Vorteil hat es hierfür Klasse anzulegen in der die Funktion hier hinein zu packen und in einer Unit abzulegen, statt die Funktion direkt als function in einer Unit abzulegen?hum4n0id3 hat geschrieben: Sa 30. Jul 2022, 07:00Es ist eine Klasse mit deiner Funktion aus den anderen Thread. Die legst du in einer Unit ab und kannst sie von überall aufrufen, wo du sie brauchst. Statt also der Globalen Variable, ebenCode: Alles auswählen
TDeviceIPService = class private GeraeteArt : string; ersteZiffer : string; Ziffernrest : string; ZiffernInInteger : integer; StelleZwei : integer; i : integer; IPAdresse : string; IPAdresseGeraeteklasse : string; public property IntProp: Integer read FIntProp write FIntProp; end; function DeviceIPService.getIPbyName(Ziffern : string) : string; var begin GeraeteArt := copy (Ziffern,1,2); if GeraeteArt = 'xx' then IPAdresseGeraeteklasse := '10.19.2'; if GeraeteArt = 'yy' then IPAdresseGeraeteklasse := '172.24.7.'; ersteZiffer := copy (Ziffern,3,1); Ziffernrest := copy (Ziffern,4,3); ZiffernInInteger := strtoint (Ziffernrest); if RBxx.Checked then // Loopback Adresse xx begin StelleZwei := 0; for i := 1 to 4 do if ZiffernInInteger > 200 then begin inc(StelleZwei); ZiffernInInteger := ZiffernInInteger - 200; end; IPAdresse := IPAdresseGeraeteklasse + inttostr (StelleZwei) + ersteZiffer + '.' + inttostr (ZiffernInInteger); end else IPAdresse := IPAdresseGeraeteklasse + inttostr (ZiffernInInteger); // Loopback Adresse yy MaschinennameInIP := IPAdresse; end;
Code: Alles auswählen
ip := DeviceIPService.getIPbyName('xyz');
Was bewirkt dieser Code, was macht man damit?hum4n0id3 hat geschrieben: Sa 30. Jul 2022, 07:00 public
property IntProp: Integer read FIntProp write FIntProp;
end;
Das habe ich verstanden und werde mich auch von den vielen Globalen Variablen verabschieden.hum4n0id3 hat geschrieben: Sa 30. Jul 2022, 07:00 Das hat (für mich) folgende Vorteile. Ich sehe sofort woher meine GeräteIP kommt. Bei Fehlern muss ich also in dem Service schauen, was dort lost ist und muss nur das Service Debuggen, aber nicht das halbe/ganze Program. Bei großen Projekten mit Globalen Variablen kannst du dir nie sicher sein, wo sie alle verstreut sind und ob nur ausgelesen werden und nicht irgendwo überschrieben werden. Man kann das Service an weitere Begebenheiten anpassen, erweitern und nicht das ganze Programm.
Ich dachte immer, es ist besser/schneller einen Wert nur einmal zu berechnen und diesen dann in einer Variable zur Verfügung zu stellen, dem ist wohl nicht so.
Gruß Christopher
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2819
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Das ist aber nur ein kleiner Teil dessen, was als Service beschrieben wird. Siehe auch https://de.wikipedia.org/wiki/Serviceor ... rchitekturtheo hat geschrieben: Sa 30. Jul 2022, 09:40 @hum4n0id3: Ich tue mich schwer, mit deinem "Service" Begriff. Ich glaube man muss da aufpassen.
Für mich ist ein Service
A: Ein Windows Dienst (Unix: Daemon) https://en.wikipedia.org/wiki/Windows_service
B: Ein Webservice: https://de.wikipedia.org/wiki/Webservice
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Ja, schon klar, dass es dazu mehr zu sagen gibt. Ich wollte das Thema aber nicht ins Zentrum rücken in diesem Thread.m.fuchs hat geschrieben: Sa 30. Jul 2022, 16:34 Das ist aber nur ein kleiner Teil dessen, was als Service beschrieben wird. Siehe auch https://de.wikipedia.org/wiki/Serviceor ... rchitektur
Wie dort auch steht, geht es um "verteilte Systeme" und ich glaube nicht, dass hum4n0id3 mit seinem Beispiel darauf abgezielt hat.
Ich persönlich wusste einfach nicht, wie der Begriff "Service" in diesen Rahmen passt, deshalb der Einwand.
Lasse mich gerne belehren.
- stoffel_hessen
- Beiträge: 66
- Registriert: Sa 18. Jun 2022, 12:27
- OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
- CPU-Target: x86 64Bit
- Wohnort: Riedstadt
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Ich habe mich nun an einer Klasse versucht, bin aber leider gescheitert.
Es kommt die Fehlermeldung "gemeinsame_procedure_funktionen.pas(26,3) Error: Identifier not found "Fcir""
Was mache ich falsch?
Code: Alles auswählen
unit Gemeinsame_Procedure_Funktionen;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils;
type
TServicePolicyBerechnen = class
private
Fcir : string;
procedure setcir(cir : string);
function getcir : string;
public
property cir: string read getcir write setcir;
end;
implementation
procedure setcir(cir : string);
begin
Fcir := cir;
end;
end.
Was mache ich falsch?
Gruß Christopher
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
1: Wenn du nur das Feld lesen und schreiben willst, braucht es keine Methoden.
So reicht.
2: Sonst muss es heissen:
da es eine Methode der Klasse TServicePolicyBerechnen ist.
Man kann sich die Tipperei sparen, indem man den Cursor auf
setzt und Strg+Umschaft+C macht.
Das füllt automatisch den Code in der implementation Section ein.
So reicht.
Code: Alles auswählen
property Cir: string read FCir write FCir;
Code: Alles auswählen
procedure TServicePolicyBerechnen.setcir(ACir: string);
begin
FCir := ACir;
end;
Man kann sich die Tipperei sparen, indem man den Cursor auf
Code: Alles auswählen
procedure setcir(cir : string);
Das füllt automatisch den Code in der implementation Section ein.
- stoffel_hessen
- Beiträge: 66
- Registriert: Sa 18. Jun 2022, 12:27
- OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
- CPU-Target: x86 64Bit
- Wohnort: Riedstadt
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Danke für deine schnelle Antworttheo hat geschrieben: Mo 1. Aug 2022, 10:51 1: Wenn du nur das Feld lesen und schreiben willst, braucht es keine Methoden.
So reicht.2: Sonst muss es heissen:Code: Alles auswählen
property Cir: string read FCir write FCir;
da es eine Methode der Klasse TServicePolicyBerechnen ist.Code: Alles auswählen
procedure TServicePolicyBerechnen.setcir(ACir: string); begin FCir := ACir; end;
Man kann sich die Tipperei sparen, indem man den Cursor aufsetzt und Shift+Ctrl+C macht.Code: Alles auswählen
procedure setcir(cir : string);
Das füllt automatisch den Code ein.

Eine Frage habe ich noch, kannst du mir erklären, warum du ein "A" vor die Variable "Acir" gesetzt hast, und warum meist ein "F" vor der Variablen "Fcir" verwendet wird?
Danke für deine Unterstützung
Gruß Christopher
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
F ist eine Konvention und steht für "Field" (Feld der Klasse).
ACir schreibe ich, damit man es nicht mit dem Property Cir verwechselt.
Ich empfehle immer noch gern diesen Überblick über OOP:
https://www.delphi-treff.de/tutorials/o ... ashkurs/8/
Ist zwar für Delphi, aber bis dahin ist alles gleich.
P.S. Du hast eine Version meines Beitrags kopiert, der noch Fehler enthielt. Das Tastaturkürzel ist oben korrigiert.
ACir schreibe ich, damit man es nicht mit dem Property Cir verwechselt.
Ich empfehle immer noch gern diesen Überblick über OOP:
https://www.delphi-treff.de/tutorials/o ... ashkurs/8/
Ist zwar für Delphi, aber bis dahin ist alles gleich.
P.S. Du hast eine Version meines Beitrags kopiert, der noch Fehler enthielt. Das Tastaturkürzel ist oben korrigiert.
- stoffel_hessen
- Beiträge: 66
- Registriert: Sa 18. Jun 2022, 12:27
- OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
- CPU-Target: x86 64Bit
- Wohnort: Riedstadt
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Danke für die Erklärung.
Nun leider gleich das nächste Problem, ich muss zugeben mir fehlt völlig das Verständnis, was hier geschieht.
Ich habe in einer Unit in der Uses Gemeinsame_Procedure_Funktionen hinzugefügt.
Es kommt beim kompilieren die Fehlermeldungen:
Config.pas(4962,105) Error: Only class methods, class properties and class variables can be referred with class references
Config.pas(4962,105) Error: Only class methods, class properties and class variables can be accessed in class methods
Nun leider gleich das nächste Problem, ich muss zugeben mir fehlt völlig das Verständnis, was hier geschieht.
Ich habe in einer Unit in der Uses Gemeinsame_Procedure_Funktionen hinzugefügt.
Code: Alles auswählen
VorlageService.text := StringReplace (VorlageService.text, 'XXXCIR', TServicePolicyBerechnen.cir, [rfReplaceAll, rfIgnoreCase]);
Config.pas(4962,105) Error: Only class methods, class properties and class variables can be referred with class references
Config.pas(4962,105) Error: Only class methods, class properties and class variables can be accessed in class methods
Gruß Christopher
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Lies mal in Ruhe die OOP Einführung oben.
Du hast keine Instanz.
Z.B.
TServicePolicyBerechnen allein ist nur eine Art "Muster" und noch nichts Handfestes (Im Speicher).
Erst mit Create wird eine Instanzvariable "MyServicePolicyBerechnen" benutzbar.

Du hast keine Instanz.
Z.B.
Code: Alles auswählen
MyServicePolicyBerechnen:=TServicePolicyBerechnen.Create;
Erst mit Create wird eine Instanzvariable "MyServicePolicyBerechnen" benutzbar.
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
m.fuchs hat geschrieben: Sa 30. Jul 2022, 16:34Das ist aber nur ein kleiner Teil dessen, was als Service beschrieben wird. Siehe auch https://de.wikipedia.org/wiki/Serviceor ... rchitekturtheo hat geschrieben: Sa 30. Jul 2022, 09:40 @hum4n0id3: Ich tue mich schwer, mit deinem "Service" Begriff. Ich glaube man muss da aufpassen.
Für mich ist ein Service
A: Ein Windows Dienst (Unix: Daemon) https://en.wikipedia.org/wiki/Windows_service
B: Ein Webservice: https://de.wikipedia.org/wiki/Webservice
Der Einwand ist berechtigt und deshalb schrieb ich unter anderem auch, das ich auch gerne Wissen würde wie es die Lazarus-Leute lösen. In PHP nutze ich unter anderem ein Framework, das mit Servicen arbeitet. Das sind Klassen die ganz bestimmte Dienste bereit stellen. Der Vorteil ist das man eine bestimmte Struktur hat und jedes Teil einer Software bestimmte Aufgaben besitzt. Somit versucht man große Projekte zu ordnen und bei Problemen sucht man eben in Teilbereichen und nicht in der ganzen Software.theo hat geschrieben: Sa 30. Jul 2022, 09:40 @hum4n0id3: Ich tue mich schwer, mit deinem "Service" Begriff. Ich glaube man muss da aufpassen.
Für mich ist ein Service
A: Ein Windows Dienst (Unix: Daemon) https://en.wikipedia.org/wiki/Windows_service
B: Ein Webservice: https://de.wikipedia.org/wiki/Webservice
Bei beiden Begriffen sehe ich keine Überschneidung mit deinem "Service" Beispiel.
Aus meiner Sicht sprichst du hier einfach von https://de.wikipedia.org/wiki/Modularit%C3%A4t
Da mir dieser Ansatz gut gefällt, nutze ich es auch außerhalb von PHP und schau wie es dort gelöst wird.
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
@hum4n0id3: So gesehen ist das eine recht grundlegende Angelegenheit, die so tatsächlich auch an die SOA denken lässt.
https://de.wikipedia.org/wiki/Modulare_Programmierung
Zum Zuge kommt das Prinzip insb. durch die OOP.
https://de.wikipedia.org/wiki/Objektori ... rammierung
Es gibt hier sicher User, die das theoretisch besser einordnen können als ich.
https://de.wikipedia.org/wiki/Modulare_Programmierung
Zum Zuge kommt das Prinzip insb. durch die OOP.
https://de.wikipedia.org/wiki/Objektori ... rammierung
Es gibt hier sicher User, die das theoretisch besser einordnen können als ich.
- af0815
- Lazarusforum e. V.
- Beiträge: 6797
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Das ist die Diskussion, wieviel OOP und wieviel Interface.
Grundlegend hat beides seine Berechtigung. OOP kann leicht überbewertet werden. Interfaces auch
Die Frage ist immer, wo macht was einen Sinn. OOP wenn die Dinge wirklich Miteinander einen Kontext haben. Das zu durchbrechen und dann über Interfaces zu gehen, dann, wenn der Zudammenhang nicht mehr so gegeben ist. Es gab da ein paar englischsprachige Publikationen dazu, aber die Bücher zu bekommen über ein Antiquariat ist auch nicht so leicht. Wenn ich aus dem Urlaub kommen suche ich mir die ISBN mal raus.
Grundlegend hat beides seine Berechtigung. OOP kann leicht überbewertet werden. Interfaces auch

Die Frage ist immer, wo macht was einen Sinn. OOP wenn die Dinge wirklich Miteinander einen Kontext haben. Das zu durchbrechen und dann über Interfaces zu gehen, dann, wenn der Zudammenhang nicht mehr so gegeben ist. Es gab da ein paar englischsprachige Publikationen dazu, aber die Bücher zu bekommen über ein Antiquariat ist auch nicht so leicht. Wenn ich aus dem Urlaub kommen suche ich mir die ISBN mal raus.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- stoffel_hessen
- Beiträge: 66
- Registriert: Sa 18. Jun 2022, 12:27
- OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
- CPU-Target: x86 64Bit
- Wohnort: Riedstadt
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Das habe ich gestern gelesen und bin nun auch ein Stück weiter, funktionieren tut es aber nicht.theo hat geschrieben: Mo 1. Aug 2022, 11:17 Lies mal in Ruhe die OOP Einführung oben.![]()
Du hast keine Instanz.
Z.B.TServicePolicyBerechnen allein ist nur eine Art "Muster" und noch nichts Handfestes (Im Speicher).Code: Alles auswählen
MyServicePolicyBerechnen:=TServicePolicyBerechnen.Create;
Erst mit Create wird eine Instanzvariable "MyServicePolicyBerechnen" benutzbar.
Das Kompilieren klappt nun, aber zur Laufzeit bekomme ich beim Aufrufvon bbb.create eine Fehlermeldung, siehe Screenshot Das ist der Code
Code: Alles auswählen
procedure XXX.BandbreiteCPE;
var bbb : TServicePolicyBerechnen;
begin
bbb.Create;
Code: Alles auswählen
unit XXX_Gemeinsame_Procedure_Funktionen;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils;
type
{ TServicePolicyBerechnen }
TServicePolicyBerechnen = class
private
Fqos, Fcir, Fpir, Fcbs, Fpbs : string;
Fqos_core, Fcir_core, Fpir_core, Fcbs_core, Fpbs_core : string;
function BandbreiteBerechnen (Bandbreite : string) : string;
public
property qos: string read Fqos write Fqos;
property cir: string read Fcir write Fcir;
property pir: string read Fpir write Fpir;
property cbs: string read Fcbs write Fcbs;
property pbs: string read Fpbs write Fpbs;
property qos_core: string read Fqos_core write Fqos_core;
property cir_core: string read Fcir_core write Fcir_core;
property pir_core: string read Fpir_core write Fpir_core;
property cbs_core: string read Fcbs_core write Fcbs_core;
property pbs_core: string read Fpbs_core write Fpbs_core;
procedure ServicePolicyParameter (Aqos: string; Adownload : string; Aupload : string; ASprachKanaele : string);
end;
implementation
function TServicePolicyBerechnen.BandbreiteBerechnen (Bandbreite : string) : string;
var UebergebenBandbreite : integer;
begin
UebergebenBandbreite := strtoint (Bandbreite) * 10 * 66;
result := inttostr ( UebergebenBandbreite );
end;
//***** ServicePolicy einträge Berechnen
procedure TServicePolicyBerechnen.ServicePolicyParameter(Aqos: string; Adownload: string; Aupload: string; ASprachKanaele : string);
var cbsInt : integer;
pbsInt : integer;
begin
if Aqos = 'BE'
then
begin
// BE Bandbreite CPE
self.qos:='BE';
self.cir:='64';
self.pir := IntToStr ( 1024 * strtoint (Aupload));
self.cbs := '1000';
pbsInt := strtoint (Aupload) * 16000;
if pbsInt > 10000000 then self.pbs := '10000000'
else self.pbs := IntToStr (pbsInt);
// BE Bandbreite Core
self.qos_core := 'BE';
self.cir_core := '64';
self.pir_core := IntToStr ( 1024 * strtoint (Adownload));
self.cbs_core := '1000';
pbsInt := strtoint (Aupload) * 16000;
if pbsInt > 10000000 then self.pbs_core := '10000000'
else self.pbs_core := IntToStr (pbsInt);
end;
if Aqos = 'AF66'
then
begin
// AF66 Bandbreite CPE
self.qos := 'AF66';
self.cir := BandbreiteBerechnen (Aupload);
self.pir := IntToStr ( 1024 * strtoint (Aupload));
cbsInt := strtoint (Aupload) * 10560;
if cbsInt > 10000000 then self.cbs := '10000000'
else self.cbs := IntToStr (cbsInt);
pbsInt := strtoint (Aupload) * 16000;
if pbsInt > 10000000 then self.pbs := '10000000'
else self.pbs := IntToStr (pbsInt);
// AF66 Bandbreite Core
self.qos_core := 'AF66';
self.cir_core := BandbreiteBerechnen (Adownload);
self.pir_core := IntToStr ( 1024 * strtoint (Adownload));
cbsInt := strtoint (Adownload) * 10560;
if cbsInt > 10000000 then self.cbs_core := '10000000'
else self.cbs_core := IntToStr (cbsInt);
pbsInt := strtoint (Aupload) * 16000;
if pbsInt > 10000000 then self.pbs_core := '10000000'
else self.pbs_core := IntToStr (pbsInt);
end;
if Aqos = 'EF'
then
begin
// EF Bandbreite CPE
self.qos := 'EF';
self.cir := IntToStr ( 1024 * strtoint (Aupload));
self.pir := self.cir;
cbsInt := strtoint (Aupload) * 16000;
if cbsInt > 10000000 then self.cbs := '10000000'
else self.cbs := IntToStr (cbsInt);
self.pbs := self.cbs;
// EF Bandbreite Core
self.qos_core := 'EF';
self.cir_core := IntToStr ( 1024 * strtoint (Aupload));
self.pir_core := self.cir_core;
cbsInt := strtoint (Aupload) * 16000;
if cbsInt > 10000000 then self.cbs_core := '10000000'
else self.cbs := IntToStr (cbsInt);
self.pbs_core := self.cbs_core;
end;
if Aqos = 'ST'
then
begin
// EF Bandbreite CPE
self.qos := 'EF';
self.cir := IntToStr ( 128 * StrToInt(ASprachKanaele));
self.pir := self.cir;
self.cbs := '1000';
self.pbs := self.cbs;
// EF Bandbreite Core
self.qos_core := self.qos;
self.cir_core := self.cir;
self.pir_core := self.pir;
self.cbs_core := '1000';
self.pbs_core := self.cbs_core;
end;
end;
end.
Gruß Christopher
- stoffel_hessen
- Beiträge: 66
- Registriert: Sa 18. Jun 2022, 12:27
- OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
- CPU-Target: x86 64Bit
- Wohnort: Riedstadt
Re: Umstellung von Code, wie schreibt man ein Programmcode richtig und gut
Korrigiere mich mal selbst.
Richtig ist
Richtig ist
Code: Alles auswählen
bbb:= TServicePolicyBerechnen.Create;
Gruß Christopher