Eine Frage an die OOP-Experten. - Seite 4

 
Igor Makanu:

Modifikatoren für Zugriffsrechte ermöglichen die Erkennung von Fehlern zur Kompilierungszeit

Im Allgemeinen ist all dies nicht kompliziert die Arbeit mit Klassen, nicht verwenden, schreiben Sie alles in der Öffentlichkeit: und dann wird es einfacher sein, mit ihnen zu arbeiten.

SZZY: Eine Menge netter Phrasen über OOP, Kapselung und Vererbung... Das ist alles gut, aber der wichtigste Vorteil von OOP gegenüber anderen Programmierstilen ist die Speicherung aller Daten (Klassenfelder) und Funktionen für die Arbeit mit diesen Daten (Klassenmethoden) an einem Ort (Klasse) - im Buch heißt das Kapselung. Die weitere Verwendung von OOP hängt von den Aufgaben ab, wenn die Aufgabe es erlaubt, Klassen zu skalieren, dann wird eine Hierarchie benötigt und es wird Basisklassen und deren Nachkommen geben - ob man diese verwendet, hängt von einem selbst ab

Alle Objekteigenschaften können auch in einem Array "gekapselt" werden. Dort können Sie auch die Beziehungen zwischen Objekten über bestimmte Zeigereigenschaften festlegen. Es besteht eine Ordnung, da jede Eigenschaft indiziert ist und ihr Wert in einer bestimmten Zelle gespeichert ist. Die Objekte selbst sind im Kernel gekapselt. Der Zugang ist am einfachsten - über die Objektnummer und die Eigenschaftsnummer. Übergänge zwischen Objekten desselben Steuerelements erfolgen über Eigenschaftszeiger.
 
Реter Konow:
Sie können auch alle Eigenschaften eines Objekts in einem Array "kapseln". Sie können auch Beziehungen zwischen Objekten über bestimmte Zeigereigenschaften festlegen. Es besteht eine Ordnung, da jede Eigenschaft indiziert ist und ihr Wert in einer bestimmten Zelle gespeichert ist. Die Objekte selbst sind im Kernel gekapselt. Der Zugang ist am einfachsten - über die Objektnummer und die Eigenschaftsnummer. Übergänge zwischen Objekten desselben Steuerelements erfolgen über Eigenschaftszeiger.

das ist gar nicht so einfach!

Außerdem haben Sie bereits oben über die Lesbarkeit des Codes geschrieben (und auch oben erwähnten Sie die Geschwindigkeit - die Ausführungsgeschwindigkeit hängt von etwas anderem ab, nicht vom Programmierstil)

im Allgemeinen, wie überall sonst - Sie werden es nicht wissen, bis Sie es versuchen, fangen Sie an, im OOP-Stil zu schreiben, Sie werden spezifische Aktionen und spezifische Fragen erhalten, ein Beispiel ist bereits in diesem Thread

Wenn es um künstliche Intelligenz geht, muss man auch die Daten von der Arbeit mit ihnen trennen; mit OOP wird das einfacher sein.

SZZ: Was ist in OOP besser? Zum Beispiel gibt es verschiedene Arten von Daten, z.B. Expert Advisor Einstellungen in MQL, und diese Einstellungen haben Wiederholungen in Blöcken. Wir nehmen einen Block von Einstellungen und beschreiben Klassenfelder, um diese Einstellungen in eine Klasse zu übergeben, es ist einfacher, einen Konstruktor mit Parametern zu erstellen, und dann Methoden zu schreiben, die mit diesen EA-Einstellungen arbeiten. Nachdem wir all das getan haben, erstellen wir entweder ein Array von Klasseninstanzen oder sogar nur ein paar Instanzen der Klasse ("Klassentypvariablen") und das war's - das Problem ist gelöst, indem wir eine Klasse schreiben, nicht mehrere Arrays erstellen, Methoden erstellen, um jedes Array zu identifizieren, eine Gruppe von Funktionen erstellen, die, abgesehen davon, dass sie Änderungen in Arrays vornehmen, nicht genug sind, um Daten zu verderben, die in diesem Aufruf nicht verarbeitet werden sollten....

ZZZY: imho ist OOP einfach praktisch, es gibt eine gewisse Legende, dass es keine Notwendigkeit gibt, OOP zu verwenden, wenn es keine Vererbung gibt... kein Kommentar, es wird ein schaumiger Streit ohne mich sein

 
Igor Makanu:

das ist gar nicht so einfach!

Außerdem haben Sie bereits oben über die Lesbarkeit des Codes geschrieben (und auch oben erwähnten Sie die Geschwindigkeit - die Ausführungsgeschwindigkeit hängt von etwas anderem ab, nicht vom Programmierstil)

im Allgemeinen, wie überall sonst - Sie werden es nicht wissen, bis Sie es versuchen, fangen Sie an, im OOP-Stil zu schreiben, Sie werden spezifische Aktionen und spezifische Fragen erhalten, ein Beispiel ist bereits in diesem Thread

Wenn es um künstliche Intelligenz geht, muss man auch die Daten von der Arbeit mit ihnen trennen; mit OOP wird das einfacher sein.

SZZ: Was ist in OOP besser? Wir haben zum Beispiel verschiedene Arten von Daten, z.B. Expert Advisor Einstellungen in MQL, und diese Einstellungen haben Wiederholungen in Blöcken. Wir nehmen einen Block von Einstellungen und beschreiben Klassenfelder, um diese Einstellungen in die Klasse zu übertragen, es ist einfacher, einen Konstruktor mit Parametern zu erstellen und dann Methoden zu schreiben, die mit diesen EA-Einstellungen arbeiten. Nachdem wir all das getan haben, erstellen wir entweder ein Array von Klasseninstanzen oder sogar nur ein paar Instanzen der Klasse ("Klassentypvariablen") und das war's - das Problem ist gelöst, indem wir eine Klasse schreiben, nicht mehrere Arrays erstellen, Methoden erstellen, um jedes Array zu identifizieren, eine Gruppe von Funktionen erstellen, die, abgesehen davon, dass sie Änderungen in Arrays vornehmen, nicht genug sind, um Daten zu verderben, die in diesem Aufruf nicht verarbeitet werden sollten....

ZZZY: imho ist OOP einfach praktisch, es gibt eine gewisse Legende, dass es keine Notwendigkeit gibt, OOP zu verwenden, wenn es keine Vererbung gibt... kein Kommentar, es wird ein schaumiger Streit, ohne mich

Bequem oder nicht, subjektive Frage. Ich bevorzuge eine tabellarische Darstellung der Daten. Andere bevorzugen die Form einer Weintraube oder eines Baumes. Andere bevorzugen ihn als Weintraube oder Baum. Aber ich werde ernsthaft über Ihre Worte nachdenken und versuchen, die Grundprinzipien der Arbeit mit Daten in OOP zu lernen.
 
Реter Konow:
Bequem oder nicht, subjektive Frage. Ich bevorzuge eine tabellarische Darstellung der Daten. Andere bevorzugen die Form einer Weintraube oder eines Baumes. Andere bevorzugen ihn als Weintraube oder Baum. Aber ich werde ernsthaft über Ihre Worte nachdenken und versuchen, die Grundprinzipien der Arbeit mit Daten in OOP zu begreifen.
Ich habe Ihnen schon einmal gesagt, dass ein Array von Zeigern auf Arrays von Zeigern eine zweidimensionale Tabelle ist. Eine Liste sind Zeilen, die Listen, die in der ersten liegen, sind Spalten. Sie können ihre eigenen Listen führen. Und so weiter, bis die Sonne untergeht. Dies ist die Hierarchie, nach der Sie suchen. Und sie wird von nur einer Klasse durchgeführt.
 
Реter Konow:

In OOP ist ein "Objekt" ein Verweis auf eine Klasse, in der ihre Felder (Eigenschaften) deklariert sind. Ich verstehe ein Objekt als einen nummerierten Satz von Eigenschaften, von denen jede eine Zelle in einem Array ist. Das ist der Unterschied.

Peter, Sie müssen sich darüber im Klaren sein, dass bei der Definition der Klasse selbst kein Speicher zugewiesen wird, auch wenn es Instanzen anderer Klassen innerhalb der Klasse als deren Eigenschaften gibt. Daher kann es keinen Verweis auf die Klasse geben, sondern nur auf das Klassenobjekt. Speicher wird zugewiesen, wenn eine Instanz (ein Objekt) einer Klasse deklariert (erstellt) wird.

HH, d.h. wenn es eine Klasse im Programm gibt, aber keine Instanzen davon, wird der Compiler diese Klasse ignorieren (nicht beachten).

Es gibt eine Ausnahme. Der Speicher kann bei der Definition der Klasse für statische Methoden und Parameter zugewiesen werden, falls vorhanden.
 
Artyom Trishkin:
Ich habe Ihnen einmal gesagt, dass ein Array von Zeigern auf Arrays von Zeigern eine zweidimensionale Tabelle ist. Eine Liste sind Zeilen, die in der ersten liegenden Listen sind Spalten. Sie können ihre eigenen Listen führen. Und so weiter, bis die Sonne untergeht. Dies ist die Hierarchie, nach der Sie suchen. Und sie wird von nur einer Klasse durchgeführt.

Theoretisch, ja. Aber es ist notwendig, so zu organisieren, dass die Übergänge zwischen den hierarchischen Gliedern (bedingt - Induktion und Deduktion, d.h. vom Besonderen zum Allgemeinen und zurück) als Kette erfolgen. Das heißt, die Reihenfolge der Zeiger sollte so strukturiert sein, dass eine Bewegung in jede (richtige) Richtung möglich ist, ohne übermäßige "Drehungen" und "Sprünge" in der Schleife. Daher wird ein einfaches Tabellenlayout der Zeiger wahrscheinlich nicht funktionieren.

Hinzugefügt:

Aber es könnte funktionieren. Ich weiß es noch nicht.

 
Igor Makanu:

Wir müssen diese Fragen in die Praxis umsetzen, sonst werden wir nicht in der Lage sein zu erkennen, was praktisch ist und was unbequem erscheint )))).

Hier ein triviales Beispiel, das schon hundertfünfzig Mal in MQL verwendet wurde - die Erkennung eines neuen Taktes:

OK, das ist ein funktionierender Code, aber was, wenn ich einen neuen Balken für 2 TFs definieren muss? Und was, wenn ich alle TFs aus dem Terminal verwenden möchte?

In OOP würde es so aussehen:

und alles, was ich jetzt tun muss, ist, mehrere Instanzen derCNewbar-Klasse zu deklarieren- wie? sogar zu einem Array, sogar zu mehreren Variablen, aber ich habe Daten vor versehentlichen Änderungen mit OOP geschützt

Ich habe dieses Problem bereits öffentlich gelöst. Die Idee war, eine Tabelle mit allen Symbolen und allen Zeitrahmen zu erstellen und diese in einer Schleife zu durchlaufen, um die Ereignisse eines neuen Balkens zu fixieren. Nach dem ersten Aufruf einer Funktion dieses Ereignisses wird ihr Kennzeichen in der Tabelle gelöscht. Ich kann nicht beurteilen, wie viel komplizierter es ist als in OOP. Aber in der Tat, ziemlich einfach und bequem Lösung.

 
Nikolai Semko:
Peter, Sie müssen sich darüber im Klaren sein, dass der Klasse selbst kein Speicher zugewiesen wird, auch wenn es Instanzen anderer Klassen innerhalb der Klasse als deren Eigenschaften gibt. Daher kann es keinen Verweis auf die Klasse geben, sondern nur auf das Klassenobjekt. Speicher wird zugewiesen, wenn eine Instanz (ein Objekt) einer Klasse deklariert (erstellt) wird.
HH, d.h. wenn es eine Klasse im Programm gibt, aber keine Instanzen davon, wird der Compiler diese Klasse ignorieren (nicht beachten).
Das habe ich nicht gewusst. Interessant. Das Problem ist, inwieweit die Verwendung von OOP eine einfache Handhabung aller Hierarchiedaten in Schleifen ermöglicht. Es sind die Schleifen, die die Hauptmechanismen eines jeden Motors darstellen. Je besser die Schleifen funktionieren, desto mehr Daten können Sie auswerten und desto mehr Arbeit können Sie erledigen.
 
Bei der Erstellung eines Klassenobjekts wird neben der Zuweisung von Speicher für alle Eigenschaften (Variablen) der Klasse einer der Konstruktoren gestartet (es kann mehr als einen geben). Die Konstruktoren können nicht-parametrisch (Standard), parametrisch (wenn einige Parameter bei der Erstellung einer Instanz einer Klasse angegeben werden) oder ein Kopierkonstruktor sein, wenn eine andere Instanz der Klasse als Parameter einer Instanz der Klasse angegeben wird.
 
Реter Konow:
Theoretisch, ja. Aber es ist notwendig, so zu organisieren, dass die Übergänge zwischen den hierarchischen Gliedern (bedingt - Induktion und Deduktion, d.h. vom Besonderen zum Allgemeinen und zurück) als Kette erfolgen. Das heißt, die Reihenfolge der Zeiger sollte so strukturiert sein, dass eine Bewegung in jede (richtige) Richtung möglich ist, ohne übermäßige "Drehungen" und "Sprünge" in der Schleife. Daher wird ein einfaches Tabellenlayout mit Zeigern wahrscheinlich nicht funktionieren.
Alle Listen sind bereits mit einer binären Suche ausgestattet. Das bedeutet, dass Sie nach der gesuchten Eigenschaft filtern müssen, anstatt sie einzeln durchzugehen. Als Ergebnis erhalten wir den Index des gesuchten Objekts.
Grund der Beschwerde: