OOP vs. prozedurale Programmierung - Seite 14

 
Реter Konow:

Können Sie mir ein Beispiel für diese Einzelaufgaben nennen, die man besser nicht ohne OOP erledigen sollte?


Ohne OOP kann man es lösen, aber mit OOP geht es schneller, wie ich schon sagte...

Ein Muster kann zum Beispiel 0 bis 100 Candlestick-Muster, 0 bis 30 verschiedene Indikatoren und 1 bis 5 verschiedene Signale in jedem von ihnen enthalten... Wir haben also 1 Klasse, und wir können mit dem Konstruktor festlegen, dass die erste Instanz 23 solcher Muster und 2 Indikatoren mit je einem Signal enthält... Die zweite Instanz wird 12 andere Muster und 8 andere Indikatoren enthalten... Dann setzen wir die Bedingung, dass beide Instanzen ein Signal zum Öffnen geben müssen, das nicht mehr als 4 Takte voneinander entfernt ist ...

All diese Dinge sind in 5 Sekunden erledigt, wenn die Muster Signale und alles andere in der Klasse beschrieben ist... Und es kann so viele Kombinationen von all dem geben, wie Sie wollen, und sogar ohne einen Kunden, optimieren Sie einfach all dies automatisch im Optimierer und suchen Sie nach günstigen Eingabebedingungen... Der Optimierer kann die Anzahl der Instanzen und die Eigenschaften jeder einzelnen von ihnen vergrößern... nun ja, usw. ))

 
Dmitry Fedoseev:

Dies ist nicht das Hauptargument.

In der prozeduralen Programmierung gibt es kein Analogon zur Polymorphie.

Es ist seltsam, dass ich während meiner gesamten Praxis, da ich ein völliger Neuling in der Programmierung war und bis zu einem gewissen Grad immer noch bin, nie die Notwendigkeit sah, Polymorphismus zu verwenden... Das muss mein Schicksal sein.

(Weiß der Teufel warum...))

 
Nikolay Ivanov:

Ohne OOP kann man es lösen, aber mit OOP geht es schneller, wie ich schon sagte...

Ein Muster kann beispielsweise 0 bis 100 Candlestick-Muster, 0 bis 30 verschiedene Indikatoren und 1 bis 5 verschiedene Signale in jedem von ihnen enthalten... Wir haben also 1 Klasse, und wir können mit dem Konstruktor festlegen, dass die erste Instanz 23 solcher Muster und 2 Indikatoren mit je einem Signal enthält... Die zweite Instanz wird 12 andere Muster und 8 andere Indikatoren enthalten... Dann setzen wir die Bedingung, dass beide Instanzen ein Signal zum Öffnen geben müssen, das nicht mehr als 4 Takte voneinander entfernt ist ...

All diese Dinge sind in 5 Sekunden erledigt, wenn die Muster Signale und alles andere in der Klasse beschrieben ist... Und es kann so viele Kombinationen von all dem geben, wie Sie wollen, und sogar ohne einen Kunden, optimieren Sie einfach all dies automatisch im Optimierer und suchen Sie nach günstigen Eingabebedingungen... Der Optimierer kann die Anzahl der Instanzen und die Eigenschaften der einzelnen Instanzen erweitern... usw. ))

Wie wird ein Muster implementiert, das Muster enthält? Handelt es sich um eine Funktion oder ein Array oder etwas anderes? Wie sind die Muster selbst geschrieben?
 

Dieses ganze GOP-Debakel hat ein universelles Ausmaß.

Schließlich muss man schon sehr viel Talent haben, um so etwas in die Welt zu setzen.

Und nichts hält die Apologeten auf.

Wenn Sie lokale Apologeten nehmen. Direkt vor ihrer Nase liegt das Handbuch der MQL-Sprache. Schauen wir uns die Abschnitte an. Nur drei Abschnitte sind den Daten gewidmet, alle anderen beschreiben die AKTIONEN: Programm, Array-Operationen, Datenumwandlungen.....

Könnte es sein, dass dies die Sprache von µl ist, die nicht den "modernsten Ideen" entspricht?

Nehmen wir ein viel größeres Softwaresystem: R.

Es enthält über 10.000 Pakete, die jeweils Funktionen enthalten - das sind Aktionen, keine Objekte.


Meiner Meinung nach verstehen all diese Apologeten der OOP lokaler und weltweiter Herkunft nichts vom Programmieren, nämlich: Der Wert (die Semantik) beliebiger Daten ist eine Funktion, eine Aktion, die diese Daten verarbeitet. Sie schrieben int. Die Bedeutung dieser Zeichen wird durch einen Satz von Prozessorbefehlen bestimmt, der weiß, wie man mit dieser Variablen ACTION durchführt.


Kommen wir nun zum Unterricht.

Nehmen wir R, für das Klassen Teil der Sprache sind.

Eine Funktion gibt ein Objekt einer bestimmten Klasse ein - die Ausgabe ist in der Regel ein Objekt einer anderen Klasse. Die Bedeutung der Eingabe-/Ausgabefelder wird ausschließlich durch die Funktion bestimmt, die das Ganze verarbeitet. Und wenn die Funktion eine bestimmte Klasse nicht akzeptiert, ist diese Klasse für diese Funktion nicht von Nutzen. Deshalb ist die Dokumentation für jedes Paket genau die gleiche wie die für µl: Aktionen und Funktionen werden aufgeführt. Und Verknüpfungen zwischen Funktionen in einem Paket oder mit Funktionen in einem anderen Paket werden durch den Namen der Klasse bestimmt, mit der die jeweilige Funktion arbeitet.


Nochmals. In R können Objekte eine beliebige Komplexität haben und sogar sehr komplex sein. Der Wert eines jeden Feldes eines Objekts einer bestimmten Klasse wird jedoch vollständig von der Funktion bestimmt, die dieses Objekt erzeugt.


Dies ist besonders offensichtlich für diejenigen, die Compiler schreiben (was ich getan habe). Eine Sequenz von Code wird geschrieben. Was bewirkt dieser Code? Welche Bedeutung hat dieser Code? Die Bedeutung des Textes in der Quellsprache einer beliebigen Programmiersprache wird durch den ausführbaren Code bestimmt, den der Compiler erzeugt und der schließlich vom Prozessor wahrgenommen wird. Ein Sprachcompiler findet die Bedeutung der geschriebenen Zeilen, ein anderer jedoch nicht, d.h. die geschriebenen Zeilen haben keine Bedeutung für diese andere Sprache.


Daher: Die Bedeutung eines Objekts ist immer eine Funktion, eine Aktion, die in der Lage ist, Eingabedaten als Leitfaden für die Aktion zu nehmen und in der Ausgabe eine bestimmte Liste von Feldern zu erzeugen, deren Wert allein durch diese Funktion bestimmt wird.


Konov hat oben versucht zu erklären, dass wir von TATSACHEN ausgehen müssen. Es ist notwendig, sich mit Aktionen zu befassen, und Objekte, die diese Aktionen verbinden, werden später behandelt, wenn die Aktionen definiert sind. Aber die Klarheit und Effizienz des Codes ergibt sich allein daraus, wie gut es uns gelungen ist, die gesamte Hierarchie der AKTIONEN und ihrer Interaktion zu organisieren.


Befürworter der OOP sagen: Lasst uns Objekte erstellen. Was aber ist die Bedeutung von Objektfeldern, wenn wir keine Aktionen für diese Felder definieren?

 
Реter Konow:
Wie wird das Muster, das Muster enthält, umgesetzt? Handelt es sich um eine Funktion oder ein Array oder etwas anderes? Wie sind die Muster selbst geschrieben?

ja, sie werden normalerweise beschrieben, aber darum geht es nicht...

Ein anderes Beispiel... eine Klasse ist wie eine Bibliothek mit Büchern, und eine Kopie ist ein Wagen... Auf einen Wagen können Sie Bücher Ihrer Wahl aus der Bibliothek legen... ... und suchen Sie nach etwas Profitablerem...) Bibliothek und 1 Wagen können ohne OOP gemacht werden, und wenn wir über eine große Anzahl von Wagen sprechen, ist es besser, es mit OOP zu machen...

 
Реter Konow:
Dies ist das einzige Argument für OOP in der Entwicklung, das ich heute akzeptiere.

Sie sollten das nicht akzeptieren.

Das letzte Team, in dem ich gearbeitet habe, bestand aus etwa 300 Personen. Der Gesamtarbeitsaufwand für das gesamte Programmprojekt beläuft sich auf rund 1500 Mannjahre. Ein solches Team zu organisieren, damit es zusammenarbeitet, wird keinem OOP helfen. Dafür gab es andere Ansätze, die eine Aufteilung des gesamten Problems in Etappen und die sorgfältige Regelung von allem und jedem bei jeder Etappe vorsahen. Es gab GOSTs, die dies beschrieben. In der Programmierung war es das USSD (Unified System of Program Documentation). Was die Arbeitsintensität anbelangt, so machte die Codierung selbst etwa 20 % des Arbeitsaufwands aus.


Hören Sie nicht auf die Befürworter von OOP. Sie sind auf dem richtigen Weg. Auch die Tatsache, dass Sie nicht zwei Variablen in einer Struktur zusammenführen, bringt keinen Gewinn

 
Nikolay Ivanov:

Ein weiteres einfaches Beispiel, das ganz an der Oberfläche liegt... EA-Generator in MetaEditor... Jeder, auch wenn er keine Ahnung vom Programmieren hat, kann in 10 Sekunden einen EA mit einer Vielzahl von Indikatoren und Bedingungen zusammenschustern )))) Und all das ist OOP )))



Reden wir nicht über den Generator, denn ich habe beschlossen, 2 Monate lang nicht zu fluchen )))

Genossinnen und Genossen MQ-Entwickler, ich habe großen Respekt vor Ihnen. Ich meine es ernst.

Und ich verstehe die Gründe für die Schaffung dieser Konstruktoren. Ich verstehe auch, warum all diese Konstrukteure in einem Vakuum furzten.

Ja, es kann als eine Art Beispiel zum Studium von MQL5 gesehen werden, aber keinesfalls als Ausgangspunkt für einen echten Handelsroboter.

 
СанСаныч Фоменко:

Sie sollten das nicht akzeptieren.

Das letzte Team, in dem ich gearbeitet habe, bestand aus etwa 300 Personen. Der Gesamtarbeitsaufwand für das gesamte Programmprojekt beläuft sich auf rund 1500 Mannjahre. Ein solches Team zu organisieren, damit es zusammenarbeitet, wird keinem OOP helfen. Dafür gab es andere Ansätze, die eine Aufteilung des gesamten Problems in Etappen und die sorgfältige Regelung von allem und jedem bei jeder Etappe vorsahen. Es gab GOSTs, die dies beschrieben. In der Programmierung war es das USSD (Unified System of Program Documentation). Was die Arbeitsintensität anbelangt, so machte die Codierung selbst etwa 20 % des Arbeitsaufwands aus.


Hören Sie nicht auf die Befürworter von OOP. Sie sind auf dem richtigen Weg. Auch die Tatsache, dass Sie nicht zwei Variablen in einer Struktur zusammenführen, bringt nicht viel.


San-Sanych, ich wurde kürzlich von einem so genannten Progager kontaktiert, dem es sogar gelang, etwas auf dem Markt zu verkaufen.

Er sagte, ich habe versucht, einige Programme zu kleben und einen Kompilierungsfehler bekommen, also hat er mir seinen Kleber geschickt. Er hat versprochen, mich zu bezahlen.

Ich habe einen Blick darauf geworfen, und ich bin krank: 59 Kompilierungsfehler.

Viele globale Variablen wie n,c,m.

Alle widersprechen sich gegenseitig.

Und der Typ ist sich sicher, dass er nur ein paar Änderungen braucht, um es auf den Markt zu bringen.

 
СанСаныч Фоменко:

...

Nach meinem Verständnis verstehen all diese Apologeten der OOP lokaler und weltweiter Herkunft nichts von Programmierung, nämlich: der Wert (Semantik) beliebiger Daten ist eine Funktion, eine Aktion, die diese Daten verarbeitet. Sie schrieben int. Die Bedeutung dieser Zeichen wird durch eine Reihe von Prozessorbefehlen bestimmt, die wissen, wie man ACTION auf dieser Variablen durchführt.

...


im Gedächtnis

 
СанСаныч Фоменко:

Sie sollten das nicht akzeptieren.

Das letzte Team, in dem ich gearbeitet habe, bestand aus etwa 300 Personen. Der Gesamtarbeitsaufwand für das gesamte Programmprojekt beläuft sich auf rund 1500 Mannjahre. Ein solches Team zu organisieren, damit es zusammenarbeitet, wird keinem AOP helfen. Dafür gab es andere Ansätze, die eine Aufteilung des gesamten Problems in Etappen und die sorgfältige Regelung von allem und jedem bei jeder Etappe vorsahen. Es gab GOSTs, die dies beschrieben. In der Programmierung war es das USSD (Unified System of Program Documentation). Was den Arbeitsaufwand anbelangt, so entfielen etwa 20 % des Arbeitsaufwands auf die Codierung selbst.


Hören Sie nicht auf die Befürworter von OOP. Sie sind auf dem richtigen Weg. Auch die Tatsache, dass Sie nicht zwei Variablen in einer Struktur zusammenführen, bringt keinen Gewinn


Solche Programme werden heute von einer Person in drei Tagen geschrieben.