Fragen zu OOP in MQL5 - Seite 49

 

Und was ist der Sinn dieser wilden Gedankenspiele? Der "Zweck" (in Anführungszeichen, weil... gladiolus) des Musters ist es,"ohne die Kapselungzu brechen, den internen Zustand des Objekts zu fixieren und zu bewahren" (in Anführungszeichen, weil zitierend). Aber ohne die Methode setState() geht es nicht. Wo ist hier also die Einsparung durch Verkapselung? Um zwei weitere Methoden für jedes private Feld zu schreiben... Ja... cool, die Verkapselung bleibt erhalten.

Und seien Sie ehrlich: Werden Sie diesen Ansatz in der Praxis anwenden? Das bezweifle ich. In der Praxis werden Sie es explizit und transparent machen - zum Beispiel eine Struktur mit demselben Satz von Feldern und einigen Methoden zum Speichern und Wiederherstellen. Und dann wird die Kapselung wirklich beibehalten, es gibt nur zwei neue Methoden: zum Speichern des Zustands und zum Wiederherstellen.

 
Igor Makanu:

OK, ich werde es speichern, ich brauchte, um das Prinzip der Arbeit zu testen, vielleicht ist dies, was ich suchte - ein Code für Tester und für die Arbeit EA, die ihren Zustand zu speichern kann, und in der Tester im Gegenteil nicht zu verschwenden Ressourcen auf "extra Gesten" - Teil eines solchen Musters kann durch #ifdef -ami abgedeckt werden ;)

Ich versuche, den Sinn dieses Crammer mit dem Keeper zu verstehen, aber ich sehe keinen besonderen Nutzen. Tatsächlich ist es schlechte Programmierpraxis durch die Erzeugung von Seiteneffekten. Wenn Sie ein Objekt ändern, ändern Sie ein anderes. Das führt dazu, dass der Code unübersichtlich und schwer zu verstehen wird. Es ist besser, sich um einen reinen Code zu bemühen.

Was hindert Sie daran, ein Objekt einfach in ein anderes Objekt zu kopieren und es dann wieder zurück zu kopieren? Das ist im Grunde dasselbe, nur korrekter und klarer.

Wenn dieses Singleton gleichzeitig Setter und Getter hat (d.h. es erlaubt, seinen Zustand zu ändern und ihn zu lesen), ist es gleichbedeutend mit der Arbeit mit globalen Variablen. Und jeder Programmierer weiß, dass die Arbeit durch Änderung des globalen Zustands böse ist. Aber das Singleton zählt irgendwie nicht )

 
Alexey Navoykov:

Ich versuche, den Sinn dieser Verwahrungssache zu verstehen, aber ich sehe keinen besonderen Nutzen. Es ist sogar eine schlechte Programmierpraxis, da sie Nebeneffekte erzeugt. Wenn Sie ein Objekt ändern, ändern Sie ein anderes. Das führt dazu, dass der Code unübersichtlich und schwer zu verstehen wird. Es ist besser, sich um einen reinen Code zu bemühen.

Es ist einfacher, ich lerne das technische Zeug

Ich bin es gewohnt, den Zustand eines automatisierten Systems aus der Sicht eines endlichen Zustandsautomaten zu bewerten, und ich möchte immer einen "Schnappschuss" des Systemzustands als Reserve behalten ))))

 
Igor Makanu:

Ich bin eher daran gewöhnt, den Zustand eines automatisierten Systems aus der Perspektive eines endlichen Automaten zu bewerten, und deshalb möchte ich immer in der Lage sein, einen "Abdruck" des Systemzustands als Backup zu behalten )))

Meiner Meinung nach ist eine solche Umsetzung jedoch zu kompliziert und verwirrend.

 
Alexey Navoykov:

Das Ziel ist klar, es ist meiner Meinung nach nur zu kompliziert und verwirrend.

Leider sind die Menschen so - solange ich keine Tritte und Stöße in den Hintern bekomme, werde ich es wohl nicht schaffen)))

 
Igor Makanu:

Aber so sind die Menschen nun mal - solange ich nicht meine eigenen Schläge und Beulen abbekomme, werde ich es wohl nicht verstehen)))

Es ist nichts Falsches daran, wenn jemand diese Muster studiert, es ist großartig - es ist Gymnastik für das Gehirn, usw. usw. Und dann, bei näherer Betrachtung, stellt sich heraus, dass dies ein höllischer Fake ist, ein Meme, um Trottel von der Realität wegzuziehen, genau wie das Erlernen von Visual BASIC durch das Schreiben von Konsolenanwendungen.

Die Untersuchung dieser Muster ist interessant, wenn auch nur unter dem Gesichtspunkt, dass man die Kakerlaken von jemandem kennenlernt - was sie in der Natur sind.

Und wenn wir uns wirklich der Aufgabe nähern, den Zustand eines Objekts zu bewahren, besteht der Weg darin, die Möglichkeit zu schaffen, ein Objekt in ein anderes zu kopieren, ganz gleich, ob es sich um eine einfache Methode oder eine Überladung = Overloading handelt. Und danach wollen Sie diese Funktion vielleicht nicht mehr kapseln.

 
Dmitry Fedoseev:

Und wenn wir wirklich an die Aufgabe herangehen, den Zustand eines Objekts zu bewahren, dann ist der Weg, dies zu tun, die Möglichkeit zu schaffen, ein Objekt in ein anderes zu kopieren, wie auch immer man es möchte, sei es nur durch eine Methode oder durch eine Überladung =. Und danach wollen Sie diese Funktion vielleicht nicht mehr kapseln.

Im Grunde kann jedes technische System auf der Grundlage von 3 Grundprinzipien entworfen werden:

- entspricht der neuesten Norm

- unsere Großväter haben es so gebaut, wir müssen das Rad nicht neu erfinden

- Wir bauen es schnell aus Scheiße und Stöcken, und dann werden wir es neu bauen

)))


Nur ein Scherz, ich habe Zeit zu lesen und mit den Optionen herumzuspielen, ich nutze sie, ebenso wie die Möglichkeit, eine schnelle Erklärung der unklaren Punkte auf dem Forum zu bekommen ;)

 
Alexey Navoykov:

Ich versuche, den Sinn dieser Verwahrungssache zu verstehen, aber ich sehe keinen besonderen Nutzen. Es ist sogar eine schlechte Programmierpraxis, da sie Nebeneffekte erzeugt. Wenn Sie ein Objekt ändern, ändern Sie ein anderes. Das führt dazu, dass der Code unübersichtlich und schwer zu verstehen wird. Es ist besser, sich um einen reinen Code zu bemühen.

Was hindert Sie daran, ein Objekt einfach in ein anderes Objekt zu kopieren und es dann zurück zu kopieren? Das ist praktisch dasselbe, nur korrekter und übersichtlicher.

Wenn dieses Singleton gleichzeitig Setter und Getter hat (d.h. es erlaubt, seinen Zustand zu ändern und zu lesen), ist es äquivalent zum Umgang mit globalen Variablen. Und jeder Programmierer weiß, dass die Arbeit durch Änderung des globalen Zustands böse ist. Aber das Singleton zählt irgendwie nicht )

Ich nehme an, dass dies die typische Sichtweise eines Programmierers ist, der noch nie etwas mit ernsthaften Großprojekten zu tun hatte... Verzeihen Sie, dass ich so unverblümt bin, aber anders kann ich mir nicht erklären, warum Sie die Grundlagen als schlechte Praxis bezeichnen.)

 
Dmitry Fedoseev:

Es ist nichts Falsches daran, wenn jemand diese Muster studiert, es ist großartig - Gehirnjogging usw. usw. Und dann, bei näherer Betrachtung, stellt sich heraus, dass es sich um eine Art höllischen Schwindel handelt, eine Art Meme, um Trottel von der Realität wegzulocken, genau wie das Erlernen von Visual BASIC durch das Schreiben von Konsolenanwendungen.

Die Untersuchung dieser Muster ist interessant, wenn auch nur unter dem Gesichtspunkt, dass man die Kakerlaken von jemandem kennenlernt - was sie in der Natur sind.

Und wenn wir uns wirklich der Aufgabe nähern, den Zustand eines Objekts zu bewahren, besteht der Weg darin, die Möglichkeit zu schaffen, ein Objekt in ein anderes zu kopieren, ganz gleich, ob es sich um eine einfache Methode oder eine Überladung = Overloading handelt. Und darüber hinaus wird vielleicht der Wunsch, diese Funktion zu kapseln, nachlassen.

Dmitry, wahrscheinlich in diesem Fall Sie verwechseln ein bisschen Aufgaben der Muster Keeper und Prototyp, und alle ihre möglichen Kombinationen und Erscheinungsformen. Der erste Snapshot muss im Gegensatz zu Prototype nicht unbedingt das gesamte Objekt kopieren.

Und ja, die Notwendigkeit der Kapselung zeigt sich vor allem bei großen Projekten mit vielen Beteiligten. Für Spielzeug, wie die meisten dieser Aufgaben hier, ist es natürlich übertrieben)

 
Alexey Navoykov:

1) Ich versuche herauszufinden, welchen Sinn diese Sache mit der Vormundschaft hat, aber ich sehe den Nutzen nicht.
2) Es ist im Grunde schlechte Programmierpraxis, Nebeneffekte zu erzeugen.
3) Wenn Sie ein Objekt ändern, ändern Sie ein anderes. Das führt dazu, dass der Code unübersichtlich und schwer zu verstehen wird. Es ist immer noch besser, sich um einen reinen Code zu bemühen.
4) Was hindert Sie daran, ein Objekt einfach in ein anderes Objekt zu kopieren und es dann zurück zu kopieren? Im Grunde ist es dasselbe, nur korrekter und klarer.

Wenn dieses Singleton gleichzeitig Setter und Getter hat (d.h. es erlaubt, seinen Zustand zu ändern und zu lesen), ist es gleichbedeutend mit der Arbeit mit globalen Variablen. Jeder Programmierer weiß, dass die Arbeit durch Änderung des globalen Zustands böse ist. Aber das Singleton zählt irgendwie nicht )

Gehören Sie nicht zur Sekte der "Die installieren es, wir brauchen es nicht, es gehört Ihnen ..."? ???


1. Der Custodian ähnelt von seiner Konzeption her dem Muster, das für die Speicherung von Zuständen bei der Eingabe veränderlicher Inhalte verwendet wird, um Änderungen rückgängig zu machen, wenn diese Änderungen nicht eine, sondern mehrere hundert sind. Z.B. Foto-Editor, Text-Editor...
Gefunden nach dem Schreiben -https://refactoring.guru/ru/design-patterns/memento
2. es ist im Grunde eine schlechte Praxis, wenn man das Thema nicht kennt und nicht versteht, um dort etwas zu kritisieren...
3. Wie kann etwas, das man ohnehin nicht versteht, noch verwirrender und schwieriger zu verstehen sein?
4. Der Rest liegt bei Ihnen...