Eine Frage an die OOP-Experten. - Seite 52

 

Ich schaute durch mein neues Prisma, eine Mischung aus OOP und Kernel, auf die in den Programmen beschriebenen Objektsysteme und mir platzte fast das Gehirn. Zunächst einmal habe ich mir meine GUI-Systeme neu angesehen. Durch all diese Objekt-Parameter, Objekt-Zustände, Objekt-Ereignisse und Handler. Da mir die grafische Benutzeroberfläche und die Technologie vertraut sind, erschien mir alles ziemlich klar, aber das System ist sehr komplex. Eine Vielzahl von Parametern, Zuordnungen und Bearbeitern. Ich bin zu dem Schluss gekommen, dass solche Systeme nicht von selbst entstehen können. Und die natürliche Auslese hat hier keine Macht.

Hier ist der Grund dafür:

Jeder Parameter kann eine Anzahl von n abgeleiteten Parametern haben. Nehmen wir an, eine Änderung von X kann unendlich viele abgeleitete Parameter aus den Werten von X zu einem bestimmten Zeitpunkt erzeugen.

Jeder abgeleitete Parameter muss einen Handler und einen Link zu anderen Parametern haben. Kein Parameter existiert für sich allein. Der Link ist obligatorisch.

Die Kopplung kann unterschiedlich sein, und folglich kann eine Vielzahl von Bearbeitern - Filter, Umwerter, Wandler - auftreten.

Es gibt unendlich viele Ereignisse, die für die Systeme als bedeutsam angesehen werden können. Jede hat ihre eigenen Eigenschaften, Links und Handler. Es gibt zahllose Varianten.

Ohne ein Konzept kann also kein System entstehen. (Höchstwahrscheinlich).

Es ist nur unklar, wie das Leben auf der Erde entstanden ist...

 

Hier ein weiteres Beispiel:

Betrachten Sie ein System zum Verschieben eines Fensters mit Steuerelementen in einem Diagramm.

  • Wir übernehmen zwei Parameter - x und y - aus dem "Cursor"-Objekt. Erstellen Sie daraus zwei abgeleitete Parameterobjekte, die die Differenz zwischen den aktuellen und den früheren Werten von x und y speichern. (Parameterobjekte sind nicht nur Variablen, sondern Objekte mit eigenen Eigenschaften).
  • Wir erstellen ein Handler-Objekt für Parameter-Objekte, das (1) die x- und y-Werte verarbeitet, indem es die Differenz zwischen den aktuellen und den vergangenen Werten beim Handle-Ereignis des Fensters abruft, das in die Handler-Eigenschaften geschrieben wird, und (2) die Differenz beim gleichen Ereignis in die abgeleiteten Parameter schreibt.
  • Erstellen Sie ein Link-Objekt zwischen den abgeleiteten Parameter-Objekten und den x,y-Parameter-Objekten der einzelnen Fenster-Objekte, das zur Übergabe von Werten an diese Objekte verwendet wird.
  • Nach dem Objektbinder erstellen wir ein weiteres Handler-Objekt, das die Werte der Objektparameter x und y jedes Fensterobjekts übernehmen und mit einem Wert versehen soll, der auf den Binder geht.

Mit diesem System können wir also die Koordinaten eines Fensters und seiner Objekte ändern, wenn der Cursor den Griff des Fensters ergreift. Um das alles zu bewegen, müssen wir es mit den ObjectSetInteger-Handler-Funktionen verknüpfen, die die Position des MT-Objekts im Diagramm ändern.

Es handelt sich um die Implementierung einer einzigen GUI-Funktion durch die Verknüpfung spezieller Systemblöcke - Objektparameter, Objekthandler usw...

Ein solches System im Kernel zu bauen, ist kein bisschen einfacher (oder vielleicht sogar schwieriger) als normalen Code zu schreiben, ohne alles in ein Objekt zu verwandeln. Aber ich werde weiter graben...


ZS: Ich habe vergessen, hinzuzufügen, dass wir, um das Fenster zu verschieben, auch ein Ereignisobjekt "basteln" müssen, das den Fenstergriff und die Cursorbewegung sperrt. Und dieses Ereignis-Objekt, verbinden Sie es mit dem Objekt-Handler von Cursor x,y-Werte (das schreibt die Differenz in abgeleitete Parameter), und es würde nur auf Signal dieses Ereignisses zu arbeiten.

Und für jedes Ereignisobjekt müssen Sie einen Objekthandler erstellen und ihn an das Objekt binden.

Jeder Object-Handler hat seine eigenen Eigenschaften, und seine Werte werden von ihm verwendet, wenn er mit Parametern oder Ereignissen arbeitet. Deshalb muss es eine Vorlage geben, sonst verzettelt man sich bei der Erstellung.)

 
Реter Konow:

Hier ein weiteres Beispiel:

Betrachten Sie ein System zum Verschieben eines Fensters mit Steuerelementen in einem Diagramm.

  • Wir übernehmen zwei Parameter - x und y - aus dem "Cursor"-Objekt. Erstellen Sie daraus zwei abgeleitete Parameterobjekte, die die Differenz zwischen den aktuellen und den früheren Werten von x und y speichern. (Parameterobjekte sind nicht nur Variablen, sondern Objekte mit eigenen Eigenschaften).
  • Wir erstellen ein Handler-Objekt für Parameter-Objekte, das (1) die x- und y-Werte verarbeitet, indem es die Differenz zwischen den aktuellen und den vergangenen Werten beim Handle-Ereignis des Fensters abruft, das in die Handler-Eigenschaften geschrieben wird, und (2) die Differenz beim gleichen Ereignis in die abgeleiteten Parameter schreibt.
  • Erstellen Sie ein Link-Objekt zwischen den abgeleiteten Parameter-Objekten und den x,y-Parameter-Objekten der einzelnen Fenster-Objekte, das zur Übergabe von Werten an diese Objekte verwendet wird.
  • Nach dem Objektbinder erstellen wir ein weiteres Handler-Objekt, das die Werte der Objektparameter x und y jedes Fensterobjekts übernehmen und mit einem Wert versehen soll, der auf den Binder geht.

Mit diesem System können wir also die Koordinaten eines Fensters und seiner Objekte ändern, wenn der Cursor den Griff des Fensters ergreift. Um das alles zu bewegen, müssen wir es mit den ObjectSetInteger-Handler-Funktionen verknüpfen, die die Position des MT-Objekts im Diagramm ändern.

Es handelt sich um die Implementierung einer einzigen GUI-Funktion durch die Verknüpfung spezieller Systemblöcke - Objektparameter, Objekthandler usw...

Ein solches System im Kernel zu bauen, ist kein bisschen einfacher (oder vielleicht sogar schwieriger) als normalen Code zu schreiben, ohne alles in ein Objekt zu verwandeln. Aber ich werde weiter graben...


ZS: Ich habe vergessen, hinzuzufügen, dass wir, um das Fenster zu verschieben, auch ein Event-Objekt "basteln" müssen, das den Fenstergriff und die Bewegung des Cursors sperrt. Und dieses Ereignis-Objekt, verbinden Sie es mit dem Objekt-Handler von Cursor x,y-Werte (das schreibt die Differenz in abgeleitete Parameter), und es würde nur auf Signal dieses Ereignisses zu arbeiten.

Und für jedes Ereignisobjekt müssen Sie einen Objekthandler erstellen und ihn an das Objekt binden.

Jeder Object-Handler hat seine eigenen Eigenschaften, und seine Werte werden von ihm verwendet, wenn er mit Parametern oder Ereignissen arbeitet. Deshalb muss es eine Vorlage geben, sonst verzettelt man sich bei der Erstellung).

Schwierig. Unvertretbar schwierig.
Das Hauptobjekt eines Formulars, in dem andere Objekte dieses Formulars liegen, ist das einzige, das Koordinaten erhält. Durch die Änderung einer beliebigen Koordinate wird die Position des Hauptobjekts des Formulars geändert. Den anderen Objekten in diesem Formular werden einfach relative Koordinaten übergeben, die ihre Position innerhalb des Formulars bestimmen. Alle Objekte haben ihre eigene Reihenfolge im Formular und werden in dieser Reihenfolge neu angeordnet. Jedes Objekt hat eine Liste mit den darin enthaltenen Informationen. Durch den Verweis auf die Liste der Inhalte kann jedem Inhalt ein Offset zugewiesen werden. Wenn Sie also dem Formularobjekt einen Befehl zum Verschieben geben, wird die Kette automatisch weitergegeben, um den gesamten Inhalt des Formulars zu verschieben. Das heißt, nur das Formular wird versetzt, alles andere wird automatisch versetzt. Wir müssen nicht jedem Formularobjekt selbst einen Offset-Befehl geben.
Wir tun dies für ein einziges Objekt. Alle anderen werden es wiederholen. Unabhängig davon, wie komplex ein Formularobjekt ist, wird ein einziger Offset-Befehl lawinenartig an alle Inhalte des Formulars weitergegeben.
Alles wird nur einmal gemacht. Und dann wird alles in einer Kette gemacht.
 
Artyom Trishkin:
Kompliziert. Ungerechtfertigt kompliziert.
Das Hauptobjekt eines Formulars, innerhalb dessen die anderen Objekte des Formulars liegen, ist das einzige, das Koordinaten erhält. Durch die Änderung einer beliebigen Koordinate wird die Position des Hauptobjekts des Formulars geändert. Den anderen Objekten im Formular werden einfach relative Koordinaten übergeben, die ihre Position innerhalb des Formulars bestimmen. Alle Objekte haben ihre eigene Reihenfolge im Formular und werden in dieser Reihenfolge neu angeordnet. Jedes Objekt hat eine Liste mit den darin enthaltenen Informationen. Durch den Verweis auf die Liste der Inhalte kann jeder Inhalt mit einem Offset-Befehl versehen werden. Wenn Sie also dem Formularobjekt einen Befehl zum Verschieben geben, wird die Kette automatisch weitergegeben, um den gesamten Inhalt des Formulars zu verschieben. Das heißt, nur das Formular wird versetzt, alles andere wird automatisch versetzt. Wir müssen nicht jedem Formularobjekt selbst einen Offset-Befehl geben.
Wir tun dies für ein einziges Objekt. Alle anderen werden es wiederholen. Unabhängig davon, wie komplex ein Formularobjekt ist, wird ein einziger Offset-Befehl lawinenartig an den gesamten Inhalt des Formulars weitergegeben.
Alles wird nur einmal gemacht. Und dann wird alles in einer Kette gemacht.

Das ist richtig.

Die Bindung zwischen abgeleiteten Parametern, die die x,y-Differenz des Cursors enthalten, und Formularobjekten (die sich in der Kette befinden) hat einen Handler in der Mitte, der eine serielle Verbindung zu den x,y-Parametern jedes Formularobjekts herstellen kann. Das heißt, die Bindung von Parametern über den Serial Connection Handler ermöglicht es, die Bindung jedes Formularobjekts durch abgeleitete Parameter zu ersetzen, die Werte der Differenz x,y übergeben. Ich habe auch darüber nachgedacht.

In meiner GUI ist das Verschieben von Fenstern in einer Funktion implementiert, die folgendes tut:

(1) Ereignisprüfer für Fensterhandle-Klickereignis

(2) Ereignis "Cursor bewegen

(3) Berechnung der Differenz zwischen den aktuellen Cursor-Koordinaten und den früheren Koordinaten des Cursors

(4) Durchlaufen der Fensterobjekte und Ändern ihrer Koordinaten durch Anpassen der Differenz der Cursorposition.

(5) Aufruf des ObjectSetInteger, um das МТ-Objekt des Fensterformulars (Canvas) entlang des Diagramms um den angegebenen Abstand zu verschieben.


Die Umsetzung innerhalb der Funktion ist also korrekt. Die Implementierung durch Object Handlers, Object Parameters und Object Bindings wirkt vor diesem Hintergrund unbeholfen. Aber gehen wir der Sache auf den Grund...

 
Реter Konow:

Das ist richtig.

Die Zuordnung zwischen den abgeleiteten Parametern, die die x,y-Differenz des Cursors enthalten, und den Formularobjekten (die sich in der Kette befinden) hat einen Handler in der Mitte, der eine serielle Verbindung zu den x,y-Parametern der einzelnen Formularobjekte herstellen kann. Das heißt, die Bindung von Parametern über den Serial Connection Handler ermöglicht es, die Bindung jedes Formularobjekts durch abgeleitete Parameter zu ersetzen, die Werte der Differenz x,y übergeben. Ich habe auch darüber nachgedacht.

In meiner GUI ist das Verschieben von Fenstern in einer Funktion implementiert, die folgendes tut:

(1) Ereignisprüfer für Fensterhandle-Klickereignis

(2) Ereignis "Cursor bewegen

(3) Berechnung der Differenz zwischen den aktuellen Cursorkoordinaten und den früheren Koordinaten des Cursors

(4) Durchlaufen der Fensterobjekte und Ändern ihrer Koordinaten durch Anpassen der Differenz der Cursorposition.

(5) Aufruf des ObjectSetInteger, um das МТ-Objekt des Fensterformulars (Canvas) entlang des Diagramms um den angegebenen Abstand zu verschieben.


Die Umsetzung innerhalb der Funktion ist also korrekt. Die Implementierung durch Objekt-Handler, Objekt-Parameter und Objekt-Bindings sieht vor diesem Hintergrund unbeholfen aus. Aber gehen wir der Sache auf den Grund...

Ja, denn Sie brauchen diese Handler nicht vom Objekt zu trennen. Die Klasse, die die Cursor-Koordinaten zurückgibt, kann statisch gemacht werden - sie wird jeder Klasse im Programm zur Verfügung stehen, und das Abrufen der Koordinaten und die Reaktion darauf sollte in jedem Objekt implementiert werden. Aber nur das Hauptformularobjekt sollte diese Handler aufrufen. Für alle anderen Formularobjekte reicht es dann aus, neue Koordinaten anzugeben und neu zu zeichnen. Innerhalb des Formularobjekts befindet sich eine Liste mit allen Objekten. Das Formularobjekt hat eine Änderung seiner Koordinaten definiert - es setzt neue Werte für seine Koordinaten, geht seine Liste von Objekten durch und ruft Methoden auf, um die Koordinaten jedes Objekts in seiner Liste zu setzen. Gleichzeitig tut jedes nachfolgende Objekt dasselbe, wenn sich seine Koordinaten ändern - es durchsucht seine Liste von Objekten und befiehlt ihnen, ihre Koordinaten zu ändern. Die Objekte in den Listen werden in der Reihenfolge angeordnet, in der sie gezeichnet werden (Z-Reihenfolge). Mit anderen Worten, jedes Objekt hat seine eigene Methode, um die Koordinaten zu ändern, aber sie ist auf die gleiche Weise implementiert - sie durchsucht die Liste aller "freundlichen" Objekte und ruft für jedes von ihnen die gleiche Methode auf. Indem wir diese Methode einmal für das Hauptformularobjekt aufrufen, starten wir automatisch einen Koordinatenwechsel für alle Objekte im Formular. Wenn die Liste der "freundlichen" Objekte des Formularobjekts abgearbeitet ist, ruft es seine Methode zum Neuzeichnen des Diagramms auf, die für alle geänderten Objekte dieselbe ist.

 
Artyom Trishkin:

...

Dies ist die Standard-OOP-Ansicht des Fensterbewegungsmechanismus. Ich zeige Ihnen eine andere. Um dies zu tun, machen Sie Ihren Kopf für eine Sekunde frei und folgen Sie einfach meinen Gedanken.

  1. Stellen Sie sich eine Array-Matrix vor. Die Abmessungen sind nicht definiert. Vielleicht ist sie unendlich, vielleicht auch nicht. Das spielt keine Rolle.
  2. Die Matrix wird mit Nullen initialisiert. Nullen stehen für Leere. Das heißt, die Matrix ist leer.
  3. In der Leere der Matrix ist etwas anderes als Leere erschienen. Es ist eine Null, die durch einen Wert ersetzt wird. Es spielt keine Rolle, was es ist.
  4. Wir sehen diesen Wert in der leeren Matrix und sagen "das ist ein Parameter". Das heißt, nicht der Wert selbst, sondern die Zelle, in der er erscheint. Die Zelle wird mit dem Titel ausgezeichnet und als Parameter bezeichnet - das heißt, die "Kapazität" enthält den Wert.
  5. Der Parameter verlangt von uns sofort seine Definition. Es ist, als würde es sagen: "Ich bin ein Parameter und ich habe eine Persönlichkeit! Wo sind meine Immobilien?". Und wir haben keine andere Wahl, als dem Parameter seine Eigenschaften hinzuzufügen, die ebenfalls Parameter mit eigenen Werten sind. Wir stellen sie daneben und haben eine Kette - einen Parameter und seine Eigenschaften. Wir sagen: "Wir haben einen Objekt-Parameter erstellt!".
  6. Der Parameter "sagt" dann: "Wo sind die anderen Parameter? Warum bin ich der Einzige?" Und dann schaffen wir noch ein paar Parameter in der Leere der Matrix, damit der "Erstgeborene" sich nicht langweilt. Natürlich deklariert jeder der neuen Parameter seine Individualität und verlangt Eigenschaften als seine Träger. So entstehen Ketten von Parametern, zu denen auch die "Erstgeborenen" und ihre Eigenschaften gehören. Wir sagen: "Wir haben Parameter-Objekte geschaffen!".
  7. In der Leere der Matrix haben wir nun mehrere Parameter mit Ketten ihrer Eigenschaften. Aber jeder von ihnen "schreit" über die Sinnlosigkeit seiner Existenz. Jeder von ihnen ist allein. Dann beschließen wir, die Parameter so zu verknüpfen, dass sie nicht "langweilig" sind. Zu diesem Zweck erstellen wir spezielle Parameter, die als Verbindungen zwischen anderen Parametern dienen. Sie bestehen auch aus Ketten von Eigenschaften. Nun sind die erstgeborenen Parameter durch eine Parameterkette miteinander verbunden. Alle sind glücklich! Wir sagen: "Wir haben parameterverknüpfte Objekte erstellt!".
  8. Doch dann stellt sich heraus, dass die Parameter-Primäre über Bindungen miteinander kommunizieren und Werte übertragen wollen, doch Bindungen ermöglichen zwar die Übertragung von Werten (Parametersprache), nicht aber die Übersetzung. Und da sie allein sind, verstehen die Parameter nur ihre eigene Sprache, was bedeutet, dass es eine "Sprachbarriere" zwischen den Parametern gibt und sie von uns verlangen, diese zu überwinden.
  9. Um das Problem der "Parameterkommunikation" zu lösen, hatten wir nicht genug Zuordnungen, wir brauchten eine Übersetzung. Das bedeutet, dass die Werte, die zwischen den Parametern übergeben werden, unter Berücksichtigung der Eigenschaften der einzelnen Parameter umgewandelt werden müssen. Einige von ihnen verstehen Werte im Bereich von 1-10, andere verstehen (-5) - (-105). Einige arbeiten mit Bruchzahlen, andere mit Potenzen. Daraus schließen wir, dass wir "Übersetzer" brauchen, d.h. Wertbehandler, die die Eigenschaften der Parameter berücksichtigen. Wir erstellen spezielle Handler-Objekte und fügen sie in Parameter-Mappings ein. Value Handler Objects "übersetzen" die übergebenen Werte zwischen Parametern unter Verwendung der Eigenschaften der übergebenen und empfangenen Parameter sowie ihrer eigenen Eigenschaften. Wir sagen - "Wir haben Handler-Objekte geschaffen! Jetzt können die Parameter frei kommunizieren!".
  10. Die erstgeborenen Parameter kommunizierten und kommunizierten, und sie wurden dessen überdrüssig. Ich habe es satt. Dann beschlossen sie, nur noch zu besonderen Anlässen miteinander zu kommunizieren - nämlich dann, wenn einer von ihnen einen unglaublichen Wert erhält. Aber wie sich herausstellte, mussten wir den Wert wie ein Kind unablässig im Auge behalten. Bei den erstgenannten Parametern wurden wir gebeten, uns ein "Überwachungssystem" auszudenken, das ungewöhnliche Veränderungen signalisiert, damit sie sich keine Sorgen machen müssen. Wir haben also eine Form der Werte erstellt, auf die wir reagieren sollten, und ihr einen speziellen Handler hinzugefügt, was zu einem "Ereignisobjekt" führte. Wir haben es mit allen Parametern verbunden, und sie beginnen, über Signale von Ereignisobjekten miteinander zu kommunizieren. Wir haben also "Objekt-Ereignisse" geschaffen.

Das ist das Ende der Geschichte...

Wir sahen uns die Matrix von außen an und staunten! "Wir haben ein Objektsystem geschaffen!")

ZS. Beachten Sie, dass alles in einer Array-Matrix erstellt werden kann. Und die Array-Matrix ist der Kern. Und Entitäten darin - die echten Objekte. Und Parameter, und Ereignisse, und Bindungen, und Eigenschaften, und Handler. Es gibt unzählige Systeme, die im Kernel aus diesen Basisdingen konstruiert werden können.

 

Eine Scheinfortsetzung...

11. Irgendwie haben die erstgeborenen Parameter beschlossen, einer Mode zu folgen. Sie fanden heraus, dass es irgendwo in der Matrix eine Eigenschaftsmesse gibt, und einen bestimmten Platz in der Neuheit. Es soll drei Eigenschaften haben. "Dimensionen" werden genannt. Diese Eigenschaften haben einen vermeintlich unendlichen Wertebereich, und als Bonus verraten sie eine weitere "Parameterzeit". Die Parameter kamen zur Messe und nahmen die Eigenschaften x,y,x_size,y_size an. Sie sagen, sie wollen eine Muschel im Weltraum bauen. Und sie haben auch Farbe genommen. Sie kehrten zurück und begannen damit, die neuen Häuser einzurichten. Sie modellierten und modellierten einige räumliche Umhüllungen, bis sie es leid waren. Sie wuchsen enorm, dann brachen sie zusammen... Dann färbten sie sich ein und entspannten sich. Sie begannen zu überlegen, was sie als nächstes tun sollten. Und dann haben sie sich die Zeit-Eigenschafts-Box angesehen. Mal sehen, was es ist... Sie öffneten es, hängten es an sich, aber sie berechneten die Werte nicht, und in einem Augenblick löste es sich ins Leere auf. Schließlich ist die Zeit ein Parameter, mit dem man sehr vorsichtig umgehen muss...

 
Реter Konow:

Eine Scheinfortsetzung...

11. Irgendwie haben die erstgeborenen Parameter beschlossen, einer Mode zu folgen. Sie fanden heraus, dass es irgendwo in der Matrix eine Eigenschaftsmesse gibt, und einen bestimmten Platz in der Neuheit. Es soll drei Eigenschaften haben. "Dimensionen" werden genannt. Diese Eigenschaften haben einen vermeintlich unendlichen Wertebereich, und als Bonus verraten sie eine weitere "Parameterzeit". Die Parameter kamen zur Messe und nahmen die Eigenschaften x,y,x_size,y_size an. Sie sagen, sie wollen eine Muschel im Weltraum bauen. Und sie nahmen Farbe an. Sie kehrten zurück und begannen damit, die neuen Häuser einzurichten. Sie modellierten und modellierten einige räumliche Umhüllungen, bis sie es leid waren. Sie wuchsen enorm, dann brachen sie zusammen... Dann färbten sie sich ein und entspannten sich. Sie begannen zu überlegen, was sie als nächstes tun sollten. Und dann haben sie sich die Zeit-Eigenschafts-Box angesehen. Mal sehen, was es ist... Sie öffneten es, hängten es an sich, aber sie berechneten die Werte nicht, und in einem Augenblick löste es sich ins Leere auf. Schließlich ist die Zeit ein Parameter, mit dem man sehr vorsichtig umgehen muss...

Und die ersten zehn waren nicht seriös?

Ich für meinen Teil kann nicht lesen, ohne zu lachen.

 
Artyom Trishkin:

...

Diese ganze "Objektivität" ist sehr verwirrend, finden Sie nicht auch... Damit muss man vorsichtig sein. Nikolai Semko hatte Recht, was die Nähe von Genie und Schizophrenie angeht. Es ist möglich, "durchzudrehen". Es gibt einige Dinge, die man besser nicht versteht. Manche Türen müssen für unser Bewusstsein immer verschlossen bleiben. Wie es in einem Film heißt: "Der gefährlichste Parasit ist eine Idee. Wenn es einmal im Gehirn ist, ist es unmöglich, es wieder herauszubekommen." Die Matrix, von der ich gesprochen habe, ist gefährlich für den Geist. Es ist leicht, sich darin zu verlieren und für immer verloren zu gehen. Seien wir vorsichtig.)))

 
Die Darstellung von Systemen in der Matrix gibt eine neue Perspektive auf ihre Strukturen, aber ich habe keinen Hinweis darauf gesehen, dass die Schaffung von Systemen erleichtert wird. Von einer "Selbstentwicklung" ganz zu schweigen. Es ist verdammt interessant, Systeme auf diese Weise zu betrachten, aber nicht mehr als das. Ich sehe keine Selbstentfaltung oder auch nur eine Andeutung davon. Deshalb sollten wir das Göttliche Gott überlassen. Eine Selbstentwicklung von Systemen kann weder mit dem Standard-OOP-Ansatz noch mit meinem erreicht werden.