Ein Crowdsourced-Projekt auf Canvas durchführen - Seite 38

 
Реter Konow:
Der Kern ist die Matrix. Sie enthält alle Eigenschaften der Objekte.

Sie können Ihre Methode wählen. Aber in all den Jahren, in denen ich mich mit der Entwicklung von Benutzeroberflächen beschäftigt habe, habe ich festgestellt, dass keine andere Methode das gleiche Maß an Funktionalität bieten kann. Maximale Einfachheit und Effizienz ist Perfektion.


Peter, haben Sie irgendwelche Erfahrungen und Beispiele für das Schreiben von GUI nicht nur in der aktuellen Version?

Sie lehnen andere Paradigmen vollständig ab, behaupten aber, dass Ihr Modell das beste für die GUI-Implementierung ist. Das ist eine sehr kontroverse Behauptung.

 

Erstellen Sie einen Indikator, der die Neigungswinkel von gezeichneten Linien, ihre Schnittpunkte und die Proportionen von Ellipsen korrigiert. Während die Ankerpunkte in der Zukunft gesetzt werden

nach zwei Wochenenden und einem blutigen Indie-Tag...

PS/ Ich habe das Gefühl, dass die Leute, die die Schnittstellen zeichnen, überhaupt nicht am Handel beteiligt sind.

 
Maxim Kuznetsov:

Erstellen Sie einen Indikator, der die Neigungswinkel der gezeichneten Linien, ihre Schnittpunkte und die Proportionen der Ellipsen korrigiert. Mit den in der Zukunft gesetzten Ankerpunkten

nach zwei Wochenenden und einem blutigen Indie-Tag...

PS/ man hat das Gefühl, dass die Leute, die die Schnittstellen zeichnen, überhaupt nichts mit dem Handel zu tun haben

Max, ich wage zu behaupten, dass dies in der Hälfte der Fälle der Fall ist. Der Händler muss kein Programmierer sein und der Programmierer muss kein Händler sein.

 

Ich wage zu behaupten, dass Peter mit nichts anderem als mql programmiert. Alle modernen Versionen von Sprachen erfordern Kenntnisse in der Arbeit mit Klassen: Java, Kotlin, Sharp, Python, C++ und so weiter. Sogar 1C hat einen Anschein von Klassen in Form von festen Objekttypen. Aber das ist nur ein kleiner Exkurs.

Aus meiner Sicht sollte das System der Schnittstellenbildung folgendermaßen aussehen:

CForm Форма = new CForm;
Интерфейс.Добавить(Форма);
CButton КнопкаBUY= new CButton;
КнопкаBUY.Заголовок = "BUY";
КнопкаBUY.ЦветФона = clrBlue;
КнопкаBUY.Позиция(7,20);
Форма.Добавить(КнопкаBUY);

Das heißt, die Erstellung von Schnittstellen sollte deklarativ sein. Ich kann mir nicht einmal vorstellen, wie ein anderer Programmierer eine Beschreibung der Eigenschaften eines Steuerelements hinzufügen wird, das sich auf indexes..... bezieht.

Ich bin mir sicher, dass dies selbst für einen durchschnittlichen Programmierer rätselhaft ist, ganz zu schweigen von einem Anfänger.

 
Алексей Барбашин:

Ich wage zu behaupten, dass Peter mit nichts anderem als mql programmiert. Alle modernen Versionen von Sprachen erfordern Kenntnisse in der Arbeit mit Klassen: Java, Kotlin, Sharp, Python, C++ und so weiter. Sogar 1C hat einen Anschein von Klassen in Form von festen Objekttypen. Aber das ist nur ein kleiner Exkurs.

Aus meiner Sicht sollte das System der Schnittstellenbildung folgendermaßen aussehen:

Das heißt, die Erstellung von Schnittstellen sollte deklarativ sein. Ich kann mir nicht einmal vorstellen, wie ein anderer Programmierer eine Beschreibung der Eigenschaften auf der Tafel hinzufügen wird , die sich auf die Indizes bezieht.....

Ich bin sicher, dass dies selbst für einen durchschnittlichen Programmierer rätselhaft ist, ganz zu schweigen von einem Anfänger.

Wenn viele Elemente und/oder Eigenschaften von einem Index abhängen, ist das kein Problem, und umgekehrt ist es schwer, ein Durcheinander zu schreiben, wenn man sich auf jedes einzelne Element bezieht.

 
Roman:

Eine Matrix besteht aus verschachtelten Schleifen, und verschachtelte Schleifen sind Zeit. Ich bin nicht sarkastisch, ich argumentiere nur logisch.

Richtig. Alles im Universum braucht Zeit).
 
Алексей Барбашин:

1. Peter, Sie erhalten folgendes: Der Kern besteht aus einer globalen Matrix von Elementeigenschaften, einer globalen Matrix von Elementwerten, einer globalen Matrix von Abhängigkeiten, einer globalen Matrix von Bildern...

2. Wenn Sie weitere Eigenschaften hinzufügen müssen, wird die Dimensionalität der Matrizen erhöht.

3. Der Zugriff auf die Eigenschaften erfolgt ausschließlich über Indizes, da die Zellen keine Namen haben.

Zumindest auf Feldnamen kann über die Struktur zugegriffen werden.

Peter, du... riesig...

Ich, zum Beispiel, sehe das so (vereinfacht):

4. Eine "Klasse" ist de facto eine bestimmte Zeichenfolge in Ihrem globalen Array, nur mit einem "menschlicheren" Gesicht. Klassen sind so konzipiert, dass sie ihre eigenen Datenobjekte mit einer Reihe von verständlichen Eigenschaften erstellen, auf die nicht über einen Index, sondern über einen Namen zugegriffen werden kann. Eine Klasse ist lediglich ein universeller Typkonstruktor.

Lassen Sie uns also ein einfaches Steuerelement erstellen, das die häufigsten Eigenschaften enthält, die fast jedes Steuerelement hat.

Sie können darauf aufbauend spezialisierte Objekte erstellen:

Das heißt, jeder nachfolgende Kontrolltyp ergänzt einfach den Basistyp um die erforderlichen Eigenschaften.

Und da, wie ich bereits geschrieben habe, die grundlegenden Eigenschaften im Basissteuerelement gespeichert sind, erfolgt die Traversierung des Cursors im Steuerelement durch die Überprüfung eines Datentyps: CControl. Nachdem das Programm das gewünschte Objekt gefunden hat, hat es sofort Zugriff auf die Eigenschaften dieses Objekts, da sich der Programmpunkt bereits im Objekt selbst befindet, genau wie in Ihrer Schleife das Programm auf der gewünschten Array-Zeile steht.

1. Der Kern ist eine globale Matrix. Zwei Dimensionen. Der Kern wird durch eine spezielle Funktion erstellt, die eine Datei liest, in der die Auszeichnungssprache angibt, welche Fenster und Elemente erstellt werden müssen.

2. Nein, die Dimensionalität der Matrix ist konstant. Es gibt nur 2 Dimensionen.

3. Die Eigenschaften der Objekte im Kernel sind geordnet. Jede hat ihren eigenen Index. Die Indizes werden über Defines benannt. Mit zunehmender Anzahl der Objekteigenschaften wird die Matrix immer breiter. Es gibt Möglichkeiten, sein Wachstum einzudämmen und die Gegenstände darin zu verdichten.

4. Die Klasse als Objektbeschreibung ist gut, aber der Mechanismus (also der Code) arbeitet effizienter mit dem Kernel. Wie auch immer, es spielt keine Rolle. Es entspricht den Bedürfnissen aller.

Die verstreute Beschreibung und Speicherung von Objekteigenschaften (die wichtigsten in der Basisklasse, andere in den Nachfolgeklassen) erschwert den Zugriff und die Handhabung. Fügen Sie Sichtbarkeitsbeschränkungen, Zugriffsmodifikatoren und eine fremde Sprache hinzu, und Sie erhalten eine echte Reduzierung nicht nur des Mechanismus, sondern auch des Entwicklungsprozesses. Allerdings ist dies imho.
 
Реter Konow:
1. Der Kern ist eine globale Matrix. Zwei Dimensionen. Der Kern wird durch eine spezielle Funktion erstellt, die eine Datei liest, in der die Auszeichnungssprache angibt, welche Fenster und Elemente erstellt werden müssen.

2. Nein, die Dimensionalität der Matrix ist konstant. Es gibt nur 2 Dimensionen.

3. Die Eigenschaften der Objekte im Kernel sind geordnet. Jede hat ihren eigenen Index. Die Indizes werden durch Defines benannt. Mit zunehmender Anzahl der Objekteigenschaften wird die Matrix immer breiter. Es gibt Möglichkeiten, sein Wachstum einzudämmen und die Gegenstände darin zu verdichten.

4. Die Klasse als Objektbeschreibung ist gut, aber der Mechanismus (also der Code) arbeitet effizienter mit dem Kernel. Wie auch immer, es spielt keine Rolle. Es entspricht den Bedürfnissen aller.

Die verstreute Beschreibung und Speicherung von Objekteigenschaften (die wichtigsten in der Basisklasse, andere in den Nachfolgeklassen) erschwert den Zugriff und die Handhabung. Fügen Sie Sichtbarkeitsbeschränkungen, Zugriffsmodifikatoren und eine fremde Sprache hinzu, und Sie erhalten eine echte Reduzierung nicht nur des Mechanismus, sondern auch des Entwicklungsprozesses. Allerdings ist dies imho.

Es ist überhaupt nicht kompliziert, das ist das Schöne und die Stärke von Klassen. Jede weitere baut ihre Funktionalität auf der Grundlage der Funktionalität des ursprünglichen Objekts auf. Infolgedessen sind alle grundlegenden Funktionen (Fokus, Klicks, außerhalb des Elements, Drag & Drop, Zeichnen) auf der Basis von Basisobjekten implementiert. Weitere Entwicklungen und Änderungen, die Entwicklung neuer Steuerelemente - all dies wird die Grundfunktionalität nicht beeinträchtigen, da sie auf der Ebene Ihrer Sprache erstellt wird: der "Kern" der Bibliothek. In diesem Fall haben die Objekte genau die Datentypen, die für eine bestimmte Eigenschaft erforderlich sind.

"Der Kern wird mit einer speziellen Funktion aufgebaut, die eine Datei liest, in der in der Auszeichnungssprache geschrieben ist, welche Fenster und Elemente erstellt werden müssen." - das ist einfach nur blechern. Sie haben also eine Matrix, die alle Eigenschaften speichert, und Sie haben auch eine Markup-Datei, die genau angibt, wie die Matrix mit den Eigenschaften gelesen werden soll..."Indizes werden über Defines benannt" - jeder Index ist fest mit einem Define verdrahtet. Das zufällige Einfügen eines zusätzlichen Feldes hat eine Verschiebung der Eigenschaften zur Folge. "Wenn die Anzahl der Objekteigenschaften zunimmt, wird die Matrix breiter" - das meinte ich mit Dimensionalität (mein Fehler, ich habe den Begriff falsch verwendet). Wenn Sie Ihr Datenobjekt als Klasse erstellen, vermeiden Sie all diese Komplikationen. Und das ist eine echte Komplexität, die nicht wirklich nötig ist. Aber wir wissen, wie wir uns selbst Komplikationen schaffen können, um sie später erfolgreich zu überwinden.

Außerdem müssen Sie keine hierarchischen Klassen erstellen und sie auch nicht verwenden. Es ist jedoch sinnvoll, Strukturen zu verwenden, um unnötige Daten-Threads loszuwerden. IMHO

Peter, Sie haben eine großartige Arbeit geleistet und eine GUI-Bibliothek in Ihrem Stil erstellt. Aber wenn Sie vorhaben, das Ding zu veröffentlichen, lohnt es sich trotzdem, alles auf eine andere Technologie umzustellen. Ich bin bereit, Ihnen dabei zu helfen und Schritt für Schritt die ganze Kraft Ihrer Bibliothek in eine neue Richtung zu lenken.

 
Алексей Барбашин:

Komplizierter geht es nicht mehr, und das ist das Schöne und die Stärke von Klassen. Jede weitere baut ihre Funktionalität auf der Grundlage der Funktionalität des ursprünglichen Objekts auf. Infolgedessen werden alle grundlegenden Funktionen (Fokus, Klicks, außerhalb des Elements, Ziehen und Ablegen, Zeichnen) auf der Grundlage der Basisobjekte implementiert. Weitere Entwicklungen und Änderungen, die Entwicklung neuer Steuerelemente - all dies wird die Grundfunktionalität nicht beeinträchtigen, da sie auf der Ebene Ihrer Sprache erstellt wird: der "Kern" der Bibliothek. In diesem Fall haben die Objekte genau die Datentypen, die für eine bestimmte Eigenschaft erforderlich sind.

"Der Kern wird mit einer speziellen Funktion aufgebaut, die eine Datei liest, in der in der Auszeichnungssprache geschrieben ist, welche Fenster und Elemente erstellt werden müssen." - das ist einfach nur blechern. Sie haben also eine Matrix, die alle Eigenschaften speichert, und Sie haben auch eine Markup-Datei, die genau angibt, wie die Matrix mit den Eigenschaften gelesen werden soll... Wenn Sie Ihr Datenobjekt als Klasse erstellen, vermeiden Sie all diese Komplexität. Und das sind echte Komplexitäten, die Sie nicht wirklich brauchen. Wir wissen, wie wir uns selbst Komplikationen schaffen können, um sie später erfolgreich zu überwinden.

Außerdem müssen Sie keine hierarchischen Klassen erstellen und sie auch nicht verwenden. Es ist jedoch sinnvoll, Strukturen zu verwenden, um unnötige Daten-Threads loszuwerden. IMHO

Peter, Sie haben eine großartige Arbeit geleistet und eine GUI-Bibliothek in Ihrem Stil erstellt. Aber wenn Sie vorhaben, das Ding zu veröffentlichen, lohnt es sich trotzdem, alles auf eine andere Technologie umzustellen. Ich bin bereit, Ihnen dabei zu helfen und Schritt für Schritt die ganze Kraft Ihrer Bibliothek in eine neue Richtung zu lenken.

Wissen Sie, ich habe hier schon so oft über die Umsetzung meiner eigenen Lösungen und die anderer Leute gestritten, dass ich es satt habe. )) Es ist einfach sehr anstrengend. Mein Denken ist eher an die Matrix angepasst, das Denken der anderen an die Klassen... Das ist es nicht wert, einen Speer zu zerbrechen.

Ich neige im Allgemeinen dazu, die Regeln zu ändern oder zu vereinfachen, vom allgemeinen Kurs abzuweichen, meine eigenen Regeln gegenüber denen eines anderen durchzusetzen. Du kannst mich nicht ändern.

Vielen Dank für das Angebot. Bei der Entwicklung der Benutzeroberfläche können Sie Ihren eigenen Weg gehen. Ich habe meine Arbeit bereits getan, und ich sehe keinen Grund, sie in einem anderen Stil zu wiederholen. Es gibt eine Auszeichnungssprache, ein paar Schritte zum Vis-Editor und etwa eine Woche bis zur Veröffentlichung. Es gibt noch eine Taskleiste zu überarbeiten und kleinere Bugs zu beheben. Dann werden Sie mir Ihr Feedback zu meiner Arbeit geben. Ich hoffe, dass sie für alle nützlich sein wird.

ZS: Nach der Veröffentlichung werde ich in der Lage sein, mehr Details über die Lösungen zu geben, und es kann Ihnen helfen, eine Analogie in den Klassen zu schaffen.
 
Реter Konow:
Wissen Sie, ich habe hier schon so oft über die Umsetzung meiner eigenen und anderer Lösungen gestritten, dass ich es leid bin. )) Es ist einfach sehr anstrengend. Mein Denken ist eher an die Matrix angepasst, das Denken der anderen an die Klassen... Es lohnt sich nicht, dafür einen Speer zu brechen.

Ich neige im Allgemeinen dazu, die Regeln zu ändern oder zu vereinfachen, vom allgemeinen Kurs abzuweichen, meine eigenen Regeln gegenüber denen eines anderen durchzusetzen. Du kannst mich nicht ändern.

Vielen Dank für das Angebot. Bei der Entwicklung der Benutzeroberfläche können Sie Ihren eigenen Weg gehen. Ich habe meine Arbeit bereits getan, und ich sehe keinen Grund, sie in einem anderen Stil zu wiederholen. Es gibt eine Auszeichnungssprache, ein paar Schritte zum Vis-Editor und etwa eine Woche bis zur Veröffentlichung. Es gibt noch eine Taskleiste zu überarbeiten und kleinere Bugs zu beheben. Dann werden Sie mir Ihr Feedback zu meiner Arbeit geben. Ich hoffe, dass sie für alle nützlich sein wird.

In Ihrem Fall handelt es sich nicht um eine Vereinfachung, sondern um eine echte Komplikation. IMHO

Grund der Beschwerde: