Mehr auf Klassen eingehen, wie?

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

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von mikeb69.

    Mehr auf Klassen eingehen, wie?

    Hallo Com,

    Ich habe hier mal einen Kleinen Rechner gemacht bei dem ich eure Hilfe bezüglich dem Win8 Win7 Problem schon mal in Anspruch nehmen musste.



    Nun Wollte ich wissen ob ich diesen Code von dem Programm auch etwas "Verbessern/Verschönern" kann indem ich mit Klassen und Eigenschaften arbeiten würde.
    Ich sehe immer wider das "OOP" oder Programmieren mit Klassen. Wen ich mich dann im Netz umsehe komme ich immer auf den gleichen "Mist", das mit dem Auto oder Car.....
    So wie sie es da machen ist es ja nicht schwer, nur wie macht man es in einem Beispiel von einem Programm mit Funktionen und Methoden?

    Ich weis das gehört noch so ziemlich in die Grundlage vom Programmieren, doch leider habe ich dies nie richtig begriffen und durch das übersprungen.

    Hoffe das ihr mit ein paar Tipps geben könnt wie ich den nachfolgenden Code mehr in Klassen schreiben könnte und mit diesen Sauberer umgehen könnte.

    "Programm-Code"

    Main_frm = 2x TextBox (tb_betrag / tb_ergebnis)
    3x Button (btn_plus / btn_minus / btn_clear)
    1x MenuStrip = MenuStrip1

    List_frm = 1 x ListView = ListView1

    "Main_frm"

    VB.NET-Quellcode

    1. Imports ComponentFactory.Krypton.Toolkit
    2. Imports System.IO
    3. Public Class Main_frm : Inherits ComponentFactory.Krypton.Toolkit.KryptonForm
    4. Public netto As Double
    5. Public steuersatz As Double = 19
    6. Public ergebnis As Double
    7. Public verlauf As New List(Of String)
    8. Private Sub btn_clear_Click(sender As System.Object, e As System.EventArgs) Handles btn_clear.Click
    9. tb_betrag.Text = Nothing
    10. tb_ergebnis.Text = Nothing
    11. End Sub
    12. Private Sub btn_plus_Click(sender As System.Object, e As System.EventArgs) Handles btn_plus.Click
    13. If Not String.IsNullOrWhiteSpace(tb_betrag.Text) Then
    14. netto = Convert(tb_betrag.Text)
    15. ergebnis = (netto / 100) * 119
    16. tb_ergebnis.Text = ergebnis.ToString("c")
    17. verlauf.Add(netto.ToString("c") & " , +19% = " & ergebnis.ToString("c"))
    18. Else
    19. tb_betrag.BackColor = Color.Red
    20. End If
    21. End Sub
    22. Private Sub btn_minus_Click(sender As System.Object, e As System.EventArgs) Handles btn_minus.Click
    23. If Not String.IsNullOrWhiteSpace(tb_betrag.Text) Then
    24. netto = Convert(tb_betrag.Text)
    25. ergebnis = (netto * 100) / 119
    26. tb_ergebnis.Text = ergebnis.ToString("c")
    27. verlauf.Add(netto.ToString("c") & " , -19% = " & ergebnis.ToString("c"))
    28. Else
    29. tb_betrag.BackColor = Color.Red
    30. End If
    31. End Sub
    32. Public Function Convert(ByVal betrag As String) As Double
    33. betrag = betrag.Replace(".", ",")
    34. Return Double.Parse(betrag, System.Globalization.CultureInfo.CreateSpecificCulture("de-DE"))
    35. End Function
    36. Private Sub AnzeigenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AnzeigenToolStripMenuItem.Click
    37. List_frm.Anzeigen(verlauf)
    38. List_frm.Show()
    39. End Sub
    40. Private Sub SpeichernUnterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SpeichernUnterToolStripMenuItem.Click
    41. SaveFileDialog1.Filter = "Text Datei|*.txt| Alles|*.*"
    42. SaveFileDialog1.Title = "Speichern unter:"
    43. SaveFileDialog1.ShowDialog()
    44. If SaveFileDialog1.FileName <> "" Then
    45. Dim sw As StreamWriter = New StreamWriter(SaveFileDialog1.FileName)
    46. For Each line As String In verlauf
    47. sw.WriteLine(line)
    48. Next
    49. sw.Flush()
    50. sw.Close()
    51. End If
    52. End Sub
    53. Private Sub tb_betrag_Click(sender As Object, e As EventArgs) Handles tb_betrag.Click, btn_clear.Click
    54. tb_betrag.BackColor = Color.White
    55. End Sub
    56. End Class

    "List_frm"

    VB.NET-Quellcode

    1. Imports ComponentFactory.Krypton.Toolkit
    2. Public Class List_frm : Inherits ComponentFactory.Krypton.Toolkit.KryptonForm
    3. Public Sub Anzeigen(ByVal list As List(Of String))
    4. If list.Count = Nothing Then
    5. ListView1.Items.Add("Keine Einträge gefunden..")
    6. Exit Sub
    7. Else
    8. ListView1.Items.Clear()
    9. For Each line As String In list
    10. ListView1.Items.Add(line)
    11. Next
    12. End If
    13. End Sub
    14. End Class

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

    Das ist recht wenig Code. Bei so einem einfachen Beispiel kannst du keine wahnsinnige Architektur drauf aufbauen. Wenn du natürlich nen Parser etc. schreiben würdest, würde das schon anders aussehen. Was jedoch so ein Thema ist wäre z.B. sowas:

    VB.NET-Quellcode

    1. ​betrag = betrag.Replace(".", ",")
    2. Return Double.Parse(betrag, System.Globalization.CultureInfo.CreateSpecificCulture("de-DE"))

    Verwende doch wenigstens die aktuellen Kultureinstellunge...


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    @nafets3646

    nafets3646 schrieb:

    Instanzier doch deine Forms richtig.


    Ich wäre dir Dankbar wen du auch ein Kleines Beispiel machen könntest wen du mir schon etwas dazu schreibst. Danke
    z.b.: Dim myForm As List_frm


    @thefiloe
    Das dachte ich mir schon das dies etwas zu klein sein würde.
    Ich hätte mir da ein Projekt vorgestellt.. eine Stempeluhr.

    Bei dem könnte ich sicherlich etwas lernen und könnte so das arbeiten mit Klassen etc vertiefen.
    ich habe mal kurz ein Diagramm gemacht das man etwa sieht was ich mir Vorstelle.



    Bei dem ist nun nur die Frage: Wie soll ich die Klassen gestallten?

    KlasseArbeiter
    Enumfür die Arbeiter (Vor & Nachname, Adresse, Anstellung in %)

    was noch? =)

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

    Wegen dem Instanzieren kannst du gern mal hier schauen:
    Instanziierung von Forms und Aufruf von Dialogen
    Wies geht, steht im zweiten Post ganz am Anfang.

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

    .Scare schrieb:

    Nun Wollte ich wissen ob ich diesen Code von dem Programm auch etwas "Verbessern/Verschönern" kann indem ich mit Klassen und Eigenschaften arbeiten würde.
    Ich sehe immer wider das "OOP" oder Programmieren mit Klassen. Wen ich mich dann im Netz umsehe komme ich immer auf den gleichen "Mist", das mit dem Auto oder Car.....
    So wie sie es da machen ist es ja nicht schwer, nur wie macht man es in einem Beispiel von einem Programm mit Funktionen und Methoden?
    Ich empfehle dir dringend: Versuch nicht mit Gewalt iwelche dolle Konzepte umzusetzen, wo sie nicht nötig sind.
    Wenn du kein reelles Problem hast, was die Implementation einer eigenen Klasse erfordert, dann sei froh, und lass es.

    Es gibt eine einfache Regel, wann selbstgemachte Klassen nützlich sind: nämlich wenn man mehrere Objekte von einer Sorte braucht. Und zwar von einer Sorte, die es noch nicht gibt.
    Braucht man tatsächlich ziemlich selten, weil es gibt ja bereits schon so viele Klassen.

    Guck, auch die Stempeluhr-Geschichte erfordert nicht das Anlegen eigener Klassen. Hervorragende Daten-Klassen kriegt man hingeneriert, wenn man das Datenmodell im Dataset-Designer anlegt, da würde man sich selbst ins Knie schißen, wenn man da mit selbstgebasteltem anfangen wollte.


    Aber wenn du Bock auf Klassen hast, gugge VersuchsChat
    - da sind paar lustige Klassen drinne, und die sind auch nötig, denn
    ein Chat-Server braucht viele Objekte von einer Sorte, um die ganzen
    angemeldeten Clients zu verwalten.

    ErfinderDesRades schrieb:

    .Scare schrieb:

    Nun Wollte ich wissen ob ich diesen Code von dem Programm auch etwas "Verbessern/Verschönern" kann indem ich mit Klassen und Eigenschaften arbeiten würde.
    Ich sehe immer wider das "OOP" oder Programmieren mit Klassen. Wen ich mich dann im Netz umsehe komme ich immer auf den gleichen "Mist", das mit dem Auto oder Car.....
    So wie sie es da machen ist es ja nicht schwer, nur wie macht man es in einem Beispiel von einem Programm mit Funktionen und Methoden?
    Ich empfehle dir dringend: Versuch nicht mit Gewalt iwelche dolle Konzepte umzusetzen, wo sie nicht nötig sind.
    Wenn du kein reelles Problem hast, was die Implementation einer eigenen Klasse erfordert, dann sei froh, und lass es.

    Es gibt eine einfache Regel, wann selbstgemachte Klassen nützlich sind: nämlich wenn man mehrere Objekte von einer Sorte braucht. Und zwar von einer Sorte, die es noch nicht gibt.
    Braucht man tatsächlich ziemlich selten, weil es gibt ja bereits schon so viele Klassen.

    Guck, auch die Stempeluhr-Geschichte erfordert nicht das Anlegen eigener Klassen. Hervorragende Daten-Klassen kriegt man hingeneriert, wenn man das Datenmodell im Dataset-Designer anlegt, da würde man sich selbst ins Knie schißen, wenn man da mit selbstgebasteltem anfangen wollte.


    Danke für den aufschlussreichen Beitrag! Ich denke da wirst du schon recht haben, das heißt, so wie ich den Rechner ungefähr gemacht habe geht das in Ordnung? Wen ich manchmal den Code anderer sehe von ähnlichen Programmen oder auch von solch kleinen Programmen dann komme ich mir mit meinen Sachen immer vor wie mit Wurst und Brot an einer Gala =)

    Ja das gute alte DataSet, das hast auch du mir etwas näher gebracht vor einiger Zeit.. (Jahre) :P Was ich aber noch nie gemacht habe ist das verknüpfen der eigentlichen Tabellen, aber ein versuch ist es auf jeden Fall wert.

    .Scare schrieb:

    dann komme ich mir mit meinen Sachen immer vor wie mit Wurst und Brot an einer Gala =)
    ach - meist ists die Kaiser-Parade bei des Kaisers neue Kleider.
    Ich zähl immer die Code-Zeilen - wenn ich deutlich weniger brauche fürs selbe Ergebnis, dann hab ich üblicherweise die bessere Lösung.
    @.Scare

    Bei dem ist nun nur die Frage: Wie soll ich die Klassen gestallten?

    KlasseArbeiter

    Enumfür die Arbeiter (Vor & Nachname, Adresse, Anstellung in %)


    Das Enum, wird so nicht klappen.

    Im Prinzip brauchst du hier nur die Klasse für die Arbeiter, wenn du das willst kannst du ja für jeden Tag (Ein-Ausstempeln) auch eine eigene Klasse erstellen.
    Diese dann als List(of...) in der Klasse Arbeiter sammeln.

    Ein Enum brauchst du hier nur, wenn du z.B. die Arbeiter unterscheiden willst
    (Werkstattarbeiter, Vorarbeiter, Lagerarbeiter,Sekretärin, Vorstand, Marketing,Qualitätskontrolle usw.)
    Sollte einer Stempeluhr aber egal sein - höchstens du willst z.B. Kernzeiten definieren, o.ä.

    Gruss

    mikeb69