Eine Frage an die OOP-Experten. - Seite 16

 
Georgiy Merts:

Richtig, mehr über diese Funktion. Sie haben einen monströs großen Schalter, mit dem Sie eine von einem Dutzend benötigten Funktionen auswählen können. Bei einem solchen Wechsel kann man sehr leicht einen Fehler machen, indem man versehentlich Code für einen der Zweige an die falsche Stelle schreibt.

Mit einer Überlastung sind die Dinge viel einfacher. Wir haben zehn verschiedene Nachkommen, und jedes Mal arbeiten wir mit EINER Klasse, und diese hat EINE überladbare Funktion. Wir können sie nicht versehentlich in eine andere Klasse schreiben, weil wir dafür eine ganz andere Datei öffnen müssen.

Außerdem ist das Parsen selbst in diesem sehr großen Schalter meiner Meinung nach viel anstrengender als das Öffnen der einen Klasse, die wir brauchen, und das anschließende Parsen nur einer Funktion.

Im Assembler-Code läuft die gesamte Handhabung dieses Schalters ohnehin auf denselben Schalter hinaus, der von diesem Zeiger abhängt. Aber im Falle von OOP ist dies alles vor dem Programmierer verborgen und beeinträchtigt seine Arbeit nicht. Ohne OOP müssen Sie damit umgehen.

Grob gesagt: Wenn Sie laufen, senden Sie in einer bestimmten Reihenfolge Signale an Ihre Muskeln, die diese bewegen. Aber auf der Ebene des Bewusstseins erinnert man sich einfach daran, welche Bewegung man machen muss. Hier ist OOP genau diese Art von "Erinnerung an die auszuführende Bewegung". Du "verstehst nicht, warum wir uns an die Bewegung erinnern müssen, wenn wir einen Haufen Muskeln und Nerven haben, die mit ihnen verdrahtet sind". nun... Ich habe schon oft gesagt, dass es für die Titanen des Gedächtnisses völlig ausreicht, sich zu merken, welche Muskeln in welcher Reihenfolge angespannt werden müssen, um loszulegen. Es hat keinen Sinn, sich an die ganze Bewegung zu erinnern. Für andere, die sich nicht so viel merken können, ist es viel sinnvoller, sich die ganze Bewegung zu merken, und was es mit den Muskeln auf sich hat, in welcher Reihenfolge sie angespannt sind und in welchem Ausmaß - es ist sinnvoller, das vor dem Verstand zu verbergen.

Ja, George, deine Argumente sind vernünftig und logisch. Mein Ansatz verlangt in der Tat, dass Sie sich alles in Ihrem Programm merken und wissen. Das ist sowohl gut als auch schlecht. Gut, weil Wissen eine schnelle Entwicklung von Code und Lösungen, wenig Syntax und viel Funktionalität gewährleistet, und schlecht, weil aufgrund der globalen Verbindung aller Blöcke keine Portabilität von Teilen des Codes in andere Programme vorgesehen ist.

Unsere gesprochene Sprache verwendet ja auch das globale Gedächtnis. Wir kennen und erinnern uns an alle Wörter und nicht nur an die, die zum aktuellen Gesprächsthema gehören. In unseren Köpfen ist alles durcheinandergeraten. So funktioniert der Verstand, und so funktioniert mein Ansatz. Alle wichtigen Ergebnisse der Funktionsblöcke sind durchgängig verfügbar. Sie enthalten also eine fast menschliche Terminologie. Ich spreche in einem Code, wie in einer normalen Sprache. Das ist sehr praktisch. Aber es gibt eine Menge zu beachten. Das ist wahr.


ZS. Übrigens kann der Riesenschalter in Dateien zerlegt und der Inhalt versteckt werden. Es ist einfach praktisch für mich, das Ganze zu sehen.

 
Vict:

Tinny, du machst eine Art von Fahrradbau, ohne den konventionellen Ansatz richtig studiert zu haben. Peter, finden Sie ein gutes Buch, vielleicht Stroustrup, in einigen Buch schrieb er einen Text-Editor, werden Sie etwas von einem echten Problem zu lernen, ich erinnere mich nicht an den Inhalt, aber es ist unwahrscheinlich, dass Sie schlechte Dinge zu lehren.

Ich danke Ihnen natürlich. Aber es ist unwahrscheinlich, dass bestimmte Aufgaben mir die Augen für etwas öffnen können, denn ich habe in den letzten sechs Jahren unzählige Aufgaben gelöst. Eine echte Myriade. Ich weiß also, wovon ich spreche.
 
Nun zur Effizienz. Was bedeutet der Wechsel letztendlich? Es handelt sich um einen sequentiellen Vergleich eines Parameters mit Konstanten. Achtung Peter, fortlaufend. Das heißt, wenn die gesuchte Konstante 100500 ist, dann werden alle diese Vergleiche auf dem Prozessor durchgeführt. Was sind überladene Funktionen/Methoden - diese sind nach der Kompilierung völlig andere Codeblöcke im Maschinencode, mit eigenen Einstiegspunkten. Was ist also effizienter?
 
Реter Konow:
Danke, natürlich. Aber es ist unwahrscheinlich, dass mir bestimmte Aufgaben die Augen öffnen, denn ich habe in den letzten sechs Jahren eine Unzahl von Aufgaben gelöst. Eine echte Myriade. Ich weiß also, wovon ich spreche.

Es gibt viele Aufgaben, und Sie haben immer noch nicht verstanden, wie nützlich das Überladen ist. Stellen Sie sich vor, dass eine Template-Funktion, ihre Argumente können durch int, double oder Benutzer-Typ, und wir wollen einen absoluten Wert durch abs() zu finden, wie können wir es tun, ohne Überlastung?

Ich würde gerne Ihre Krücken um diese Arrays sehen, wenn das Projekt wächst: simulieren Sie Autorad -> Auto mit 4 Buggys -> Straße mit hundert Autos.

 
Vladimir Simakov:
Und nun zur Effizienz. Was bedeutet der Wechsel letztendlich? Es ist ein sequentieller Vergleich eines Parameters mit den Konstanten. Achtung Peter, fortlaufend.

Nein, der Schalter funktioniert anders. Es ist eine Tabelle, in der der Schalter direkt auf die gewünschte Konstante geht. Dies ist der wesentliche Unterschied zwischen ihm und dem if-Block.

 
Vladimir Simakov:
Und nun zur Effizienz. Was bedeutet der Wechsel letztendlich? Es ist ein sequentieller Vergleich eines Parameters mit Konstanten. Achtung Peter, fortlaufend. Das heißt, wenn die gesuchte Konstante 100500 ist, dann werden alle diese Vergleiche auf dem Prozessor durchgeführt. Was sind überladene Funktionen/Methoden - diese sind nach der Kompilierung völlig andere Codeblöcke im Maschinencode, mit eigenen Einstiegspunkten. Was ist also effizienter?

Der unvermeidliche Overkill. In diesem Fall verliere ich, in dem anderen gewinne ich.

Zum Beispiel führt die Funktion mit dem Riesenschalter die Positionierung von Objekten in Artikeln und Artikeln in Fenstern durch. Er berechnet ihre Größe. Ich rufe es einmal auf, und alle Elemente und Objekte werden entsprechend ihrer Ankerpunkte an ihren Positionen platziert. Berechnet ihre Größe und Position im Verhältnis zueinander, bestimmt, welche Elemente ausgeblendet werden sollen, welche Größe die Leinwand haben soll usw... Ein Anruf ist eine große Aufgabe. Derselbe Block kann die Größe oder Position eines von Tausenden Fensterelementen berechnen. Ein Block. Der Aufruf ist Object();

Wie viele Klassen und Funktionen müsste ich in OOP schreiben, um eine solche Anzahl von Aufgaben zu lösen? Ich habe Angst, mir das vorzustellen.

 
Реter Konow:

Der unvermeidliche Overkill. In diesem Fall verliere ich, in dem anderen gewinne ich.

Zum Beispiel: Die gleiche Funktion mit einem riesigen Schalter führt die Positionierung von Objekten in Elementen und Elementen in Fenstern durch. Ich rufe es einmal auf, und alle Elemente und Objekte werden an den Positionen platziert, die ihren Bindungen entsprechen. Ihre Größen und Positionen werden berechnet. Es wird festgelegt, welche Elemente ausgeblendet werden sollen, welche Größe die Leinwand haben soll und so weiter... Ein Anruf ist eine große Aufgabe. Ein und derselbe Block kann die Größe oder Position eines von tausenden Fensterelementen berechnen. Ein Block.

Wie viele Klassen und Funktionen müsste ich in OOP schreiben, um eine solche Anzahl von Aufgaben zu lösen? Ich habe Angst, mir das vorzustellen.

Ungefähr 5-10, grob geschätzt. Mit einer völlig selbsterklärenden Oberfläche.
 
Ich meine die Anzahl der Klassen. Jede Zeile ist 200 Zeilen lang.
 
Ihor Herasko:

Nein, der Schalter funktioniert anders. Es handelt sich um eine Tabelle, in der der Schalter direkt auf die gewünschte Konstante geht. Dies ist der wesentliche Unterschied zwischen ihm und dem if-Block.

In Bezug aufdie Geschwindigkeit ist dies also offensichtlich die schnellste Option in MQL. Der Zugriff auf dieKlassenobjekte in der verwalteten Umgebung erfolgt jedoch indirekt.
 
Реter Konow:

Wir erstellen eine Funktion ohne Parameter, schreiben alle überladenen Funktionsberechnungen hinein, machen die Variablen global und haben Zugriff auf die Ergebnisse einer beliebigen anderen Funktion. Das ist doch eine Schönheit, oder?

Ja, das ist gut so... Wir sollten es in die Abteilung "Humor" stecken. )