# FAQ zu Kap. 23 Entwurfsmuster für Aktoren und Teams * Was ist lose Kopplung? Warum ist das wichtig? * Im aktorbasieren Programmieren, z.B. auf dem Internet, können Router, Leitungen etc. zusammenbrechen. Enge Kopplung durch direkten Prozedur/Methodenaufruf beinhaltet Warten auf das Resultat. Wenn man eng und nicht lose koppelt, geraden Client und Server in Wartezustände, die alles blockieren. Das sollte man vermeiden. * Kanäle bilden Ablagen, die entkoppeln. Liegt ein Datum im Kanal, ist es vom Client und vom Server entkoppelt. * Was ist ein Teamobjekt? * Das Wort "Team" bzw. "team class" wurde in der Java-Erweiterung www.objectteams.org erfunden (Stephan Herrmann, TU Berlin). Dr.Herrmann ist oft bei uns zu Besuch gewesen und hat seine Sprache vorgestellt. In ObjectTeams kann man Teamklassen direkt mit "team class {...}" hinschreiben. Jede Teamklasse nimmt dann eine Kollaboration zwischen mehreren Spielern auf. * Wann macht es Sinn, die Kollaboration eines Teams durch ein Objekt, den Konnektor, zu kapseln? * Wenn eine Kollaboration gekapselt ist, kann sie gegen eine Variante Implementierung ausgetauscht werden. Das ist insbesondere bei Kommunikationen übers Netz wichtig. Die Kapselung nennt man einen Konrektor. * Warum ist ein Kanal ein spezieller Konnektor? * Konnektoren fassen alle möglichen Interaktionen, auch multiple und kreuzweise ablaufende; Kanäle sind i.d.R. gerichtet und auf Massentransport ausgerichtet. * Was ist besonders genial am UNIX/Linux Ein-/Ausgabesystem? * Jeder Prozess (Aktor) hat 3 Standard-Ports: stdin, stdout, stderr. Diese können mit Kanälen an andere Prozesse gekoppelt werden. Dadurch steigt die Wiederverwendung. * Wie kann man Entwurfsmuster im Code erkennen, z.B. den Kanal? * Leider nur an den Namen der Methoden und der Interaktion ihrer Implementierungen. Das ist ein großes Problem in Anwendungen von klassischen OO-Sprachen, weil sie im Programm den Entwurf mit UML vergessen. * Wer möchte, kann sich den Großen Beleg von Max Härtwig anschauen, wie man das für ein komplexes Muster (das Role-Objekt Pattern) in Kotlin erreichen kann. https://cloudstore.zih.tu-dresden.de/index.php/s/GmrgzZYztrg6iEt Kotlin ist eine Sprache auf der JVM und wir untersuchen momentan, ob wir die Methode der "Annotationen" auf Java übertragen können. * Muss mann überhaupt mit Iteratoren programmieren, wenn Java doch jetzt eine "for all"-Schleife kennt? * Ja, denn die forall-Schleife deckt zwar viele, aber nicht alle Anwendungen von Iteratoren ab. Und man sollte verstehen, dass die forall-Schleife einen Iterator intern benutzt. * Was ist der Unterschied zwischen einer fixen und einer unbestimmt großen Datenstruktur? * Fixe Datenstrukturen sind bekannt groß und können daher im Speicher ganz (komplett) abgelegt werden. * Unbestimmt große Datenstrukturen können oft im Speicher abgelegt werden, aber manchmal sind sie so groß, dass man sie nicht ganz ablegen will, sondern Element für Element bearbeiten will. Dazu werden oft Pipe-und-Filter-Architekturen (mit Kanälen) eingesetzt. Sie werden z.B. gebraucht in Webshops, Bildverarbeitung, Sensordatenverarbeitung.