Ehrgeizige Ideen !!! - Seite 4

 
TheXpert:
Beruhigen Sie sich.
Warum so plötzlich? Werden blinde religiöse Überzeugungen verletzt? :)
 
Andrei01:

Warum ist das Unsinn? Berechnen Sie einfach, wie viele Zeiger nötig sind, um zu den richtigen Daten oder Funktionen zu gelangen.

Wenn Sie sicher wissen, wie man zählt. :)


Wenn Sie eine neue Instanz einer Klasse - d. h. eine Variable vom Typ Klasse - erstellen, wird ein Duplikat der Beziehungstabelle erstellt, und das war's.

Der Zugriff auf Daten, sowohl in Klassen als auch in gewöhnlichen Variablen, ist gleich schnell, alle beschreibenden Maßnahmen zur Aufteilung der Zugriffsrechte innerhalb von Klassen (privat, öffentlich) - all dies ist auf Compiler-Ebene, kompilierter Code arbeitet nur mit physischen Speicherzellen

Nun, nehmen wir an, dass es eine "komplexe dynamische Klasse" geben wird, die auf raffinierte Weise aus anderen raffiniert erzeugten Klassen erzeugt wird. Na und? Schließlich wird alles mit einer bestimmten Funktion berechnet. Hat es sich also wirklich gelohnt, für solche Zirkuskunststücke einen Garten zu bauen?

Schreitet die Krankheit voran? Man hat Ihnen schon mehrfach gesagt, dass OOP den Programmierer von Routineaufgaben der Datenaufbereitung und der Kontrolle über den Inhalt der Daten befreit und dass es dem Programmierer überlassen bleibt, wie er Methoden innerhalb der Klasse implementiert oder Funktionen Dritter aufruft.

OOP ist ebenfalls eine Sache der Vergangenheit. Der aktuelle Trend ist die hardwarenahe Programmierung, die meist in C erfolgt, zum Beispiel CUDA. Mit der Einführung von Prozessoren mit GPU wird dies noch weiter verbessert werden. Die Prozessorhersteller planen, nicht mehr nur universelle Prozessorkerne auf den Markt zu bringen.

Hier bin ich nicht kompetent, und in Ihrem Mund scheint diese Information nicht glaubwürdig

SZZY: warum ich Ihnen schreibe, schreiben Sie keinen Unsinn in Fachforen, teilen Sie Ihr Wissen und wenn Sie etwas nicht wissen, fragen Sie mich.

 
IgorM:


Beruhigen Sie sich. Was müssen Sie tun? Wenn Sie eine neue Instanz einer Klasse - d. h. eine Variable des Klassentyps - erstellen, wird ein Duplikat der Beziehungstabelle erstellt, und das war's.

der Zugriff auf Daten, ob in einer Klasse oder einer gewöhnlichen Variablen, ist in Bezug auf die Geschwindigkeit gleich, alle beschreibenden Maßnahmen zur Trennung der Zugriffsrechte innerhalb von Klassen (privat, öffentlich) befinden sich auf Compiler-Ebene, kompilierter Code arbeitet nur mit physischen Speicherzellen

Dann ist hier eine Frage an einen Experten. Es gibt eine Klasse, die aus drei dynamischen Arrays besteht (die Größe zur Kompilierzeit ist unbekannt).

Berechnen und vergleichen Sie nun die Anzahl der Operationen für den Zugriff auf ein beliebiges statisches Array und ein dynamisches Array innerhalb der Klasse.

 
IgorM:

Ich bin hier nicht kompetent, und in Ihrem Mund scheint diese Information nicht glaubwürdig zu sein
Aber hängt die Zuverlässigkeit von Informationen davon ab, wer sie präsentiert? Ich denke, jeder vernünftige Mensch sollte verstehen, dass Information etwas Objektives ist, nicht etwas Subjektives. :)
 
Andrei01:

Was hat die Logik des Programms mit der Darstellung der Daten zu tun? Diese Dinge hängen überhaupt nicht zusammen.

Die Programmlogik besteht aus arithmetischen Operationen auf beliebigen Eingabedaten, während die Datendarstellung lediglich Daten in dem einen oder anderen Format sind.

Und per Definition ist es unmöglich, den Programmcode mit OOP zu reduzieren, da es externe Zeiger auf Objekte gibt, um auf interne Daten (Funktionen und Variablen) zuzugreifen, statt auf den direkten Zugriff. Da die Berechnung von Zeigern und Speicherverweisen jedoch sehr langsam ist, sinkt die Leistung entsprechend.

Die Entwicklung von OOP-Anwendungen ist nicht dasselbe wie die Entwicklung von Klassenbibliotheken. Streng genommen sollte es einem Bibliotheksentwickler _überhaupt_ egal sein, wofür seine Bibliothek von denjenigen verwendet wird, die die Anwendungsprogramme selbst schreiben. Ein Beispiel: Einem Hammerhersteller ist es völlig egal, wie Sie sein Produkt verwenden - zum Einschlagen von Nägeln oder zum Knacken von Nüssen. Seine Aufgabe ist es, ein Werkzeug zu schaffen. Auch in der OOP sind Klassen Werkzeuge zur Lösung eines bestimmten Aufgabenbereichs, der in der Regel sehr breit gefächert und nicht immer klar definiert ist (wer weiß, vielleicht verwenden Sie einen Hammer, um Kakerlaken zu töten?)

Noch einmal: Für die einfachsten Aufgaben brauchen Sie kein OOP. Aber andererseits glauben Sie doch nicht, dass jeder, der einen Nagel einschlagen will, sich selbst einen Hammer bauen muss, oder?

Natürlich kann man argumentieren, dass wir eine Bibliothek von Funktionen haben, warum brauchen wir mehr Klassen? In diesem Fall verzichten Sie jedoch auf die Annehmlichkeiten von Vererbungsmechanismen, Typerweiterungen, Überladung usw. Grob gesagt, kann man einen selbstgebauten Motor an einen Hammer schrauben und ihn so zum Laufen bringen, aber man muss den Mechanismus des Hammers nicht verstehen; alles, was man wissen muss, ist, dass er zum Einschlagen von Nägeln verwendet werden kann.

Glauben Sie mir also, OOP macht den Programmierern, die Anwendungen schreiben, das Leben wirklich leichter. Eine andere Sache ist, dass die Fähigkeiten der MQL5-Bibliotheken noch sehr begrenzt sind, aber das ist eine Frage der Zeit, und die Entwickler der Bibliotheken werden sich darum kümmern (obwohl es natürlich dieselben Leute sein können - aber nicht sein müssen). Bei einem gut entwickelten System von Klassenbibliotheken reicht es aus, wenn ein Benutzer-Programmierer eine oder zwei Zeilen wie "1. Programm, hier sind Daten" "2. Programm, zählen" in ein Programm schreibt, fast ohne die Frage zu stellen, wie es im Einzelnen funktioniert. Dies kann bei der strukturorientierten Programmierung nicht erreicht werden.

Ich habe den Eindruck, dass Ihre Voreingenommenheit gegen OOP darauf zurückzuführen ist, dass Sie entweder noch nicht mit ausreichend komplexen Aufgaben konfrontiert waren oder dass Sie es aus Faulheit oder anderen Gründen einfach nicht tun wollen. Das würde ich umsonst sagen. Aber der Meister ist der Meister.

 
Andrei01:

Hier ist die Frage eines Experten. Es gibt eine Klasse, die aus drei dynamischen Arrays besteht (die Größe zur Kompilierzeit ist unbekannt).

Berechnen und vergleichen Sie nun die Anzahl der Operationen für den Zugriff auf ein beliebiges statisches Array und ein dynamisches Array innerhalb der Klasse.


Was haben Klassen damit zu tun? Sie arbeiten mit dynamischen oder statischen Arrays, und es spielt keine Rolle, wo Sie dynamische Arrays verwenden - in einer Klasse oder nur in einer Variablen.

Die Tatsache, dass die Arbeit mit dynamischen Arrays etwas länger dauert, ist "schwer zu verstehen" - es gibt eine Kontrolle für Array-Überläufe und der dynamische Speicherzuweisungsmanager wird oft aufgerufen

 

alsu:

1. Aber in diesem Fall berauben Sie sich selbst des Komforts, den die Mechanismen der Vererbung, der Typerweiterungen, der Überladung usw. bieten. Grob gesagt, können Sie einen handgefertigten Motor an einen Hammer schrauben und ihn auf Ihre Weise zum Laufen bringen, aber Sie müssen die Mechanik des Hammers nicht verstehen; alles, was Sie wissen müssen, ist, dass Sie mit ihm Nägel einschlagen können.

2. Mit einem gut entwickelten System von Klassenbibliotheken reicht es für einen Benutzer-Programmierer aus, eine oder zwei Zeilen wie "1. Programm, hier sind die Daten" "2. Programm, zählen" in ein Programm zu schreiben, fast ohne zu fragen, wie es im Einzelnen funktioniert. Bei der strukturorientierten Programmierung kann dies nicht erreicht werden.

1. In RPP müssen Sie sich auch mit den Klassen befassen - was genau sie tun. Als ob es sich um eine Art Funktion handeln würde. Bei Klassen ist es jedoch schwieriger, die gesamte Kette nachzuvollziehen, so dass im Allgemeinen mehr Zeit auf die Untersuchung ihrer Struktur auf der gleichen Funktionsebene verwendet wird.

2. In der strukturorientierten Programmierung kann man auch solche Aktionen problemlos organisieren, ohne auf Details eingehen zu müssen, die schon jemand vorher gemacht hat.

 
IgorM:


Was haben Klassen damit zu tun? Es geht um die Arbeit mit dynamischen oder statischen Arrays, und es spielt keine Rolle, wo Sie dynamische Arrays verwenden - in einer Klasse oder nur in einer Variablen

Okay, ich werde eine einfachere Frage stellen. Vergleichen Sie die Anzahl der Operationen beim Zugriff auf eine Variable eines eindimensionalen und eines zweidimensionalen Arrays.

Und jetzt wollen Sie behaupten, dass es fast keinen Unterschied gibt?

 
Andrei01:

Okay, dann werde ich eine einfachere Frage stellen. Vergleichen Sie die Anzahl der Operationen beim Zugriff auf eine Variable in einem eindimensionalen und einem zweidimensionalen Feld.

Wollen Sie behaupten, dass es fast keinen Unterschied gibt?


Ist dies auch eine OOP-Frage?

Wenn nein, dann: wenn das Array statisch ist - dann gibt es keinen Unterschied in der Leistung beim Zugriff auf eindimensionale und zweidimensionale Arrays, weil mehrdimensionale Array Daten im Speicher durch Zeichenfolgen gespeichert wird, wie wenn Sie Array x[20] und Array y[2][10] haben, dann y Daten im Speicher aufgezeichnet werden: zuerst y[0] und dann y[1], die physisch wie x[20] lokalisiert werden

wenn es eine gewisse Leistungsverzögerung gibt, ist diese unbedeutend und tritt nur aufgrund der Array-Überlaufkontrolle auf

Wenn das Array dynamisch ist, hängt es vom jeweiligen Compiler-Hersteller ab - wie viel des Speichermanager-Codes optimiert ist (in Delphi ist der größte Teil des System-Moduls in ASM geschrieben), weil die Speicherzuweisung für ein mehrdimensionales dynamisches Array etwas komplizierter ist, aber dann liegt das Problem normalerweise nicht bei den dynamischen Arrays, sondern beim Programmierer - wie berechtigt und oft er die Speicherzuweisung für ein dynamisches Array aufruft

SZS: danke für das Gespräch - aber ich kann für Ihr mangelndes Verständnis elementarer Dinge nicht so viel Zeit aufwenden - fangen Sie selbst an zu lesen

 
IgorM:


Ist dies auch eine OOP-Frage?

wenn nicht, dann: wenn Array statisch ist - dann gibt es keinen Unterschied in der Leistung beim Zugriff auf eindimensionale und zweidimensionale Array, weil mehrdimensionale Array-Daten im Speicher in Zeichenfolgen gespeichert werden, wie wenn Sie Array x[20] und Array y[2][10] haben, dann werden y-Daten im Speicher aufgezeichnet werden: zuerst y[0] und dann y[1], die physisch wie x[20] lokalisiert werden

Sie irren sich, denn Sie haben keine Ahnung von den einfachsten Dingen.

Die Daten eines beliebigen Arrays werden linear im Speicher abgelegt. Um von der ersten bis zur letzten Zeile auf ein Element x[15] zuzugreifen, müssen Sie die Adresse des Array-Anfangs plus den Offset 15 berechnen, der dann die Adresse der Variablen ist. Bei einem zweidimensionalen Array, z. B. x[2][5], berechnen wir zunächst den Offset für die zweite Zeile und addieren dann den Offset für das fünfte Element, d. h. doppelt so viele Operationen.