Suchergebnisse

Suchergebnisse 1-30 von insgesamt 48.

  • Benutzer-Avatarbild

    Zitat von Amelie: „Habe versucht das ganze so gut wie möglich in OOP zu machen“OOP bedeutet aber objektorientierte Programmierung. Neben der Formklasse hast Du keine einzige eigene. Ob man das als OOP bezeichnen kann? Nuja. Zumindest eine Ampelklasse wäre sinnvoll. Und ggf. eine Kreuzung-Klasse. Aber das jetzt zu machen, ohne den Nutzen zu kennen oder zu sehen, wäre sinnfrei. Zitat von Amelie: „und war auch bei der Namensvergabe hoffentlich etwas besser“Es ist etwas besser. Aber versuch es mal s…

  • Benutzer-Avatarbild

    Was ich mit Nutzen meinte, ist: Wenn Du nicht weißt, was Dir die Benutzung/Einführung von Klassen für Codeveränderungen, -vor- und -nachteile bringt, weißt Du ja auch gar nicht, wozu Du damit überhaupt anfangen solltest. List(Of hat mit OOP nur bedingt was zu tun. Klar, Du nutzt eine Klasseninstanz. Aber es geht bei OOP m.E. um den OOP-Aufbau des eigenen Projektes. Dein Edit von 20:10 zeigt einen rudimentären Anfang von OOP, der allerdings schon etwas falsch abbiegt. Die beiden Klassen dürfen ni…

  • Benutzer-Avatarbild

    LEDSt = New List(Of SteuerLED) From {PB_Anlage, PB_Betrieb, PB_Nacht, PB_Takt} erzeugt eine SteuerLED-Liste aus einem PicBoxArray. Das geht offensichtlich nicht. Eine Gruppe von PicBoxen ist nunmal keine Gruppe von SteuerLEDs. Du willst ja eine Gruppe von SteuerLEDs erzeugen, bei denen dann jeweils eine PicBox ein Bestandteil einer SteuerLED ist. Das geht z.B. so:VB.NET-Quellcode (8 Zeilen) Deine Zeile#7 muss natürlich entfernt werden, sonst gibt's ne Doppelbedeutung von LEDSt. Und wieder Namen:…

  • Benutzer-Avatarbild

    Bezüglich Zeile#4: korrekt wäre dann wohl For Each PicBox in {PB_Anlage, PB_Betrieb, PB_Nacht, PB_Takt} Zitat von Amelie: „Verstehe diese Frage nicht.“Die Variable heißt LEDname und ist vom Typ PictureBox. Warum heißt die Variable LEDname, wenn in ihr kein Name, sondern eine PictureBox steckt? Ich hätte bei der Benennung erwartet, dass die Variable vom Typ String ist und da z.B. drinsteht: "Ampel auf der Hauptstraße, stadteinwärts" oder "Ampel Nr. 3". Dass da aber kein String, sondern eine PicBo…

  • Benutzer-Avatarbild

    Na mal langsam. Eine Klasse sollte im Singular benannt werden, wenn sie genau ein Objekt modellieren soll. Daher sollte die zuletzt genannte Klasse Ampel heißen, nicht Ampeln. Die Klasse soll ja eine Ampel darstellen, nicht alle. Korrekt? Meines Erachtens sollte die Ampel gar keine PicBoxen enthalten. Die Darstellung von Irgendwas sollte normalerweise im Form stattfinden. Stell Dir vor, dass Du keine PicBoxen mehr zur Anzeige verwenden willst, sondern direkt auf's Form zeichnen willst. Dann hast…

  • Benutzer-Avatarbild

    Zitat von Amelie: „Du meinst für jede Ampel ( Lichterkasten mit 3 Lampen ) eine eigene Klasse“Nein. Eine Klasse für alle Ampeln. Und ob da 1 oder 2 oder 3 Lichterkästen sind, könntest Du innerhalb der Ampelklasse selber festlegen: zum Beispiel: VB.NET-Quellcode (15 Zeilen) Ich habe gemeint: Pack in die Ampelklasse alle Eigenschaften einer echten Straßenampel, die Du für Dein Programm brauchst. Eine reale Ampel hat viele Eigenschaften, zum Beispiel: Anzahl der Lichterkästen, Größe, durchschnittli…

  • Benutzer-Avatarbild

    Zitat von Amelie: „Erweitern kann man das ja noch immer.“Und mit guter OOP ist das später ziemlich leicht. Zitat von Amelie: „Muss ich denn das […] dann auch anders machen“Nun, das Form sollte sich die Zustände der Einzel-LEDs von der Kreuzungssteuerung holen können, damit es die PicBoxen entsprechend färben kann. Benennung: LED_EinAus As Boolean ist minimal besser. Aber wenn Du LED_EinAus = True hast, ist die LED dann an oder aus? Benennungs-Gegenvorschlag: LedIstEingeschaltet. Dann weiß man so…

  • Benutzer-Avatarbild

    Zitat von Amelie: „Hier muss ich doch der Klasse Mitteilen das LED Eingeschaltet“Nuja, der einfache Weg: VB.NET-Quellcode (34 Zeilen) Jetzt siehst Du, dass in beiden Teilen der If-Abfrage für die PB-BackColor der gleiche Code steht. Und daher ist es für die PB-BackColor an dieser Stelle egal, wie der Anlagenzustand ist. Denn die Logik dafür ist nicht mehr im Form-Klassencode, sondern im Code der SteuerLED. Und da ist er besser aufgehoben als im Form-Code. Denn das Verhalten einer Klasse sollte i…

  • Benutzer-Avatarbild

    Zitat von Amelie: „Kann es sein das ein OOP-Code wesentlich umfangreicher wird?“ Mein Diagramm im Anhang zeigt Dir, was Du erwarten kannst, wenn Du ohne OOP arbeitest und wie mit guter OOP. Wenn Du Dein Projekt aus Post#1 mit bisherigen Methoden erweitern willst und Fußgängerampeln, Sonderfälle, mehrere Straßen etc. hinzufügen willst, wirst Du m.E. bei der roten Linie enden. Das kenn ich zumindest aus eigenen Projekten. Hunderte von Codezeilen und immer weniger Durchblick. Die grüne Kurve im im …

  • Benutzer-Avatarbild

    Ja, wenn es funktioniert, ist das Möglichkeit. Logisch. ABER: Das hilft Dir nur bedingt bei Deinem Projektaufbau weiter. Wenn es um die Übung geht, wie man Klassenmethoden aufruft, ok. Aber Du solltest Dein Ziel nicht aus den Augen verlieren. OOP hat auch etwas mit Datenmodellierung zu tun. Ja, ein Form braucht man wohl bei einem WinForms-Projekt. Aber das Form ist m.E. v.a. für folgende Sachen gedacht:- Benutzerdateneingabe - Anzeige und Darstellung der Modelle (Modelle = eigene Klassen(instanz…

  • Benutzer-Avatarbild

    Das Daten-Modellieren ist das Anlegen und (mit Code) Befüllen von eigenen (Modell)Klassen. Was Du brauchst: Zum einen das umfassendste Objekt, welches Du aus der Realität nachbauen willst. Ich tippe auf eine Kreuzung. Also brauchst Du eine Klasse Kreuzung. Dann überlegst Du Dir, was eine Kreuzung alles für Objekte in Deinem Programm braucht. Ich vermute eine Ansammlung von Ampeln. Also brauchst Du z.B. eine List(Of Ampel). Und dafür natürlich eine Ampel-Klasse. Was brauchst Du noch für die Kreuz…

  • Benutzer-Avatarbild

    Ah, ziemlich konkrete Vorstellungen. Gut! Je präziser man das formulieren kann, desto besser weiß man, was man programmieren muss. eine Kreuzung -> Du brauchst eine Klasse Kreuzung. Besser wäre aber wohl, wenn die Klasse Kreuzungssteuerung heißt. Denn das Straßenmaterial, das Baujahr der Kreuzung etc. interessiert wahrscheinlich nicht. Es geht ja um die Elektronik. Hauptsrasse und Nebenstraße -> erstmal eine (!) Klasse Straße; sollen sich vom Verhalten Haupt- und Nebenstraße unterscheiden? Wenn …

  • Benutzer-Avatarbild

    Zitat von Amelie: „soll die Grünphase der Hauptstr. länger andauern als die der NS.“Wenn das erstmal der einzige Unterschied ist, kann man das über ein Feld innerhalb der Ampelklasse erledigen. Die könntest Du DauerDerGrünphaseInSekunden nennen. Die kann dann über einen Parameter im Konstruktor eingestellt werden, z.B. VB.NET-Quellcode (6 Zeilen) Was sind die genauen Aufgaben des Taktgebers? Was soll der machen? Die Forms sind schmuckes Beiwerk. Du willst Dein Programm ja mit Leben/Logik füllen.

  • Benutzer-Avatarbild

    Dann ist der Taktgeber m.E. am besten doch nur ein Timer, den Du auf's Form ziehst. Seine aktuelle Aufgabe und sein Timing bekommt er dann am besten über das Form mitgeteilt, welches den Zustand von der Kreuzungssteuerung holt. Wenn also die Kreuzung wodurch auch immer den Gesamtzustand ändert, z.B. auf Nachtbetrieb oder Störung oder Normalbetrieb, dann kann es das dem Form mitteilen und das Form ändert entsprechend die Taktgeber/Timer-Einstellungen. Später könnte man auch eine Stufe mehr OOP ge…

  • Benutzer-Avatarbild

    Nicht vergessen: Wenn Du einen Beitrag nachbearbeitest, bekommt das keiner mit. Es sei denn, Du "sprichst ihn an", z.B. so: @Amelie Aber zum Glück hab ich danach Ausschau gehalten. Die Enums sind schon ein guter Anfang, gehören aber besser nicht in die Klasse. Ich hab noch ein Enum ergänzt: Betriebsmodus. Denn die Ampelsteuerung kann ja immer nur einen haben. Daher sind die Booleans IstNachtbetrieb und Ist24Stdbetrieb aus meiner Sicht nicht richtig. Da ja nur eines von beiden zutreffen kann, ode…

  • Benutzer-Avatarbild

    Zitat von Amelie: „Ist bestimmt völlig falsch.“Nana, nicht so selbstüberkritisch. ErstelleKreuzung ist insofern richtig, dass die Straßen erstellt werden. Allerdings sind die Straßeninstanzen so nur lokal, da sie ja mit Dim innerhalb der Sub erstellt werden. Auch gehst Du die leere Straßenliste durch (Zeile#24 und Zeile#29). Da passiert dann natürlich nix. Von daher: füge 2 Straßen dieser Straßenliste hinzu. Zum anderen: Die Ampeln sollen nicht in der Kreuzung-Klasse erstellt werden, sondern in …

  • Benutzer-Avatarbild

    Straßenerstellung: VB.NET-Quellcode (4 Zeilen) Ampeln: VB.NET-Quellcode (8 Zeilen) Mehr erstmal nicht. Ein Problem nach dem anderen.

  • Benutzer-Avatarbild

    Das dachte ich mir, dass Du gerade etwas feststeckst. Deswegen habe ich ja auch vorgehabt, es langsam angehen zu lassen und Dich anhand Deines Projektes bei OOP weiterzubringen. Abstrakte Beispiele, die nichts mit Deinem Problem zu tun haben, lassen sich nicht für jeden übertragen. Und manchmal bringen sie einem auch gar nix. Du hast recht, jetzt sind da jetzt zwei Straßen. Aber was ist Hauptstraße, was ist Nebenstraße? Es wird ja (noch) nicht unterschieden. Das meinte ich auch mit Zitat von Vap…

  • Benutzer-Avatarbild

    Neenee, das war nicht das Ziel der Übung. Aber wenigstens hast Du die erste Frage indirekt beantwortet. Ja, die von Dir in der Klasse Straße zu erstellende Property muss vom Typ Boolean sein. Das Unterstrichene bitte machen und posten. Dann kümmern wir uns um Aufgabe 2. Den Methoden-Parameter (!) IstHauptstraße entfernst Du wieder, den brauchst Du nicht. Ergibt auch keinen Sinn. ErstelleKreuzung(True) -> wozu soll das führen? Nix gutes, von daher: weg damit. Und damit auch weg mit der If-Geschic…

  • Benutzer-Avatarbild

    Sehr schön, dass Du selbst auf das Straßen-Enum gekommen bist. Das wär die nächste Stufe gewesen. Das ersetzt dann nämlich die frisch eingeführte IstHauptstraße-Property. Das Enum am besten umbenennen in Straßentyp. Damit ergibt sich VB.NET-Quellcode (22 Zeilen) ok, nochmal zur Frage: Wie legst Du (nun nach Einführung des neuen Enums) die Property TatsächlicherStraßentyp einer Straßeninstanz auf den Wert Enumwert Straßentyp.Hauptstraße fest? kleiner Tipp: das hat nix mit If zu tun.

  • Benutzer-Avatarbild

    Und zu welchem Ergebnis führt Dein Versuch? @Amelie: Du hast noch nicht die Frage beantwortet, wie Du für eine bestehende Straßeninstanz die Straßentyp-Property änderst. Angenommen, Du hast an einer anderen Stelle den Code VB.NET-Quellcode (1 Zeile)Wie legst Du danach die Straßentyp-Property für NeueStraße auf Straßentyp.Hauptstraße fest? Zusatzfrage (steht im Code): VB.NET-Quellcode (5 Zeilen) Zitat von Amelie: „Also so richtig?“Ja richtig, alles trennen, nicht schalchteln.

  • Benutzer-Avatarbild

    Zitat von Amelie: „ Private ReadOnly Straßen As New List(Of Straße) Das kommt doch auch in die Klasse "Straße"?“Nee, das würde doch bedeuten, dass eine Straße eine Liste von Straßen hat. Die Straßenliste bleibt in der Kreuzung. Eine Kreuzung hat einige Straßen und nicht: "Eine Straße hat einige Straßen", denn das ergibt keinen Sinn. Auch die Sub ErstelleKreuzung gehört nicht in die Straßenklasse, sondern in die Kreuzungsklasse! Und Private IstHauptstraße As Boolean wird dank TatsächlicherStraßen…

  • Benutzer-Avatarbild

    nochemol: Weil Du die Methode ErstelleKreuzung immer noch in der falschen Klasse hast. Die gehört nicht in Straße, sondern in Kreuzung. Zeile#14 kannst Du löschen. Zitat von Amelie: „Aber ist ja eh hinfällig.“Oh nein, darum kümmern wir uns, nachdem Du die Methode in der Kreuzungs-Klasse platziert hast. Obwohl, während Du die Verschiebung vornimmst, kannst Du ja gleich darauf noch antworten: Welche Methode von welcher Klasse wird denn bei diesem Code aufgerufen: Straßen.Add(New Straße(Straße.Hstr…

  • Benutzer-Avatarbild

    Der Code sieht gut aus. Bis auf die Lichtkastenklasse. Ein Lichtkasten kann nur eine Farbe haben. Oder täusche ich mich? Habe noch nie gesehen, dass der untere der drei Lichtkästen einer "Autoampel", die sonst immer nur grün leuchtet, plötzlich rot leuchtet. Korrigier mich, wenn ich mich irre. Die Methoden-Klassen-Frage hast Du zur Hälfte richtig beantwortet und damit den Fangfragenteil beseitigt. Eine Klasse ist vom Typ List(Of Straße), die aufgerufene Methode ist die Add-Methode. Aber es wird …

  • Benutzer-Avatarbild

    Frage, deren Antwort ich nicht kenne: Was ist für Dich der Unterschied zwischen Ampel und Lichtkasten? Davon hängt natürlich ab, welche Klassen überhaupt im Programm benötigt werden. Zitat von Amelie: „Den genauen Fehler weiß ich nicht mehr.“Füge die Codezeile an der entsprechenden Stelle wieder ein und schau Dir die Fehlermeldung an und poste sie. Wenn Du die Zeile löschst und der Fehler nicht mehr da ist, kannst Du nicht daraus lernen und weißt auch (beim nächsten Mal) nicht, was der Compiler …

  • Benutzer-Avatarbild

    Zitat von Amelie: „Der kann dann ja "Ampel" heißen“Wie Du das Ding in Deinem Code nennst, musst Du selbst und am besten jetzt entscheiden. Wenn Ampel zu flapsig/umgangssprachlich oder gar falsch ist, nenn es Lichtkasten. Das werd ich akzeptieren. Nur muss es klar festgelegt werden, sonst reden wir aneinander vorbei, weil wir dann eine andere Vorstellung von den Objekten haben. Also: Sehen wir dort eine rotgelbgrün-Ampel oder einen rotgelbgrün-Lichtkästen? Das legst Du jetzt bitte fest. Zitat von…

  • Benutzer-Avatarbild

    "Lichtkasten" also. Ok. Dann kann aber die Klasse Ampel weg. Und in Straße muss dann auch alles was Ampel hieß, nun entsprechend umbenannt werden. Und an der Klasse Lichtkasten müssen wir später noch einiges machen. Ich warte immernoch auf die genaue Fehlermeldung.

  • Benutzer-Avatarbild

    Das ist aber nicht der Fehler, über den ich reden wollte. Änder mal bitte die ErstelleKreuzung-Sub wieder zurück in: VB.NET-Quellcode (5 Zeilen) und berichte.

  • Benutzer-Avatarbild

    Genau. Deine Sub New in der Klasse Straße hat keine Parameter. Damit weißt Du, dass die Sub New der Klasse (der sogenannte Konstruktor) eine mehr oder weniger normale Methode einer Klasse ist, die ggf. Parameter aufnehmen kann. Das ermöglicht Dir auf eine weitere Weise festzulegen, welchen Straßentyp eine neue Straße hat. Indem Du die Information über den Konstruktor mitgibst. Du kannst auch mehrere Konstruktoren schreiben. Das nennt sich Überladung. Das Prinzip kann man immer wieder nutzen. Der…

  • Benutzer-Avatarbild

    Zitat von VaporiZed: „Das Form ruft dazu eine (noch nicht von Dir erstellte) Sub der Klasse Kreuzung auf.“Das hast Du damit leider aber nicht umgesetzt. Das Form soll hier nur die Benutzereingaben an die Klasse Kreuzung weiterleiten. Keine Entscheidungen treffen. Und mit Strings fangen wir für Arbeitsmodi gar nicht erst an. Du hast ja selber schon ein weiteres Enum eingeführt: Betriebsmodus. Nutze es. Aber auch erst, sobald das Enum außerhalb der Formklasse ist! Keine Schachtelung! Was noch dazu…