Projektbeurteilung Ampelsteuerung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 109 Antworten in diesem Thema. Der letzte Beitrag () ist von Amelie.

    Hallo

    Ok das verkürzt meinen Code etwas. ;)

    Nun habe ich mir überlegt wie ich die "Lichtekästen" ansteuere.
    Wäre das eine "gute" Ansatzweise? Im Test klappt das zumindest. ;)
    Spoiler anzeigen

    Form Lichterkästen

    VB.NET-Quellcode

    1. Public Class frm_lichtkaesten
    2. Private ReadOnly LEDs As New clLichtkaesten
    3. Public Property EinAus() As Integer
    4. Public Property Ampelphase() As Boolean
    5. #Region "ListOfPctureBoxes"
    6. Private AmpelLED As List(Of PictureBox) = Nothing
    7. Private Sub PrepareLeds()
    8. AmpelLED = New List(Of PictureBox) From {PictureBox11, PictureBox12, PictureBox13, PictureBox14, PictureBox15, PictureBox16, PictureBox21, PictureBox22, PictureBox23, PictureBox24, PictureBox25, PictureBox26}
    9. End Sub
    10. #End Region
    11. Private Sub frm_AmpelHStr1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    12. PrepareLeds()
    13. End Sub
    14. #Region "Steuerung"
    15. 'NUR MAL EINE ZUM TEST
    16. Public Sub LED_Ein_Aus(ByVal Ampelphase As Integer, ByVal EinAus As Boolean)
    17. Select Case Ampelphase
    18. Case Is = 0
    19. LEDs.RotEinAus(EinAus)
    20. AmpelLED.Item(0).BackColor = LEDs.Farbe1
    21. AmpelLED.Item(3).BackColor = LEDs.Farbe1
    22. AmpelLED.Item(6).BackColor = LEDs.Farbe1
    23. AmpelLED.Item(9).BackColor = LEDs.Farbe1
    24. Case Is = 1
    25. LEDs.GelbEinAus(EinAus)
    26. 'ToDo
    27. End Select
    28. End Sub
    29. #End Region
    30. End Class
    31. '----------------------------------------------------------------
    32. Public Class clLichtkaesten
    33. Private IstNachtbetrieb As Boolean = False
    34. Private Ist24Stdbetrieb As Boolean = False
    35. Property Farbe1 As Color = Color.Maroon
    36. Property Farbe2 As Color = Color.SaddleBrown
    37. Property Farbe3 As Color = Color.DarkGreen
    38. 'NUR MAL EINE ZUM TEST
    39. Friend Sub RotEinAus(ByVal Ist24Stdbetrieb As Boolean)
    40. Ist24Stdbetrieb = Not Ist24Stdbetrieb
    41. Farbe1 = If(Ist24Stdbetrieb, Color.Red, Color.Maroon)
    42. End Sub
    43. End Class


    Form Steuerung

    VB.NET-Quellcode

    1. ' so die Werte an die Lichterkästen übergeben
    2. '...
    3. '..
    4. 'hier wäre der Code welche Ampelphase gerade aktiv ist, wird als Integer ausgegeben
    5. frm_lichtkaesten.LED_Ein_Aus(0, True)


    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    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(instanzen))
    • Weiterleitung der Daten und Benutzereingaben an andere Klassen.
    Du hast momentan eine LED/einen Lichtkasten, welche(r) direkt vom Form Daten erhält. Wenn Dir bewusst ist, dass da später noch einige Klassen dazwischengeschaltet werden müssen, damit es die Realität sinnvoll(er) abbildet, ist ok. Wenn nicht, dann verrennst Du Dich.

    Was ist Ampelphase 0, 1, …? Was haben die Phasen zu bedeuten und wieviele gibt es?

    btw:
    Case Is = 0 -> Case 0
    clLichtkaesten: Der cl-zusatz soll Klasse bedeuten? Sowas sollte nicht verwendet werden. Und wieviele Lichtkästen modelliert eine clLichtkaesten-Instanz? Wenn eine Instanz einen Lichtkasten modelliert, dann ist der Name falsch, da nicht im Singular.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Moin moin

    ​Wenn Dir bewusst ist, dass da später noch einige Klassen dazwischengeschaltet werden müssen
    Nein war mir nicht Bewusst das da noch Klassen kommen müssen.

    ​OOP hat auch etwas mit Datenmodellierung zu tun
    Bedeutet??

    ​Was ist Ampelphase 0, 1, …? Was haben die Phasen zu bedeuten und wieviele gibt es?
    Die Ampelphasen sind die Zustände: Beipiel: Haupstr ROT // Nebenstr GRÜN
    Es wird wohl 6 oder 7 Phasen geben. Je nachdem wie ich das mit den "Räumphasen", wo halt beide Strassen ROT haben, hinbekomme.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    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 Kreuzung? Einen Taktgeber? Dann also eine Taktgeber-Klasse. Noch was? Weiß ich nicht, ist Dein Programm. Was braucht der Taktgeber? Keine Ahnung, ob der irgendwelche "Bestandteile" (also andere Objekte) hat. Dann als nächstes die Ampel-Klasse: Die hat mehrere Lichtkästen, also auch eine List(Of Lichtkasten). Was hat ein Lichtkasten für Objekte? Keine Ahnung, sag Du es.
    Soviel zum Thema erste Schritte bei der Datenmodellierung. Danach kommt das Verhalten der einzelnen Klassen rein, also nötige Klassenvariablen, Properties und Methoden einbauen.

    Also grob zum Thema Datenmopdellierung aus meiner Sicht: Das größte Objekt hernehmen und eine Klasse bilden. Schauen, welche Bestandteile existieren und Klassen dafür bilden. Usw.

    privates Beispiel: Ich bastel gerade an einem TowerDefense-Spiel. Das größte Objekt ist das Spiel, also hab ich eine Spiel-Klasse. Diese Klasse hat als "Bestandteile": Das Spielfeld, eine Liste von Türmen, eine Liste von Gegnern und eine Gruppe von Schüssen. Also brauch ich als Klassen neben Spiel: Spielfeld, Turm, Gegner (Singular!), Schuss.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Moin moin ;)

    Was brauche ich:

    Ein Kreuzung: Hauptrasse und Nebenstraße
    Jede Straße braucht mindestens 2 Ampeln zu je mindestens 2 Lichterkästen ( 2 Haupstr. 2 Nebenstr. )
    Eine Taktgeber der eine Uhr sowie die Ampelphasen steuert (Uhr für Tag/Nachtbetrieb und als Zähler für die einzelnen Ampelphasen)
    Einen Schalter der die ganze Ampelanlage in Betrieb nimmt.
    Einen Schalter der den Betrieb startet / anhält
    Einen Schalter der von 24-Std-Betrieb auf Nachtbetrieb umschaltet
    Eine SteuerForm auf der das Steuerteil ( Buttons, Labels etc ) platziert und gecodet wird.
    Eine / Zwei AmpelForm(en) auf der mehrere Ampeln mit mehreren Lichterkästen platziert und angesteuert werden
    GGf. Auf den Ampelformen bei jeder Ampel einen "Button" falls die Anlage für Fußgänger erweitert wird.

    Ampelphasen im 24-Std-Betrieb, könnte so aussehen / Beginnen

    HS ROT/Gelb NS ROT
    HS Grün NS ROT
    HS Gelb NS ROT
    HS ROT NS ROT 'Räumphase
    NS ROT/Gelb HS ROT
    NS Grün HS ROT
    NS Gelb HS ROT
    NS ROT HS ROT 'Räumphase

    Nachtbetrieb: Alle Gelben Lichter blinken
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Amelie“ ()

    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 ja, was macht den Unterschied aus?
    Jede Straße braucht mindestens 2 Ampeln zu je mindestens 2 Lichterkästen -> eine Klasse Ampel und eine Klasse Lichtkasten. Wenn Du schreibst "mindestens" zwei Ampeln, dann braucht jede Straße eine List(Of Ampel), damit dann später "im Betrieb" (z.B. zu Programmstart) das flexibel festgelegt werden kann. Auch braucht die Ampelklasse eine List(Of Lichtkasten), damit Du das ebenfalls flexibel steuern kannst.
    Taktgeber und Schalter sollten Teil der Kreuzungssteuerung sein. Ob es dafür je eine Klasse benötigt, kommt auf den Funktionsumfang an. Die Schalter werden wohl durch je eine einfache Sub darstellbar sein. Beim Taktgeber sollte sowas auch ggf. möglich sein. Aber es hindert Dich nicht, eine eigene Klasse dafür zu erstellen.
    SteuerForm ist Dein HauptForm. Da werden auch die Anzeigen erscheinen. Da ein Extra-Form wird Dir wahscheinlich keinen Vorteil bringen, aber vielleicht kennst Du einen.

    Die Ampelphasen sind ein Fall für ein Enum. Dann kannst Du Deine Bezeichnungen verwenden und musst nicht mit Zahlen hantieren:

    VB.NET-Quellcode

    1. Friend Enum Ampelphase
    2. HsRotGelb_NsRot
    3. HsGrün_NsRot
    4. 'usw
    5. End Enum

    Da verteilt der Compiler automatisch ganze Zahlen von 0 an.
    Dann kannst Du im Code z.B. schreiben:

    VB.NET-Quellcode

    1. Dim AktuelleAmpelphase As Ampelphase
    2. '…
    3. AktuelleAmpelphase = Ampelphase.HsRotGelb_NsRot
    4. '…
    5. If AktuelleAmpelphase = Ampelphase.HsGrün_NsRot Then AktuelleAmpelphase = Ampelphase.HsGelb_NsRot
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    sollen sich vom Verhalten Haupt- und Nebenstraße unterscheiden? Wenn ja, was macht den Unterschied aus?
    Wie schon in der ersten lauffähigen Version, soll die Grünphase der Hauptstr. länger andauern als die der NS.
    Auch braucht die Ampelklasse eine List(Of Lichtkasten), damit Du das ebenfalls flexibel steuern kannst.
    ggf Lichterkästen fürt Rad oder Fußgänger..
    Beim Taktgeber sollte sowas auch ggf. möglich sein. Aber es hindert Dich nicht, eine eigene Klasse dafür zu erstellen.
    Das wüste ich noch nicht wie.
    Friend Enum Ampelphase
    Schon drüber gelesen aber noch nichts mit gemacht

    Mit den Forms stelle ich mir so vor wie Bildanhang
    Bilder
    • Ampel-2oop.jpg

      208,2 kB, 601×513, 71 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    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

    1. Friend Class Straße
    2. Private DauerDerGrünphaseInSekunden As Integer
    3. Friend Sub New(IstHauptstraße As Boolean)
    4. DauerDerGrünphaseInSekunden = If(IstHauptstraße, 20, 10) 'als Beispiel
    5. End Sub
    6. End Class

    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.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ​Was sind die genauen Aufgaben des Taktgebers? Was soll der machen?
    Der Takgeber soll:
    Das blinken der Gelben Lampen in der Nachtphase steuern, und die einzelnen Ampelphasen durchschalten.#
    Ja und die Uhrzeit anzeigen und den Tag / Nachtbertieb regeln.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    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 gehen und eine weitere Klasse, für diese Aufgabe erstellen. Aber eines nach dem anderen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Meine eine Ampel ist auch nur mit einem Timer. In den vielen Beispielen die ich gesehen habe sind oft 2 oder mehr verwendet worden oder es ist einfach nur mit einem Button durchgeklickt worden.
    Ich werde dann mal versuchen die Klassen zu bestimmen.

    Edit 14:15

    Hab gerade den totalen Ausfall; NuLL Idee wie ich die ganzen Klassen aufbauen soll.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Ampelsteuerung
    2. 'Kreuzung
    3. Private Hauptstrasse As String
    4. Private Nebenstrasse As String
    5. 'Ampel
    6. Private Ampel As Object
    7. Private Lichtkasten As Object
    8. Private Standort As String
    9. Private AnzahlAmpeln As Integer
    10. Private AnzahlLampen As Integer
    11. Private IstNachtbetrieb As Boolean
    12. Private Ist24Stdbetrieb As Boolean
    13. Private Farbe As List(Of Color) = Nothing
    14. Private Sub Signalfarben()
    15. Farbe = New List(Of Color) From {Color.Red, Color.Yellow, Color.Lime, Color.Maroon, Color.DarkOrange, Color.DarkGreen}
    16. End Sub
    17. Friend Enum Ampelphase_Auto
    18. HsRotGelb_NsRot
    19. HsGrün_NsRot
    20. HsGelb_NsRot
    21. HsRot_NsRot
    22. NsRotGelb_HsRot
    23. NsGrün_HsRot
    24. NsGelb_HsRot
    25. NsRot_HsRot
    26. End Enum
    27. 'ggf für später
    28. Friend Enum Fussgaengerphase
    29. Rot
    30. Grün
    31. End Enum
    32. End Class

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Amelie“ ()

    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, oder?
    As Object geht schon mal in die falsche Richtung.
    Schau nochmal Post#26 an:

    VaporiZed schrieb:

    Du brauchst eine Klasse […] Kreuzungssteuerung […] eine (!) Klasse Straße […] eine Klasse Ampel [und] eine Klasse Lichtkasten

    VB.NET-Quellcode

    1. Friend Class Kreuzungssteuerung 'oder Ampelsteuerung, wie es Dir lieber ist
    2. Private ReadOnly Straßen As New List(Of Straße)
    3. Private AktuellerBetriebsmodus As Betriebsmodus = Betriebsmodus.Aus
    4. End Class
    5. Friend Class Straße
    6. Private ReadOnly Ampeln As New List(Of Ampel)
    7. End Class
    8. Friend Class Ampel
    9. Private ReadOnly Lichtkästen As New List(Of Lichtkasten)
    10. End Class
    11. Friend Class Lichtkasten
    12. End Class
    13. Friend Enum Betriebsmodus
    14. Aus
    15. Normalbetrieb
    16. Nachtbetrieb
    17. Störung
    18. 'fehlt noch was?
    19. End Enum


    Um mehr geht es zu Beginn nicht.
    Im Form gibt es nur ein Private ReadOnly Ampelsteuerung As New Ampelsteuerung. Wie die Ampeln laufen und in welchem Betrieb die Ampelsteuerung ist usw. soll nicht DIREKT über das Form festgelegt werden. Da soll sich mal schön die Ampelsteuerungsklasse drum kümmern. Das Form hat erstmal nur die Aufgabe, Befehle (oder doch eher Wünsche?) an die Ampelsteuerung zu schicken. Ob dann was innerhalb der Ampelsteuerung passiert oder was oder gar wie, das entscheidet sich nur in der Ampelsteuerungsklasse, nicht im Form!
    Der nächste Schritt wäre m.E. die Erstellung einer einfachen Kreuzung. Das könnte z.B. so aussehen, dass Du eine Friend Sub ErstelleEinfacheKreuzung innerhalb der Ampelsteuerungsklasse anlegst. Und in dieser Sub legst Du dann fest, was für Dich eine einfache Kreuzung ist. Also: der Straßenliste 2 Straßen hinzufügen. Jede Straße fügt dann ihrer Ampelliste 2 Ampeln hinzu und auch eine Ampel mit New angelegt wird, soll diese Ampelinstanz sich selbst 3 Lichtkästen hinzufügen. Frage ausschließlich an Dich*: Wie sähe das alles als Code aus?

    * nicht, dass jemand Deinen OOP-Lernenschritt durch Vorsagen eintrübt ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    VaporiZed schrieb:

    Um mehr geht es zu Beginn nicht.

    Mir fehlt an diesem Datenmodell die ganze Zeit die Tatsache, dass ein Ampel-System ein Programm durchläuft, üblicherweise zyklisch.
    Also es gibt schoma ein TagesProgramm und ein NachtProgramm.
    Und jedes Programm hat viele Schritte.
    Und in jedem der Schritte werden einige Ampeln beauftragt, umzuschalten.
    Habe nun etwas zusammengebracht aber bin völlig verwirrt....
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Kreuzung
    2. Private ReadOnly Straßen As New List(Of Straße)
    3. Friend Class Straße
    4. Private ReadOnly Ampeln As New List(Of Ampel)
    5. End Class
    6. Friend Class Ampel
    7. Private ReadOnly Lichtkästen As New List(Of Lichtkasten)
    8. End Class
    9. Friend Class Lichtkasten
    10. Private AnzahlLampen As Integer
    11. Private Farbe As List(Of Color) = Nothing
    12. Private Sub Signalfarben()
    13. Farbe = New List(Of Color) From {Color.Red, Color.Yellow, Color.Lime}
    14. End Sub
    15. End Class
    16. Friend Sub ErstelleKreuzung()
    17. 'eine Kreuzung besteht aus je einer
    18. Dim HaupStr As New Straße
    19. Dim NebenStr As New Straße
    20. 'eine Haupstr der Kreuzung hat 2 Ampeln
    21. Dim AmpelHauptStr(2) As Ampel
    22. For Each HauptStrAmpel As Straße In Straßen
    23. HauptStrAmpel = New Straße
    24. Next
    25. 'eine Nebenstr der Kreuzung hat 2 Ampeln
    26. Dim AmpelNebenStr(2) As Ampel
    27. For Each NebenStrAmpel As Straße In Straßen
    28. NebenStrAmpel = New Straße
    29. Next
    30. End Sub
    31. End Class


    Ist bestimmt völlig falsch.

    @ErfinderDesRades
    In meiner ​Nicht OOP-Version hatte ich das von dir erwähnte ja schon drin. Oder verstehe ich dich falsch?
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    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 der Straßen-Klasse. Und dort sollen sie nach Erstellung der Straßenklassen-Ampelliste hinzugefügt werden. Wenn Du drauf kommst, dann ist gut, ansonsten gibt's einen Vorschlag.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    füge 2 Straßen dieser Straßenliste hinzu.​

    Also Public HaupStr As New Straße

    ​Die Ampeln sollen nicht in der Kreuzung-Klasse erstellt werden, sondern in der Straßen-Klasse. Und dort sollen sie nach Erstellung der Straßenklassen-Ampelliste

    Mir raucht der Kopf von Klassen usw...
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    @ErfinderDesRades
    In meiner Nicht OOP-Version hatte ich das von dir erwähnte ja schon drin. Oder verstehe ich dich falsch?
    Du hattest gar kein Datenmodell, und folglich gab es da auch keine Klasse, die ein Programm dargestellt hätte oder eine, die einen Programmschritt dargestellt hätte.

    Mein Post #33 richtete sich eiglich eher an Vaporized - er versucht ja, ein Datenmodell einzuführen - und da fehlt imo dieser Gesichtspunkt.
    Straßenerstellung:

    VB.NET-Quellcode

    1. Friend Sub ErstelleKreuzung()
    2. Straßen.Add(New Straße)
    3. Straßen.Add(New Straße)
    4. End Sub


    Ampeln:

    VB.NET-Quellcode

    1. Friend Class Straße
    2. Private ReadOnly Ampeln As New List(Of Ampel)
    3. Friend Sub New() 'wenn ne neue Straße erstellt wird, dann werden automatisch 2 Ampeln zu der Ampelliste dieser Straße hinzugefügt
    4. Ampeln.Add(New Ampel)
    5. Ampeln.Add(New Ampel)
    6. End Sub
    7. End Class

    Mehr erstmal nicht. Ein Problem nach dem anderen. ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    OK nun werde da 2 Strassen und 2 Ampeln erstellt.
    Aber
    Wo oder was ist denn nun Haupt / Neben Strasse?

    Ich glaube das ganze OOP ist zu hoch für mich ;( Hab nun den ganzen Nachmittag über Klassen und Objekte gelesen und TUTs angesehen und bin genau so dumm wie zuvor. ;(
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    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

    VaporiZed schrieb:

    Ein Problem nach dem anderen.
    Gut. Du hast also jetzt 2 gleichberechtigte Straße, willst diese aber doch irgendwie unterscheiden können. (Viel!) später ist das mit Vererbung möglich, jetzt gehen wir erstmal einen leichteren Weg. Du legst eine Property in der Straßenklasse an, die diese Unterscheidung aufnimmt und in der jeweiligen Straßenklasseninstanz hinterlegt/abspeichert. Wir belassen es erstmal bei einem einfachen Fall: Es gibt nur Hauptstraßen und Nebenstraßen. Dann kannst Du diese Property entsprechend benennen: IstHauptstraße. Der Wert kann für eine Straße entweder zutreffen oder nicht. Wenn es nicht zutrifft, ist es erstmal automatisch eine Nebenstraße.
    Erste Frage (Grundlagenwissen): Von welchem Datentyp wird also diese neue Property sein, die Du in der Straßenklasse anlegst?
    Zweite Frage: Mit welchem Code legst Du somit bei der Erstellung einer Straßenklasseninstanz (also innerhalb der Sub ErstelleKreuzung) für die neue Straße mithilfe der neuen Property fest, ob diese neue Straße eine Hauptstraße wird oder nicht?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()