Zirkelbezug

aus Wikipedia, der freien Enzyklopädie
Zirkelbezug in einem Graphen (farbig markiert)

Ein Zirkelbezug liegt vor, wenn in einer Reihe von Verweisen, Referenzierungen oder Bezugnahmen ein weiter hinten liegendes Objekt wieder auf ein vorheriges verweist, so dass eine geschlossene Schleife entsteht. Generell führen solche zirkulären Abhängigkeiten oft zu Dilemmata, die in der Informatik auch als Deadlocks (zu englisch: Verklemmungen) bezeichnet werden.

Allgemeines

Zirkelbezüge sind nicht immer problematisch, in vielen Fällen führen sie jedoch zu Widersprüchen oder zu unlösbaren Problemen (siehe beispielsweise Antinomie oder Halteproblem).

Es ist zum Beispiel unproblematisch, zwischen zwei Nachbarn X und Y einen gegenseitigen Bezug im Sinne von „X ist rechter Nachbar von Y“ und „Y ist linker Nachbar von X“ herzustellen, sofern entweder X oder Y auch unabhängig von dieser Referenzierung gegeben werden kann.

Problematisch sind Fälle, in denen der Verweis als letztes Ziel ausschließlich einen Verweis hat, der auf ihn selbst zurückzeigt. Problematisch ist auch die wechselseitige Zuweisung von Werten zu den Objekten. Die Selbstreferenz kann in mancher Hinsicht als Sonderfall der zirkulären Referenz angesehen werden.

Formale Logik

Ein Fall der wechselseitigen Festlegung des Wertes eines Objekts durch das jeweils andere ist etwa im Karten-Paradoxon gegeben, oder in der Variante der Russellsche Antinomie (Nested Sets). Zirkelbezüge können hier durch strenge Hierarchien vermieden werden, die Rückverweise verbieten oder sogar unterbinden. Ein Zirkelbezug ist aber nicht dasselbe wie ein Zirkelschluss, da hier die Zuweisung von Wahrheitswerten zu Objekten nicht über die Bezugnahme, sondern durch Schlussregeln erfolgt.

Graphentheorie

In der Graphentheorie liegt eine zirkuläre Abhängigkeit genau dann vor wenn in einem gerichteten Graphen ein Zyklus vorliegt.

Informatik

Technisch relevant sind Zirkelbezüge auch in der Informatik, so auch beim Diamond-Problem, oder wenn sich in einer relationalen Datenbank die Datenbankobjekte gegenseitig aufeinander beziehen, so dass der Zustand der abhängigen Daten von der Reihenfolge ihrer Erfassung abhängig wird, mithin sind die Daten anschließend nicht eindeutig definiert.

Programmierschnittstellen

Beziehen sich zwei Programmierschnittstellen gegenseitig aufeinander, kann der Compiler nicht ohne Zusatzaufwand zuverlässig prüfen, ob logische Widersprüche vorhanden sind. So führen Zirkelbezüge häufig zu einem Mehraufwand bei der Verwaltung der Daten und Programmteile oder sogar zu Programmierfehlern.[1] In der Programmiersprache C gibt es Steuerdateien mit der Dateinamenerweiterung ".h". Nun kann eine Steuerdatei weitere Steuerdateien beinhalten. Wenn die Datei „A.h“ die Datei „B.h“ einbindet und die Datei „B.h“ die Datei „C.h“ einbindet, ist zunächst alles in Ordnung. Falls nun jedoch die Datei „C.h“ die Datei „A.h“ einbindet, gibt es eine zirkuläre Abhängigkeit, die vom Compiler möglicherweise nicht aufgelöst werden kann oder sogar noch nicht einmal bemerkt und berücksichtigt wird.

Softwarekomponenten

In der Softwareentwicklung liegt eine zirkuläre Abhängigkeit vor, wenn eine Komponente A von einer Komponente B abhängt (A → B) und Komponente B wiederum von Komponente A (B → A). Dabei muss die Abhängigkeit nicht direkt sein, sondern kann auch indirekt (über die reflexiv-transitive Hülle) gebildet werden, das heißt, wenn A von B abhängig ist (A → B) und B von C abhängig ist (B → C) und C wiederum von A abhängig ist (C → A) so gibt es einen Zirkelbezug zwischen A und C (A ↔ C).

Medien

Zirkuläre Beziehung zwischen Wikipedia und der Presse, nach einer Grafik des Satiremagazins Titanic[2]

Wenn eine Meldung nicht per Recherche aus der ursprünglichen Quelle überprüft wird, sondern übernommen wird, so kann sie unter Verweis auf vorangegangene Instanzen der Berichterstattung immer wieder zur Meldung werden, selbst wenn es sich um eine Ente handelt. Dieses Muster kann einem Hoax zugrunde liegen. So könnte eine Zeitung Informationen aus einem Nachschlagewerk wie einem Online-Lexikon zitieren, das zuvor diese Information quasi selbstreferentiell aus der Zeitung aufgenommen hat.

Einzelnachweise

  1. Scott Owens: Compile-time Information in Software Components, insbesondere Kapitel 2.3.1 Diamond Imports und Kapitel 4.1.3 Compilation Management, dissertation, University of Utah (May 2007), abgerufen am 18. Mai 2018
  2. TITANIC Infografik, Startcartoon, im Dezember 2008, titanic-magazin.de