Fragen zu OOP in MQL5 - Seite 2

 
Yuriy Asaulenko:
Nun, das ist ein bisschen zu viel. Der Mann hat sich von Anfang an für OOP entschieden. Zumindest, wenn man nur eine Tasse Kaffee kocht. Warum gibt es Musterunterbrechungen? IMHO ist es Unsinn, dass unfähige Lehrer ihre Probleme auf die Schüler abwälzen.
Lesen Sie es sorgfältig. Das ist es, was ich meine, eine Person setzt und löst ihre Probleme zunächst in einem Stil, der sich der OOP annähert. Aber dann wird ihm die prozedurale Programmierung beigebracht. Danach sind die Muster gebrochen, da es sich um prozedurale Programmierung (nicht OOP) handelt, die sich stark vom menschlichen Denken unterscheidet.
 
Vasiliy Sokolov:

OOP sollte ohne Code und all die abstruse Nomenklatur wie Klassen, Objekte, Zeiger etc. etc. erklärt werden.

Wie funktioniert die klassische Programmierausbildung? Zunächst versucht ein Schüler mühsam, vom menschlichen Denken zu den Grundlagen der Programmierung überzugehen (Schleifen, Funktionen, Variablen und andere Dinge, die man als "Wissensgepäck" benötigt). Wenn dann das Durcheinander von Funktionen, Variablen und Wenns eine mehr oder weniger geordnete Struktur bildet, wird dem Schüler gesagt: "Schauen Sie, es gibt so etwas wie OOP. Vergessen Sie, was man Ihnen früher beigebracht hat, und fangen Sie wieder an, wie ein Mensch zu denken". Was folgt, ist ein Bruch der Schablonen, das soeben mühsam errungene "Gepäck des Wissens" wird auf den Müllhaufen geworfen, und der Mensch findet sich irgendwo zwischen Himmel und Erde wieder. Natürlich bleibt diese "PLO" dann mehrere Jahre lang als böser Traum in Erinnerung, mit Schaudern und Schmerzen in den verbleibenden Teilen des Gehirns (die anderen sind von der neuen Erkenntnis verbrannt worden).

Nein, ich sage kategorisch, dass man nicht programmieren lernen sollte. Im Gegenteil, sie ist schädlich und gefährlich. Stattdessen ist es notwendig, das Denken zu lehren. Und damit versagt die klassische Methode des Lernens völlig.

Würden Sie einen Artikel schreiben
 
pako:
Schreiben Sie einen Artikel.
Nicht
 
pako:
Einen Artikel schreiben

Vielleicht. Aber Alexej kann die PLO vielleicht noch besser erklären.

 
Комбинатор:
Tun Sie es nicht.
Schreiben Sie schon?
 
nein )
 
Комбинатор:
nein )
Und schreiben Sie nicht :)
 
Vasiliy Sokolov:
Lesen Sie sorgfältig. Das ist es, was ich meine: Eine Person stellt und löst ihre Aufgaben zunächst in einem Stil, der sich der OOP annähert. Aber dann wird ihm die prozedurale Programmierung beigebracht. Danach kommt es zum Musterbruch, da es sich um prozedurale Programmierung (nicht OOP) handelt, die sich stark vom menschlichen Denken unterscheidet.

Ich sehe nichts Falsches daran, wenn man vorher die prozedurale Programmierung lernt. Um zu lernen, wie man Romane schreibt, ist es eine gute Idee, mit dem Erlernen des normalen Alphabets und der Syntax zu beginnen und einfach zu lernen, wie man liest und schreibt.

Selbst wenn wir nur in C/Pascal usw. programmieren, manipulieren wir bereits Objekte, ohne ihre interne Struktur und Funktionsweise zu kennen. Es bleibt zu erklären, dass es sich um ein Objekt handelt, und dann zu lehren, wie man diese Objekte baut.

 
Alexey Volchanskiy:

....

Frage:

Schlagen Sie ein Thema über OOP in MQL5 für 10 Minuten vor, ich werde es auf youtube stellen, d.h. es wird für jeden nützlich sein

------------------

Schreiben Sie alles, was interessant ist, ich werde es sortieren, ich werde versuchen, Ihre Wünsche in meiner Freizeit zu erfüllen

Viel Glück ))

Beleuchten Sie Ihre Arbeit mit Objekten.
 

Helfen Sie mir, ein Problem zu lösen. Es gibt zwei Tasten und eine Linie. Wenn Sie eine Taste drücken, wird die Zeile in den Bearbeitungsmodus versetzt, und wenn Sie sie loslassen, wird die Zeile gelöscht. Die zweite Schaltfläche fixiert die Zeile, wenn sie angeklickt wird, und schaltet sie wieder in den Bearbeitungsmodus, wenn sie angeklickt wird. Jede Schaltfläche kann die Farbe und einige andere Eigenschaften des Linienobjekts ändern. Das Objekt "Linie" ist global definiert. Ist es möglich, eine Referenz auf das "Line"-Objekt an jede Schaltfläche unmittelbar nach der Erstellung von Schaltflächen zu übergeben, so dass bei der Bearbeitung der Referenzvariablen innerhalb der "Button"-Objekte alle Änderungen im globalen "Line"-Objekt gespeichert werden.

Im Folgenden habe ich ein vereinfachtes Skript skizziert. Anstatt eine Taste zu drücken, ist es eine addition()-Funktion, die den Zähler des "Line"-Objekts erhöht. Ich weiß, dass man das "Line"-Objekt als Funktionsargument per Referenz übergeben kann, aber gerade in der Arbeitsversion gibt es mehrere solcher Funktionen, so dass ich die Referenz gerne einmal ganz am Anfang übergeben würde. Ist es z.B. möglich, dass Btn1.addition() oder Btn2.addition() die gLine.count erhöht?

class CLine
{
    public:
          int   count;
                CLine(void){count=0;};
               ~CLine(void){};
};


class CMyButton
{
    private:   
    public:
                CLine m_Line;
                CMyButton(void){};
               ~CMyButton(void){};
              
                void bind(CLine &aLine) {m_Line = aLine;}
                void addition() {++m_Line.count;}
};




CMyButton  Btn1;
CMyButton  Btn2;

CLine gLine;

void OnStart()
{
   Btn1.bind(gLine);
   Btn2.bind(gLine);
   
   Print("Line.count=", gLine.count);
   Btn1.addition();
   Print("Line.count=", gLine.count, "  Btn1.m_Line.count=", Btn1.m_Line.count);
   Btn2.addition();
   Print("Line.count=", gLine.count, "  Btn2.m_Line.count=", Btn2.m_Line.count);
   Btn1.addition();
   Print("Line.count=", gLine.count, "  Btn1.m_Line.count=", Btn1.m_Line.count);
   Btn2.addition();
   Print("Line.count=", gLine.count, "  Btn2.m_Line.count=", Btn2.m_Line.count);
}

Das ist es, was ich im Moment mache:


Grund der Beschwerde: