AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language OOP- Programm Aufzugsteuerung. Korrekt Programmiert?

OOP- Programm Aufzugsteuerung. Korrekt Programmiert?

Ein Thema von Starter · begonnen am 13. Jun 2019 · letzter Beitrag vom 14. Jun 2019
Antwort Antwort
Starter

Registriert seit: 13. Jun 2019
2 Beiträge
 
#1

OOP- Programm Aufzugsteuerung. Korrekt Programmiert?

  Alt 13. Jun 2019, 11:15
Delphi-Version: XE6
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
Angehängte Dateien
Dateityp: zip Delphi Programm.zip (3,16 MB, 12x aufgerufen)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
913 Beiträge
 
#2

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?

  Alt 13. Jun 2019, 11:21
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
4.911 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?

  Alt 13. Jun 2019, 12:38
Hallo und Herzlich Willkommen

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 fahreAufwärts() und fahreAbwärts() hätte?
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
781 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?

  Alt 13. Jun 2019, 13:29
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 ...
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
913 Beiträge
 
#5

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?

  Alt 13. Jun 2019, 13:43
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.
  Mit Zitat antworten Zitat
Starter

Registriert seit: 13. Jun 2019
2 Beiträge
 
#6

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?

  Alt 14. Jun 2019, 06:45
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
Aber deswegen habe ich ja gefragt, denn aus Fehlern lernt man

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

Aber ich werde das Programm mal überarbeiten.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.147 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: OOP- Programm Aufzugsteuerung. Korrekt Programmiert?

  Alt 14. Jun 2019, 07:11
Moin...
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 ) 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.



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.

Geändert von haentschman (14. Jun 2019 um 07:17 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf