![]() |
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 |
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. |
AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
Hallo und Herzlich Willkommen :love:
Bzgl. Elevator.pas
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:
und
fahreAufwärts()
Delphi-Quellcode:
hätte?
fahreAbwärts()
|
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
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 ... |
AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
Zitat:
Delphi-Quellcode:
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.
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; irgendwo ein FLocalVar := 'x'; zuweisen = kein Zugriff auf den Setter. |
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. |
AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?
Moin...:P
Zitat:
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz