Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   OOP- Programm Aufzugsteuerung. Korrekt Programmiert? (https://www.delphipraxis.net/200981-oop-programm-aufzugsteuerung-korrekt-programmiert.html)

Starter 13. Jun 2019 11:15

Delphi-Version: XE6

OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Community,

Danke erstmal für dieses tolle Forum, es hat mir schon einige Fragen beantwortet.

Wie mein Name schon sagt, bin ich noch "Starter" und lerne momentan Delphi besser kennen. Ich bin jetzt momentan an den Punkt Objekt Orientierte Programmierung angekommen und hab nun in OOP die ersten Gehversuche gestartet.
Dazu habe ich ein kleines Programm geschrieben und wollte euch fragen, ob jemand, Zeit und Lust vorausgesetzt, drüber schauen könnte. Und es gibt sicherlich einige Verbesserungsvorschläge. Das Programm habe ich mit allen dazugehörigen Units etc. als Zipdatei als Anhang mit angefügt.

Zur Erläuterung meines Programmes (Es stellt die Steuerung eines ganz einfachen Aufzuges dar):

Ich habe in der Unit Elevator eine Klasse TElevator erstellt mit zwei privaten Eigenschaften und zwei Public properties mit denen auf die privaten Eigenschaften zugegriffen werden kann. sowie einem constructor, der eine zufällige Zahl zwischen 1 und 4 ausgibt.

Beim Aufruf der Main Form, wird ein Objekt names myElevator erstellt und mit dem constructor eine Zahl zwischen 1-4 erstellt.
Je nachdem welche Zahl erstellt wurde, färbt sich ein Pannel im Mainfenster grün. Daran sieht der Nutzer, in welchem Stockwerk der Aufzug gerade ist.

Nun muss der Nutzer mit dem drücken auf das entsprechende Pannel entscheiden, in welchem Stockwerk er ist. Hier wird die property WereamI des Objekts myElevator aufgerufen und das entsprechende stockwerk wird eingetragen.

Nun muss der Nutzer noch den Oben oder Unten Button drücken, damit der Aufzug zu Ihm in Stockwerk kommt. Hier vergleicht das Programm, ob die property WereamI mit der property Floor übereinstimmt und addiert oder subtrahiert zu Floor immer eine 1 bis beide Zahlen übereinstimmen.

Danach "öffnet" sich sinnbildlich der Aufzug und die Form Elevator_intern öffnet sich. Hier zeigen Pannels wieder an, in welchen Stockwerk man sich gerade befindet.
Mit dem Drücken eines Buttons zeigt man an, in welches Stockwerk man möchte und je nachdem färbt sich das Pannel um und durch einen Timer schließt sich die Elevator_intern Form.

Die nächste Person kann einsteigen.

Mein Programm ganz grob erklärt.
Könnt ihr mir vlt auch Tipps zur Leserlichkeit meines Codes geben.
Was kann ich im Zuge der OOP noch lernen oder was könnte ich danach noch Lernen?

vielen Dank für eure Zeit und eventueller Antworten

DieDolly 13. Jun 2019 11:21

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
 
Mh so ganz funktioniert das aber ehrlich gesagt nicht. Ich mache es so wie du beschreibst aber irgendwie scheint es Zufall zu sein, ob etwas passiert oder nicht.

Vom OOP her würde ich sagen ist das mit der Klasse ansich schon richtig. Damit meine ich nicht den Aufbau der Klasse. Ich meine nur den Zustand, dass du eine Klasse nutzt. Aber die Bedienung, wie alles verarbeitet und gesetzt wird, ist alles andere als gut.

Der schöne Günther 13. Jun 2019 12:38

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
 
Hallo und Herzlich Willkommen :love:

Bzgl. Elevator.pas
  • Nicht zwingend notwendig, aber die uses in deiner Unit sind übervoll. Nichts von alldem wird benötigt, du kannst es komplett entfernen
  • Schön dass der TElevator im Konstruktor gleich ein zufälliges Stockwerk verpasst bekommt
  • Welchen Sinn machen die Properties plus die gleichnamigen Variablen mit dem F davor? Du hast dadurch nichts gewonnen, außer einer Menge Schreibarbeit. Außerdem hast du dich verschrieben, die Property heißt "wereAmi", müsste allerdings "whereAmI" heißen ;-)
  • Was ich sehr wichtig finde: Kommentare sind gut! Aber ich glaube du kommentierst die falschen Dinge. Ein "Klasse TElevator" ist ebenso überflüssig wie "Private Variablen" - Das ist ja ziemlich offensichtlich. Stattdessen frage ich mich was "WhereAmI" ist, und was "Floor" - Das sollte man dran schreiben. Mir fällt als Eigenschaft eines Aufzugs nur ein in welchem Stockwerk er sich befindet (Where am I). Aber was ist die Floor-Nummer?


Dann, was "DieDolly" wohl ausdrücken will - Bist du wahrscheinlich etwas durcheinander gekommen: Der TElevator ist eine Klasse die nur Daten enthält (Floor und WhereAmI). Die eigentliche Logik (Stockwerk hoch und runter) steckt hingegen in deinem Hauptformular. Da gehört das wirklich nicht hin.

Wie wäre es wenn dein Aufzug eine Methode
Delphi-Quellcode:
fahreAufwärts()
und
Delphi-Quellcode:
fahreAbwärts()
hätte?

Schokohase 13. Jun 2019 13:29

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
 
Vorweg: Ich habe mir den Quellcode noch nicht angeschaut.

Wenn ich mir einen Aufzug ansehe (bzw. wie ich mit dem interagieren kann), dann habe ich außen
  • Anforderungs-Taster (ich will mit)
  • Anforderungs-Anzeige (du kommst mit)
  • Aktuelle Etage
  • Geplante Fahrtrichtung (rauf/runter)
Also benötigt man schon einmal eine Klasse, die dieses abbildet.

Genauso eine, die die Interaktions-Möglichkeiten im Aufzug darstellt.

Diese greifen dann auf eine Klasse zu, die die Aufzugslogik steuert.

Wie man sieht, bislang ist noch keine Form in Sicht ...

DieDolly 13. Jun 2019 13:43

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
 
Zitat:

Welchen Sinn machen die Properties plus die gleichnamigen Variablen mit dem F davor?
Delphi-Quellcode:
type
 TMyClass = class(TPersistent)
 private
  FLocalVar: string;
 public
  constructor Create;
  destructor Destroy; override;

  property LocalVar: string read FLocalVar write SetLocalVar;
 end;

procedure TMyClass.SetLocalVar(const Value: string);
begin
 // irgendwelche Berechnungen, Bedingungen oder so und am Ende die Zuweisung
 FLocalVar := Value + 'S' + 'O' + 'S' ....... ;
end;
Für MICH haben private Feldvariablen hier den klaren Vorteil, dass ich sie innerhalb der Klasse frei setzen kann, ohne dabei noch einmal durch den Setter gehen zu müssen.
irgendwo ein FLocalVar := 'x'; zuweisen = kein Zugriff auf den Setter.

Starter 14. Jun 2019 06:45

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
 
Hallo

Danke schon mal für die Antworten und die Hinweise auf die Fehler.

Ich dachte mir schon, dass da ziemlich viele Fehler drin sind. Habe es mir gestern auch noch mal durch den Kopf gehen lassen und ich hab zwar eine Klasse erstellt was in OOP richtig ist, aber den Rest habe ich quasi alles Falsch gemacht, was man in OOP nur falsch machen kann :oops:
Aber deswegen habe ich ja gefragt, denn aus Fehlern lernt man :thumb:

Ein besonderes Dankeschön wollte ich dir "der schöne Günther" aussprechen, da du nicht nur die Fehler angesprochen hast, welche ich gemacht habe, sondern auch positives (meinen constructor mit der Zufälligen Zahl und das Kommentieren) angesprochen hast.
Zu deiner Frage was die Floor-Nummer ist. Die Floor-Nummer war eigentlich dazu gedacht, dazustellen in welchen Stockwerk der Aufzug ist. WhereamI wäre dazu dagewesen darzustellen wo sich der User befindet.
Ich hätte die Beiden nicht in eine eigene Klasse stecken dürfen. Vlt hätte ich eine Klasse Elevator und eine Klasse User erstellen sollen, dann wäre es einfacher gewesen :oops:

Aber ich werde das Programm mal überarbeiten.

haentschman 14. Jun 2019 07:11

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
 
Moin...:P
Zitat:

Ich hätte die Beiden nicht in eine eigene Klasse stecken dürfen
Richtig. Die Klasse (quasi die Steuerung) sollte alle Zustände kennen. Die Klasse bekommt nur Eingaben. (Button Klicks) und hat Ausgaben - z.B. Events (Anzeige des Zustandes, Lampen, Stockwertanzeige etc.) Der Rest läuft in der "Blackbox" (Klasse :wink:) ab.

Vorschlag.
1. Die Klasse gehört in eine eigene Unit. (hast du)
2. Der Klasse proceduren verpassen (Hoch/Runter mit Parameter aktuelles Stockwerk)
3. Ausgaben generieren (Events)
4. In der Oberfläche die Events "behandeln" und deine Ausgaben anzeigen.

:wink:

Zitat:

dazustellen in welchen Stockwerk der Aufzug ist. WhereamI wäre dazu dagewesen darzustellen wo sich der User befindet
Die Steuerung muß nur wissen wo sich der Aufzug befindet. Welcher und wieviele User mitfahren ist ihm egal. Der User selbst kennt seine aktuelle Etage, die du als Parameter der Hoch/Runter procedure übergibst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 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