Counter in C#

Wenn nicht, wie soll das denn in deinem Beispiel gelöst sein, dass man keine lokalen Variablen hat?
​Hier meinte ich, dass man keine Properties hat. (versehentlich lokal geschrieben)
Wie soll es dann überhaupt noch möglich sein, dass die Klasse ihrer spezifischen Aufgabe gerecht wird? (Beispielsweise auf dein Beispiel oder einer "List" bezogen)


Ja. Der Bereich ist begrenzt. Das hatte ich ja so auch gesagt. Nichtsdestotrotz hast Du natürlich noch Freuräume sprich Bereiche, wo Du auf solche Variablen zugreifen kannst, ohne das dies notwendig ist.
Und genau das will man ja eigentlich nicht.
​Du sagst: Keine globalen Variablen wegen höherem Risiko von unübersichtlichen Änderungen (zu hoher Scope).
​Ich sage: Keine globalen Variablen sind Teil des Prinzip der OOP. Wenn du

​Und: Wenn du zu dem obigen Beispiel keine gute Lösung findest, dann ist sowohl meine Sicht als auch deine Sicht optimal befriedigt.
Zumal man bei gutem OOP Design tendenziell einen eher übersichtlich kleinen Scope hat. Ich kann sehr einfach überprüfen, was alles mit der Property gemacht wird, wenn sie nicht schon readonly ist...

Du beklagst dich im Prinzip darüber, dass du überhaupt eine Wahl bei dem Variablen Zugriff hast?

​Wenn es Probleme mit der objekt orientierten Programmierung gibt, dann ist das jedenfalls keines davon.


​Zusätzlich bist du der Meinung, dass OOP für einige Anwendungen sehr ungünstig ist, da das Prinzip der OOP beschränkend wirkt. Interessehalber, könntest du das ausführen?
 
The Ripper schrieb:
​Hier meinte ich, dass man keine Properties hat. (versehentlich lokal geschrieben)
Gut. Properties sind auch mehr syntaktischer Zucker und ich hatte ja darauf auch hingewiesen.
Ändert aber nix an der grundsätzlichen Thematik die ich mit dem Beispiel verdeutlichen wollte. Nämlich das jede Methode Zugriff auf alle Attribute des Objektes hat. Egal, ob sie die nu zwingend braucht oder nicht.

The Ripper schrieb:
Du sagst: Keine globalen Variablen wegen höherem Risiko von unübersichtlichen Änderungen (zu hoher Scope).
​Ich sage: Keine globalen Variablen sind Teil des Prinzip der OOP.
Naja. Gerade das Singleton-Pattern wird ja gerne mal dazu benutzt, um globale Zustände zu behandeln.
Außerdem sage ich ja nicht, dass (programm-)globale Variablen zu OOP gehören. Ich sag nur, dass Objektattribute eben im Context eines Objektes auch "global" sind. Wie oben gesagt: Jede Methode kann auf jedes Attribut zugreifen. Auch wenn es diesen Zugriff eigentlich gar nicht braucht.

​​
The Ripper schrieb:
Und: Wenn du zu dem obigen Beispiel keine gute Lösung findest, dann ist sowohl meine Sicht als auch deine Sicht optimal befriedigt.
Nochmal: Es geht hier nicht zwingend darum es besser zu machen oder solche Sachen als "schlecht" anzusehen.
Genauso wie programm-globale Variablen nicht per se schlecht sind. In kurzen Programmen machen sie sehr wohl oft Sinn, weil dann eine Vermeidung das Programm eher unnötig kompliziert und damit wieder fehleranfälliger machen (eigentlich etwas, was man mit der Nichtverwendung von globalen Variablen vermeiden will).

Und wenn eine übersichtliche Klasse ist, wird man da mit Attributen auch kaum in ernsthafte Probleme laufen.
Das einzige, worauf ich hinweisen möchte, dass man sich darüber im Klaren sein muss, dass Objektattribute eben potentiell die gleichen Problemklassen haben wie globale Variablen. Wenn man sich dessen bewusst ist, vermeidet man ja vielleicht z.B. irgendwie Monsterklassen zu schreiben, sondern teilt das auf. Alternativ kann man Klassen auch mit Traits modularisieren.

Du sagst ja selbst, dass gutes OOP-Design sich ja auch dadurch auszeichnet. Aber warum ist es gut? Eben u.a. deshalb, weil sonst objekt-globale Zustände ein größeres Fehlerpotential haben.


​​
The Ripper schrieb:
Du beklagst dich im Prinzip darüber,...
Nochmal: Ich beklage mich nicht darüber. Ich weise nur darauf hin!!!

​​​
The Ripper schrieb:
Zusätzlich bist du der Meinung, dass OOP für einige Anwendungen sehr ungünstig ist, da das Prinzip der OOP beschränkend wirkt.
Nein. Das habe ich so nicht gesagt. OOP, funktionale Programmierung, Logisch-deklarative Programmierung, prozedurale Programmierung usw. sind ja lediglich verschiedene Ansätze, um ein Problem zu lösen. Und für manche Problemklassen ist aber ein bestimmtes Paradigma besser geeignet als ein Anderes.

Ein GUI-Framework ist z.B. geradezu prädestiniert dafür, dass in OOP zu implementieren.

Bei anderen Dingen, bei dem ich beispielsweise ne einfache Parallelisierung haben möchte ist vielleicht ein funktionaler Ansatz besser, da hier wegen Vermeidung von Zuständen eine Parallelisierung sehr viel einfacher ist und teilweise ja automatisch vom Compiler vorgenommen wird.

Und warum sollte ich mir dann die Vorteile bestimmter Paradigmen nicht zunutze machen und das mischen?
 
Das einzige, worauf ich hinweisen möchte, dass man sich darüber im Klaren sein muss, dass Objektattribute eben potentiell die gleichen Problemklassen haben wie globale Variablen. Wenn man sich dessen bewusst ist, vermeidet man ja vielleicht z.B. irgendwie Monsterklassen zu schreiben, sondern teilt das auf.

So ist deine Aussage zusammengefasst kurz und knapp ausgedrückt folgende?

Properties sind im Kontext der Klasse global. Daraus folgt, dass man das Programm (1) nicht in einer Klasse abbilden sollte, da man sonst in der selben Problemklasse ist oder (2) nicht in wenigen extrem großen Klassen abbilden soll, da man sich dadurch der Problemklasse nähert.


​Richtig?


​Just by the way
Naja. Gerade das Singleton-Pattern wird ja gerne mal dazu benutzt, um globale Zustände zu behandeln.
Nicht naja - meiner Meinung nach und der Meinung vieler anderer, welche sich tiefgehend damit beschäftigt haben, sind der Meinung, dass das Pattern ein Anti-Pattern ist. https://stackoverflow.com/questions/12755539/why-is-singleton-considered-an-anti-pattern
 

Ähnliche Themen

Zurück
Oben