Innere Werte, Teil 3: Emergenz oder: Das Ganze ist mehr als die Summe seiner Teile

Emergenz ist die Eigenschaft eines Entwurfs, essenzielle Bausteine zu definieren, aus denen sich alle höherwertigen Komponenten, vom Glue Code mal abgesehen, weitgehend zusammensetzen lassen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 4 Min.
Von
  • Dr. Michael Stal
Inhaltsverzeichnis

Emergenz ist die Eigenschaft eines Entwurfs, essenzielle Bausteine zu definieren, aus denen sich alle höherwertigen Komponenten, vom Glue Code mal abgesehen, weitgehend zusammensetzen lassen.

Eine Möglichkeit des Entwurfs besteht darin, alle Funktionalitäten "top-down" zu strukturieren. Dadurch entstehen Komponentenhierarchien, bei denen Komponenten höherer Abstraktion immer von Komponenten der nächstkleineren Abstraktion abhängen, natürlich nur bis zu einer gewissen Maximaltiefe. Der Vorteil: Es entsteht eine maßgeschneiderte Lösung. Der Nachteil: Leider wird dadurch oft das DRY-Prinzip (Don't Repeat Yourself) außer Acht gelassen.

Mehr Infos

Eine andere Möglichkeit ist der Bottom-up-Entwurf, der zunächst die Basiskomponenten adressiert, bevor sich höhere Komponentenhierarchien daraus zusammensetzen. Das führt mitunter zu Friss-oder-Stirb-Entwürfen, bei denen höhere Komponenten mangels Auswahl auch solche Komponenten integrieren, die gar nicht so recht passen wollen. Dazu braucht es dann eine gehörige Menge Kitt. Oder die Entwickler fügen im Zuge der Entwicklung abstrakterer Komponenten immer weitere Basiskomponenten hinzu; und vorbei ist es mit der Ordnung!

Eine Lösung dafür ist Emergenz. Durch gleichzeitige Top-down- und Bottom-up-Überlegungen entstehen einfache Basisbausteine, die zum einen den Entwurf des gewünschten Systems erlauben, sich aber zum anderen auch zu völlig neuen Konstellationen verknüpfen lassen. Die Bausteine der Lösung werden dabei generischer, als sie es bei "top-down" wären, decken dafür aber die Domäne besser ab als bei "bottum-up".

Als Standardbeispiele emergenten Entwurfs gelten zum Beispiel Internetprotokolle und Lego. Beide bieten einfache Grundelemente, die sich zu einem weiten Spektrum komplexerer Strukturen zusammensetzen lassen.

Emergenz kann sowohl im Entwurf als auch im Verhalten auftreten, wobei emergentes Verhalten oft auf emergentem Entwurf basiert. Emergentes Verhalten wird oft auch mit dem Präfix "Self" umschrieben wie bei "Self-Adapation" oder "Self-Organization". Das System reagiert also dynamisch auf sich ändernde Situationen.

Ein Beispiel hierfür ist das Leader/Followers-Muster: In einem Thread Pool kommen über eine Eingangswarteschlange immer wieder Aufgaben von ähnlicher Bearbeitungszeit an, was etwa bei einem Log-Server der Fall ist. Statt jetzt alle Threads wie die Geier auf die Beute stürzen zu lassen, wird ein Thread zum Leader befördert. Nur der Leader darf auf den nächsten Auftrag warten und darauf zugreifen. Es gibt also keine Konkurrenz um die globale Queue. Die arbeitslosen Threads, genannt Followers, müssen Schlange stehen. Entnimmt der Leader einen neuen Auftrag, promotet er einen Follower zum neuen Leader, bevor er selbst zum Worker wird und den Auftrag abarbeitet. Ist er mit der Arbeit fertig, muss er sich in der Followers-Schlange hinten anstellen, bis er dereinst wieder zum Leader wird. Das System organisiert sich also dank Emergenz selbst.

Emergent nennt man daher eine Architektur, die statt einer Vielzahl von spezifischen Basiskomponenten einen kleinen Satz von Komponenten verwendet, mit denen sich der Lösungsraum durch Komposition abdecken lässt. Das Ganze ist also mehr als die Summe seiner Teile.

Für den Bau von Produktinien, Ökosystem, Bibliotheken und Frameworks ist Emergenz von höchster Bedeutung. Schließlich sollen sich Anwendungen einfach und effizient aus den dargebotenen Ingredienzen zusammensetzen lassen. Pattern-Sprachen basieren letztlich ebenfalls auf Emergenz.

Emergenz ist nur ein Indikator für innere Qualität und kein Beweis. So könnte man zum Beispiel Atome als emergente Bausteine für jedes physikalische System betrachten. Trotzdem hielte sich der Nutzen dieser Abstraktion in Grenzen, wenn man zum Beispiel menschliche Bewegungsabläufe modellieren will. ()