Diskussion zum Artikel "Entwurfsmuster in der Softwareentwicklung und MQL5 (Teil I): Erzeugungsmuster"

 

Neuer Artikel Entwurfsmuster in der Softwareentwicklung und MQL5 (Teil I): Erzeugungsmuster :

Es gibt Methoden, mit denen sich viele Probleme lösen lassen, die sich ständig wiederholen. Wenn Sie einmal verstanden haben, wie man diese Methoden anwendet, kann es sehr hilfreich sein, Ihre Software effektiv zu erstellen und das Konzept von DRY (Do not Repeat Yourself) anzuwenden. In diesem Zusammenhang eignet sich das Thema Entwurfsmuster sehr gut, da es sich um Muster handelt, die Lösungen für gut beschriebene und wiederkehrende Probleme bieten.

Klassen des Erzeugungsmusters verwenden das Vererbungskonzept, um die Klasse als Instanz zu variieren, während das Objekt des Erzeugungsmusters die Aufgabe der Instanziierung an ein anderes Objekt abgibt. Wenn sich die Software mehr auf die Objektkomposition als auf die Klassenvererbung konzentriert, gewinnen die Erzeugungsmuster an Bedeutung.

Wir können sagen, dass die Erzeugungsmuster zwei wiederkehrende Themen haben:

  • Sie verwenden das Konzept der Kapselung, um das Wissen über die konkreten Klassen, die vom System verwendet werden können.
  • Sie machen die Methode zur Erstellung von Instanzen von Klassen und deren Zusammenstellung unsichtbar.

Erzeugungsmuster helfen dabei, flexibel zu entscheiden, was, wer und wie etwas geschaffen werden kann, und wann es geschaffen wird.

Sie tragen auch zur Abstraktion des Instanziierungsprozesses bei, da sie es uns ermöglichen, Objekte zu erstellen, ohne dieselbe Implementierung zu wiederholen, und das trägt dazu bei, unseren Code flexibler und einfacher zu gestalten.


Autor: Mohamed Abdelmaaboud

 

Ich dachte, die Übersetzer hätten einen kleinen Fehler in dem Unterabschnitt über die abstrakte Fabrik gemacht, aber nein - der Autor selbst.

Какую проблему проектирования он решает?

Also, wir können diese Vorlage verwenden, wenn:

  • ES NICHTS GIBT
  • Wir brauchen ein unabhängiges System.
  • Wir brauchen ein konfiguriertes System mit einer von vielen Produktfamilien.
  • Wir müssen eine Familie verwandter Produkte wie vorgesehen zusammen verwenden und diese Einschränkung erzwingen.
  • nur die Schnittstellen der bereitgestellten Klasse offengelegt werden müssen, nicht deren Implementierung.

Beispiele für die Verwendung einer solchen Abstract Factory:

Im englischen Quellcode ist es:

Welches Designproblem wird damit gelöst?

Wir können dieses Muster also im folgenden Fall verwenden:

  • Wir brauchen ein unabhängiges System.
  • Wir brauchen ein konfiguriertes System mit einer von vielen Produktfamilien.
  • Wir müssen eine Familie von verwandten Produktobjekten gemäß ihrem Design zusammen verwenden und diese Einschränkung erzwingen.
  • Wir müssen nur die Schnittstellen der bereitgestellten Klasse offenlegen, nicht ihre Implementierung.


 
Danke, korrigiert.
 

Ich werde ein bisschen mürrischer sein...

Um in der Terminologie genau zu sein, werde ich mir die englische Quelle des Artikels ansehen. So schreibt der Autor zu jeder Vorlage "How can we use it in MQL5?" . Dabei ist zu beachten, dass MQL5 eine angewandte Fachsprache ist. Was ist das also? Lernen wir aus dem Materialwirklich, wie wir Vorlagen in MQL5 verwenden können? Nein! Wir sehen nur, dass wir die Implementierung einer Vorlage in MQL5 sehen. Imho sollten wir, da es sich um eine Vorlage handelt, diese zuerst in Pseudocode beschreiben und erst dann in MQL5. Idealerweise wäre es interessant, praktische Beispiele für die Verwendung von Entwurfsmustern in MQL5 zu sehen. Ich weiß nicht, vielleicht greife ich zu weit vor und der Autor plant, jede Vorlage in einem eigenen Werk zu behandeln. Aber für den Moment haben wir, was wir haben....



Design Patterns in software development and MQL5 (Part I): Creational Patterns
Design Patterns in software development and MQL5 (Part I): Creational Patterns
  • www.mql5.com
There are methods that can be used to solve many problems that can be repeated. Once understand how to use these methods it can be very helpful to create your software effectively and apply the concept of DRY ((Do not Repeat Yourself). In this context, the topic of Design Patterns will serve very well because they are patterns that provide solutions to well-described and repeated problems.
 
Sir, ich danke Ihnen für Ihre Zeit und Ihre Bereitschaft, Ihr Wissen zu teilen.
Als jemand, der MQL kennt und in gewissem Maße auch OOP kennt und anwendet, aber keine Ahnung von Entwurfsmustern hat, muss ich sagen, dass ich nicht verstanden habe, was Sie erklärt haben.
Ich habe den Artikel nicht vollständig gelesen, denn was nützt es, einen Absatz nach dem anderen zu lesen, wenn ich nichts davon verstanden habe.
Die Art und Weise, wie ich aus diesem Artikel weiter lernen werde, wäre, mich nur an Ihre Code-Beispiele zu halten und zu versuchen, das Konzept anhand dieser Beispiele zu verstehen.
Ich habe dies nur geschrieben, um ein Feedback zu geben.
Nochmals vielen Dank.
 
void FactoryClient::Switch(AbstractFactory *af)
  {
   string sFactory;
   StringConcatenate(sFactory,sFactory,factory);
   int iFactory=(int)StringToInteger(sFactory);
   if(iFactory>0)
     {
      Print("Factory client switches the old factory ",factory," to the new one ",af);
     }
   else
     {
      Print("Factory client accepts the new factory ",af);
     }
   Delete();
   factory=af;
   Print("Factory client saved the new factory");
   Print("Factory client requests its new factory to create the Product A");
   apa=factory.CreateProductA();
   Print("Factory client requests its new factory to create the Product B");
   apb=factory.CreateProductB();
  }

Ich verstehe diese Methode nicht.

Warum können wir nicht vergleichen, ob diese 2 Zeiger gleich sind und einfach verwenden:

if (factory != ap) factory = ap;

Außerdem sagt die Dokumentation

int  StringConcatenate(
   string&  string_var,   // Zeichenfolge in Form
   void argument1         // erster Parameter eines beliebigen einfachen Typs
   void argument2         // zweiter Parameter eines beliebigen einfachen Typs
   ...                    // nächster Parameter eines beliebigen einfachen Typs
   );

und factory ist nicht von einem einfachen Typ.