Laden...

Aufteilung einer Methode, die viele (ca. 50) Werte errechnet / viele Werte zurückgeben

Erstellt von Larkem vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.824 Views
Thema geschlossen
L
Larkem Themenstarter:in
9 Beiträge seit 2014
vor 9 Jahren
Aufteilung einer Methode, die viele (ca. 50) Werte errechnet / viele Werte zurückgeben

Hallo liebes Forum,

ich habe eine Frage zum grundsätzlichen Design eines Programms. Ich habe gelesen, dass man aus Gründen der Übersichtlichkeit möglichst alle Abläufe in Methoden programmieren soll und zwar so, dass sie bestmöglichst auf eine Bildschirmseite passen.

Nun frage ich mich, wie es am besten gelöst wird, wenn man eine Methode schreiben will, die mehrere errechnete Werte (ca. 50 verschiedene) ausgeben soll. Übergibt man die alle oder wird eher auf globale Variablen zurückgegriffen?

Ich hoffe, die Fragestellung ist nachvollziehbar.

Beste Grüße und vielen Dank!

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Larkem,

Ich hoffe, die Fragestellung ist nachvollziehbar.

ohne die Details zu kennen, ist beleibt vieles unklar/unsicher.

Übergibt man die alle oder wird eher auf globale Variablen zurückgegriffen?

Weder noch: Zusammengehörige Daten gehören in ein Objekt, als Member/Fields. Dies Objekt kann man dann per Parameter übergeben. Auch ein paar davon. Aber man würde weder 50 Parameter übergeben noch globale Variablen verwenden (globale Variablen gehören in die Mottenkiste).

Mit scheint die Frage doch sehr in Richtung [Hinweis] Wie poste ich richtig? Punkt 1.1.1 zu gehen. Ich halte es für ratsam, wenn du dich zunächst mit objektorientierter Programmierung beschäftigst. Schon alleine die Ansicht, dass es darum ginge, Abläufe zu programmieren, spricht dafür, dass du von der Programmierung eher eine prozedurale - und damit eine im C# Umfeld eher ungeeignete(!) - als eine objektorientierte Vorstellung hast. Möglicherweise hilft auch ein Blick in [FAQ] Wie finde ich den Einstieg in C#?

Oft werden Methoden sogar viel kürzer als eine Bildschirmseite sein. Aber es gibt auch Ausnahmen. Zum Beispiel macht es nicht viel Sinn, Methoden, die viele gleichartige und gleichwertige Operationen durchführen (z.B. alle Controls in einem Form zu erzeugen, namentlich InitializeComponent) in mehrere Teile aufzuteilen, nur damit sie weniger lang ist als eine Bildschirmseite. Wenn man InitializeComponent aufteilen wollte, dann eher durch eine logisch Strukturierung, z.B. durch die Verwendung von UserControls.

Kriterien, was in eine Methode zusammen gehört und was nicht (mehr), sind Single-Responsibility-Prinzip und Separation of concerns.

herbivore

849 Beiträge seit 2006
vor 9 Jahren

auf globale Variablen zurückgegriffen

dafür sollte man schon eine Fette Ausrede haben. Nein im ernst, Du solltest ein wenig konkreter werden in deiner Fragestellung. Aber egal was dabei raus kommt, die globale variable ist die schlechteste Lösung. Hört sich eher an an als wenn eine Liste oder Dictionary als rückgabe Wert in Frage kommt.

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo unconnected,

ohne genaue Aussagen, was Larkem will, ist es natürlich schwierig etwas genaues zu sagen. Aber gerade deshalb finde ich es ungünstig pauschal ein Dictionary zu empfehlen. Eine Liste geht ja noch in Ordnung, wenn alle Werte von gleichen Typ und auch sonst gleichartig sind, aber für ein Dictionary statt eines eigenen Objekts / einer eigenen Klasse muss man schon gute Gründe haben. Insbesondere wenn die Keys eines Dictionaries den Namen von Etwas entsprechen, woraus man auch eine Property machen könnte, dann spricht das eher für eine eigene Klasse.

herbivore

L
Larkem Themenstarter:in
9 Beiträge seit 2014
vor 9 Jahren

Hallo,

danke erstmal für die Antworten. Sicherlich bin ich noch nicht ausreichend vertraut mit der OOP, ich bin aber dran, das zu ändern.

Ich schreibe ein Programm zur Berechnung einer bestimmten Zahnradpaarung. Jedes Rad und auch die Paarung als gesamtes haben bestimmte Eigenschaften (Zähnezahl, geometrische Größen etc.). Mein Ansatzpunkt wäre also zunächst, eine Klasse für das Rad, eine Klasse für das Ritzel und eine Klasse für das Getriebe anzulegen.

Soweit richtig?

Ich werde mir wohl noch ein paar Sachen zur OO lesen, insbesondere zu der angesprochenen Übergabe...

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Larkem,

ob man zwischen (Zahn)Rad und Ritzel unterscheiden muss weiß ich nicht. Das hängt ein bisschen von den Umständen ab. Es sind ja beides Zahnräder. Vielleicht reicht da eine Klasse. Und solange du nur Zahnradpaarungen berechnest, brauchst du auch nicht unbedingt eine Klasse Getriebe. Hängt auch wieder von den Details ab.

Doch da du wohl noch am Anfang stehst, probiere doch mal beides aus (also einmal mit allen genannten Klasse und einmal nur mit der Klasse Zahnrad) und schau, welche Variante (für dich) verständlicher, übersichtlicher, klarer und eleganter ist. Bzw. welche der beiden Varianten die oben genannten Kriterien und zusätzlich auch das KISS-Prinzip und Don’t repeat yourself besser erfüllt.

Auch wenn du 50 Werte berechnen musst, läuft die Berechnung für jede Paarung vermutlich grundsätzlich gleich ab (also nach immer dem gleichen Grundschema). Das klingt dann schon sehr danach, dass man eine Liste (oder zwei Listen) übergibt und eine Ergebnisliste zurückbekommt. In der Methode würden dann alle Berechnungen per Schleife durchgeführt.

Allerdings sind wir hier dann wirklich bei [Hinweis] Wie poste ich richtig? Punkt 1.1.1. Mit den gegebenen Informationen und der weiteren Einarbeitung in OOP solltest du jetzt alleine weiterkommen (können).

herbivore

Thema geschlossen