Eine Frage an die OOP-Experten. - Seite 5

 
Artyom Trishkin:
Alle Listen sind bereits mit einer binären Suche versehen. Dies bedeutet nicht, dass die Listen eine nach der anderen durchlaufen werden, sondern dass nach der gesuchten Eigenschaft gefiltert wird. Als Ergebnis erhalten wir den Index des gesuchten Elements.
Sind diese Listen mit irgendetwas innerhalb des OOP verbunden? Das heißt, welche "Fracht" führen sie mit sich? Klassen, Konstruktoren, Schnittstellen...? Sie sind doch in die Klassengemeinschaft integriert, oder?
 
Nikolai Semko:
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.
Ich verstehe, danke, Nikolay. Ich werde mich dessen bewusst sein.
 
Реter Konow:

Ich habe diese Aufgabe bereits öffentlich gelöst. Die Idee war, eine Tabelle mit allen Symbolen und allen Zeitrahmen zu erstellen und sie 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.

wie Sie oben geschrieben haben, ist alles relativ.... mit der letzten Aufnahme des Clips...

Haben Sie sichdie Standardbibliothek aus der MT-Auslieferung angesehen? Es ist alles im OOP-Stil, es gibt hier 2 Möglichkeiten, entweder sind die Metakvot-Programmierer Profis und verwenden verständliche Stile oder... Ihre Version ;)

 
Igor Makanu:

wie Sie oben geschrieben haben, ist alles relativ.... mit der letzten Aufnahme des Clips...

haben Sie sichdie Standardbibliothek aus der MT-Auslieferung angesehen? es ist alles im OOP-Stil, es gibt hier 2 Möglichkeiten, entweder sind die Metakvot-Programmierer Profis und verwenden verständliche Stile oder... Ihre Version ;)

Ich kenne mich mit OOP noch nicht so gut aus. Sie erzählen mir von Listen, aber ich weiß nicht, was sie damit "essen". Wie sie angekündigt werden, wie man auf sie zugreift, wie sie geändert werden und so weiter... Für mich ist eine Liste einfach ein dynamisches Array ohne zusätzliche Syntax. Ein Objekt ist ein Satz von Eigenschaften in einem Array. Und in OOP ist ein Objekt eine ganze Klasse. Vererbung - Verknüpfung von Objekten. Zugriff auf die Objekteigenschaften über die benannten Referenzen. In meinem Fall ist also alles viel einfacher, und deshalb finde ich es schwierig, Funktionen und Effizienz zu vergleichen. Ich muss mich damit näher befassen.

Aber eines habe ich gelernt. Man kann nicht eine einzelne Entität des OOP-Konzepts verstehen und verwenden, ohne die gesamte OOP zu verstehen und sich ihr vollständig zuzuwenden. Es ist entweder OOP oder was immer Sie wollen. Einfach einen der praktischen Mechanismen zu verwenden, wird wahrscheinlich nicht funktionieren.

 
Реter Konow:

Einfach einen der praktischen Mechanismen zu verwenden, wird wahrscheinlich nicht funktionieren.

Die OOP kann ohne Probleme mit dem prozeduralen Stil koexistieren, aber die Funktionen müssen vollständig getrennte und unabhängige Codeblöcke sein, d.h. alles, was die Funktion verwendet, muss in ihr enthalten sein oder als Parameter an sie übergeben werden

im Allgemeinen, wie sie in Wiki schreiben, dass OOP eine Erweiterung des prozeduralen Stils ist

Retag Konow:

Aber eines habe ich verstanden. Man kann nicht eine einzelne Einheit des OOP-Konzepts verstehen und verwenden, ohne die gesamte OOP zu verstehen und ohne vollständig zu ihr überzugehen

Sie können, gab ich ein Beispiel, und auf dem Forum 90% der Quellen in OOP-Stil sind Wrapper um prozeduralen Stil - keine Vererbung, keine Abstraktionen, keine ..... nichts, nur Kapselung, aber trotzdem ist es zumindest bequem - es ist bequem, eine vollständig übertragbare Stück Code auf eine andere Aufgabe haben - nach allem, was in einer Klasse? ;)

 
Igor Makanu:

mit dem prozeduralen OOP-Stil ohne Probleme, aber Funktionen müssen vollständig getrennte und unabhängige Codeblöcke sein, d.h. alles, was eine Funktion verwendet, muss in ihr enthalten sein oder als Parameter an sie übergeben werden

im Allgemeinen ist OOP eine Erweiterung des prozeduralen Stils, wie sie in Wiki schreiben

Sie können, ich gab ein Beispiel, und auf dem Forum 90% des Quellcodes in OOP-Stil ist eine Hülle um prozeduralen Stil - keine Vererbung, keine Abstraktionen, keine ..... nichts, nur Kapselung, aber trotzdem ist es zumindest bequem - es ist bequem, eine vollständig übertragbare Stück Code zu einer anderen Aufgabe haben - alles innerhalb einer Klasse, nicht wahr? ;)

Ja, die Übertragbarkeit von Code ist ein großes Plus von OOP. In meinem Fall sind nur einzelne Funktionen portabel (und das auch nur selten), aber wenn ich einen großen Mechanismus baue, ist nichts portabel. Genauso wie menschliche Organe nicht übertragbar sind (ohne professionellen Eingriff). Meine Mechanismen sind eher wie "Organismen" in dem Sinne, dass sie in große Blöcke unterteilt sind, die jeweils eine Vielzahl von Aufgaben erfüllen. Daher ist die Übertragbarkeit fast nicht gegeben. Diese Blöcke sind jedoch sehr einfach in ihrer Funktionalität zu erweitern. Sie "fügen" es mit ein paar Zeilen hinzu, und voila! - Die Blöcke führen eine ganze Schicht neuer Arbeit aus, für die Sie viele separate Funktionen schreiben müssen. Alles in allem hat es seine Vorteile. Nun, der globale Geltungsbereich ist ein unglaublich mächtiges Werkzeug. Das Material, mit dem die Blöcke arbeiten, steht ihnen absolut zur Verfügung, und es ist nicht nötig, etwas zu übertragen. Alles, was für die Arbeit notwendig ist, ist bereits vorhanden. Alles in allem sind die Ansätze unterschiedlich und jeder hat seine eigenen Vorteile.

 
Реter Konow:

Ich weiß noch nicht viel über OOP. Sie erzählen mir von Listen und ich weiß nicht, womit sie "gegessen" werden. Wie sie deklariert werden, wie auf sie zugegriffen wird, wie sie geändert werden und so weiter... Für mich ist eine Liste einfach ein dynamisches Array ohne zusätzliche Syntax. Ein Objekt ist ein Satz von Eigenschaften in einem Array. Und in OOP ist ein Objekt eine ganze Klasse. Vererbung - Verknüpfung von Objekten. Zugriff auf die Objekteigenschaften über die benannten Referenzen. In meinem Fall ist also alles viel einfacher, und deshalb finde ich es schwierig, Funktionen und Effizienz zu vergleichen. Ich muss mich noch eingehender damit befassen.

Aber eines habe ich gelernt. Man kann keine einzige Entität des OOP-Konzepts verstehen und verwenden, ohne die gesamte OOP zu verstehen und ohne vollständig zu ihr überzugehen. Es ist entweder OOP oder was immer Sie wollen. Einfach einen der praktischen Mechanismen zu verwenden, wird wahrscheinlich nicht funktionieren.

Peter, du musst es einfach ausprobieren. Und ich würde empfehlen, es genau an Listenstrukturen auszuprobieren, weil man dort alle Vorteile von OOP in allen drei Richtungen sehen kann - Vererbung, Kapselung und Polymorphismus.

Dank der Vererbung haben Sie eine einzige Schnittstelle (eine Reihe von virtuellen Funktionen), um mit Objekten innerhalb einer Liste zu arbeiten. Objekte können einfach oder komplex sein und von der Basis geerbt werden.

Durch Polymorphismus - Sie können mit grundlegend verschiedenen Objekten mit dieser einen Schnittstelle arbeiten.

Aufgrund der Kapselung - Sie haben NUR diese Schnittstelle und haben keinen Zugriff auf die Details der Implementierung - können Sie folglich nichts vermasseln. Außerdem wissen Sie nicht nur genau, wie die aktuellen Objekte funktionieren, sondern auch, wie die noch nicht geschriebenen Objekte mit Ihrem Code interagieren werden.

 
Реter Konow:
Sind diese Listen mit irgendetwas innerhalb des OOP verbunden? Ich meine, welche "Last" tragen sie mit sich? Klassen, Konstruktoren, Schnittstellen...? Sie sind doch in die Klassengemeinschaft integriert, oder?
Im Grunde genommen ist eine Liste einem Array sehr ähnlich. Sie können sie als Variable vom Typ Liste deklarieren oder mit dem Operator new eine neue Variable erstellen. Im Falle von "neu" wird die Liste jedoch nicht vom Terminal-Subsystem kontrolliert und muss immer gelöscht werden, wenn die Arbeit beendet ist - Löschen. Wird eine solche Liste jedoch einer anderen Liste als Objekt hinzugefügt, muss sie nicht überwacht werden.
 
Реter Konow:

Nun, der globale Geltungsbereich ist ein unglaublich mächtiges Werkzeug. Das Material, mit dem die Blöcke arbeiten, steht ihnen uneingeschränkt zur Verfügung, und es ist nicht nötig, etwas zu übertragen. Alles, was Sie zum Arbeiten brauchen, ist bereits vorhanden.

wenn es um den globalen Geltungsbereich von Variablen geht, die als Parameter von Funktionen oder Codeabschnitten verwendet werden sollen, dann.... Imho ist dies der beste Weg, um einen vollständig nicht transportierbaren Code zu erhalten, mit der Möglichkeit, versteckte Fehler zu bekommen, die später unmöglich zu entdecken sind

SZZ: Ich habe solche Codes für MT4 EAs viele Male geändert, zuerst habe ich global deklarierte Variablen umbenannt - dann habe ich Änderungen vorgenommen, als ich Compiler-Fehler sah, aber beim letzten Mal habe ich es richtig gemacht - ich habe neue Parameter zu Funktionssignaturen hinzugefügt und dann habe ich global deklarierte Variablen entfernt, denn wenn Sie es geschafft haben, diesen elenden Code einmal zu ändern, müssen Sie es noch einmal tun? - leider bin ich faul, aber einigermaßen faul )))))

 
Igor Makanu:

wenn es um den globalen Geltungsbereich von Variablen geht, die als Parameter von Funktionen oder Codeabschnitten verwendet werden sollen, dann.... Imho ist dies der beste Weg, um einen vollständig nicht transportierbaren Code zu erhalten, mit der Möglichkeit, versteckte Fehler zu bekommen, die später unmöglich zu entdecken sind

SZZ: Ich habe solche Codes für MT4 EAs viele Male geändert, zuerst habe ich global deklarierte Variablen umbenannt - dann habe ich Änderungen vorgenommen, als ich Compiler-Fehler sah, aber beim letzten Mal habe ich es richtig gemacht - ich habe neue Parameter zu Funktionssignaturen hinzugefügt und dann habe ich global deklarierte Variablen entfernt, denn wenn Sie es geschafft haben, diesen elenden Code einmal zu ändern, müssen Sie es noch einmal tun? - leider bin ich faul, aber einigermaßen faul )))))

Der Code ist nicht übertragbar, und das macht ihn so besonders. Sie ist nicht für den Transport gedacht. Sie hat einen anderen Zweck. Nun, der globale Geltungsbereich von Variablen ist ein mächtiges Werkzeug für die Arbeit mit komplexen Mechanismen. Man muss nur wissen, wie man es benutzt. Wenn man mir von versteckten Fehlern und Bugs erzählt, bin ich verwirrt. Ich hatte noch nie Fehler im Zusammenhang mit der Sichtbarkeit globaler Variablen. Mit einem Wort, überhaupt nicht.