Freigeben über


Extreme Information Hiding (Part 2)

Wie versprochen geht das spannende Thema Quelltext-Lokalisierung weiter. Wir waren dabei stehen geblieben Ameisenbefehle ins Spanische zu übersetzen. Um das zu bewerkstelligen könnte man davon ausgehen, dass dazu komplizierte Refaktorisierungsverfahren zum Einsatz kommen. Man nimmt also den Quelltext der deutschen Version und beginnt damit, die betroffenen Methoden- und Eigenschaftsnamen mit Gewalt in eine andere Sprache zu übersetzen. Funktioniert zwar, bringt aber einen entscheidenden Nachteil mit sich: die resultierende Assembly ist nun alles andere als kompatibel zur vorherigen Version. Hinzu kommt, dass die neue Assembly nun eigenständ gepflegt werden muss – parallel zur alten Version.

Wie sieht das jetzt aus? Um eine eigene Ameise zu programmieren muss man lediglich von einer Basis-Klasse namens Basisameise erben. Sie enthält eine Reihe von virtuellen Methoden die sich direkt mit den Situationen im Leben der Ameise vergleichen lassen. Ein Beispiel dafür ist „Sieht(Zucker)“. Um dieses Ereignis nun auch in der eigenen Ameise zu nutzen, überschreibt man nun diese Methode und kann seine eigene Reaktion auf dieses Event implementieren. Eine zweite Reihe von nicht-virtuellen Methoden erlaubt es dann, die Ameise zu kommandieren. Über Eigenschaften der Basisklasse lässt sich auch der Zustand der Ameise auslesen und in Entscheidungen verwenden.

AntMe! Vererbung

Übersetzt man das jetzt nach oben genanntem Verfahren in eine andere Sprache, muss nicht nur die eigene Ameise angepasst werden, sondern auch das komplette Framework, das darunter mit den Ameiseninstanzen spricht. Der Overhead bei zukünftigen Verbesserungen des Programms wächst damit auch immens an. Bei einer möglichen Übersetzung in x sprachen entstehen also auch x Versionen des Quellcodes, der bei Änderungen auf alle übertragen werden müsste. Teufelswerk!

Im Idealfall braucht es eine Möglichkeit die Funktionalität von einer übersetzten Ameisenschnittstelle zu separieren. Und genau DA kommt Extreme Information Hiding ins Spiel. Man stelle sich dieses Verfahren wie eine Art lokalisierten Wrapper um die eigentliche Funktionalität vor, um verschiedene Übersetzungen auf eine zentrale Funktionalität zu setzen. Damit die Übersetzungen aber alle im selben Assembly existieren können und zueinander kompatibel bleiben, müssen alle Klassen weiterhin von einer zentralen Basisklasse erben. Geht nicht? Geht ja wohl! Wie, verrate ich in Teil 3.