dedlfix: Borg Muster

Beitrag lesen

echo $begrüßung;

kann mir jemand einen Tipp geben, wie man das Borg-Entwurfsmuster (python) in ein Klassendiagramm abbilden muss?

Das "Borg-Entwurfsmuster" ist eine Art Singleton: Singleton? We don't need no stinkin' singleton: the Borg design pattern. Alle Variablen eines Namensraums werden unter Python in einem Dictionary (entspricht einem assoziativen Array) abgelegt. Auch Instanzen einer Klasse haben so ein Dictionary für ihre Attribute. Das Borg-Singleton lässt nun alle Instanzen der Klasse das gleiche Dictionary verwenden, so dass sie sich so verhalten, als gäbe es nur eine.
Im Prinzip braucht man das aber nicht, da Module per se Singletons sind. Legt man also eine Variable in einem Modul ab, hat man eine eindeutige Instanz [*]. Wenn man nun noch nach dem Instantiieren der einen Instanz die Klassendeklaration löscht, kann man keine weiteren neuen Instanzen dieser Klasse erzeugen.

Ob man das Borg-Singleton im UML-Klassendiagramm (ich nehme an, ein solches meinst du) abbilden kann, ... Darüber hab ich mir bisher noch keine Gedanken gemacht. Ich glaube auch nicht, dass man das darstellen kann. Die Klassen haben Eigenschaften, die im Klassendiagramm aufgelistet sind. Dazu könnte man auch das Attribute-Dictionary zählen, obwohl es eine "Innerei" einer Klasse ist und eine Python-Spezialität. Es gibt ja noch mehr solcher Spezial-Attribute, aber die listet man im Allgemeinen auch nicht im Klassendiagramm auf. Alle Attribute-Dictionaries der Instanzen verweisen auf das gleiche Dictionary. Du müsstest also dem Diagramm beibringen, dass sich mehrere Instanzen ihre Eigenschaften teilen, oder dass die Eigenschaften lediglich aus __dict__ bestehen, das jeweils auf das gleiche Dictionary referenziert.

Vielleicht kann ja nun jemand mit UML-Kenntnissen (aber vielleicht ohne Python-Wissen) eine Darstellungsidee.

[*] vorausgesetzt man importiert das Modul mit  import  und nicht mit  from x import y

echo "$verabschiedung $name";