Kooperative Objektinteraktionsdiagramme in Eclipse

March 25, 2018 | Author: Anonymous | Category: N/A
Share Embed


Short Description

Download Kooperative Objektinteraktionsdiagramme in Eclipse...

Description

Diplomarbeit

Kooperative Objektinteraktionsdiagramme in Eclipse von

Petra Kösters Am Turnplatz 25 33098 Paderborn Matrikelnr. 7175558 Angefertigt am Lehrgebiet Kooperative Systeme Prof. Dr. Jörg Haake der FernUniversität Hagen

Betreuer: Dr. Till Schümmer

April 2007

Selbstständigkeitserklärung

Hiermit versichere ich, dass ich diese Arbeit selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt, sowie Zitate kenntlich gemacht habe. Paderborn, im April 2007

__________________

i

Inhaltsverzeichnis Abbildungsverzeichnis............................................................................................ ii 1 Einleitung ............................................................................................................. 1 1.1 Motivation..................................................................................................... 1 1.2 Zielsetzung der Arbeit................................................................................... 2 1.3 Kurzer Überblick über den weiteren Aufbau ................................................ 3 2 Anforderungsanalyse............................................................................................ 4 2.1 Lehre von Objektorientierten Konzepten...................................................... 4 2.1.1 Herausforderungen in der Fachdidaktik................................................. 6 2.1.2 Anforderungen im didaktischen Kontext ............................................. 12 2.2 Entwicklung von objektorientierten Systemen ........................................... 16 2.2.1 Der Rational Unified Process............................................................... 16 2.2.2 Agile Softwareentwicklung.................................................................. 17 2.2.3 Die Unified Modeling Language ......................................................... 19 2.2.4 Anforderungen im Kontext der OO-Entwicklung ............................... 24 2.3 Kooperationsaspekte in Lehre und Entwurfsprozessen .............................. 26 2.3.1 Groupware............................................................................................ 28 2.3.2 Technische Anforderungen .................................................................. 30 3 Stand der Forschung........................................................................................... 34 3.1 Beschreibung existierender Lösungsansätze............................................... 35 3.1.1 Konzeptionelles Szenario-Rollenspiel ................................................. 35 3.1.2 Lehr-/Lernanwendungen ...................................................................... 37 3.1.3 UML-Modellierungs-Tools.................................................................. 41 3.2 Gegenüberstellung von Lösungsansätzen und Anforderungen................... 44 4 Lösungsansatz .................................................................................................... 49 4.1 OO-Lehre: Szenario und Lösungsdarstellung............................................. 50 4.2 OO-Entwicklung: Szenario und Lösungsdarstellung.................................. 57 4.3 Konzeptionelle Lösung der technischen Anforderungen............................ 64 4.3.1 Technischer Überblick und Architektur............................................... 65 4.3.2 Verwendete Patterns und ihr Zusammenspiel...................................... 70 5 Details zur Lösung ............................................................................................. 74 5.1 Signifikante Implementierungsdetails......................................................... 74 5.2 Erfahrungen / Evaluation ............................................................................ 78 6 Zusammenfassung.............................................................................................. 79 6.1 Kurzfassung des Problems und wie es gelöst wurde .................................. 79 6.2 Offene Fragen für weitere Forschungsarbeiten........................................... 79 Quellenverzeichnis................................................................................................ 81

ii

Abbildungsverzeichnis Abbildung 2.1 Die Klasse Mietwagen und zwei ihrer Objekte .............................. 5 Abbildung 2.2 – Rollenspiel im Informatikunterricht, Gaußschule Braunschweig, aus [C’t 10/06, S.210] ................................................................................... 12 Abbildung 2.3 Beispiel für die Klassen-Notation in UML................................... 21 Abbildung 2.4 – Beispielhaftes Klassendiagramm ............................................... 22 Abbildung 2.5 – Objektdiagramm, passend zum Klassendiagramm in Abb. Abbildung 2.4................................................................................................ 22 Abbildung 2.6 – Kommunikationsdiagramm entsprechend des Klassendiagramms in Abb. Abbildung 2.4................................................................................... 23 Abbildung 2.7 – Sequenzdiagramm, äquivalent zum Kommunikationsdiagramm in Abbildung 2.6 ........................................................................................... 24 Abbildung 2.8 - Das 3K-Modell nach Teufel et al. [Teu95]................................. 28 Abbildung 2.9 – Aus [SL07]: Einordnung von Groupware-Systemen bzgl. ihrer Unterstützung der 3Ks................................................................................... 29 Abbildung 3.1 – Hauptklassen der Marine Biology Simulation Case Study (aus [Brady05]) ..................................................................................................... 35 Abbildung 3.2 - Aufzeichnung eines CRC-Karten- Rollenspiel in einem RPD (aus [Bör05])......................................................................................................... 37 Abbildung 3.3 – BlueJ: Hauptfenster und Quelltext-Editor (aus[BlueJ07])......... 38 Abbildung 3.4 – Alice: User-Interface (aus [Haa04])........................................... 39 Abbildung 3.5 ViRPlay : Screenshot der Benutzeroberfläche (aus [Diaz05a]).... 41 Abbildung 3.6 – Borland Together for Eclipse: User-Interface............................ 42 Abbildung 3.7 – ArgoUML: Hauptfenster............................................................ 43 Abbildung 3.8 – Hauptfenster von Rational Rose ................................................ 44 Abbildung 4.1 – COINED Benutzeroberfläche .................................................... 49 Abbildung 4.2 - MBCS-Beispielszenario ............................................................. 51 Abbildung 4.3 – Aktivierung der COINED-Perspektive in Eclipse ..................... 51 Abbildung 4.4 – Login und Projektwechsel.......................................................... 51 Abbildung 4.5 – Die BuddyListe aus Alices Sicht: .............................................. 52 Abbildung 4.6 – Rollenzuordnungen im ClassView............................................. 52 Abbildung 4.7 – Editieren von Objektdetails im ObjectView: Alice ist im Begriff, dem Attribut theEnv des Objekts theMBSDemo einen Wert zuzuweisen . 53 Abbildung 4.8 - Visualisierung des aktiven Objekts und der letzten Nachricht... 53 Abbildung 4.9 – MessageProcessingView unmittelbar vor dem Senden von init(2,2) an loc .................................................................................... 54 Abbildung 4.10 Protokollierter Nachrichtenfluss am Ende des durchgespielten Szenarios ....................................................................................................... 55 Abbildung 4.11 –Autovermietung: Use Cases und CRC-Karten ......................... 58 Abbildung 4.12 – ChatView: Joe, Jack, Jill und John besprechen die Rollenverteilung............................................................................................ 59 Abbildung 4.13 – Autovermietung: Initialisierte Objekte .................................... 60 Abbildung 4.14 – Autovermietung: Initiierung, Bearbeitung und Darstellung der ersten Nachricht ............................................................................................ 60 Abbildung 4.15 Nachrichtenhistorie und Diagramm am Ende des Szenarios ...... 62 Abbildung 4.16 – Codegenerierung: Assistent und Java-Perspektive mit generierten Klassen-Stubs............................................................................. 62 Abbildung 4.17 – Schematische Darstellung von COINEDs Architektur............ 65

iii Abbildung 4.18 – Ablauf bei einer Datenänderung .............................................. 66 Abbildung 5.1 – Exemplarisch für die Umsetzung der DB-Schnittstelle CMessageMapper, CMessage, IMessage...................................................... 75 Abbildung 5.2 – Paketstrukturen von COINEDs Client und Server..................... 76 Abbildung 5.3 – COINEDs Activator-Klasse....................................................... 76 Abbildung 5.4 – Alle Messaging und Listener Klassen........................................ 77 Abbildung 5.5 – Die Modell-Klassen ................................................................... 77

1 Einleitung

1

1 Einleitung 1.1 Motivation Die objektorientierte Programmierung (OOP) hat sich gegenüber der reinen prozeduralen Vorgehensweise als der bessere Ansatz erwiesen – besonders im Zusammenhang mit großen Software-Projekten. Die Grundidee der objektorientierten Programmierung ist es, einen Ausschnitt der realen Welt in einem Programm abzubilden. OOP ist ein Klassifizieren von Problemen, weniger eine Beschreibung der Aktionen (dies ist Hauptgegenstand der prozeduralen Programmierung). Im Resultat liefert OOP vor allem die Möglichkeit, viel Code wieder zu verwenden und saubere Schnittstellen zu programmieren, was die Möglichkeit von Programmierfehlern erheblich einschränkt. Dennoch bedarf es zusätzlicher Toolunterstützung um gerade komplexe Software-Projekte zu unterstützen. Auch für die Vermittlung des OO-Paradigmas an Anfänger sind entsprechende Werkzeuge erforderlich. Diese Arbeit beschäftigt sich einerseits mit der Frage, wie man sowohl lokale als auch verteilte Teams bei der gemeinsamen OO-Modellierung technologisch unterstützen und so den Prozess des Systementwurfs erleichtern und verbessern kann. Andererseits geht es um die Frage, wie eine Anwendung aussehen muss, die die verteilte und lokale Lehre von OO Paradigmen adressiert. In der Modelling-Szene herrscht allgemeiner Konsens darüber, dass OO-Analyse und Design idealerweise in kooperativen Gruppensitzungen mit Teilnehmern unterschiedlicher Expertise (Entwickler, Anwender, Systemanalytiker, etc) stattfinden sollte. Ein praktischer Ansatz, ein solches Team beim kooperativen Entwicklungsprozess (genauer: bei der Entwicklung und Verfeinerung des Domänenmodells) zu unterstützen ist es, mit CRC-Karten und Rollenspielen zu arbeiten. Eine CRC (Class Responsibility Collaborator)-Karte repräsentiert eine spätere Klasse, darauf notiert sind Name, Zuständigkeiten, und die Namen der anderen Klassen, die sie referenzieren können soll. Das Team erstellt und diskutiert zunächst die voraussichtlich benötigten CRC-Karten. Die Karten werden unter den Teammitgliedern aufgeteilt. Dann wird ein kleines BeispielSzenario durchgespielt. Das Szenario beschreibt eine mögliche Anwendung des zu entwickelnden Systems. Jedes Teammitglied übernimmt die Rolle seiner CRCKarten und handelt entsprechend der eingetragen Zuständigkeiten. Das Rollenspiel wird von einem Schriftführer in einem Rollenspiel-Diagramm (RPD) festgehalten. RPDs sind eine spezielle informale Diagramm-Variante, die sich aus Elementen von UML-Objekt- und Kommunikationsdiagrammen zusammensetzt. Das Rollenspiel hilft dem Team dabei, eine genauere Vorstellung des zu entwickelnden Systems zu bekommen. Es kristallisiert sich Schritt für Schritt ein in sich schlüssiges Analyse-Modell der Problem-Domäne heraus. In der Lehre geht es auf der anderen Seite darum, Studierenden die Konzepte der OOP möglichst anschaulich zu vermitteln. Es ist offensichtlich das, dass o.g. Rollenspiel-Szenario auch in diesem Kontext gut eingesetzt werden kann. Dabei nehmen die Studierenden die Rolle von Objekten ein und spielen den Nachrichten- und Programmfluss durch. Das Rollenspiel ermöglicht ihnen auf intuitive Weise Objektinteraktionen nachzuvollziehen und die Abläufe in objektorientierten Programmen begreifen.

1 Einleitung

2

Bei beiden anvisierten Einsatzmöglichkeiten geht es also letztlich darum, ein OODesign zu visualisieren und die am Entwurf beteiligten Individuen auf komfortable Weise miteinander interagieren zu lassen. Dafür gibt es bislang kaum bzw. nur sehr unzureichende Unterstützung durch Tools, insb. was den Kooperationsaspekt angeht. Im Rahmen der Arbeit soll daher erstmalig ein kooperativer, synchroner Mehrbenutzer-Editor für RPDs in Form eines Eclipse-Plugins konzipiert und implementiert werden. Der Editor soll lokale und verteilte Teams bei der Entwicklung von Domänenmodellen unterstützen. Gemeinsam (zur gleichen Zeit an verschieden Orten) editieren die Teammitglieder Klassen und Objekte (kein Java Code, sondern in einer formlose Notation) in einem gemeinsamen Projekt und simulieren interaktiv die Objektinteraktion an einem Diagramm. So gewinnen sie Erkenntnisse über die benötigten Objekte und Methoden. In Anlehnung an Rollenspiele mit CRC-Karten übernehmen Benutzer die Rolle von Objekten. Sie „spielen“ sequentiell und interaktiv verschiedene konkrete Anwendungen des entworfenen Systems in verschiedenen Szenarien durch. Es gibt zu einem Zeitpunkt immer genau ein aktives Objekt, das die Kontrolle hat und dessen Besitzer agieren muss. Wenn der Kontrollfluss bei einem Objekt ankommt, muss der Benutzer, der für dieses Objekt zuständig ist, die Arbeit des Objekts ausführen, z.B. Zuweisungen/Berechnungen ausführen, selbst Nachrichten an andere Objekte schicken, etc. Danach gibt er, u. U. mit einem Returnwert, die Kontrolle an das aufrufende Objekt zurück. Der Editor stellt die benötigten Werkzeuge zum informalen Erstellen von Klassen, Objekten und Nachrichten zur Verfügung. Die Kommunikation wird im Diagramm und in einer Nachrichtenhistorie protokolliert. Ein Hauptaugenmerk des Editors soll auf der Synchronizität liegen, der aktuelle Stand muss bei allen Clients synchron aktualisiert werden. Weiterhin werden die, in kooperativen Anwendungen üblichen, Elemente zur Unterstützung des Gruppenbewusstsein (Buddyliste incl. Online-Status, UserIcons zur Visualisierung von Rollen) erwartet. Des Weiteren soll der Editor die Möglichkeit der Code-Generierung bieten. Aus den formlosen Klassen/Objekten sollen dann per Knopfdruck Klassen-Stubs in Java generiert werden. Es sollen die programmatischen Grundsteine gelegt werden, um in einer späteren Ausbaustufe, aus einem durchgespielten Szenario einen JUnit-Test-Case generieren zu können.

1.2 Zielsetzung der Arbeit Die Zielsetzung dieser Arbeit ist die Konzeption und die Implementierung eines synchronen Mehrbenutzereditors für die interaktive Entwicklung von Objektinteraktionsdiagrammen. Eine Gruppe von Anwendern soll kooperativ die Objektinteraktionen in einem benutzerdefinierten Domänenmodell simulieren und explorieren können. Die Anwendung soll lokales und verteiltes Rollenspiel unterstützen, bei dem die einzelnen Anwender jeweils das Verhalten einer Menge von Objekten simulieren. Es ist genauer zu untersuchen, welche Anforderungen an die Anwendung sich aus dem Einsatz in unterschiedlichen Kontexten ergeben. Zum einen soll der Editor als unterstützende Maßnahme zur Vermittlung objektorientierter Konzepte, insb. der dynamische Aspekte in objektorientierten Programmen, also Objektinteraktion mittels Message Passing, in der Lehre einsetzbar sein.

1 Einleitung

3

Zum anderen soll die Anwendung verteilte Teams in der Entwurfsphase der objektorientierten Softwareentwicklung unterstützen. Die Anwendung soll das Explorieren der Problemdomäne ermöglichen. So soll das Verständnis der Anwender für das System gefördert und eine Verfeinerung des Klassenmodells ermöglicht werden. Das Hauptaugenmerk liegt auch in diesem Kontext auf den dynamischen Aspekten, dem Verhalten des Systems. Darüberhinaus soll das System als konkreten Mehrwert für den Anwender die Möglichkeit bieten, aus dem entworfenen Klassenmodell Source-Code zu generieren. Die Anwendung soll als Eclipse-Plugin realisiert werden.

1.3 Kurzer Überblick über den weiteren Aufbau In Kapitel 2 findet sich eine detaillierte Anforderungsanalyse für den oben angerissenen Problembereich. Dabei untersuchen wir zunächst in 2.1 die Anforderungen, die sich für den Einsatz einer Anwendung in der objektorientierten Lehre ergeben. Dazu führen wir kurz in die Konzepte der Objektorientierung ein, untersuchen gängige Lehrmethoden und ermitteln daraus eine Menge von didaktischen Anforderungen. 2.2 beleuchtet den Einsatz in einem anderen Kontext, hier werden die Anforderungen, die sich für den Einsatz einer Anwendung im OO-Entwicklungsprozess.ergeben, hergeleitet. Dazu geben wir am Beispiel des Rational Unified Process und am Beispiel des Agile Devolopment eine Einblick in Softwareentwicklungsmethoden, insb. den Analyseprozess, und ermitteln daraus eine Reihe von Entwicklungssanforderungen. 2.3 beschäftigt sich mit dem Groupware-Aspekt – hier werden die technischen Anforderungen aufgezeigt, die daraus resultieren, dass die Anwendung kooperativ von verteilten und lokalen Benutzern genutzt werden soll. Der Begriff Groupware wird vorgestellt und der geplante Rollenspiel-Charakter der Anwendung wird eingeordnet. Kapitel 3 liefert einen Überblick über den Stand der Forschung, es werden vergleichbare Ansätze aus dem didaktischen Kontext und dem Entwicklungskontext aufgezeigt und bzgl. der Anforderungen eingeordnet. In Kapitel 4 wird der im Rahmen dieser Arbeit konzipierte und implementierte Lösungsansatz COINED vorgestellt und den Anforderungen der drei Bereiche jeweils im Detail gegenübergestellt. Beispielszenarien illustrieren den Einsatz von COINED im didaktischen und im Entwicklungs-Kontext (4.1 und 4.2). In 4.3 gehen wir auf die Erfüllung der technischen Anforderungen ein. Wir geben einen technischen Überblick über COINED, stellen die verwendete Architektur vor und beschreiben die Zusammenhänge mit speziellen Groupware-Entwurfsmustern. Kapitel 5 gibt Aufschluss über einige signifikante Implementierungsdetails und bisherige Erfahrungen. Kapitel 6 liefert eine abschließende Zusammenfassung und erörtert offene Fragen für weiterführende Arbeiten.

2 Anforderungsanalyse

4

2 Anforderungsanalyse In diesem Kapitel werden die genauen Anforderungen hergeleitet. Diese sind dann jeweils in den Unterabschnitten 2.1.2, 2.2.4 und 2.3.2 zusammengefasst.

2.1 Lehre von Objektorientierten Konzepten Hinter dem Begriff „Objektorientierung“ steckt die Idee, die Welt als eine Sammlung von Objekten und ihren Beziehungen zu verstehen. Objekte können sowohl Gegenstände (Auto, Kunde, Haus), als auch nicht-gegenständliche Konstrukte (Konto, Flug, Reise) sein. Sie können wiederum aus anderen Objekten zusammengesetzt sein, z.B. besteht ein Auto aus Rädern, Karosserie, Motor, usw. Ein reales Objekt, komplett in all seiner Detailtiefe betrachtet, kann sehr komplex und unüberschaubar sein. Deshalb arbeitet man in objektorientierten Entwurfstechniken und Programmiersprachen mit vereinfachten, abstrahierenden Modellen von realen Objekten. Modelle bilden die Realität ausschnitthaft und aus einem bestimmten, dem Problembereich angepassten, Betrachtungswinkel ab. Ein modelliertes Objekt fokussiert dann die relevanten Eigenschaften des Originals, alle uninteressanten Details werden vernachlässigt. Für die Kundenverwaltung einer Autovermietung wäre es z.B. wichtig, das Alter und Führerscheinstatus eines Kunden zu kennen, Anzahl und Namen seiner Kinder spielen dagegen keine Rolle. Die in der Software abgebildeten Objekte sind durch ihre Identität, ihren Zustand und ihr Verhalten charakterisiert. Der Zustand beschreibt die statischen Eigenschaften eines Objekts mit Hilfe von Attributen. Ein Attribut legt den Typ einer Eigenschaft fest. Der Zustand bildet eine Momentaufnahme des Objekts und wird durch die Attributwerte eines Objekts und durch seine Verbindungen zu anderen Objekten zu einem bestimmten Zeitpunkt definiert. Ein Objekt ist per Definition unabhängig von seine Attributwerten und Operationen identifizierbar und eindeutig von anderen Objekten abgrenzbar. Zwei Objekte, die denselben Zustand besitzen, deren Attribute also gleiche Werte haben, sind immer noch zwei verschiedene, eindeutig unterscheidbare, Objekte. Mit Verhalten bezeichnet man die Fähigkeit von Objekten, Zustandsänderungen durchzuführen, also ausgewählte Eigenschaften zu verändern. Hierfür stellt das Objekt Methoden zur Verfügung, deren Aufruf in Form des Sendens einer Nachricht geschieht Den Programmablauf in einem objektorientierten Programm kann man sich nun folgendermaßen vorstellen: eine Menge von Objekten interagiert miteinander, indem die Objekte sich Nachrichten senden und selbst auf empfangene Nachrichten reagieren. Objekte kommunizieren also per Nachrichtenaustausch und teilen sich auf diese Weise mit, was zu tun ist. Ein Objekt kann nur auf die eigenen Daten (Attribute) direkt zugreifen. Wenn nun also ein Objekt von einem fremden Objekt Daten benötigt, wird eine Nachricht an dieses Objekt geschickt. Dabei bedeutet „eine Nachricht an ein Objekt schicken“, dass ein anderes Objekt aufgefordert wird, eine seiner Methoden auszuführen. Um eine Nachricht an ein bestimmtes Objekt senden zu können, muss ein Objekt das andere erst „kennen“, es muss eine Beziehung zu diesem Objekt haben. Beziehungen sind nicht unbedingt bidirektional, um eine Antwort auf eine

2 Anforderungsanalyse

5

Nachricht zu senden, muss z.B. das antwortende Objekt den Aufrufer nicht explizit kennen. Die dynamischen Eigenschaften eines Objekts (Verhalten) werden also durch seine Operationen beschrieben, während die statischen Eigenschaften (Zustand) von seinen Attributen repräsentiert werden. Eng verknüpft mit dem Objektbegriff ist das Konzept der Klasse. Eine Klasse ist die Typbeschreibung für eine Menge von Objekten mit gleicher Struktur, gleichem Verhalten und gleichen Beziehungen. Sie dient als Schablone oder Bauplan aus dem zur Laufzeit die Objekte erzeugt werden können. Objekte werden synonym auch als Instanzen oder Exemplare einer Klasse bezeichnet1. Mit Definition von Attributen und Operationen werden die gemeinsame Struktur, die Beziehungen zu anderen Objekten und das gemeinsame Verhalten für alle Objekte festgelegt, die zu dieser Klasse gehören. Alle Objekte einer Klasse besitzen dieselben Attribute, im Allgemeinen jedoch unterschiedliche Attributwerte. Ein Objekt ist immer ein Exemplar von genau einer Klasse.

Abbildung 2.1 Die Klasse Mietwagen und zwei ihrer Objekte

In Abbildung 2.1 sind wagen1 und wagen1 Exemplare der Klasse Mietwagen und besitzen jeweils konkrete Werte für die Attribute kennzeichen und istVermietet. Die Attributwerte können über die Operationen mieten(), istVermietet() und getKennzeichen() manipuliert, bzw. abgefragt werden. Das in der objektorientierten Programmierung (OOP) verfolgte Paradigma basiert auf mehreren fundamentalen Konzepten, wobei die Fachwelt durchaus unterschiedliche Auffassungen über Nennung und Wichtigkeit der verschiedenen Konzepte vertritt. In [Arm06] findet sich hierzu eine umfassende Auswertung der entsprechenden Fachliteratur. Deborah Armstrong identifiziert und beschreibt dort zusammenfassend die Konzepte (sie spricht von Quarks), die in fast allen OOPDefinitionen verwendet werden. Diese Quarks sind Objekt, Klasse, Vererbung, Kapselung, Methode, Message Passing, Polymorphismus und Abstraktion. Einiges hiervon wurde bereits oben im Text besprochen (Objekt, Klasse, Methode, Message Passing, Abstraktion). Die restlichen Konzepte spielen im Rahmen dieser Arbeit keine entscheidende Rolle, sie seien dennoch, der Vollständigkeit halber, im Folgenden kurz angerissen. •

1

Kapselung: Klassen fassen Attribute und Operationen zu einer Einheit zusammen, die Attribute sind von außen nicht sichtbar. Manipulationen an den

Englisch instance. In der deutschen OO-Literatur früher oft ungenau mit Instanz übersetzt. Heute findet sich häufig der adäquatere Begriff Exemplar.

2 Anforderungsanalyse





6

Attributen sind nur indirekt über genau definierte Schnittstellen, die Operationen, möglich. Man sagt, eine Klasse kapselt ihre Attribute. Das Prinzip der Datenkapselung ermöglicht u.a. die Definition eindeutiger Schnittstellen, ein Aspekt, der bei der Wiederverwendung von Klassen in verschiedenen Programmen eine wichtige Rolle spielt. Darüber hinaus sorgt die Kapselung dafür, dass Klassen leicht verändert und erweitert werden können, ohne dass andere Klassen stark betroffen werden. Vererbung: Objekte können Methoden und Attribute erben oder vererben. o Generalisierung/Spezialisierung o Super-/Subtypen o Einfach-/Mehrfachvererbung o Abstrakte Klassen Polymorphismus: Methoden mit gleichem Namen können je nach Kontext unterschiedliche Semantik besitzen. Man unterscheidet a) dynamischen Polymorphismus (Überschreiben von Methoden, ermöglicht durch „spätes Binden“): Unterklassen können geerbte Methoden überschreiben und so neu definieren. b) statischen Polymorphismus (Überladen von Methoden): eine Methode kann innerhalb einer Klasse mehrfach definiert werden, sofern die Signaturen eindeutig sind. Beim Aufruf wird die entsprechende Methode dann anhand der Parameterliste identifiziert.

Das Verständnis der hier vorgestellten Prinzipien des OO Paradigmas ist essentiell für die Entwicklung von effizienten, objektorientierten Programmen. Die Vermittlung des Paradigmas an Anfänger erfordert spezielle Unterrichtsmethoden, mit Methoden aus der Lehre der prozeduralen Programmierung lässt sich das kaum erreichen. Das wird z.B in [Bru05] im Abschnitt „The object-oriented paradigm requires a new way of thinking – and teaching“ diskutiert. Im Folgenden werden wir die gängigen Unterrichtsmethoden für OOP genauer betrachten und die Herausforderungen an die Fachdidaktik ermitteln.

2.1.1 Herausforderungen in der Fachdidaktik In der Literatur finden sich viele Stimmen, die einen objects-first Ansatz für die Lehre von OOP propagieren, siehe z.B. [Coo03]. Objects-first konfrontiert den Lernenden von Anfang an mit den Prinzipien des objektorientierten Entwurfs. Der Lernende setzt sich gleich zu Beginn mit Objekten, Klassen und Methoden auseinander, traditionellere Kontrollstrukturen werden erst später eingeführt. Cooper erwähnt in seiner Beschreibung der Herausforderungen von objects-first den Zuwachs an Komplexität, den diese Strategie für Lehre und Lernen mit sich bringt. Er stellt fest, dass klassische Programmiereinführungen, bei denen man mit einfachen Beispielprogrammen startet und nach und nach zu komplexeren Programmen kommt, eine flachere Lernkurve haben. Dass die objects-first Methodik nach wie vor ein umstrittener Gegenstand ist, kann man z.B. [Bru05] entnehmen, worin Kim Bruce einen Überblick über die diesbezügliche Diskussion gibt. Schmolitzky [Schmo07]formuliert einige kontroverse Thesen, welche die gängigen Ansätze und Methoden der Fachwelt, Programmieranfänger in die objektorientierte Programmierung einzuführen, kritisieren. Der Artikel verdeutlicht, dass bzgl. der besten/richtigen Methoden auch heute noch, nachdem OOP längst in die Programmierausbildung an den Hochschulen eingeflossen ist,

2 Anforderungsanalyse

7

immer noch Diskussionsbedarf besteht. Laut Schmolitzky rühren viele Probleme daher, dass die eng beieinander liegenden Bereiche objektorientierte Modellierung (OOM) und OOP zu stark vermischt werden. Er sieht die OOP als sehr mechanisch orientiert und auf programmiersprachlichen Konzepten aufsetzend, während die OOM für ihn eine Sicht auf die Welt darstellt, die von der Beschreibung von Anwendungsdomänen bis hin zum Entwurf von Softwaresystemen reicht. Schmolitzky stellt im Übrigen fest, dass der Einstieg in die OOP heutzutage überwiegend mit Hilfe von Java gelehrt wird - er selbst hält Java nicht für die ideale Anfängersprache, aber sieht sie als „die am wenigstens schlechte der zur Auswahl stehenden objektorientierten Sprachen“. Im Folgenden wollen wir einige der, laut Autor bewusst überspitzt formulierten, Thesen, die für diese Arbeit relevant sein könnten, herausgreifen: • „Objekte haben Namen“: Die Kritik ist in der Tat angebracht, denn wie der Autor sagt, aus Sicht der OOP sind dynamisch erzeugte Objekte anonyme Einheiten, die keine Namen haben. Dennoch scheint es gerade bei der Arbeit mit Rollenspielen sinnvoll, den Objekten explizite Namen zu geben. Die Kommunikation der Akteure untereinander wird erheblich schwieriger, wenn anonyme Objekte zugelassen werden und die Objekte nicht über einen Namen angesprochen werden können. Auch wird die Identifikation eines Objekts in verschiedenen Kontexten einer Anwendung (Objekt-Repository, Interaktions-Historie, Visuelle Repräsentation) erschwert. Hier muss also im Zweifel abgewogen werden, ob die erhöhte Usability das Risiko der Verwirrung aufwiegt. In jedem Fall sollte die Anwendung den Begriff „Name“ nicht nachlässig und widersprüchlich verwenden, damit Anwender unterscheiden können, ob ein Objektname, ein Namengebendes Attribut oder eine Instanzvariable gemeint ist. • „Objekte enthalten Objekte“ • „Wir beginnen mit Objekten ohne Methoden (reinen Datenobjekten), da dies einfacher ist“ • „Wir benutzen Java zu Anfang rein funktional, um Zustände möglichst spät einzuführen“ Im Rahmen dieser Arbeit ist die Simulation von Objekt-Interaktionen in Form von Rollenspielen und die Visualisierung in Form von RPDs geplant, die letzten drei Punkte von Schmolitzky stellen also hier keine Gefahr dar, weil wir sie von vorneherein ausschließen. Es gibt eine Reihe von Lehr-/Lernanwendungen, die objects-first unterstützen. Sie können im Unterricht in der Einführungsphase eingesetzt werden und erleichtern Anfängern den Einstieg in die Programmierung nach dem OO-Paradigma. Wie in [Bru05] aufgezeigt wird, lassen sich die meisten dieser Anwendungen grob in eine der folgenden Kategorien einordnen: • • •

pädagogische IDEs, Mikrowelten Java-Tool-Sammlungen mit pädagogischer Ausrichtung

Die, laut [Diaz05b] am häufigsten zitierte, pädagogische IDE ist BlueJ. Einen vergleichenden Überblick über BlueJ und seine Methodik findet man z.B in [Köl03]. BlueJ ist eine, speziell als Lehr- und Lernanwendung konzipierte,

2 Anforderungsanalyse

8

integrierte Java Entwicklungsumgebung. Das User-Interface ist übersichtlich und einfach gehalten. Der Benutzer beginnt eine Sitzung üblicherweise mit einer Menge von vordefinierten Klassen, die in einer UML-ähnlichen, graphischen Darstellung visualisiert werden. Der Benutzer kann direkt mit den Icons interagieren und so aus einer Klasse Objekte erzeugen und von diesen Objekten Methoden ausführen lassen. Diverse Evaluierungen bestätigen, dass die Arbeit mit BlueJ den Anwendern das Erlernen der OO-Basiskonzepte Objekt, Klasse, Methode erheblich erleichtern kann, nicht zuletzt aufgrund der Möglichkeit, Objekte interaktiv aus Klassen zu erzeugen und interaktiv Methoden aufzurufen, [Haa04][Rag05][Köl03]. In [Rag05] wird allerdings auch gezeigt, dass BlueJ auf der anderen Seite Schwierigkeiten macht, wenn es darum geht, die dynamischen Aspekte von OOP zu vermitteln. Vorteile, die die statische Visualisierung der Klassen/Objekte für frühe Lernphasen hat, können in späteren Phasen, bei der Transition von individuellen Objekten zu ganzen Programmen, zu Nachteilen werden. Weitere Beispiele für pädagogische IDEs, die ebenfalls eine direkte Interaktion mit Objekten erlauben, sind BeanShell und DrJava. Beide Systeme sind Java Interpreter, die die interaktive Ausführung einer Folge von Java Anweisungen über ein Kommandozeilen-Interface ermöglichen. Als exemplarische Vertreter für die Kategorie der Mikrowelten seien „Karel J. Robot“ [Berg04] und Alice[Dan03, Coo03] genannt. Laut Bruce [Bru05] bedeutet Programmieren im Kontext einer Mikrowelt üblicherweise, Anwender manipulieren eine Menge von Objekten, bzw. interagieren mit diesen Objekten und illustrieren so die Schlüsselkonzepte der OOP. Bei Karel J. Robot werden z.B. Objekte durch Roboter symbolisiert, die in ihrer Welt (einem 2D Gitter) positioniert werden. Auf den Robotern können Methoden aufgerufen werden, welche die Roboter bewegen, drehen und den Umgang mit Artefakten steuern (beepers können aufgenommen und herumgetragen werden). Alice ist eine für Programmieranfänger entwickelte Programmierumgebung für die Erstellung von interaktive 3D-Graphiken und Animationen. Für die Repräsentation von Objekten verwendet Alice eine anthropomorphe Metapher. Der Anwender bevölkert eine kleine virtuelle Welt mit 3D-Objekten. Jedes Objekt kapselt seine eigenen Daten und verfügt über seine eigenen Methoden. Ein Objekt kann per Drag&Drop in einen Editor gezogen werden. In dem Editor können Aussehen und Verhalten geändert und über Dropdown-Menüs können primitive Methoden ausgewählt werden, mit denen dann eine Nachricht an das Objekt geschickt werden kann. In [Coo03] werden die konkreten Auswirkungen des Einsatzes von Alice im Unterricht untersucht. Demnach hilft die visuelle Umgebung von Alice den Lernenden ein sicheres Gefühl für Objekte zu entwickeln. Die interaktiven Methodenaufrufe auf Objekten fördern das Verständnis für Kapselung und für Methoden bzw. Message Passing. Die dritte Kategorie von Lehranwendungen sind Java-Tool-Sammlungen, die darauf ausgerichtet sind, Anfängern das Programmieren zu vereinfachen. Sie bringen vereinfachte, für Anfänger leicht zu nutzende, Features, wie z.B. GUI Komponenten, oder eine Menge fertiger Klassen in Form von Bibliotheken mit. Hierzu zählen z.B. die Java Power Tools (JPT) oder Grafikbibliotheken, wie sie in [Bru01] und [Rob01] vorgestellt werden. Bei den beiden letzteren arbeitet man mit einer Art Leinwand, auf die die Objekte z.B. als 2D-Shapes gezeichnet

2 Anforderungsanalyse

9

werden. Auf diesen Objekten können Methoden aufgerufen werden, worauf die Objekte dann entsprechend reagieren müssen. Mit den hier vorgestellten Anwendungen lassen sich einige OO-Basiskonzepte gut vermitteln. Das bestätigen die oben im Text zu den jeweiligen Anwendungen aufgeführten Quellen, die neben den Beschreibungen teilweise auch Auswertungen enthalten. Es lassen sich eine Mechanismen erkennen, die sich offensichtlich gut zur Umsetzung der Basiskonzepte eignen. Zum Beispiel kann die Möglichkeit des direkten, interaktiven Objektzugriffs das Verständnis für den Objektbegriff an sich und für das Konzept der Kapselung fördern (findet sich in allen oben genannten Anwendungen). Wenn ein Anwender Objekte direkt aus einer Klasse erzeugen kann, kann das das Verständnis für den Zusammenhang von Klasse/Objekt erleichtern (BlueJ). Visualisierung und Animation macht Programmflüsse klarer (Alice). Die Möglichkeit interaktiv auf einem Objekt Methoden aufzurufen, bzw. Nachrichten zu verschicken erleichtert das Verständnis der Konzepte Methode und Message Passing (bei alle genannten). Dynamik in objektorientierten Programmen Im Rahmen dieser Arbeit steht die Unterstützung und Visualisierung von Objektinteraktionen, also den dynamischen Aspekten objektorientierter Programme im Vordergrund, deswegen wird in diesem Abschnitt einmal genauer untersuchen, auf welche Weise sich diese Aspekte Anfängern am besten vermitteln lassen. Objektinteraktionen in OOP erfolgen in Form von Message Passing. Laut Jimenez-Diaz et al. [Diaz05a] müssen Anfänger begreifen, dass innerhalb von OOP Message Passing ein Synonym für die Funktionalität einer Anwendung ist - Eine Klasse hat einen konkreten Nutzen und Nachrichten, die diese Klasse bearbeitet, definieren das Verhalten der Klasse. Eine Aktivität in einem OOSystem wird durch eine Nachricht von einem Objekt an eine anderes initiiert. Die Nachrichtenübermittlung transferiert den Kontrollfluss von einem Objekt zum nächsten und die Bearbeitung der Nachricht wird aller Wahrscheinlichkeit nach den Zustand des Objekts verändern. Deswegen stellt der Ansatz von Jimenez-Diaz et al. [Diaz05a] die Vermittlung des Message Passing-Konzepts in den Vordergrund und unterstreicht u.a. mit folgender Aussage noch weiter die Wichtigkeit des Verständnisses der Lernenden für diese elementare OO-Konzept: “Another key idea from message passing is the functional decomposition. [..] the chained execution of several methods is the way to deal with complex functionality. To do that, the learner should understand that the classes are related among them not only by composition or inheritance but also by use” In der Literatur finden sich nun viele Hinweise darauf, dass Anfänger Probleme haben, die dynamischen Aspekte und die Interaktionen in objektorientierten Programmen zu verstehen und ihnen demnach eben gerade das Konzept des Message Passing Schwierigkeiten bereitet. Die Fallstudie von Ragonis und BenAri [Rag05] zeigt z.B. die konkreten Probleme, die Studenten beim Arbeiten mit BlueJ mit dem Begreifen der Dynamik eines Programms/des Programmflusses hatten.

2 Anforderungsanalyse

10

Es lässt sich ganz allgemein sagen, dass Dynamik in der OOP eine größere Herausforderung für Anfänger darstellt als in der prozeduralen Programmierung, so stellen z.B. Dann et al. [Dan03] die grundsätzliche Behauptung auf „Behavior is more complicated than method/functions in an imperative language“. Ein wichtiges Anliegen einer pädagogischen Anwendung für die Einführung in OOP muss also die Vermittlung von dynamischem Verhalten bzw. Message Passing sein. Dynamisches OO-Verhalten anhand von statischen Repräsentationen zu begreifen ist schwierig. Es ist offensichtlich, dass sich dynamische Abläufe besser nachvollziehen lassen, wenn sie in einer entsprechenden Form visualisiert oder gar animiert werden. Zum Thema Visualisierungstechniken lässt sich allgemein sagen, dass der Einsatz einer Visualisierung allein üblicherweise nicht ausreichend ist - die Visualisierung sollte vielmehr den Lernende aktiv mit in das Geschehen einbeziehen: „Visualization technology is of little educational value unless it engages the learners in an active learning activity“, vgl. [Naps02] Auch von Andrianoff und Levine [And02] wird angeführt, dass Aktivitäten, die Studenten aktiv mit einbeziehen (im Gegensatz zum passiven Zuschauen/-hören) im Allgemeinen zu einer besseren Vermittlung des zu lernenden Material führen. Der Forderung nach der aktiven Beteiligung der Lernenden wird die Methode des Rollenspiels, gerecht. Dementsprechend finden sich auch mehrere Quellen, die Ansätze vorschlagen, in denen Rollenspiele zur Vermittlung von OO-Konzepten im Allgemeinen und von Message Passing im Besonderen eingesetzt werden ([And02], [Diaz05a], [Bör04]) Im folgenden Abschnitt befassen wir uns genauer mit Rollenspielen als genereller, pädagogischer Methode und wir betrachten den möglichen Einsatz im Kontext der objektorientierten Lehre. Rollenspiel Außerhalb des Informatik-Kontexts werden in Rollenspielen oft reale Lebenssituationen simuliert, Rollenspiele dienen in diesem Zusammenhang zur Vermittlung von sozialen Fähigkeiten. Die Akteure sollen ihre sozialen Handlungskompetenzen erweitern, indem sie eine bestimmte Rolle übernehmen und in dieser Rolle kritische Situationen in der simulierten Realität anspielen. Firmen nutzen Rollenspiele um Mitarbeiter zu schulen oder Bewerber zu testen, indem sie Job-typische Szenarien wie Verkaufsgespräche oder Kundenreklamationen durchspielen lassen. Auch Führungsrollenspiele in denen komplexe Führungs- und Arbeitsprozesse simuliert werden sind üblich. Rollenspiele stellen eine aktive Lernform dar. Die Teilnehmer werden zu Akteuren, die miteinander agieren.. Der Freiheitsgrad, der den einzelnen Akteuren gewährt wird, kann variieren (vgl.[And02]). So gibt es z.B. auf der einen Seite das freie Rollenspiel ohne konkrete Vorgaben, auf der anderen Seite aber auch geskriptetes Szenario-Rollenspiel, wobei die Rollen, ihr Verhalten und das zu spielende Szenario klar vorgegeben sind.

2 Anforderungsanalyse

11

Technische Unterstützung von sozialen Rollenspielen gibt es u.a. in Form von kollaborativen, web-basierten Umgebungen. Ein Beispiel für eine solche Umgebung ist Fablusi [Fab], eine Online-Rollenspiel-Simulations-Plattform mit der sich beliebige dynamische Rollenspiele erzeugen lassen Wie sieht es nun mit dem Einsatz von Rollenspielen in der Informatik aus? Andrianoff und Levine [And02] stellen fest, dass das Rollenspiel bereits seit vielen Jahren (mindestens seit 1987) in der Informatik-Ausbildung vorkommt. Sie führen verschiedene Ansätze an, in denen Rollenspiele als Unterrichtsmethode für verschiedene Bereiche der Informatik vorgeschlagen werden, u.a. für Hardware Design, Formale Methoden und Backtracking, aber eben auch für den OOEntwurf. Bzgl. letzterem heißt es, Rollenspiele könnten hilfreich dabei sein, Intuition für das Verständnis von OO-Design aufzubauen. Das ist nun gerade im Rahmen dieser Arbeit interessant. Das Potenzial von Rollenspielen in der OOP unterstreichen auch Bergin et al. in [Berg04] – sie haben Rollenspiele in ihre Liste der Paedagogical Pattern eingearbeitet. Bergin et al. [Berg04] sehen, dass der Mensch sich als eine gute Metapher für Objekte eignet, "In teaching object systems, a good metaphor is human beings. People are autonomous, encapsulated actors, who interact with other similar objects." Sie führen weiter aus, dass ein Lernender, wenn er die Rollen in einem Szenario versteht, auch entsprechend weiß, wie und mit wem er interagieren kann. Er erkennt schnell, was er nicht verstanden hat. Wie solche Rollenspiele nun konkret aussehen können, zeigen Andrianoff und Levine in [And02]. Hier werden verschiedene Rollenspiel-Szenarien mit unterschiedlicher Komplexität für die Vermittlung verschiedener OO-Konzepte vorgestellt. Es wird jeweils aufgeführt, inwiefern die einzelnen Rollenspiele mit bestimmten OO-Konzepten korrellieren. U.a wird für die Vermittlung von Objektinteraktionen ein Rollenspiel aus der Marine Biology Case Study (MBCS) vorgeschlagen, ein Beispiel, an dem sich auch eines der, im Rahmen dieser Arbeit beschriebenen Anwendungsszenarien, orientiert (s. 4.1). Im Rahmen solcher Rollenspiele übernehmen die Mitglieder einer Gruppe die Rolle von Objekten, und simulieren Nachrichtenfluss und -bearbeitung durch Interaktion mit anderen Akteuren/Objekten. So gewinnen sie Erkenntnisse über die Abläufe des objektorientierten Systems. Die natürliche Art des Rollenspiels ist die physische, also die face-to-face Variante – Schüler stehen in der Gruppe zusammen, tragen jeweils Post-Its mit ihren Objektnamen und simulieren Aktionen durch „Aussprechen“, Assoziation durch Anfassen, Kontrollfluss z.B. durch das Werfen eines Balls. Das Foto in Abbildung 2.2 zeigt eine solche reale Unterrichtssituation

2 Anforderungsanalyse

12

Abbildung 2.2 – Rollenspiel im Informatikunterricht, Gaußschule Braunschweig, aus [C’t 10/06, S.210]

Auf der anderen Seite gibt es auch virtuelle Rollenspiele – Schüler arbeiten am Rechner und übernehmen die Rolle von antropomorphisierten Objekten in einer virtuellen Welt (Beispiel Alice, Karel J. Robot, ViRPlay vgl. 2.1.1). Das virtuelle Rollenspiel bringt Vor- und Nachteile gegenüber dem physischen Rollenspiel mit sich. Ein Softwaresystem kann die Möglichkeit bieten, die ansonsten eher flüchtigen Informationen zu speichern. So ließen sich u.a. Objekte speichern und Objektinteraktionen und Nachrichtenfluss persistent protokollieren, auch Replay-Funktionen wären denkbar. Je nach Darstellungsform kann die Repräsentation der Visualisierung zu Dokumentationszwecken wieder verwendet werden.

2.1.2 Anforderungen im didaktischen Kontext In diesem Abschnitt gehen wir darauf ein, was genau von den Anfängern in der OOP falsch verstanden kann und welchen Umgang mit den Artefakten im Rahmen einer didaktischen Anwendung das impliziert, bzw. welche Anforderungen sich für die Anwendung ergeben. Die Studie von Noa Ragonis [Rag05] identifiziert anhand konkreter Beispiele einige Schwierigkeiten, die Anfänger mit objektorientierten Programmen haben. Die Studie basiert zwar auf dem Einsatz von BlueJ, die Autoren sind allerdings der Meinung, dass die Ergebnisse nicht notwendigerweise BlueJ-spezifisch sind und die identifizierten Probleme auch in anderen Umgebungen auftauchen können. Folgenden Schwierigkeiten wurden benannt: • • • • • • •

Objektzustand: Anfänger haben Schwierigkeiten, zu verstehen, welchen Einfluss der Aufruf einer Methode auf den Objektzustand hat. Methodenaufruf: Schüler haben nicht sofort verstanden, dass eine Methode jederzeit und mehrfach aufgerufen werden kann. Parameter: Anfänger haben Probleme, zu verstehen, wo Parameterwerte herkommen Rückgabewerte: Anfänger verstehen nicht, wo der Rückgabewert einer Methode hingeht. Input Instructions: Anfänger verstehen die Notwendigkeit nicht. Konstruktoren: Anfänger verstehen die Zusammenhänge zwischen Deklaration, Aufruf, und Ausführung von Konstruktoren nicht. „The overall picture of execution“: Anfänger haben Schwierigkeiten den globalen Programmfluss auszumachen, die Frage „Was passiert und wann“ tauchte immer wieder auf.

2 Anforderungsanalyse

13

Es ist offensichtlich, dass sich hier viele Punkte um das Konzept des Message Passing drehen. Eine entsprechende Anwendung muss hier also ansetzen und Klarheit bzgl. Nachrichten, Methodenaufrufen und Programmfluss schaffen. Es muss möglich sein, auf Objektebene zu arbeiten, Einblick in die Objektzustände zu bekommen und Attributwerte zu manipulieren. Es muss möglich sein, interaktiv von Objekten Nachrichten zu versenden, und Parameter zu belegen. Der Programmfluss muss visualisiert werden. Mit einer rollenspielartigen Simulation der Objektinteraktionen könnten einige der erwähnten Punkte geklärt werden. Zum einen sollte in einer solchen Simulation der globale Programmfluss klar werden, zum anderen dürften damit auch die Fragen bzgl. Rückgabewerten, Parametern, und Auswirkungen auf Objektzustände klar werden In Dann et al. führen in [Dan03] an, dass der Begriff des Zustands schwierig zu vermitteln ist, nicht zuletzt wegen der Unübersichtlichkeit der Darstellungsformen: „State is challenging, because objects require the use of the program heap for implementation. Drawing traditional memory maps to explain objects, variable scope, and how methods work requires both a stack and a heap.[...] confusing clutter of arrows and boxes on the board[…].” Eine entsprechende didaktische Anwendung muss also Objektzustände in einer übersichtlichen Darstellungsform präsentieren. Die folgende Tabelle fasst die Implikationen, die sich im dem Umfeld der Didaktik auf den Umgang mit Artefakten ergeben, zusammen. DA11 Benutzerinteraktionen auf Objektebene Die Lernenden sollen ein allgemeines Verständnis für die Grundidee der Objektorientierung, das Konzept des Objekts, entwickeln. Hierfür ist es erforderlich, dass die Anwendung Objektstrukturen visualisiert und die Benutzerinteraktion auf Objekt-Level zulässt. Anwender müssen Klassen definieren und aus diesen Klassen Objekte erzeugen können. Es muss möglich sein, Einblick in Objektzustände zu verschiedenen Zeitpunkten nehmen zu können und Objektzustände ggf. manuell, durch Manipulation von Attributwerten, ändern zu können. Dadurch erlangt der Anwender nicht nur über die benötigten Objekte, sondern auch über deren Struktur, also die benötigten Attribute, Klarheit. Entsprechende Interaktionsmöglichkeiten mit Objekten, wie bspw. die Manipulation von Attributwerten, das Initiieren neuer Nachrichten, oder der Empfang und die Bearbeitung von Nachrichten, können Lernende dabei unterstützen, Einblick in grundlegende OO-Konzepte wie Objekte und Message Passing zu gewinnen. DA2 Kapselung Wenn das System Rollen unterstützt, sollte dafür gesorgt werden, dass jeder Benutzer nur in die Instanzen der Klasse, deren Rolle er übernommen hat, hinein schauen kann. Nur der Rolleninhaber darf die Attribute seiner Objekte direkt manipulieren, andere Benutzer dürfen nur indirekt über entsprechende 1

DA steht für didaktische Anforderung

2 Anforderungsanalyse

14

Nachrichten zugreifen. So kann das Kapselungs-Konzept vermittelt werden. Je nach Anwendung kann die konsequente Umsetzung dieses Konzeptes allerdings auch auf Kosten des allgemeinen Informationsgehalts und Nutzen der Anwendung gehen (Visibilität vs. Zugriff). Die Anwendung sollte jedoch in jedem Fall sicherstellen, dass ausschließlich der Rolleninhaber ein Objekt manipulieren kann. DA3 Interaktives Senden von Nachrichten Vermittlung der Konzepte Message Passing und Methode. Aus Sicht des Anwenders muss eine klare Unterscheidung von Nachricht und Methode möglich und erkennbar sein. Hierfür ist es hilfreich, wenn Anwender interaktiv Nachrichten initiieren können, z.B in über das das Kontextmenü eines Objekts. Es ist für Anfänger nicht offensichtlich, woher Parameter kommen, deswegen muss die Anwendung ebenso das interaktive Belegen von Nachrichtenparametern ermöglichen. DA4 Interaktives Erzeugen von Objekten Vermittlung der Konzepte Objekt und Klasse – Aus Sicht des Anwenders muss eine klare Unterscheidung von Objekten und Klassen möglich und erkennbar sein. Dazu gehört, dass beide jeweils in einem eigenen Bildschirmbereich, einer eigenen Liste, verwaltet werden sollten. Objekte sollten sich interaktiv aus Klassen generieren lassen, z.B über ein entsprechendes Kontextmenü der Klasse. DA5 Objektbeziehungen Anfänger müssen lernen, dass Objektbeziehungen eine notwendige Voraussetzung für das Senden von Nachrichten sind. Die Anwendung muss sicherstellen, dass Nachrichten nur dann gesendet werden können, wenn der Sender den Empfänger kennt, also über die entsprechende Beziehung zu diesem Objekt verfügt (z.B. über einen entsprechenden Attributwert). Die Objektbeziehungen sollten visualisiert werden (z.B. über entsprechende Linien in einer Diagrammdarstellung), damit der Anwender sich schnell Überblick verschaffen und fehlende Assoziationen identifizieren kann. DA6 Kommunikationsmedium für den Wissenstransfer Die Lernenden müssen die Möglichkeit haben, im Nachhinein über Abläufe zu diskutieren. Wie in [And02] behauptet, steigt der Nutzen der Anwendung, wenn die Erfahrungen anschließend diskutiert und referenziert werden („The benefit of each of these exercises is greatly enhanced if the experience is discussed afterwards and referenced frequently as students learn more“). Daher muss die Anwendung die Abläufe in geeigneter Form aufzeichnen und dem Anwender als Diskussionsgrundlage zur Verfügung stellen. a) Graphische Visualisierung als Kommunikationsunterstützung Objektstrukturen und Nachrichtenfluss, das Zusammenspiel von Artefakten allgemein, sollten graphisch visualisiert werden, z.B. in Form eines Diagramms. An einem Diagramm können diesbezügliche Details leicht erklärt und kommuniziert werden. In Frage kommen u.a. die in der Software-Entwicklung weit verbreiteten UML-Diagramme. UML ist eine Standardnotation, die von den Entwicklern einheitlich verwendet wird und deren Elemente allgemein bekannt sind. Verschiedene Diagramme visualisieren verschiedene Sachverhalte. Im Zusammenhang mit Rollenspielen ist es sinnvoll, eine spezielle, aus UML-

2 Anforderungsanalyse

15

Objekt und Kooperationsdiagrammen kombinierte, Diagrammform einzusetzen (Role-Play Diagrams, s. [Bör04]) b) Protokolle der Interaktion als Kommunikationsunterstützung. Benutzereingaben und Objektinteraktionen sollten in nachvollziehbarer und eindeutiger Form aufgezeichnet werden. Benutzer müssen anhand der Protokolle Programmfluss und Wertzuweisungen eindeutig nachzuvollziehen können und die Protokolle ggfs. als gemeinsame Grundlage für die rückblickende Diskussion getroffener Entscheidungen verwenden können. DA7 Unterstützung lokaler und verteilter Lehre Die Anwendung sollte sowohl in der verteilten als auch der lokalen Lehre eingesetzt werden können. D.h. es muss auf der einen Seite möglich sein, sie als technologische Unterstützung im Unterricht vor Ort einzusetzen. Die Anwendung wird dann von den Schülern von verschiedenen Arbeitsplätzen im Mehrbenutzerbetrieb genutzt. Der Umgang mit der Anwendung kann die Schüler zusätzlich motivieren und sie bietet darüber hinaus die Möglichkeit, Vorgänge und Abläufe dauerhaft zu speichern. Auf der anderen Seite sollte die Anwendung auch im Rahmen der verteilten Lehre, in Situationen, wie sie sich z.B. an einer Fern-Universität ergeben, einsetzbar sein. Hier halten sich die Lernenden an verschiedenen Orten auf und benötigen technologische Unterstützung, die sie in die Lage versetzt, gemeinsam synchrones Rollespiel durchzuführen. DA8 Flexible Reaktion auf neue Erkenntnisse Beim Ausführen der Anwendung treffen die Benutzer Entscheidungen - sie erzeugen Objekte, schicken Nachrichten, reagieren auf Nachrichten – und sie gewinnen ständig neue Erkenntnisse, die dazu führen können, dass vorherige Entscheidungen revidiert und neue getroffen werden müssen. Die entsprechenden Änderungen müssen direkt umsetzbar sein. Die Anwendung muss also eine flexible Anpassung des Systems zulassen. Es muss möglich sein, Änderungen am Modell schnell und einfach umsetzen zu können und mit relativ wenig Aufwand geänderte Szenarien durchspielen zu können. Daraus können dann wiederum neue Erkenntnisse gewonnen werden. DA9 Rollenspiel Benutzer sollen Nachrichtenfluss und Objektinteraktionen in Form von Rollenspielen simulieren können. Eine pädagogische Anwendung muss den Lernenden aktiv am Lernprozess beteiligen, um Motivation und Lerneffekt zu erhöhen. Das kann mit Rollenspielen erreicht werden. Weiter tragen Rollenspiele, in denen die Anwender die Rolle von Klassen übernehmen und Objektinteraktionen simulieren, dazu bei, dynamische Aspekte von OOP zu verdeutlichen. Der globale Programmfluss wird deutlich, Fragen bzgl. des Rückgabewerts, der Parameter, und der Auswirkungen auf Objektzustände, können klar werden. Die Rollenspiele illustrieren das Konzept des Message Passing. Die Anwendung muss u. a. dafür sorgen, dass ein Sender immer erst auf die Antwort einer Nachricht warten muss, bevor er selbst fortfahren kann.

2 Anforderungsanalyse

16

2.2 Entwicklung von objektorientierten Systemen In den frühen Phasen der Systementwicklung existiert normalerweise noch keine genaue Vorstellung über das zu entwickelnde System. Der Problembereich muss in der Regel in iterativen Prozessen erst noch genauer eingekreist werden, bevor die Artefakte des Domänenmodells sich dann nach und nach identifizieren lassen. Ein wichtiger Schritt bei der Softwareentwicklung ist daher zunächst die Erfassung funktioneller Systemeigenschaften. Dabei stellt sich in der Regel dann die Frage, wie man nun von der sprachlichen, textuellen Spezifikationen zur eigentlichen, technischen Problemlösung kommt. Hierfür gibt es verschiedene Lösungsansätze. Eine Möglichkeit auf die im Rahmen dieser Arbeit nicht weiter eingegangen wird, sind die linguistischen Requirement-Analysen, zu deren Theorie Chris Rupp [Rupp06] viele Beträge geleistet hat. Sie hat gezeigt, wie Methoden der Computerlinguistik zur Analyse natürlichsprachlicher Anforderungen genutzt werden können. Das Ziel ist dabei aus umgangssprachlichen Problembeschreibungen automatisch Klassenkandidaten zu extrahieren. Andere Lösungsansätze finden sich in schwergewichtigen UML-konzentrierten Softwareentwicklungsmethoden oder im Bereich der agilen Methoden. In beiden Umfeldern ist es üblich Anforderungsanalysen in Form von Use-Cases durchzuführen. In 2.2.1 wird der Rational Unified Process(RUP) als eine Vorgehensweise für OO-Entwicklung vorgestellt und in 2.2.2 wird auf die agilen Methoden, die sich als Gegenbewegung zu starren und schwergewichtigen Entwicklungsmodellen wie dem RUP verstehen, eingegangen. Die Unified Modelling Language (UML) spielt in vielen - u.a. auch den beiden oben genannten - Vorgehensweisen zur OO-Softwareentwicklung eine zentrale Rolle. Ebenso wird die im Lösungsansatz dieser Arbeit verwendete DiagrammNotation an UML angelehnt. Daher geben wir in 2.2.3 eine kurze Einführung in UML.

2.2.1 Der Rational Unified Process Der Rational Unified Process (RUP) ist ein iteratives, inkrementelles Vorgehensmodell für die objektorientierte Softwareentwicklung. Dabei handelt es sich weniger eine einzelne, spezielle Methode, als vielmehr um ein adaptierbares Prozessframework, das an die jeweiligen Gegebenheiten wie Projektgröße, Anwendungsbereich, Art des Unternehmens, usw. angepasst werden kann und soll. Der RUP wurde von der Firma Rational Software (seit 2002 zum IBMKonzern gehörig) als kommerzielles Produkt entwickelt und ist speziell auf den Einsatz mit Rational Tools abgestimmt. Historisch gesehen ist der RUP das Ergebnis drei Jahrzehnte währender Entwicklung und Praxiseinsätze mit vielen verschieden Einflüssen. Vom Ericsson Approach führte der Weg über den Objectory Process 1.0-3.8 (1987-1995) zum Rational Objectory Process 4.1 (1996/1997) bis daraus schließlich der Rational Unified Process 5.0 wurde, der 1998 veröffentlich wurde. Mit dem generischen Unified Process wurde ein entsprechendes, nichtproprietäres, Gegenstück zum kommerziellen RUP geschaffen. Heute gibt es verschiedene Frameworks (Agile UP, Open UP, Essential UP, Enterprise UP, etc)

2 Anforderungsanalyse

17

neben dem RUP, die letztlich alle unterschiedliche Varianten/Ausprägungen („Refinements“) des Unified Process darstellen.1 Der Einfachheit halber beschränken wir uns im Folgenden auf die Betrachtung des Unified Process. Das darin propagierte Vorgehen basiert auf den folgenden Prinzipien: • • •

Use-Case gesteuert: Mithilfe von Use-Cases werden die funktionalen Anforderungen des Systems erfasst und zur Steuerung des Entwicklungsprozesses eingesetzt Architektur zentriert: Die Systemarchitektur ist die Basis der Entwicklung. Sie gibt dem System die grundlegende Form, die der Umsetzung der Use Cases dienen soll Iterativ und inkrementell: In vielen Iterationen wird eine Folge von Arbeitsschritten wiederholt durchlaufen. Mit jeder Iteration wird Umfang und Qualität des Produkts verbessert, das ganze Projekt wächst inkrementell.

Im Unified Process erstreckt sich der Lebenszyklus eines Projekts über die Phasen Konzeption, Entwurf, Konstruktion, Übergang (Inception, Elaboration, Construction, Transition). Jede Phase ist in mehrere Iterationen unterteilt. In einer Iteration werden jeweils die Entwicklungsstadien Anforderungen, Anlyse, Design, Implementation und Test durchlaufen. Der Aufwand für die einzelnen Stadien kann je nach Zyklusphase unterschiedlich stark gewichtet sein. Am Ende jeder Iteration entsteht dann ein Inkrement des vorhergehenden Systems, welches sich durch Verbesserungen oder erweiterte Funktionalitäten auszeichnet. Das Verständnis für das zu entwickelnde System reift in den einzelnen Stufen des iterativen Prozesses. Bei der Notation des zu entwerfenden Softwaresystems bedient sich der Unified Process der Unified Modeling Language (UML). Tatsächlich ist die UML ein integraler Bestandteil des Unified Processs, beide wurden Hand in Hand miteinander entwickelt. Abschnitt 2.2.3 gibt eine Einführung in die UML. In einem Softwareentwicklungprojekt, das nach dem RUP organisiert wird, wird in der Regel ein unterstützendes Modellierungswerkzeug wie Rational Rose (s. Kapitel 3.1.3, Abschnitt Rational Rose) eingesetzt. Bei der Arbeit mit Rose ist neben der Möglichkeit, UML-Diagramme zu zeichnen, das eigentlich Wichtigere, dass Rose es erlaubt, alle technischen Konstrukte, die für die Erstellung der Software erstellt werden, zu verwalten. Mithilfe einer Use-Case-gesteuerten Arbeitsweise wird ein Modell der Applikation erstellt, von dem ausgehend sich alle Arbeitsergebnisse, die erstellt wurden, wieder erschließen lassen (vgl. [Borr02].

2.2.2 Agile Softwareentwicklung Agile Softwareentwicklung ist als eine Gegenbewegung zu den oft als zu schwergewichtigen und formal angesehenen Softwareentwicklungsprozessen wie 1

RUP und UP werden im Sprachgebrauch fast synonym verwendet. Teilweise lässt sich schwer sagen ob ein Framework nun ein Refinement vom RUP oder vom UP ist. Manche Quellen sehen auch den RUP als eine Ausprägung des UP.

2 Anforderungsanalyse

18

dem oben beschriebenen RUP entstanden. Ziel ist es die Softwareentwicklung zu verbessern. Agilen Methoden gehen davon aus, dass Anforderungen im Softwareentwurf nie komplett erfasst werden und deshalb ein iteratives Explorieren des Problemraums notwendig ist. Je nach Kontext bezieht sich der Begriff auf Teilbereiche der Softwareentwicklung, wie im Fall von Agile Modeling, oder auf den gesamten Softwareentwicklungsprozess, wie z.B. beim Extreme Programming. Die Hauptprinzipien hinter den agilen Methoden sind im Agile Manifesto [Agi01] festgehalten. In der Agilen Analyse versuchen Teams üblicherweise durch Benennung und Beschreibung so genannter Use-Cases ihre Vorstellung über das zu entwickelnde System zu verfeinern. Ein Use-Case beschreibt dabei eine Serie von Interaktionen zwischen Nutzer und System, die notwendig sind, um ein fachliches Ziel des Nutzers zu verwirklichen. In [Bit02] gibt es folgende Definition: "Use cases, stated simply, allow description of sequences of events that, taken together, lead to a system doing something useful" Use-Cases stellen Anwendungsszenarien des Systems dar. Die Schwierigkeit besteht dabei nun darin, aus den textuellen Use-Cases das Programm zu entwickeln. Hier gibt es nun den Ansatz mit Story-Cards zu arbeiten. Ein UseCase wird auf eine oder mehrere Story-Cards umgesetzt. Auf einer Story-Card wird eine einzelne Funktionalität aus Anwender/Kunden-Sicht in prosaischer Form erfasst. Diese Story-Cards werden dann wiederum auf Task-Cards abgebildet. Task-Cards enthalten die Beschreibung der Funktionalität aus Programmierersicht. Anhand der Task-Cards können die Entwickler die einzelnen Funktionen dann implementieren. Die große Herausforderung dieses Ansatzes besteht in dem Schritt der Übersetzung der Stories auf Objektinteraktion. Hier müsste ein unterstützendes Werkzeug die Möglichkeit bieten, den Objektraum zu explorieren. Ein weiterer systematischer Ansatz für die OO-Entwicklung, in dem Use-Cases auch eine Rolle spielen, wird in [Bör04] vorgestellt. Dieser Ansatz basiert auf Responsibility-Driven-Design (RDD) [Wirf90]. Börstler schlägt SzenarioRollenspiele mit CRC-Karten kombiniert mit der Protokollierung in einer speziellen Diagrammform vor. Wir erläutern den Ansatz von Börstler in Abschnitt 3.1.1 im Rahmen der State-of-the-Art-Untersuchung genauer. CRC (Class Responsibility Collaborator)-Karten sind ein gebräuchliches Mittel in der OO-Analyse. Ursprünglich waren CRC-Karten ein Hilfsmittel, mit dem Programmierern objektorientierte Denkweisen näher gebracht werden sollten (vgl. [Beck89]). Sie sind ein einfaches, informales Werkzeug für die kollaborative, objekt-orientierte Modellierung. Eine CRC-Karte ist eine in verschiedene Bereiche aufgeteilte Standard-Karteikarte (s. Abbildung 4.11). Die Karte korrespondiert zu einer Klasse, die Responsibilities geben an, welche Verantwortlichkeiten die Klasse haben soll und die Collaborators definieren, welche Klassen für die Erfüllung einer Verantwortlichkeit benötigt werden. Mit den CRC-Karten lässt sich nun ein informales Analyse-Modell der Domäne erstellen. Die Entwicklung erfolgt idealerweise (wie alle agilen Entwurfsprozesse) in einem kreativen, kooperativen Gruppenprozess.

2 Anforderungsanalyse

19

Anhand der CRC-Karten können Rollenspiel zum Simulieren von Objektinteraktionen und zum Explorieren des Modells durchgeführt werden. Auf diese Weise werden Unklarheiten und Inkonsistenzen aufgedeckt, neue Erkenntnisse werden gewonnen. Die Rollenspiel-Szenarien stellen letztlich Testfälle für das System dar. Wie bei Testfällen generell üblich, müssen Testsituationen und Testdaten vorbereitet werden. Ein entsprechendes unterstützendes Tool müsste die Objektinteraktionen visualisieren und protokollieren, es müsste interaktives Szenario-Rollenspiel unterstützen und die Möglichkeit vorsehen, das System mit Testdaten zu initialisieren.

2.2.3 Die Unified Modeling Language Die Unified Modelling Language (UML, [UML07]) spielt in vielen - u.a. auch den beiden oben genannten - Vorgehensweisen zur OO-Softwareentwicklung eine zentrale Rolle. Ebenso wird die im Lösungsansatz dieser Arbeit verwendete Diagramm-Notation an UML angelehnt. Dieser Abschnitt soll daher einen kurzen Einblick in UML bieten und die Diagramme vorstellen, die im Rahmen dieser Arbeit von Bedeutung sind. Die UML ist eine visuelle Sprache für die Spezifikation, Konstruktion und Dokumentation der Artefakte von Softwaresystemen und Geschäftsprozessen (vgl. [OMG03]). Die Verantwortung für die Pflege und ständige Weiterentwicklung des UML-Standards liegt in den Händen der Object Management Group (OMG). Die UML erfreut sich aus verschiedenen Gründen großer Beliebtheit. Zum einen können mit einer einheitlichen und verständlichen Notation die verschiedensten Elemente eines Softwaresystems visuell beschrieben werden. Zum anderen bildet sie eine einfache Grundlage für die Kommunikation zwischen den Entwicklern. In [Fowler03] werden drei Methoden vorgestellt, wie Entwickler die UML anwenden (UML als Skizze (formlose, unvollständige Diagramme, Handskizzen auf Whiteboards, um den Lösungsraum und schwierige Teile des Problems zu analysieren, UML als Blaupause (detailliertere Entwurfsdiagramme für a) Reverse Engineering: Tools generieren Klassen aus Code oder b) Codegenerierung, also die andere Richtung, aus Diagrammen wird Code generiert), UML als Programmiersprache. Agile Modellierung betont UML als Skizze. Die UML umfasst eine Reihe von graphischen, in Diagrammen organisierten, Notationselementen für die Spezifikation statischer und dynamischer Modelle von Analyse, Design und Architektur. Sie definiert sich dabei selbst über ein Metamodell. UML ist heute de facto Standard für die graphische Modellierung von Software und stellt die dominanteste graphische Notation in der objektorientierten Welt dar (vgl. [Fowler03]). Wie bereits erwähnt, gibt es Vorgehensmodelle/Methoden, die auf der UML aufbauen (s. oben, UP, RUP), die UML selbst ist aber weitgehend Methoden-neutral und gibt keine spezielle Vorgehensweise für den Modellierungsprozess vor, sie gibt dem Anwender lediglich eine einheitliche Notation an die Hand. Entstehungsgeschichte Mitte der 70er bis Mitte 90er entstanden mehr als 50 Ansätze für Modellierungssprachen für objektorientierte Analyse und Design. Einige dieser

2 Anforderungsanalyse

20

Ansätze unterschieden sich nur marginal, während andere sich bereits in ihren Zielsetzungen unterschieden. Letztlich konnte sich aber kein Ansatz als Universallösung durchsetzen. 1995 vereinten Grady Booch und James Rumbaugh im Rahmen der Rational Software Corporation ihre beiden Notationen zur Unified Method(UM). Im Oktober 1995 stieß Ivar Jacobsen dazu und brachte Elemente aus seinem Object Oriented Software Engineering (OOSE)-Ansatz ein, dazu gehörten u.a. auch die von ihm geprägten Use Cases. So entstand die UML 0.9. Die drei Sprachschöpfer sind seitdem auch als die „drei Amigos“ bekannt. Viele namhafte Firmen (IBM, Microsoft, Hewlett Packard, Oracle, etc) hatten den Bedarf nach einer einheitlichen Sprache erkannt und schlossen sich in der Folgezeit dem weiteren Entwicklungsprozess an. 1997 wurde die UML dann schließlich in der Version 1.1 bei der OMG zur Standardisierung eingereicht und akzeptiert. Es folgten schnell weitere 1.x-Versionen, die kleinere Änderungen und Fehlerbehebungen umsetzten. Der nächste größere Evolutionsschritt kam aber erst im Frühjahr 2005 mit der Version 2.0. Darin wurde das Metamodell allgemein stark konsolidiert. In den Bereichen Interaktion und Aktivitäten wurde es komplett neu erstellt. Neue Konzepte (CompositePart, Port/Connector, Collaboration, Interaction, Activity, etc) und entsprechende Notationen kamen hinzu. Einige alte Notationen wurden verbessert. Die UML stellt verschieden Diagramme zur Verfügung, um das Modell einer Problemdomäne grafisch darzustellen. Die Diagramme unterscheiden sich durch die Blickwinkel aus dem sie die Problemstellung betrachten. UML-Diagramme können als gemeinsame Kommunikationsbasis für beteiligte Personen aus unterschiedlichen Kontexten mit unterschiedlichem Hintergrundwissen dienen. Die einheitliche Notation ermöglicht dem Kunden, die „gleiche Sprache“ wie der Programmierer zu sprechen und zu verstehen. Mit der UML werden Modelle beschrieben – Die Modellierung kann hilfreiche Unterstützung bei der SystemEntwicklung bieten, Modelle reduzieren enorme Komplexität von Sachverhalten auf ein überschaubares Maß. Die Diagramme lassen sich in zwei Kategorien einteilen, Struktur- und Verhaltensdiagramme. Strukturdiagramme beschreiben die statischen und Verhaltensdiagramme die dynamischen Eigenschaften eines Systems. Im Folgenden beschränken wir uns auf die Betrachtung von Klassendiagrammen, Objektdiagrammen, Sequenz- und Kommunikationsdiagrammen. Diese Diagramme sind im Zusammenhang mit der Aufzeichnung von Objektinteraktion und den in [Bör04] vorgestellten RPDs relevant. Klassendiagramm Die Struktur eines Systems wird durch das Klassendiagramm repräsentiert. Das Klassendiagramm beschreibt, welche Klassen existieren und in welchen Beziehungen sie zueinander stehen Eine Klasse ist die Definition der Attribute, Operationen und der Semantik für eine Menge von Objekten. Alle Objekte einer Klasse entsprechen dieser Definition. In objektorientierten Programmiersprachen repräsentieren Klassen die verschiedenen Objekttypen.

2 Anforderungsanalyse

21

Das Diagrammelement für die Darstellung einer Klasse ist ein üblicherweise aus 3 Abschnitten (Compartments) aufgebautes Rechteck (vgl. Abbildung 2.1): -

Oberste Abschnitt: Klassenname, fett 2. Abschnitt: Attribute 3. Abschnitt: Methoden

Es kann weitere optionale Abschnitte kommentierende Annotationen sind möglich.

geben,

wie

Responsibilities,

In UML werden die Diagrammelemente umfassend als Merkmale (Features) bezeichnet, Attribute und Methoden sind also die Merkmale einer Klasse. Zu jedem Merkmal können Details wie Sichtbarkeit, Multiplizität, Parameter, Initialisierung und ggf. Einschränkungen/Zusagen (constraints) notiert werden. Sichtbarkeit wird in Form von Symbolen vor dem Merkmal angegeben - (private), # (protected), + (public). Klassenamen müssen per Konvention mit einem Großbuchstaben beginnen, Merkmale dagegen mit einem Kleinbuchstaben. Abstrakte Klassen/Methodenname werden kursiv dargestellt)

Abbildung 2.3 Beispiel für die Klassen-Notation in UML1

Beziehungen zwischen Klassen beschreiben, wie genau die beteiligten Klassen miteinander kollaborieren dürfen. Beziehungen zwischen Klassen werden mit Verbindungslinien dargestellt. Es gibt verschieden Arten von Beziehungen, Beziehungen sind gerichtet. •



1

Assoziation – repräsentiert strukturelle Beziehungen zwischen verschiedenen Objekten einer oder mehrerer Klasse, kann Kardinalitäten haben, sollte mit Verb-Phrase benannt werden. Ausgefüllte Pfeile markieren die Leserichtung, können sofern nicht anders angegeben, in beiden Richtungen navigiert werden Aggregation – Spezialform der Assoziation, Zusammensetzung eines Objekts aus einer Menge von Einzelteilen, (has oder part of –relationship) Hat-Beziehung, Teile-Ganzes-Hierarchie, ein Auto hat Räder, ein Depot hat Konten,

Die in diesem Abschnitt verwendeten UML-Diagramme sind aus [Bör04] entnommen

2 Anforderungsanalyse •



22

Komposition – Besondere Form der Aggregation, die Einzelteile sind vom Aggregat (dem Ganzen) existenzabhängig, eine Aggregation mit existenzabhängigen Teilen, Rechnung hat Rechnungspositionen, Konto hat Transaktionen Generalisierung/Spezialisierung - bezeichnet Vererbung und Subtyping. PhStudent ist ein Subtyp von Student und Lecturer und kann an allen Stellen eingesetzt werden, an denen die Typen Student und Lecturer verwendet werdenl.

Abbildung 2.4 zeigt ein Klassendiagramm mit Analyse-Level-Details und einigen Design-Level-Details.

Abbildung 2.4 – Beispielhaftes Klassendiagramm

Objektdiagramm Ein Objektdiagramm stellt eine Momentaufnahme des Systems zu einem bestimmten Zeitpunkt dar. Es enthält fast die gleichen Notationselemente wie das Klassendiagramm, allerdings können hier die Attribute konkrete Werte annehmen, und Objekte können Namen haben. Der Name wird mit Doppelpunkt vor den Klassennamen geschrieben und zur besseren Unterscheidung von Klassen- und Objektdiagrammen unterstrichen.

Abbildung 2.5 – Objektdiagramm, passend zum Klassendiagramm in Abb. Abbildung 2.4

Kommunikationsdiagramm In früheren UML-Versionen (UML1.x) hießen diese Diagramme noch Kollaborationsdiagramme. Kommunikationsdiagramme sind Verhaltensdiagramme, die die Interaktion von Kommunikationspartnern darstellen. Interaktionspartner können dabei beliebige Classifier sein (Klassen, Objekte, Akteure, Knoten).

2 Anforderungsanalyse

23

Die Beschreibung der Interaktionen fokussiert hier die strukturellen Beziehungen zwischen den Elementen. Daher sind diese Diagramme gut geeignet, wenn wenige Nachrichten ausgetauscht werden, aber die Beziehungen zwischen den Interaktionspartnern unterstrichen werden sollen.

Abbildung 2.6 – Kommunikationsdiagramm entsprechend des Klassendiagramms in Abb. Abbildung 2.4

Abbildung 2.6 zeigt ein beispielhaftes Kommunikationsdiagramm. Die Reihenfolge der Nachrichten wird durch Sequenznummern ausgedrückt, Richtung und Typ der Nachricht als kleine Pfeile. Es gibt einen so genannten Actor, der eine Person oder ein externes System repräsentiert, welcher mit dem System interagieren kann. Sequenzdiagramm Sequenzdiagramme enthalten semantisch fast äquivalente Information wie Kommunikationsdiagramme, bieten aber mehr Detailgenauigkeit. Sie fokussieren auf den zeitlichen Verlauf der Nachrichten. Sie sind gut geeignet, wenn wenige Interaktionspartner viele Nachrichten austauschen und komplexe Muster des Nachrichtenaustauschs zu modellieren sind. Es werden Modellierungsmöglichkeiten für feste Reihenfolgen, logische und zeitliche Ablaufbedingungen geboten. Das Sequenzdiagramm ist das meistverwendete und umfangreichste Interaktionsdiagramm, es bietet die höchste Detailtiefe und enthält alle wichtigen Basiskonzepte. Details zur Notation: - Jeder Interaktionspartner besitzt Lebenslinie - Nachrichten werden durch Pfeile zwischen den Lebenslinien dargestellt. - Form des Pfeils symbolisiert den Type der Nachricht, Aufruf (gefüllte Spitze), Antwort (gestrichelt), synchrone Nachricht) - Aktivierungsbalken zeigt, das ein IAP die Kontrolle hat - Resultat eines Aufrufs kann direkt als Attributzuweisung im Aufruf mit angegeben werden (ergebnis = bearbeiten(auftragsnr1, artikel1) - Selbstaufrufe: Aktivierungsbalken werden übereinander gelegt Abbildung 2.7 zeigt ein beispielhaftes Sequenzdiagramm.

2 Anforderungsanalyse

24

Abbildung 2.7 – Sequenzdiagramm, äquivalent zum Kommunikationsdiagramm in Abbildung 2.6

2.2.4 Anforderungen im Kontext der OO-Entwicklung Bei den vorgestellten Vorgehensweisen – und bei der OO-Entwicklung generell geht es darum, den Problembereich einzukreisen und die Artefakte (Objekte, Klassen und Methoden) des Domänen-Modells zu identifizieren. Im Einzelnen lassen sich in diesem Kontext die folgende Anforderungen herleiten. EA11 Identifikation der Objekte Benutzer müssen sich explorierend durch den Problemraum bewegen können. Es muss möglich sein, festzustellen, welche Objekte zur Lösung eines Problems tatsächlich notwendig sind, und ob die Klassenkandidaten eines evtl. bereits gegebenen Analysemodells korrekt gewählt sind oder evtl. angepasst werden müssen. Hierfür ist es erforderlich, dass die Anwendung Klassen- bzw. Objektstrukturen visualisiert und die Benutzerinteraktion auf Objekt-Level zulässt. Anwender müssen Klassen definieren und aus diesen Klassen Objekte erzeugen können. Es muss möglich sein, Einblick in Objektzustände zu verschiedenen Zeitpunkten nehmen zu können und Objektzustände ggf. manuell, durch Manipulation von Attributwerten, ändern zu können. Dadurch erlangt der Anwender nicht nur über die benötigten Objekte sondern auch über deren Struktur, also die benötigten Attribute, Klarheit. EA2 Identifikation der Nachrichten Analog zu den Objekten müssen auch die zur Umsetzung einer Funktionalität benötigten Nachrichten identifiziert werden können. Es muss klar werden, welche Nachrichten ein Objekt an ein anderes senden kann, bzw. welche Methoden das andere Objekt zur Verfügung stellt. Hierfür sollte die Anwendung es dem Anwender erlauben, interaktiv im Kontext eines Objekts das Senden einer Nachricht zu initiieren und so den Nachrichtenfluss zu simulieren. Die Anwendung muss auf der einen Seite sicherstellen, dass die Nachrichten und Parameter den Signaturen der zugehörigen Methoden entsprechen. Auf der anderen Seite sollte aber auch die Ad-Hoc-Generierung einer Methode bei Eingabe einer neuen, unbekannten Nachricht unterstützt werden. Auf diese Weise, können neue Erkenntnisse direkt umgesetzt werden 1

EA steht für Entwicklungs-Anforderung

2 Anforderungsanalyse

25

EA3 Reaktion auf Nachrichten Neben der Frage, welche Nachrichten bzw. Methoden benötigt werden, ist auch die Frage nach der Nachrichtenbearbeitung, bzw. dem Aufbau der Methoden zu klären. Was genau geschieht, wenn ein Objekt eine Nachricht erhält, wie wird diese Nachricht bearbeitet. Dazu kann das Ändern des Objektzustandes, das Senden weiterer Nachrichten, und Rückgabe eines Rückgabewertes gehören. Die Anwendung sollte es also ermöglichen, die Reaktionen eines Objekts auf Nachrichten zu examinieren und ggf. individuell zu manipulieren. Durch diese direkte Interaktion kann der Anwender sich am besten Klarheit über die erforderlichen Bearbeitungsschritte, bzw. den Aufbau der erforderlichen Methoden verschaffen. EA4 Identifikation der Objekt-Beziehungen Die Anwendung muss die Identifikation von Objekt-Beziehungen, und damit entsprechend die Identifikation der Assoziationen zwischen Klassen unterstützen. Die Anwendung muss sicherstellen, dass Nachrichten nur dann an Objekte gesendet werden können, wenn die Objekte sich kennen, also eine Beziehung zueinander haben (z.B. über einen entsprechenden Attributwert). Die Objektbeziehungen sollten visualisiert werden (z.B. über entsprechende Linien in einer Diagrammdarstellung), damit der Anwender sich schnell Überblick verschaffen und fehlende Assoziationen identifizieren kann. EA5 Testmöglichkeiten Die Entwicklung eines OO-Programms ist ein iterativer Prozess in dem das Domänenmodell schrittweise verfeinert wird. Eine Anwendung, die die Entwicklung von Domänenmodellen unterstützt, sollte immer Möglichkeiten bieten, diese Modelle in den unterschiedlichen Entwicklungsstadien zu testen. Erst beim Testen werden Schwachstellen und Inkonsistenzen offenbart. Die Anwendung muss also die Möglichkeit bieten, Testfälle/-szenarien zu konstruieren, initiale Testdaten einzugeben, und den entsprechenden Programmfluss zu simulieren. EA6 Kommunikationsmedium für den Wissenstransfer Entwickler müssen die gewonnenen Erkenntnisse untereinander kommunizieren können. Daher ist es erforderlich, dass die Anwendung die Ergebnisse der Entwicklung in einer geeigneten Form repräsentiert und diese Repräsentation dann als gemeinsame Diskussionsgrundlage verwendet werden kann. a) Graphische Visualisierung als Kommunikationsunterstützung Objektstrukturen und Nachrichtenfluss, das Zusammenspiel von Artefakten allgemein, sollten graphisch visualisiert werden, z.B. in Form eines Diagramms. An einem Diagramm können diesbezügliche Details leicht erklärt und kommuniziert werden. In Frage kommen u.a. die in der Software-Entwicklung weit verbreiteten UML-Diagramme. UML ist eine Standardnotation, die von den Entwicklern einheitlich verwendet wird und deren Elemente allgemein bekannt sind. Verschiedene Diagramme visualisieren verschiedene Sachverhalte. Im Zusammenhang mit Rollenspielen ist es sinnvoll, eine spezielle, aus UMLObjekt und Kooperationsdiagrammen kombinierte, Diagrammform einzusetzen (Role-Play Diagrams, s. [Bör04]) b) Protokolle der Interaktion als Kommunikationsunterstützung. Benutzereingaben und Objektinteraktionen sollten in nachvollziehbarer und eindeutiger Form aufgezeichnet werden. Benutzer müssen anhand der Protokolle Programmfluss und Wertzuweisungen eindeutig nachzuvollziehen können und die Protokolle ggf. als gemeinsame Grundlage für die rückblickende Diskussion getroffener Entscheidungen verwenden können.

2 Anforderungsanalyse

26

EA7 Unterstützung lokaler und verteilter Teams An der Entwicklung eines Softwaresystems sind üblicherweise ganze Teams beteiligt. Dazu können zum einen verschiedene Entwickler mit unterschiedlichem Expertenwissen und zum anderen der Kunde/Auftraggeber, der aktiv mit in den Entwicklungsprozess einbezogen wird, gehören. Dementsprechend sollte eine Entwicklungsumgebung also auch für einen Mehrbenutzerbetrieb ausgelegt sein. Das Team muss die Möglichkeit haben, von verschiedenen Arbeitsplätzen aus gemeinsam an Projekten zu arbeiten. Verteilte Teams – z.B. der Kunde oder bestimmte Entwickler nicht vor Ort - müssen dabei genauso wie lokale Teams – alle Teammitglieder am selben Ort – unterstützt werden. EA8 Angebot des potenziellen Mehrwerts für die Anwender Der Einsatz einer technologischen Unterstützung muss immer auch einen praktischen Mehrwert für den Anwender mit sich bringen. Es muss aus Anwendersicht eine Motivation existieren, die den Aufwand rechtfertigt, sich in die Anwendung einarbeiten und sie zu nutzen. Einen solchen Mehrwert kann zum Beispiel die Möglichkeit der generischen Erzeugung von Sourcecode bieten. EA9 Flexible Reaktion auf neue Erkenntnisse Während des Entwicklungsprozesses werden ständig neue Erkenntnisse gewonnen, die direkt in den Entwurf mit einfließen sollen. Die Anwendung muss eine flexible Anpassung des Systems zulassen. Es muss möglich sein, Änderungen am Modell schnell und einfach umsetzen zu können und mit relativ wenig Aufwand verschiedene Design-Alternativen testen zu können. Daraus können dann wiederum neue Erkenntnisse gewonnen werden. EA10 Nachvollziehbarkeit Im Hinblick auf spätere Bewertungsmöglichkeiten eines Entwurfs ist es wichtig, alle getroffenen Entscheidungen nachvollziehbar aufzuzeichnen. Dazu gehört die chronologische Protokollierung des Nachrichtenflusses und aller im Zuge der Nachrichtenbearbeitung vorgenommenen Wertzuweisungen an lokale Variablen, Attribute oder Parameter.

2.3 Kooperationsaspekte in Lehre und Entwurfsprozessen Die 2.1 und 2.2 ermittelten Anforderungen beziehen sich vorwiegend auf die Sicht, die Einzelbenutzer auf das System haben. Dieser Abschnitt konzentriert sich nun auf Kooperationsaspekte - wir betrachten, welche Anforderungen sich an eine von mehreren Benutzern synchron genutzte Anwendung ergeben. Wir leiten her, welche Anforderungen nötig sind, um lokale und verteilte Rollenspiele technologisch zu unterstützen. Wie bereits in 2.1.1 ausgeführt, eignen sich Rollenspiele besonders gut für die Vermittlung der dynamischen Aspekte objektorientierter Systeme und es ist durchaus üblich, sie im Rahmen des Unterrichts einzusetzen. Börstler [Bör04] schlägt darüber hinaus in seinem Ansatz den Einsatz von Rollenspielen (in Kombination mit CRC-Karten und Role-Play Diagrammen) in der Softwareentwicklung vor, und zwar sowohl in der Analyse- als auch in der Design-Phase. In Rollenspielen übernehmen die Mitglieder einer Gruppe die Rolle von Objekten, und simulieren Nachrichtenfluss und -bearbeitung durch

2 Anforderungsanalyse

27

Interaktion mit anderen Akteuren/Objekten. So gewinnen sie Erkenntnisse über die Abläufe des objektorientierten Systems. Man unterscheidet nun zwischen face-to-face und virtuellem Rollenspiel. Face-toface-Rollenspiele sind inhärent kooperative Prozesse, für eine sinnvolle Durchführung sind mehrere (zumindest mehr als einer) kooperierende Akteure nötig. Der Vorteil bei dieser Art des Rollenspiels und der Kooperation ist, dass alle Gruppenmitglieder automatisch synchron dieselbe Information über das simulierte System erhalten, sie sehen, welche Objekte beteiligt sind, wann und wie ein Objekt aktiviert wird, sie hören wenn eine Nachricht gesendet wird und sie hören das Ergebnis der Bearbeitung. Probleme können direkt diskutiert werden. Ein weiterer natürlicher Vorteil des physischen Rollenspiels, der ebenfalls aus der direkten Kommunikations-/ Diskussionsmöglichkeit resultiert, ist Möglichkeit der dynamischen (on-the-fly) Adaption des simulierten Systems. Die Akteure ändern einfach ggf. ihr Script und agieren entsprechend anders. Auf der anderen Seite gibt es die virtuelle Rollenspiele – Schüler arbeiten am Rechner und übernehmen die Rolle von antropomorphisierten Objekten in einer virtuellen Welt (Beispiel Alice, Karel J. Robot, ViRPlay vgl. 2.1.1) – in diesem Fall ist die kooperative Ausführung in einer Gruppe keine zwingende Voraussetzung, im Gegenteil, die meisten Systeme unterstützen tatsächlich nur den Single-User-Modus (ViRPlay ist von den hier vorgestellten das einzige System, das den Multi-User-Betrieb unterstützt). Der Anwender übernimmt dann nacheinander die Rolle aller verschiedenen Objekte, oder das System übernimmt stellvertretend selbst Rollen. Ein Mehrbenutzerbetrieb, und damit ein kooperatives Rollenspiel bei dem verschiedene Rollen eben auch von verschiedenen Benutzern übernommen werden, ist dennoch wünschenswert und u. U. auch effizienter, schon weil es dem natürlichen Charakter des Rollenspiels entspricht. Das virtuelle Rollenspiel bringt Vor- und Nachteile gegenüber dem physischen Rollenspiel mit sich. Ein Softwaresystem kann die Möglichkeit bieten, die ansonsten eher flüchtigen Informationen zu speichern. So ließen sich u.a. Objekte speichern und Objektinteraktionen und Nachrichtenfluss persistent protokollieren, auch Replay-Funktionen wären denkbar. Je nach Darstellungsform kann die Repräsentation der Visualisierung zu Dokumentationszwecken wieder verwendet werden.

In 2.1.2 und 2.2.4 haben wir gezeigt, dass sich die Forderung nach einer verteilten Anwendungsmöglichkeit (und damit nach verteiltem Rollenspiel) sowohl im didaktischen (DA8) als auch im Entwicklungs-Kontext (EA7) ergibt. Die Durchführung von Rollenspielen in einer verteilten, also räumlich getrennten, Gruppe ist nun aber nicht so ohne weiteres möglich. Man braucht geeignete Hilfsmittel, die den Gruppenprozess unterstützen und welche die Nachteile, die sich aus der räumlichen Distanz der Gruppenmitglieder im Gegensatz zur face-toface Kommunikation ergeben, kompensieren. Gruppenprozess-unterstützende Systeme bezeichnet man allgemein mit dem Begriff Groupware.

2 Anforderungsanalyse

28

2.3.1 Groupware Die Forschungsdisziplin, die sich mit Groupware befasst, nennt sich Computer Supported Concurrent Work (CSCW). Mitunter werden die Begriffe CSCW und Groupware auch synonym verwendet. In [Baec93, Part1 - Introduction] findet sich ein Überblick über einige kontrovers diskutierte Definitionen und Naturen beider Begriffe. Es gibt verschiedene Klassifikationsmerkmale für Groupware. Ein gängiger Klassifikationsansatz ist das 3K-Modell, erstmals vorgestellt in [Teu95], hierbei wird Groupware hinsichtlich ihrer funktionalen Unterstützung von Gruppen klassifiziert, und zwar bzgl. • • •

Koordination: Koordinierung von Gruppenaktivitäten Kooperation: Hinarbeiten auf das Erreichen eines gemeinsam verfolgten Ziels Kommunikation: Informationsaustausch innerhalb der Gruppe

Abbildung 2.8 - Das 3K-Modell nach Teufel et al. [Teu95]

Der klassische Ansatz von Teufel et al. in [Teu95] fasst Groupware-Systeme mit ähnlichen Funktionalitäten in Systemklassen zusammen (communication systems, workflow management systems, shared information spaces, workgroup computing systems). Die Systemklassen sind innerhalb eines Dreiecks aus Koodination, Kooperation, Kommunikation angeordnet, um auszudrücken zu welchem Grad ein System den jeweiligen Aspekt unterstützt (vgl. Abbildung 2.8). In [SL07], S.11f wird ein anderer Ansatz verfolgt - hier werden die gängigen Groupware-Anwendungen in einer 2-dimensionalen Abhängigkeit von dem Maß, in dem sie Koordination unterstützen und von dem Maß, in dem sie Kommunikation/Kooperation unterstützen, gesehen (vgl. Abbildung 2.9). Diese

2 Anforderungsanalyse

29

Darstellung soll den jeweiligen Anteil der individuellen Anwendungen an den 3Ks besser visualisieren. Die Autoren unterscheiden Tools für Audio/VideoKonferenzen, Chat-Tools, E-Mail, Foren, Wikis, Group Decision Support Systems (GDSS), Community Systems, Shared Workspaces, Multi-User-Editoren, Multi-Player Spiele, Workflow Management Systems (WfMS)

Abbildung 2.9 – Aus [SL07]: Einordnung von Groupware-Systemen bzgl. ihrer Unterstützung der 3Ks

Der Vollständigkeit halber sei erwähnt, dass es noch weitere mögliche Taxonomien zur Klassifizierung von Groupware gibt. Als Kriterien kommen z.B. Zeit (synchron/asynchron) und Ort (lokal/remote) und Vorhersehbarkeit (spontan/geplant) in Frage. Als Vertreter solcher Ansätze seien die klassische Raum/Zeit-Matrix nach Robert Johansen und deren Erweiterung um den Parameter Vorhersehbarkeit nach Jonathan Grudin erwähnt. Die Herausforderung bei der Entwicklung einer kooperativen Anwendung besteht nun gerade darin, dass zusätzlich zur eigentlichen Anwendungsfunktionalität die Unterstützung und Umsetzung von Koordination und Kooperation/ Kommunikation betrachtet werden muss. Die Anwendung muss ein User- und Sessionmanagement zur Verfügung stellen, um die verschiedenen Benutzer zu verwalten, und gemeinsame Arbeitssitzungen (so genannte Sessions) zu starten und die synchrone oder asynchrone Zusammenarbeit mehrer Benutzer zu ermöglichen und zu koordinieren. Unter Umständen müssen synchrone Kommunikationsmöglichkeiten (Chat o.ä.) integriert werden. Ein weiterer, zentraler Aspekt von Groupware-Anwendungen ist die Unterstützung des Gruppenbewusstseins (Awareness). Bei verteilten Gruppen ist es wichtig zu verhindern, dass bei den einzelnen Gruppenmitgliedern das Gefühl der Isolation und Anonymität entsteht und sie an Motivation verlieren. Die Anwendung muss geeignete Maßnahmen ergreifen, die dazu führen, dass die einzelnen Benutzer jederzeit über Anwesenheit/Online-Status und die Aktivitäten der anderen Benutzer informiert sind. Die Umsetzung von verteilten virtuellen Rollenspielen kann man sich mit einer Anwendung aus der Rubrik der synchronen Mehrbenutzereditoren vorstellen. Solche Editoren erlauben den Gruppenmitgliedern synchron innerhalb einer gemeinsamen Arbeitsumgebung gemeinsame Artefakte zu erzeugen und zu

2 Anforderungsanalyse

30

manipulieren und auf diese Weise Gruppenziele zu erreichen. Die Gruppenmitglieder teilen die gleiche Sicht (shared view) auf den gemeinsamen Informationsraum nach dem Prinzip WYSISIS (What you see, is what I see). Gruppeneditoren erfordern ein hohes Maß an Kooperations- und Koordinationsfunktionalitäten, Änderungskonflikte müssen aufgelöst, bzw. vermieden werden. Synchrone Kommunikation ist nicht explizit gefordert und hat daher nur einen geringen Stellenwert (vgl. [SL07]). Schümmer et al. formulieren in [Schü00] folgende technische Anforderungen, die sich an eine Groupware bzgl. des gemeinsamen Objektzugriffs ergeben: Die bearbeitenden Objekte müssen für alle Benutzer erreichbar und manipulierbar sein. Änderungen an diesen Objekten müssen an alle Benutzer propagiert werden. In interaktiven Anwendungen muss der Zugriff schnell genug sein, um flüssiges Arbeiten zu ermöglichen. Die gemeinsamen Objekte müssen in einem konsistenten und für alle Benutzer gleichen Zustand gehalten werden. Die Anwendung muss dafür sorgen, dass Zugriffskonflikte aufgelöst oder von vorne herein vermieden werden. Die Bildschirmanzeige muss mit dem Zustand der zugrunde liegenden gemeinsamen Objekte konsistent sein.

2.3.2 Technische Anforderungen Wie im letzten Abschnitt erläutert, resultiert aus den geforderten Kooperationsaspekten eine Reihe von technischen Anforderungen an die Anwendung. Im Folgenden werden diese Anforderungen nun genauer definiert. TA11 Gemeinsamer Informationsraum Ein kooperativer Editor im Sinne der Aufgabenstellung Arbeit basiert naturgemäß auf einem gemeinsamen Informationsraum, in welchem eine Gruppe von Anwendern gemeinsame Objekte manipuliert - daher können die Anforderungen aus [Schü00] hier einfließen. Die Anwendung muss den gemeinsamen Zugriff auf die Artefakte des Informationsraums koordinieren. Die Artefakte müssen für alle Benutzer erreichbar sein und im gleichen und konsistenten Zustand gehalten werden. Zugriffskonflikte müssen aufgelöst oder von vorne herein vermieden werden. Es muss einen Benachrichtigungsmechanismus geben, der Änderungen an den Artefakten an alle Benutzer verteilt. Der Zugriff auf die Artefakte muss schnell genug sein, um flüssiges Arbeiten zu ermöglichen. Die Bildschirmanzeige muss mit dem Zustand der zugrunde liegenden Artefakte konsistent sein. Alle Anwender sollten dieselbe Sicht auf das Interaktionsdiagramm haben. TA2 Kommunikationsmedium für den Wissenstransfer Wissen kann durch Kommunikation transferiert werden. Eine Groupware muss diesen Prozess unterstützen indem sie Informationen in einer Form, die den Anwendern als Grundlage für die spätere Kommunikation und Diskussion dienen kann. aufbereitet und repräsentiert a) Graphische Visualisierung als Kommunikationsunterstützung Wie bereits in EA6a und DA6a ausgeführt - Objektstrukturen und Nachrichtenfluss, also das Zusammenspiel von Artefakten allgemein, sollten graphisch visualisiert werden, z.B. in Form eines Diagramms. Im Zusammenhang mit Rollenspielen ist es sinnvoll, eine spezielle, aus UML-Objekt und Kooperationsdiagrammen kombinierte, Diagrammform einzusetzen (Role-Play 1

TA steht für technische Anforderung

2 Anforderungsanalyse

31

Diagrams, s. [Bör04]) b) Protokolle der Interaktion als Kommunikationsunterstützung. Wie bereits in EA6a und DA6a ausgeführt - Benutzereingaben und Objektinteraktionen sollten in nachvollziehbarer und eindeutiger Form aufgezeichnet werden. Benutzer müssen anhand der Protokolle Programmfluss und Wertzuweisungen eindeutig nachzuvollziehen können und die Protokolle ggfs. als gemeinsame Grundlage für die rückblickende Diskussion getroffener Entscheidungen verwenden können. TA3 Synchrone Kommunikation Normalerweise spielt die Kommunikation in Mehrbenutzereditoren eine eher nebensächliche Rolle. In unserem Fall (System-Analyse allgemein, Rollenspiel speziell) ist aber die direkte Kommunikation in der Gruppe ein wesentlicher Faktor. Es muss möglich sein schnell im direkten Dialog Details oder Unklarheiten bzgl. des Szenarios oder des Modells klären zu können ohne dafür auf externe Mittel wie Telefon oder Mail-Client zurückgreifen zu müssen. Die Anwendung sollte der Gruppe also eine synchrone Kommunikationsmöglichkeit bieten, z.B. in Form eines integrierten Chats. TA4 Awareness Groupawareness ist ein zentrales Element in einer kooperativen Anwendung. Anwender dürfen sich nicht isoliert fühlen, es muss für jeden jederzeit klar erkennbar sein, welche Mitglieder zur Gruppe gehören und ihr jeweiliger OnlineStatus muss visualisiert werden. Es muss klar sein, welche Aktivitäten von welchem Benutzer ausgeführt werden (wer schickt welche Nachricht, wer hat die Kontrolle). Bzgl. der Artefakte muss angezeigt werden, welches Gruppenmitglied welche Rolle innehat und wenn diese gewechselt wird. Es muss erkennbar sein, welches Gruppenmitglied das aktive Objekt dirigiert und damit die aktuelle Kontrolle besitzt. TA5 Modellierung von Rollen Eine Groupware sollte die Modellierung von Rollen für die Ausführung bestimmter Aktivitäten ermöglichen, Benutzer werden aufgrund bestimmter Eigenschaften Rollen zugeordnet und sie übernehmen dementsprechend die Aktivitäten. Die jeweiligen Rollenzuordnungen sollten im Sinne der Awareness visualisiert werden. In Bezug auf das Rollenspiel-Konzept sollte die Anwendung es ermöglichen, die Rolle von Klassen zu übernehmen. Zu den Aktivitäten, die mit dieser Rolle verbunden sind, gehören dann u.a. das Erzeugen von Objekten dieser Klasse und das Steuern dieser Objekte. Steuern meint hier, Nachrichten empfangen, bearbeiten (dabei ggf. Attributwerte manipulieren, weitere Nachrichten verschicken) und beantworten. Alle Darstellungsformen von Klassen und Objekten sollten visuelle Hinweise auf den steuernden Benutzer beinhalten. TA6 Synchronisation des Diagramms

2 Anforderungsanalyse

32

Wenn die Objektinteraktion in einem Diagramm aufgezeichnet wird, sollten wie in TA1 gefordert, alle Benutzer dieselbe Sicht auf dieses Diagramm haben. Die darzustellenden Informationen ändern sich dynamisch, wobei die Änderungen von verschiedenen Benutzern (auch konkurrierend) verursacht werden können. Die Anwendung muss nun also bei jeder Änderung für eine geeignete Synchronisation der Darstellung sorgen. Änderungen können dabei sowohl räumlicher Natur (alle Anwender sollen Diagrammelemente ausrichten und positionieren können) als auch inhaltlicher Natur sein (geänderte Objektzustände, geänderter Aktivitätsstaus, neue Nachrichten, etc.) Die Änderungen müssen an alle Benutzer verteilt werden. TA7 Code-Generierung Eine mögliche Implikation aus AR8 kann die generische Erzeugung von Sourcecode sein. Eine solche automatische Codeerzeugung stellt auf jeden Fall eine erheblichen praktischen Nutzen und damit einen Mehrwert für den Anwender dar. Die Anwendung sollte also ermöglichen aus den u. U. informal notierten Artefakten generisch Java- Klassenrümpfe zu erzeugen. Die Protokolle der Objektinteraktionen sollten hinreichend vollständig sein, so dass sich auf ihrer Grundlage JUnit-Testcases konstruieren lassen können. TA8: Visualisierung des Nachrichtenflusses Die Anwendung sollte den Interaktions-/bzw. Nachrichtenfluss graphisch visualisieren. Die Darstellung muss bei neuen Nachrichten dynamisch aktualisiert werden. Der Benutzer muss bei Ansicht des Diagramms schnell den aktuellen Stand der Simulation erfassen können. Dies kann z.B. durch geeignetes Markieren bestimmter Elemente (letzte Nachricht, aktiviertes Objekt) unterstützt werden. Die Darstellung muss die Nachvollziehbarkeit der chronologischen Reihenfolge der Nachrichten gewährleisten. Mit geeigneten Maßnahmen sollte das Diagramm auch in längeren Simulationen mit vielen Nachrichten übersichtlich gehalten werden können – denkbar ist z.B. eine Benutzereinstellung, mit der sich die Anzahl der angezeigten Nachrichten beschränken lässt. TA9: Historie Aus den Anforderungen EA10 und TR6 ergibt sich die Notwendigkeit einer Nachrichtenhistorie. Während der Simulation eines Progammablaufs müssen sowohl die gesendeten Nachrichten als auch die, von den Benutzern im Zuge der Nachrichtenbearbeitung vorgenommenen, Zuweisungen aufgezeichnet und persistent abgespeichert werden. Darüber hinaus sollten die Aufzeichnungen in geeigneter Form innerhalb der Anwendung zur Anzeige gebracht werden. Damit ist der Nachrichtenfluss auch im Nachhinein nachvollziehbar. TA10: Usermanagement Die Anwendung muss Benutzer, Projekte und die Zuordnungen von Benutzern zu Projekten verwalten. Benutzer sollten sich an zentraler Stelle authentifizieren müssen, bevor sie an kooperativen Sitzungen teilnehmen können. Darüber hinaus ist ein Sessionmanagement erforderlich, welches für die eindeutige Zuordnung von User zu Clients innerhalb der kooperativen Sessions sorgt. Dies ist ein wichtiger Baustein für die Groupawareness, so ist es später möglich einzelne Aktivitäten bestimmten Benutzern zuzuordnen. T11: Persistenz Alle Informationen (Benutzer, Projekte, Artefakte, Abläufe), auch die Ergebnisse von kooperativen Sessions, sollten zentral und persistent gespeichert werden, damit die Anwender auch beim asynchronen Zugriff auf gemeinsame Projekte immer den letzten aktuellen Stand der Session abrufen und damit fortfahren können. Die Benutzer sollten zu jedem Zeitpunkt von jedem Ort (über das

2 Anforderungsanalyse

33

Internet) mit dem System arbeiten können, unabhängig vom Online-Status anderer Gruppenmitglieder und einzelner Clients.

3 Stand der Forschung

34

3 Stand der Forschung Dieses Kapitel gibt einen Überblick über die aktuellen Forschungsansätze, die zur Lösung der Anforderungen in Frage kommen. Die Ansätze werden zunächst kurz kategorisiert, dann in 3.1 im Einzelnen vorgestellt und schließlich in 3.2 den in Kapitel 2 analysierten Anforderungen tabellarisch gegenübergestellt. Es existieren verschieden geartete Ansätze, die jeweils für eine partielle Erfüllung der in 2 analysierten Anforderungen in Frage kommen. Es werden Ansätze aus folgenden Bereichen betrachtet: •







Konzeptionelles Szenario-Rollenspiel – Für die hier betrachteten Ansätze gibt es keine Toolunterstützung. Es handelt sich vielmehr rein konzeptionelle Methoden – Rollenspiele von Andrianoff, Rollenspiele aus dem Kontext des MBCS, Szenario-Rollenspiele mit CRC-Karten nach Börstler Lehr- und Lehranwendungen – Hier werden existierende Anwendungen betrachtet, die bei Einführungen in die OOP-Lehre nach dem objects-firstPrinzip eingesetzt werden. Anwendungen dieser Art sind in der Regel speziell darauf ausgerichtet, den Anwender beim Begreifen der elementaren OO-Konzepte zu unterstützen. Als Vertreter für pädagogische IDEs wird BlueJ betrachtet, Alice und ViRPlay sind Beispiele für Virtuelle Welten. UML- Modellierungs-Tools – Es gibt eine Reihe von professionellen Design-Werkzeugen zur visuellen Modellierung mit UML-Diagrammen. Diese UML-Modellierungs-Tools sind alle nach ähnlichem Prinzip aufgebaut sind und lassen sich insofern mit den Anforderungen dieser Arbeit vergleichen, als dass sie ebenfalls die visuelle Entwicklung von Domänen-Modellen unterstützen und Mehrwert durch Code-Generierung bieten. In diesem Rahmen werden stellvertretend für die kommerziellen, professionellen Tools Rational Rose und Borland Together vorgestellt und ArgoUML als Vertreter für die Open Source Anwendungen. kooperative Ansätze – es konnten keine kooperativen Ansätze gefunden werden, die sich wirklich sinnvoll in den Kontext der Arbeit einordnen ließen und deren Detailuntersuchung Sinn gemacht hätte. Die Ansätze für synchrone UML-Editoren, deckten sich nur rudimentär mit den Anforderungen, hier lohnte sich keine Detailbetrachtung. Erwähnt sei noch die Kooperationsmöglichkeit mit der natürlich im Prinzip jede Anwendung verteilt werden kann, nämlich in Form gemeinsamer VNC- oder Netmeeting-Sitzungen. So könnte z.B. ein räumlich entfernter Entwickler per VNC auf die Rational Rose Instanz eines anderen Entwicklers zugreifen und gemeinsam mit diesem darin modellieren. Diese Möglichkeit untersuchen wir nicht genauer. Es ist jeweils klar, dass eine Anwendung - ob nun mit oder ohne VNC - die Anforderungen im didaktischen und im Entwurfskontext gleich bleibend erfüllt. Im Hinblick auf die technischen Anforderungen wird zwar die Verteilung mit VNC grundsätzlich möglich, jedoch fehlen die üblichen Awareness-Features und der Einsatz ist nicht wirklich praktikabel, Benutzerinteraktionen per VNC sind eher träge.

3 Stand der Forschung

35

3.1 Beschreibung existierender Lösungsansätze Im Folgenden werden die verschiedenen Ansätze im Einzelnen vorgestellt.

3.1.1 Konzeptionelles Szenario-Rollenspiel Es wurde bereits mehrfach erwähnt, dass die Methode des Rollenspiels sich besonders gut für die Vermittlung von dynamischen Aspekten in OOProgrammen eignet. Die face-to-face Variante, wie in 2.1.1 im Abschnitt Rollenspiel beschrieben, ist ein erprobtes und gebräuchliches Instrument, das in der Praxis im Unterricht eingesetzt wird. Daher ist es sinnvoll, diese Ansätze mit in die Betrachtung des State of the Art einzubeziehen und mit den in Kapitel 2 analysierten Anforderungen zu vergleichen. Der potenzielle Erfolg eine Rollespiels hängt offensichtlich mit der Wahl des zu spielenden/simulierenden Szenarios und den Rollenbeschreibungen zusammen. Andrianoff und Levine [And02]schlagen jeweils verschiedene konkrete Szenarien und Skripte für verschiedene OO-Konzepte vor. Darunter befindet sich auch ein Szenario das aus dem Kontext des Marine Biology Simulation Case Study (MBCS) extrahiert wurde. Das MBSC-Szenario wird in diesem Abschnitt noch einmal besonders erwähnt, weil es ein Beispiel dafür ist, dass die Rollenspiele auch im Zusammenhang mit komplexeren Systemen sinnvoll eingesetzt werden können, nämlich indem einzelne Funktionalitäten herausgegriffen und simuliert werden. MBCS Die MBCS ist eine von Alyce Bryce [Brady05] entworfene Fallstudie, die seit 2003 ein fester Bestandteil des Lehrplans des Advanced Placement Program in Computer Science[MBSC07] zur Einführung in die OOP ist.

Abbildung 3.1 – Hauptklassen der Marine Biology Simulation Case Study (aus [Brady05])

3 Stand der Forschung

36

In der Fallstudie geht es um ein Software-System, das Meeresbiologen darin unterstützen soll, das Verhalten von Fischen in abgeschlossen Umgebungen wie Seen und Meeresbuchten zu untersuchen. Die Software simuliert das Verhalten der Fische in einer Gitter-artigen Umgebung. Fische werden einer Umgebung hinzugefügt oder entfernt, haben eine Ausrichtung und Farbe, eine Position und sie können sich bewegen und ihre Positionen wechseln. Das System als Ganzes ist relativ umfangreich und komplex. Abbildung 2.1 zeigt die Hauptklassen. Die Studenten sollen lernen sich in ein komplexes bestehendes System einzuarbeiten, und dieses um zusätzliche Funktionalitäten zu erweitern. Die Studie soll ihnen die Illusion einer realen Projekt-Situation in der realen Welt geben. Mittlerweile existieren passend zu diesem System einige Rollenspiel-Szenarien und Skripte der Art („You Are A Fish - When asked for your color say the value of your Color recorded on your Private Data sheet – When asked for your location, do…“), die das Verhalten der Objekte genau beschreiben. Die Akteure übernehmen die Rollen von Objekten und spielen die Interaktionen gemäß dem vorgegebenen Skript nach. Andrianoff und Levine belegen in [And02], dass Studierende besseren Zugang zu der gesamten Studie finden, wenn ihr vorgeschlagenes Rollenspiel zur Verdeutlichung der Interaktionen eingesetzt wird. Szenario-Rollenspiel mit CRC-Karten und RPDs Der Ansatz aus [Bör04] wurde bereits mehrfach erwähnt. Börstler stellt eine neue Diagrammform für die Aufzeichnung von Objektinteraktionen in Rollenspielen vor, das sogenannte Role-Play Diagram (RPD). In [Bör05] zeigt Börstler, wie diese Diagramme im Zusammenhang mit CRC-Karten-Rollenspielen verwendet werden und die Rollenspiele damit verbessert werden können. Börstler berichtet über den erfolgreichen Einsatz von CRC-Karten-Rollenspielen, kombiniert mit der Aufzeichnung in RPDs, in Rahmen von in OO-Design einführenden Lehrveranstaltungen. Daneben sieht er aber auch die Eignung des Ansatzes im Rahmen des professionellen System-Entwurfs (vgl. [Bör04]) In Abbildung 3.2 zeigt ein Rollenspiel-Diagramm nach Börstler. Das Diagramm ist eine Mischform aus UML-Objektdiagrammen und Kooperationsdiagrammen (vor UML2 Kollaborationsdiagramm). Zur Aufzeichnung von Rollenspielen werden Notationsmöglichkeiten für Nachrichten und Objektzustände benötigt. In UML-Kooperationsdiagrammen werden Nachrichten notiert, aber es ist nicht vorgesehen, Objektzustände (also konkrete Attributwerte) aufzuzeichnen. Die Nachvollziehbarkeit von Rollenspielen ist aber ohne diese Informationen schlecht möglich, deshalb werden hier die entsprechenden Elemente aus UMLObjektdiagrammen verwendet. Die in den RPDs verwendete Notation ist einfacher und formloser als die ihrer UML-Entsprechungen, u.a. ist das Nummerierungsschema der Nachrichten in RPDs unkomplizierter gehalten. So sind sie besser geeignet, um parallel zu den Rollenspiel-Aktivitäten Szenarien aufzuzeichnen (vgl. [Bör04]).

3 Stand der Forschung

37

Abbildung 3.2 - Aufzeichnung eines CRC-Karten- Rollenspiel in einem RPD (aus [Bör05])

Rollenspiel in der OO-Entwicklung kann nach dem Vorschlag von Börstler nun folgendermaßen aussehen: Ein Entwickler-Team sitzt gemeinsam am runden Tisch im Konferenzraum, es wird zunächst ein Analysemodell in Form von CRCKarten ausgearbeitet und es werden konkrete Anwendungsfälle/Szenarien in textueller Form spezifiziert. Die Teammitglieder übernehmen die Rollen von CRC-Karten und simulieren dialogartig das Verhalten der entsprechenden Objekte mit den jeweiligen Verantwortlichkeiten. Ein Schriftführer protokolliert den Ablauf eines Szenarios an einem Whiteboard in einem Role-Play Diagramm. Für das Vorgehen nach Börstler gibt es bislang keine Toolunterstützung, es wird mit PostIts, Whiteboard und Karteikarten gearbeitet. Defizite: Ein offensichtliches Defizit der konzeptionellen Szenario-Rollenspiele ist natürlich die fehlende technologische Unterstützung. So ist es nicht möglich, Rollenspiele automatisch aufzuzeichnen, die Protokollierung ist immer Handarbeit, die von einem Schriftführer übernommen werden muss. Durch das Fehlen von expliziter technischer Unterstützung sind verteilte Rollenspiele allenfalls in Form von Video-Konferenzen denkbar.

3.1.2 Lehr-/Lernanwendungen Bereits in 2.1.1 waren wir kurz auf existierende Lehranwendungen und deren Kategorisierung eingegangen. Hier werden nun die im Rahmen dieser Arbeit interessanten Anwendungen herausgegriffen und noch einmal genauer vorgestellt. BlueJ BlueJ [BlueJ07]ist wohl die bekannteste und am häufigsten eingesetzte pädagogische Java-Entwicklungsumgebung. BlueJ wurde speziell als Lehr- und Lernanwendung konzipiert. BlueJ unterstützt den objects-first Ansatz, die Anwender können Programme entwickeln ohne sich vorher mit Quelltexten auseinandersetzen zu müssen, indem sie direkt mit Objekten und Klassen interagieren.

3 Stand der Forschung

38

Entwickelt wurde BlueJ 1999 von Michael Kölling und John Rosenberg an der Monash Universität im australischen Melbourne, als ein Nachfolger des BlueSystems, einem integrierten System mit einer eigenen Programmiersprache und umgebung. BlueJ implementiert den Blue-Umgebungsentwurf für die Programmiersprache Java. Aktuell wird BlueJ gemeinsam von der University of Kent in Canterbury, England – dort lehrt Kölling heute - und der Deakin University in Melbourne, Australien geführt und weiterentwickelt. Einen vergleichenden Überblick über BlueJ und seine Methodik findet man z.B. in [Köl03]. In [Haa04] ist eine ausführliche Evaluierung von praktischen Einsätzen aufgeführt.

Abbildung 3.3 – BlueJ: Hauptfenster und Quelltext-Editor (aus[BlueJ07])

Das User-Interface von BlueJ ist übersichtlich und einfach gehalten (vgl. Abbildung 3.3), so dass sich Anfänger auch ohne lange Einarbeitungszeit schnell zurechtfinden können. Das Hauptfenster besteht zum einen aus einem Diagrammeditor, in dem in UML-ähnlicher Notation die Klassenstruktur der zu entwickelnden Anwendung graphisch dargestellt wird. Zum anderen gibt es einen Objektbereich, in dem die interaktiv erzeugten Objekte angezeigt, examiniert und getestet werden können. Darüber hinaus gibt es Fenster für den Quelltext-Editor und den integrierten Debugger. Der Benutzer startet bei seiner Arbeit in BlueJ mit einer Menge von vordefinierten Klassen – Programmentwicklung from scratch ist nicht vorgesehen. Dies ist nicht unüblich für einführende OO-Lehranwendungen, wird aber auch durchaus kritisiert (z.B. von den Autoren des Alice-Ansatzes in [Coo03]: „[...] these approaches will leave students feeling they have no understanding of how to write complete programs“). Besonderes Merkmal und einer der Hauptgründe für BlueJs Stärken in der Vermittlung von Objekt und Klassen-Konzepten, sind die diversen direkten Interaktionsmöglichkeiten mit den Artefakten, die dem Anwender geboten werden. Der Benutzer kann direkt mit den Icons interagieren und so aus einer Klasse Objekte erzeugen, von diesen Objekten Methoden ausführen lassen und so ihr Verhalten illustrieren.

3 Stand der Forschung

39

Funktionsausrichtung und –umfang von BlueJ deckt sich nur teilweise mit der Zielsetzung dieser Arbeit. Vergleichbar wird es insofern, als dass es für die Vermittlung von OO-Konzepten eingesetzt wird, visuelle Entwicklung unterstützt, Klassen- und Objektstrukturen visualisiert und Benutzerinteraktionen auf ObjektLevel ermöglicht. Hauptdefizite von BlueJ in Bezug auf die Anforderungen dieser Arbeit sind, dass es nicht kooperativ in der Gruppe anwendbar, also nur als EinzelbenutzerAnwendung nutzbar ist. Dynamische Aspekte lassen sich nicht gut vermitteln, es gibt keine Visualisierung des Programmflusses. Die Arbeit in [Rag05] zeigt sogar, dass BlueJ bei den dynamischen Aspekten den Lernprozess eher behindert als erleichtert. Alice Alice[Alice07] ist eine frei verfügbare, für Anfänger entwickelte, Programmierumgebung für die Erstellung von interaktive 3D-Graphiken und Animationen. Ursprünglich entwickelt wurde Alice 1995 an der Carnegie Melon Univerity von einer Forschungsgruppe unter der Leitung von Randy Pausch [Pau95] wurde es in den letzten Jahren von Grund auf neu geschrieben. In [Coo03] werden die konkreten Auswirkungen des Einsatzes von Alice im Unterricht diskutiert.

Abbildung 3.4 – Alice: User-Interface (aus [Haa04])

Für die Repräsentation von Objekten verwendet Alice eine anthropomorphe Metapher. In der Alice-Umgebung kann der Benutzer 3D-Objekte nutzen/modifizieren und Programme (per Storyboarding mit Pseudo-Code in Alice-Lingo) schreiben. Dabei lässt Alice dem Ausbilder bzw. Anwender die Wahl, ob er die Entwicklung der virtuellen Welt from scratch oder mit vorgefertigten Programmteilen startet. Das Hauptfenster (s. Abbildung 3.4) besteht aus einer baumartigen Ansicht der Objekte der aktuellen Welt, einer initialen Szene, einer Liste mit den Events der aktuellen Welt, und dem CodeEditor. Der Anwender bevölkert in einer kleinen virtuellen Welt eine initiale Szene mit 3D-Objekten. Jedes Objekt kapselt seine eigenen Daten und verfügt über seine eigenen Methoden. Ein Objekt kann per Drag&Drop in den Code-

3 Stand der Forschung

40

Editor gezogen werden. In dem Editor können Aussehen und Verhalten geändert und über Dropdown-Menüs können primitive Methoden ausgewählt werden, mit denen dann eine Nachricht an das Objekt geschickt werden und Verhalten getestet werden kann. Laut [Coo03] hilft die visuelle Umgebung von Alice den Lernenden ein sicheres Gefühl für Objekte zu entwickeln. Die interaktiven Methodenaufrufe auf Objekten fördern das Verständnis für Kapselung und für Methoden bzw. Message Passing. Auch das Gefühl für Programmzustände wird gefördert. Es lässt sich beobachten, dass die Anwender von Alice ein intuitives Gefühl für Verhalten und Ereignisgesteuerte Programmierung entwickeln. Defizite in Bezug auf die Anforderungen dieser Arbeit: Alice ist kein Mehrbenutzersystem und lässt sich nicht verteilt einsetzen. Es ist allerdings möglich Objekte zwischen verschiedenen virtuellen Welten zu transferieren. Kollaboration ist also derart möglich, dass Benutzer einzeln Charaktere konstruieren und diese dann in einem Gruppenprojekt in einer gemeinsamen virtuellen Welt mit anderen kombinieren. Alice eignet sich zwar gut, um Programmabläufe zu visualisieren, „echtes“ und vor allem interaktives Rollenspiel wird dabei allerdings nicht unterstützt. ViRPlay ViRPlay ist ein Tool, das Anwendern das Verstehen von Interaktionen in JavaProgrammen mithilfe von Rollenspielen in einer virtuellen 3D-Welt ermöglichen soll. Das Tool folgt dem von Jimenez-Diaz et al. in [Diaz05a] vorgestellten Ansatz, der Ideen aus dem Bereich der Softwarevisualisierung und dem Bereich der aktiven Lernmethoden - dazu gehören Rollenspiele - vereint. ViRPlay verwendet ebenso wie Alice eine anthropomorphe Metapher, jedes Objekt wird durch einen anthropomorphen Avatar repräsentiert. Die Nachrichtenübermittlung wird durch das Werfen eines Balls zwischen den Avataren dargestellt. Der Ball und ein Spotlight über den Avataren repräsentieren den Kontrollfluss. Der Ball enthält Informationen über die aufgerufene Methode, incl. Parameter- und Rückgabewerten. Die Objekte sind die Figuren, die an dem Rollenspiel teilnehmen, zu jeder Figur werden Objektname und zugehörige Klasse angezeigt. Das aktive Objekt hat den Ball, und wird vom Spotlight beleuchtet. Jedes Objekt hat ein Inventar (ähnlich wie in Adventure-Spielen), das den Objektzustand und statische Informationen enthält. Über das Inventar lässt sich auch der zur Klasse des Objekts gehörige Sourcecode einsehen. Wenn Objekt A eine Methode von Objekt B aufruft, wird der Ball B zugeworfen und das Spotlight auf B gesetzt. Wenn Objekt B die Nachricht fertig bearbeitet hat, rollt (anstatt wirft) es den Ball zurück zu A und gibt damit auch die Kontrolle zurück. ViRPlay lässt sich insofern mit dem Ansatz dieser Arbeit vergleichen, als dass es virtuelles Rollenspiel umsetzt und Programmfluss interaktiv simuliert werden kann. Defizite: Zum Zeitpunkt der Veröffentlichung des Papers zur ViRPlay [Diaz05b] war die Möglichkeit der kooperativen Anwendung für zukünftige Versionen zwar angedacht, aber noch nicht umgesetzt. Komplexere Abläufe mit vielen Objekten und Nachrichten werden schnell unübersichtlich.

3 Stand der Forschung

41

Abbildung 3.5 ViRPlay : Screenshot der Benutzeroberfläche (aus [Diaz05a])

3.1.3 UML-Modellierungs-Tools Es gibt eine Reihe von professionellen Design-Werkzeugen zur visuellen Modellierung mit UML-Diagrammen, die im Kontext der Softwareentwicklung eingesetzt werden. Diese Werkzeuge sind auf den professionellen Anwender ausgerichtet und aufgrund ihrer Komplexität üblicherweise nicht für den einführenden Unterricht geeignet. Interaktionen auf Objekt-Level werden von solchen Tools im Allgemeinen nicht unterstützt (vgl. [Köl03], S.9). Diese UML-Modellierungs-Tools basieren alle auf ähnlichen Prinzipien und unterstützen sowohl Reverse (vom Code zum Diagramm) als auch Forward (vom Diagramm zu Code)-Engineering. Die Oberfläche solcher UML-Tools enthält als Hauptelemente üblicherweise einen Modell-Explorer, einen Diagramm-Editor und einen Quellcode-Editor. Der Anwender entwirft sein Domänen-Modell im Diagramm-Editor und kann per Knopfdruck aus dem Diagramm Code-Gerüste generieren lassen. Die Gegenrichtung, vom Sourcecode zum Klassendiagramm wird ebenso unterstützt. Die Anwendung synchronisiert jeweils zwischen Diagramm- und Quellcode-Editor. Exportiert werden die Modelle üblicherweise im XML Metadata Interchange (XMI) Format, das ist der Standard für die Erfassung der Meta-Daten, die ein bestimmtes UML-Modell ausmachen (umfasst aber keine Layout-Informationen). Die Anwendungen lassen sich insofern mit den Anforderungen dieser Arbeit vergleichen, als dass sie ebenfalls die visuelle Entwicklung von DomänenModellen unterstützen und Mehrwert durch Code-Generierung bieten. In diesem Rahmen werden stellvertretend für die großen, kommerziellen Tools Rational Rose und Borland Together vorgestellt und ArgoUML als Vertreter für die Open Source Anwendungen. Borland Together Together [Tog07]ist eine kommerzielle Produktlinie von Borland für den Entwurf und die visuelle Modellierung von Softwarearchitekturen. Together kann in

3 Stand der Forschung

42

verschiedene Entwicklungsumgebungen integriert werden, es gibt Versionen für Microsoft Visual Studio, Borland JBuilder und Eclipse. Diverse Programmiersprachen und Plattformen werden unterstützt. Borland Together Edition für Eclipse, eine integrierte und flexible Designumgebung, sie hilft Teams, die Entwicklung hochwertiger Anwendungen mit der Open-Source-Plattform Eclipse wesentlich zu beschleunigen. Die Softwarelösung, als eine Art Brücke zwischen Endanwendern, SoftwareArchitekten und Entwicklern konzipiert, eignet sich zum visuellen Modellieren von Software, zum Messen der Software-Qualität und zur Verbesserung der Team-Produktivität. Wie in Abbildung 3.6 zu sehen ist, besteht das Hauptfenster aus einem ModellExplorer, dem Diagramm-Editor, einer Palette und einem Properties-Bereich. Modellierte Strukturen können im Quellcode-Editor betrachtet und modifiziert werden. Das Modell kann als XMI exportiert werden.

Abbildung 3.6 – Borland Together for Eclipse: User-Interface

ArgoUML ArgoUML ist ein an der University of California, Irvine entwickeltes OpenSource Projekt – Ein freies UML-Modellierungs-Tool mit kognitiver Unterstützung. ArgoUML ist unter der BSD Lizenz lizensiert. Es gibt einige kommerzialisierte Erweiterungen, die auf ArgoUML basieren, darunter auch das etwas bekanntere Poseidon for UML von Gentleware [Pos07]. Zu den unterstützten Diagrammen gehören Klassen-, Zustands-, Use Case-, Aktivitäts-, Kollaborations-, Sequenzund Deploymentdiagramme. Als OpenSource-Projekt ist ArgoUML natürlich lange nicht so ausgereift und stabil wie die großen kommerziellen Modellierungstools. Auch vom Umfang kann es nicht mithalten. Die Sequenzdiagramme werden z.B. nicht vollständig unterstützt, es gibt keine professionellen Features wie Qualitätsanalysen und Unterstützung für Patterns. Aber das Tool soll hier sowieso nur im Hinblick auf die elementare, visuelle Modellierung und die Code-Generierung betrachtet werden. Im Gegensatz zu den anderen beiden vorgestellten Modellierungswerkzeugen ist ArgoUML eine Standalone-

3 Stand der Forschung

43

Anwendung und kann nicht in eine IDE intergriert werden. Dafür ist das Benutzer-Interface von ArgoUML übersichtlich und wird allgemein als intuitiv bedienbar empfunden. Der Export als XMI wird unterstützt. Die CodeGenerierung beschränkt sich auf Java. Abbildung 3.7 – ArgoUML: HauptfensterAbbildung 3.7 zeigt die Benutzeroberfläche von ArgoUML.

Abbildung 3.7 – ArgoUML: Hauptfenster

IBM Rational Rose Rational Rose [Rose07] gilt als Referenztool für die UML-Modellierung. Es richtet sich an professionelle Systementwickler. Es unterstützt die iterative Entwicklung (einschließlich inkrementeller Quellcode-Erzeugung und RetroCode-Entwurf) in den wichtigsten Programmierumgebungen. Rational Rose übernimmt die gesamte Modellierung, von Prozessen und Softwarearchitekturen bis zu den Daten, IHM und Web-Besonderheiten. Es gibt eine Code-QualitätsAnalyse. Rational Rose ist als CASE-Tool speziell an den Einsatz im Rational Unified Process angepasst. Bei der Arbeit mit Rose ist neben der Möglichkeit, UML-Diagramme zu zeichnen, das eigentlich Wichtigere, dass Rose es erlaubt, alle technischen Konstrukte, die für die Erstellung der Software erstellt werden, zu verwalten. Mithilfe eine Use-Case-gesteuerten Arbeitsweise erstellen man ein Modell der Applikation, von dem ausgehend man sich alle Arbeitsergebnisse, die erstellt wurden, wieder erschließen kann. Die Arbeitsweise mit Rose kann man sich dabei folgendermaßen vorstellen (vgl. [Borr02]: .Zunächst werden die Akteure und die für diese zu implementierenden Use-Cases in entsprechenden Diagrammen erfasst. Damit hat man dann eine Sammlung der Hauptfunktionen, die das Programm dem Kunden bieten soll. Als Nächstes werden die Abläufe in den Use-Cases in Form von Szenarios beschrieben. Rose lässt dem Anwender dabei die Wahl, ob er lieber mit Sequenzoder mit Kollaborationsdiagrammen arbeiten möchte. Szenarios können als

3 Stand der Forschung

44

Instanzen von Anwendungsfällen betrachtet werden. Die beiden Diagrammarten lassen sich per Kopfdruck auseinander erzeugen. Die Definition der für die Objekte notwendigen Klassen kann direkt aus den Szenariodiagrammen heraus erfolgen. In Abbildung 3.8 ist das Haupfenster von Rational Rose zu sehen.

Abbildung 3.8 – Hauptfenster von Rational Rose

Der Nachteil professioneller Tools wie Rational Rose und Together liegt in der Komplexität der Benutzeroberflächen, Benutzer benötigen viel Einarbeitungszeit. Für Anfänger sind sie in der Regel nicht geeignet.

3.2 Gegenüberstellung von Lösungsansätzen und Anforderungen Tabelle die Anforderung aus 2.2.4 den Lösungen gegenüberstellt DA11 Benutzerinteraktionen auf Objektebene Pädagogische Anwendungen für die OO-Einführung unterstützen in der Regel die Benutzerinteraktion auf Objektebene und die in 3.1 in dieser Kategorie vorgestellten Ansätze bilden hier keine Ausnahme. Alle vorgestellten Ansätze lassen es zu, dass Benutzer interaktiv Objektzustände zu verschiedenen Ausführungszeitpunkten untersuchen, dabei in Objekte hineinschauen und mit diesen interagieren zu können. Sie sind darauf ausgerichtet, den Anwender beim Begreifen des Objekt-Konzepts zu unterstützen. Anders sieht es bei den professionellen UML-Tools für Software-Entwicklung aus. Hier ist es in der Regel nicht üblich, den Benutzer mit Objekten interagieren zu lassen (vgl. [Köl03], S.9). Der Umgang mit Objekten 1

DA steht für didaktische Anforderung

3 Stand der Forschung

45

beschränkt sich auf ihre statische Darstellung in den entsprechenden Diagrammformen (Objektdiagramme, Sequenzdiagramme, Kommunikationsdiagramme, etc). „Echte“ Interaktionsmöglichkeiten, wie sie für die Einführung in OOP benötigt werden, werden nicht geboten. DA2 Kapselung In BlueJ, Alice und ViRPlay werden Objekte als gekapselte Einheiten wahrgenommen, dadurch dass Benutzer interaktiv in die Objekte „hinein sehen“ können. Private Attribute können nur über den Aufruf von Methoden manipuliert werden. Der Einblick in Objektzustände ist allerdings nicht auf Rollen beschränkt, ein Anwender kann in jedes Objekt hineinsehen. Die Szenario-Rollenspiele eignen sich gut zur Umsetzung des Konzepts der Kapselung, die einzelnen Teilnehmer müssen einfach angewiesen werden, die privaten Attribute ihrer Objekte jeweils voreinander geheim halten und Änderungen nur auf Aufforderung - in Form einer entsprechenden Nachricht vorzunehmen. Bei den vorgestellten UML-Tools gibt es keine besonderen Maßnahmen, die das Konzept der Kapselung in expliziter Form verdeutlichen würden. DA3 Interaktives Senden von Nachrichten In allen vorgestellten didaktischen Anwendungen ist es möglich, interaktiv aus dem Kontext eines Objekts heraus Methoden aufzurufen/Nachrichten zu senden. In BlueJ können über das Kontextmenü eines Objekts die Methoden dieses Objekts aufgerufen werden, Das Senden einer Nachricht von einem Objekt zu einem anderen ist nicht möglich. In Szenario-Rollenspiele ist es natürlich möglich, dass Akteure sich Nachrichten schicken könne. In diesem Zusammenhang gilt für die UML-Tools dasselbe wie für DA1, sie unterstützen diese Art der Benutzer-Interaktion nicht. In einem SequenzDiagramm können zwar Nachrichten als Diagrammelemente erzeugt werden, aber hier geht es nur um die Darstellung, Nachrichten bzw. die entsprechenden Methoden werden nicht im eigentlichen Sinn „ausgeführt“. DA4 Interaktives Erzeugen von Objekten Alle didaktischen Anwendungen unterstützen das interaktive Erzeugen von Objekten. Die vorgestellten Ansätze zeichnen sich alle dadurch aus, dass sie dem Anwender ein starkes Bewusstsein für Objekt und Klassen vermitteln. Es ist jeweils möglich interaktiv Objekte zu erzeugen. In den UML-Tools können die für die Verwendung in Sequenz- und Objektdiagrammen benötigten Objekte aus Klassen erzeugt werden. DA5 Objektbeziehungen ViRPlay erfüllt diese Anforderung vollständig, Nachrichten können nur an die im Inventar eines Objekts aufgeführten Collaborators geschickt werden. UML-Tools bieten hier keine gezielte Unterstützung, abgesehen von der Visualisierung der Beziehungen in den Diagrammen. DA6 EA6 Kommunikationsmedium für den Wissenstransfer TA2 a) Graphische Visualisierung als Kommunikationsunterstützung

3 Stand der Forschung

46

Die handschriftlich erstellten RPDs der Szenario-Rollenspiele eignen sich als Kommunikationsmedium. BlueJs Diagrammdarstellung ist UML-Diagrammen nachempfunden und sollte sich daher als Kommunikationsmedium einsetzen lassen. Die graphischen Visualisierungsformen (3D-Welten) von Alice und ViRPlay eignen sich nicht als Dokumentations- und Kommunikationsmedium. Denkbar wäre es allenfalls bestimmte Zustände mit Screenshots festzuhalten, aber deren spätere Aussagekraft in Bezug auf das modellierte System dürfte zweifelhaft sein. Sinn und Zweck der UML-Tools ist nun gerade der Umgang mit UMLDiagrammen, die vorgestellten Ansätze bieten also hier die ganze Palette an Diagrammen die zur Visualisierung und Kommunikation verwendet werden können. b) Protokolle der Interaktion als Kommunikationsunterstützung. Explizite Nachrichtenhistorien (zusätzlich zur Diagrammdarstellung) sind in den vorgestellten Anwendungen nicht vorgesehen DA7 Unterstützung lokaler und verteilter Lehre Verteilte Szenario-Rollenspiele wären z.B. in Form von Videokonferenzen denkbar. BlueJ und Alice lassen sich nicht verteilt einsetzen. In Alice ist es allerdings möglich Objekte zwischen verschiedenen virtuellen Welten zu transferieren. Lokale Kollaboration ist also derart möglich, dass Benutzer einzeln Charaktere konstruieren und diese dann in einem Gruppenprojekt in einer gemeinsamen virtuellen Welt mit anderen kombinieren. Für ViRPlay ist eine Kooperationsunterstützung geplant. Die UML-Tools sind nicht kooperativ nutzbar. DA8 Flexible Reaktion auf neue Erkenntnisse Szenario-Rollenspiele lassen sich beliebig anpassen, neue Erkenntnisse können direkt durch Ändern des Verhaltens von Akteuren umgesetzt werden. Die Lehranwendungen arbeiten teilweise mit vordefinierten Klassen, hier lassen sich Änderungen nicht immer so ohne weiteres umsetzen. In den UML-Tools lassen sich anhand der Diagramme Modell-Änderungen schnell und fexibel umsetzen. DA9 Rollenspiel BlueJ unterstützt keine Rollen. ViRplay steht ja nun gerade für Virtual Role Play, hier wird Rollenspiel also unterstützt, Benutzer können die Rolle von Objekten übernehmen und Programmfluss simulieren indem sie Nachrichten von anderen Objekten empfangen und bearbeiten. Alice kann kein echtes Rollenspiel, hier kann der Benutzer zwar interaktiv auf Objekte zugreifen und an diesen Objekten auch Methoden aufrufen, aber die Simulation des Nachrichtenflusses kann nicht interaktiv erfolgen. Die UML-Tools unterstützen kein Rollenspiel

3 Stand der Forschung

47

EA11: Identifikation der Objekte EA2: Identifikation der Nachrichten EA3: Reaktion auf Nachrichten EA4: Identifikation der Objekt-Beziehungen BlueJ ermöglicht keine interaktive Programm-Simulation, ermöglicht aber die Exploration der Objekte und das Ausführen einzelner Methoden. Insofern sind E1 und E3 voll erfüllt und EA2 und EA4 nur teilweise. ViRPlay lässt interaktive Simulation zu und ermöglicht damit die volle Explorationes des Problembereichs, erfüllt E1-E4 also vollständig. Die UML-Tools erlauben üblicherweise kein interaktives Explorieren des Objektraums und keine Simulation von Objektinteraktionen, insofern erfüllen sie EA1-EA4 nicht im Sinne unserer Anforderungen. EA5: Testmöglichkeiten Alice und BlueJ ermöglichen den interaktiven Aufruf und Test einer Methode eines Objekts. ViRPlay ermöglicht interaktive Simulation von ganzen Abläufen, bietet hier also weitergehende Testmöglichkeiten. Rational Rose und Together sind jeweils eng mit Java-IDEs verzahnt, durch die Synchronisation von Diagrammen und Quellcode ist es möglich diesen Code gleich innerhalb der IDE zu testen. Zudem gibt es Code-Qualitätsanalysen die Modell-Schwächen offenbaren können. ArgoUML ist ein StandaloneModellierungs-Tool hier ist das Testen also nicht so ohne weiteres möglich. EA8: Angebot des potenziellen Mehrwerts für die Anwender Die UML-Tools bieten Mehrwert durch Code-Generierung, Code-QualitätsAnalysen, Exportmöglichkeiten ins XMI-Format. EA9: Flexible Reaktion auf neue Erkenntnisse Die Lehranwendungen arbeiten teilweise mit vordefinierten Klassen, hier lassen sich Änderungen nicht immer so ohne weiteres umsetzen. In den UML-Tools lassen sich anhand der Diagramme Modell-Änderungen schnell und fexibel umsetzen EA10: Nachvollziehbarkeit Entwurfsentscheidungen werden weder in den didaktischen Anwendungen noch in den UML-Tools nachvollziehbar protokolliert

Gemeinsamer Informationsraum TA1 TA3 Synchrone Kommunikation TA4 Awareness TA5 Modellierung von Rollen TA6 Synchronisation des Diagramms Da keine der vorgestellten Anwendungen die Kooperation mehrerer Benutzer unterstützt, kann offensichtlich auch keine der Anforderungen TA1, TA3-TA6 erfüllt werden. TA7 Code-Generierung BlueJ kann aus Klassendiagrammen Sourcecode erzeugen. Die UML-Tools bieten alle die Möglichkeit aus den Diagrammen Sourcecode zu erzeugen TA8 Visualisierung des Nachrichtenflusses : In echten Rollespielen kann Nachrichtenfluss leicht durch einen Gegenstand der 1

EA steht für Entwicklungs-Anforderung

3 Stand der Forschung

48

die Kontrolle signalisiert und weitergegeben wird visualisiert werden. In RPD wird die Kontrolle des aktiven Elements mit einem Stern visualisiert. ViRPlay visualisiert den Nachrichtenfluss in einer 3D-Welt durch das Werfen eines Balls zwischen Avataren. Alice visualisiert den Nachrichtenfluss durch Animation der 3D-Objekte. BlueJ visualisiert Nachrichtenfluss nicht. Die UML-Tools bieten außer der statischen Darstellungen in Sequenz- und Kooperationsdiagrammen keine besondere Visualisierung von Nachrichtenfluss TA9: Historie ViRPlay ist die einzige Anwendung, die interaktive Simulationen ermöglicht und damit eine Historie von Interaktionen aufzeichnen könnte. Tatsächlich wird aber nur die jeweils letzte Nachricht visualisiert, eine komplette Liste der Interaktionen wird nicht geführt. TA10: Usermanagement Die Anwendungen sind alle keine Mehrbenutzeranwendungen, daher benötigen sie in der Regel kein Usermanagement und bieten es auch nicht an. T11: Persistenz Die Daten der Anwendungen werden jeweils nur lokal gespeichert.

4 Lösungsansatz

49

4 Lösungsansatz Als Lösungsansatz zur Erfüllung der in Kapitel 2 hergeleiteten Anforderungen wurde im Rahmen dieser Arbeit die Anwendung COINED (Collaborative Examination of Object Interaction) konzipiert und implementiert. Es handelt sich dabei um eine Groupware mit der eine lokale oder verteilte Gruppe von Benutzern gemeinsam Nachrichtenfluss und Objektinteraktionen eines objektorientierten Systems simulieren und visualisieren kann An einem benutzerdefinierten Domänen-Modell werden konkrete Systemfunktionalitäten rollenspielartig durchexerziert. Die Anwender übernehmen die Rollen einzelner Klassen und simulieren die Reaktion der Exemplare dieser Klassen auf empfangene Nachrichten. Die Reaktion eines Objekts auf eine empfangene Nachricht kann dabei Verschiedenes beinhalten, u.a. • • • •

die Erzeugung/Manipulation lokaler Variablen eine Zustandsänderung durch Editieren der Attributwerte das Senden neuer Nachrichten an andere Objekte das Senden einer Antwort an das aufrufende Objekt.

COINED wurde als verteiltes System in Form einer Client-/Server-Architektur realisiert, wobei der Server als standardisierte Webapplikation und der Client als Plugin für das Open-Source Entwicklungsframework Eclipse umgesetzt wurden. .

Abbildung 4.1 – COINED Benutzeroberfläche

Der COINED-Client präsentiert sich dem Benutzer in Form einer EclipsePerspektive als eine Sammlung verschiedener Sichten (Views), vgl. Abbildung 4.1. Das Diagramm (1) ist dabei das Kernstück, hier werden Objekte, Beziehungen und Nachrichtenfluss in Diagrammform dargestellt und dynamisch visualisiert. Die Klassenliste (2) und die Objektliste (3) dienen als Klassen- resp. Objekt-Repository. Im Bereich MessageProcessing (4) findet während einer

4 Lösungsansatz

50

Simulation die Bearbeitung von empfangenen Nachrichten statt und der Bereich MessageHistory (5) liefert einen chronologischen Überblick über alle gesendeten Nachrichten sowie über alle Benutzer-geführten Zuweisungen. Die Buddy-Liste (6) liefert einen Überblick über die Projektteilnehmer und ihre Onlinestati. Der Chat (7) bietet den Teilnehmern die Möglichkeit der synchronen, Simulationsbegleitenden Kommunikation Im Folgenden werden wir anhand von Beispielszenarien erläutern, wie sich COINED sowohl im didaktischen als auch im Entwurfs-Kontext einsetzen lässt und inwiefern es die jeweiligen Anforderungen erfüllt. Anschließend geben wir einen Überblick über COINEDs Architektur und technische Umsetzung, sowie über die verwendeten Design-Patterns und zeigen auf, inwieweit den technischen Anforderungen entsprochen wird.

4.1 OO-Lehre: Szenario und Lösungsdarstellung Das folgende Beispielszenario soll den möglichen Einsatz von COINED im Rahmen der Lehre verdeutlichen. Ein Informatik-Professor an einer Fern-Universität möchte im Rahmen seiner Vorlesung „Einführung in die objektorientierte Programmierung“ seinen Studenten einige OO-Grundkonzepte (insb. Objektinteraktionen und den Message-Passing-Mechanismus) mithilfe eines Rollenspiels verdeutlichen. Bei der Wahl des Rollenspiels entscheidet er sich für ein, aus der Marine Biology Simulation Case Study (MBCS, s. [Brady05]) extrahiertes Szenario, das in der Fachliteratur[And02] für die Demonstration von Message-Passing vorgeschlagen wird. In der MBCS wird, mit Schwerpunkt auf pädagogischen Aspekten, eine Aquarium-Simulationssoftware realisiert. Fische werden einer Umgebung hinzugefügt oder entfernt, haben eine Ausrichtung und Farbe, eine Position und sie können sich bewegen und ihre Positionen wechseln. Das System als Ganzes ist relativ umfangreich und komplex, für das Rollenspiel wird daher nur ein spezielles vereinfachtes Szenario, ähnlich zu [Diaz05a] eingesetzt. Es soll den Benutzern klar machen, auf welche Weise die Hauptklasse Fische erzeugt und initialisiert. Der folgende Ablauf wird dann mit verteilten Rollen (ein Student übernimmt die Rolle des Fisches f1, andere sind env, loc, oder theMBSDemo) durchgespielt. Für jede Rolle wird das Verhalten vorher genau festgelegt (vgl. die JavaRolePlayScripts aus [Brady05]). An einer Fern-Universität kann ein solches Rollenspiel nun nicht auf klassische Weise im Hörsaal mit anwesenden Studenten durchgespielt werden. Die Fernstudenten sitzen vielmehr verteilt an verschiedenen Orten und nutzen u.a. Rechner mit Internetanschluss zur Kommunikation. Deshalb beschließt der Professor COINED für die Durchführung seines Rollenspiels einzusetzen. Der COINED-Server soll auf einem Rechner in der Universität laufen.

4 Lösungsansatz

51

Abbildung 4.2 - MBCS-Beispielszenario

Die Studenten arbeiten in kleinen Gruppen von jeweils 4 Teilnehmern. Jedes Gruppenmitglied startet seinen eigenen COINED-Client, indem es seine jeweilige Eclipse-Umgebung startet und innerhalb von Eclipse in die COINED-Perspektive wechselt (s. Abbildung 4.3).

Abbildung 4.3 – Aktivierung der COINED-Perspektive in Eclipse

Hier loggt er sich zunächst auf dem Server ein und öffnet anschließend das vom Professor vorbereitete Projekt „Aquarium“.

Abbildung 4.4 – Login und Projektwechsel

4 Lösungsansatz

52

Das Projekt enthält bereits alle benötigten Klassen (MBSDemo, Fish, BoundedEnv, Location), aber noch keine Objekte. Zunächst wartet die Gruppe, bis alle Teilnehmer online sind und das Projekt geöffnet haben. Das ist der Fall, wenn in der BuddyListe alle Status-Icons grün sind. In Abbildung 4.5 sehen wir eine Momentaufnahme aus Alices Sicht: Mary ist offline, Paul ist online und hat das Projekt geöffnet, Peter ist online aber noch nicht im Projekt.

Abbildung 4.5 – Die BuddyListe aus Alices Sicht:

Die Rollen werden verteilt, Peter soll für Location zuständig sein, Paul für Fish, Mary für BoundedEnv und Alice für theMBSDemo. Diese Zuordnungen werden im ClassView über den Eintrag „Direct this class“ im Kontextmenü einer Klasse vorgenommen (s. Abbildung 4.6). Innerhalb der COINED-Umgebung trägt der jeweils für eine Klasse zuständige Benutzer die Bezeichnung Director. Nur der Director hat die Befugnis, Objekte aus einer Klasse zu erzeugen und auf Nachrichten zu reagieren.

Abbildung 4.6 – Rollenzuordnungen im ClassView

Nach erfolgter Zuordnung kann Peter als Director der Klasse Location das Objekt loc erzeugen, Paul erzeugt f1:Fish, Mary env:BoundedEnv und Alice theMBSDemo:MBSDemo. Das Erzeugen eines neuen Objekts geschieht ebenfalls über das Kontextmenü einer Klasse im ClassView. Vom theMBSDemo-Objekt soll der Nachrichtenfluss starten, deshalb legt Alice als Director von MBSDemo initiale Beziehungen zu den vorhandenen Objekten mithilfe von entsprechenden Attributen fest. Hierzu wechselt sie in den ObjectView und selektiert theMBSDemo. Daraufhin werden die aktuellen Attributwerte in der Objektdetail-Maske angezeigt, wo Alice sie direkt manipulieren kann (s. Abbildung 4.7)

4 Lösungsansatz

53

Abbildung 4.7 – Editieren von Objektdetails im ObjectView: Alice ist im Begriff, dem Attribut theEnv des Objekts theMBSDemo einen Wert zuzuweisen

Jetzt kann die eigentliche Simulation beginnen. Zunächst soll die main()Methode von theMBSDemo aufgerufen werden. Ein beliebiges Gruppenmitglied ruft „Send Initial Message To“ im Kontextmenü von theMBSDemo auf. Im sich daraufhin öffnenden MsgProcessingView wird in dem „Create New Request“Dialog theMBSDemo als Empfänger automatisch eingetragen, der Benutzer wählt dessen einzige Methode main und verschickt die Nachricht durch Betätigen den Send-Buttons. Daraufhin wird der Empfänger der Nachricht (theMBSDemo) aktiviert und die Kontrolle an den Director von theMBSDemo (Alice) übergeben. Visualisiert wird die Aktivierung eines Objekts durch die den Wechsel seiner Hintergrundfarbe und durch die Markierung mit dem Sternsymbol (vgl. Abbildung 4.8).

Abbildung 4.8 - Visualisierung des aktiven Objekts und der letzten Nachricht

Alice hat also nun die Kontrolle und muss die empfangene Nachricht im MsgProcessingView verarbeiten und beantworten. Laut Script soll die init()Methode des Objekts loc aufgerufen werden. Alice muss also die entsprechende Nachricht an das Objekt loc schicken. Loc ist in dem Attribut theLoc gespeichert, also zieht sie dieses Attribut mit der Maus vom ObjectView in das „SendTo“-Feld und wählt dann im Dropdown-Menü „Request Name“ die Nachricht init aus. In der Tabelle darunter belegt sie noch die Parameter mit den gewünschten Werten (2,2).

4 Lösungsansatz

54

Abbildung 4.9 – MessageProcessingView unmittelbar vor dem Senden von init(2,2) an loc

Mit dem Send-Button wird die Nachricht gesendet und die Kontrolle an das empfangende Objekt loc weitergereicht. Peter als Director von loc ist nun für die Bearbeitung der Nachricht zuständig. Per Drag&Drop speichert er die Argumente der Nachricht in locs Attributen und schließt die Bearbeitung mit Betätigung des Finish-Buttons ab. Die Kontrolle geht daraufhin zurück an theMBSDemo, Alice ist wieder am Zug. Sie konstruiert und schickt nun die Nachricht init(env,loc) an das Fisch-Objekt f1. Paul ist Director der FischKlasse, also bekommt er als nächstes die Kontrolle. Die in den Argumenten der empfangenen Nachricht enthaltenen Referenzen auf loc und env legt Paul für die spätere Verwendung in den entsprechenden Feldern von f1 ab. Nachdem der Fisch f1 jetzt das Objekt env kennt und mit ihm kommunizieren kann, sendet Paul die Nachricht randomDirection an env um eine initiale Ausrichtung für den Fisch zu erhalten. Das Objekt env wird aktiviert, Mary hat die Kontrolle. Sie beantwortet die Nachricht mit der Rückgabe einer zufälligen Ausrichtung. Pauls Fisch f1 erhält die Antwort und speichert den Wert in seinem Attribut myDir. In den nächsten Schritten generiert Paul eine zufällige initiale Farbe indem er die Nachricht randomColor an sich selbst sendet und selbst beantwortet. Die Farbe wird im Attribut myColor abgelegt. Damit ist der Fisch soweit initialisiert, dass er der Umgebung hinzugefügt werden kann, also sendet Paul die Nachricht add mit sich selbst als Parameter an das Objekt env. Mary fügt die so erhaltene Referenz auf f1 in die Umgebung ein und gibt die Kontrolle direkt wieder zurück. Paul kann nun seinerseits f1s Bearbeitung der init()-Nachricht von theMBSDemo abschließen, der Kontrollfluss landet damit wieder theMBSDemo. Abbildung 4.10 zeigt den Stand des Diagramms und der Nachrichtenhistorie zu diesem Zeitpunkt. An diesem Fallbeispiel werden bereits einige der Merkmale deutlich, mit denen COINED Lernprozesse unterstützen kann. Im Folgenden stellen wir nun genauer gegenüber, welche Merkmale jeweils die einzelnen didaktischen Anforderungen erfüllen.

4 Lösungsansatz

55

Abbildung 4.10 Protokollierter Nachrichtenfluss am Ende des durchgespielten Szenarios

DA1: Benutzerinteraktion auf Objektebene In COINED: Direkter Zugriff auf Objekte ist zum einen im ObjectView und zum anderen im DiagramView möglich. Im Diagramm werden die einzelnen Objekte in Form von Rechtecken, ähnlich der Notation in UML-Objekt-Diagrammen, visualiert. Der Objektname, -typ und die sowie Attributnamen und –werte zu einem bestimmten Zeitpunkt werden angezeigt. Assoziationen zwischen Objekten werden über gerichtete Linien visualisiert. Über das Kontextmenü eines Objekts können die Objektdetails und Messagestack des Objekts geöffnet werden, d.h. die Wahl des entsprechenden Menüeintrags aktualisiert den MessageProcessingView bzw. die ObjectDetails-Maske mit den Daten des aktuellen Objekts. Eine andere Sichtweise auf die Objekte findet sich im ObjectView. Hier werden die Objekte eines Projekts listenartig aufgeführt. Die Auswahl der angezeigten Objekte lässt sich über Filter beschränken, z.B. kann der Benutzer nur die von ihm dirigierten Objekten auflisten lassen. Die Selektion eines Objekts der Liste führt zur Anzeige der Details dieses Objekts in der Maske im unteren Teil des ObjectViews. In dieser Maske können die Attributwerte direkt editiert werden, vorausgesetzt, der Benutzer ist auch Director dieses Objekts, bzw der zugehörigen Klasse. Abbildung 4.7 zeigt die beiden Objekt-Darstellungsformen: grafisch im Diagramm und listen-artig im ObjectView. DA2: Kapselung In COINED: Die Objekte und ihre jeweiligen Attributwerte sind im Diagram-und ObjectView für alle Benutzer sichtbar. Mit diesen Informationen werden die Diagramme aussagekräftiger und können dann Programmflüsse besser visualisieren. Bei der Manipulation von Objekten bleibt COINED dem Prinzip der Kapselung allerdings treu, nur der Director, also der Benutzer, der ein Objekt dirigiert, darf Attribute und -werte dieses Objekts editieren. Alle anderen Benutzer müssen Nachrichten an das Objekt schicken, wenn sie seine Attributwerte verändern wollen. Hier ist ein Filter denkbar, dieser ist jedoch zukünftigen Versionen von COINED vorbehalten. DA3:Interaktiv Nachrichten senden In COINED: Methoden können im ClassView eingesehen, angelegt und bearbeitet werden, also explizit auf Klassen- nicht auf Objektebene. Die Methoden einer Klasse bestimmen die möglichen Nachrichten, die an ein Objekt dieser Klasse geschickt werden können. Wenn ein Benutzer eine Nachricht an ein Objekt

4 Lösungsansatz

56

schicken möchte, zieht er dieses Objekt aus dem ObjectView in das entsprechende Feld im MessageProcessingView. Das Dropdown-Menü Message bietet dann alle Nachrichten, die sich an diese Objekt schicken lassen, zur Auswahl. Für jede Methode, die Klasse des Objekts besitzt, wird die entsprechende Nachricht angezeigt. Nach der Auswahl einer Nachricht werden die Parameterfelder entsprechend der Methodensignatur aktualisiert. Der Benutzer kann den einzelnen Parametern dann konkrete Werte zuweisen, entweder per Drag&Drop oder, im Fall von einfachen Datentypen, durch direkte Eingabe. Gesendete Nachrichten werden im DiagramView visualisiert. Auf der Verbindungslinie zwischen zwei Objekten werden in einer Box alle Nachrichten gelistet die zwischen den Objekten verschickt wurden. Jede Nachricht hat ein Pfeil-Icon, das die Richtung des Nachrichtenflusses symbolisiert. Innerhalb einer Box werden die Nachrichten in absteigender Reihenfolge angezeigt, die aktuellste Nachricht steht dann jeweils oben. Methoden tauchen also nur im Kontext von Klassen (nämlich im ClassView) und Nachrichten im Kontext von Objekten (im MessageProcessingView arbeitet der Benutzer auf Objektebene, im DiagramView ebenso) auf. Eine Tatsache, welche die Differenzierung von Methode und Nachricht aus Benutzersicht unterstreichen sollte. DA4: Interaktiv Objekte erzeugen In COINED: Klassen und Objekte werden jeweils in verschiedenen Views (ClassView und ObjectView) verwaltet. Beide Views sind als Master-DetailsBlöcke konzipiert, d.h. es gibt auf der einen Seite eine Listendarstellung aller Elemente und auf der anderen Seite eine Detailmaske (vgl. Abbildung 4.6, Abbildung 4.7). Die Selektion eines Listenelements zeigt dann die Details dieses Elements in dieser Detailmaske an. Im ClassView lassen sich in der Detailmaske Attribute (Name und Typ) und Methoden einer selektierten Klasse einsehen, erzeugen und/oder editieren. In den Details des ObjectViews werden die Attribute (Name und Typ) und die konkreten Attributwerte von Objekten angezeigt, die Editierbarkeit beschränkt sich an dieser Stelle aber auf die Attributwerte. Neue Objekte werden im ClassView durch direkte Instanziierung von Klassen erzeugt. Um ein Objekt einer bestimmten Klasse zu erzeugen, selektiert man die Klasse und wählt im Kontextmenü den Eintrag „Create New Object“. Das Erzeugen von Objekten ist nur dem Director der Klasse des Objekts gestattet. Die strikte Trennung von Klassen- und Objektraum, und die Beschränkungen der Editiermöglichkeiten im jeweiligen Kontext (Attributname/-typ und Methoden im ClassView, Attributwerte im ObjectView) sollen den Anwender dabei unterstützen, sauber zwischen Objekten und Klassen zu differenzieren zu können. DA5: Beziehungen In COINED: Ein Objekt kann Nachrichten nicht an beliebige Objekte verschicken, sondern nur so an solche, zu denen es in einer Beziehung steht. Das sendende Objekt muss das empfangende Objekt kennen. Diese Kenntnis kann sich z.B. aus einem Attributwert, einem Parameter oder einer lokalen Variable des aktuellen Messagestacks des Objekts herleiten. In COINED initiiert der Benutzer das Senden einer Nachricht, indem er ein Objekt per Drag&Drop in den MessageProcessingView zieht. Der Drag&Drop-Mechanismus wurde dabei so umgesetzt, dass ausschließlich Attribute, Parameter und lokale Variablen des aktuellen Objekts als DragSource zugelassen werden. Somit besteht also für den

4 Lösungsansatz

57

Benutzer überhaupt keine Möglichkeit, Nachrichten an unbekannte Objekte zu senden. DA6: Kommunikationsmedium für den Wissenstransfer a) Graphische Visualisierung als Kommunikationsunterstützung In COINED werden Nachrichtenfluss und Objektinteraktion in Diagrammen visualisiert. Diese Diagramme können später als Kommunikationsgrundlage dienen und zu Dokumentationszwecken eingesetzt werden b) Protokolle der Interaktion als Kommunikationsunterstützung Der vollständige Nachrichtenfluss und alle Benutzerinteraktionen werden persistent in der Datenbank gespeichert und im HistoryView zur Anzeige gebracht. Diese Informationen dokumentieren den vollständigen Ablauf der Simulationen und bieten den Anwender eine gemeinsame Kommunikationsbasis aufgrund der weiterführende Design-Entscheidungen getroffen werden können. DA7: Unterstützung verteilter und lokaler Lehre COINED wurde mit dem Schwerpunkt auf der Unterstützung von verteilter Gruppenarbeit konzipiert. Mehrere (lokale oder verteilte) Benutzer arbeiten gruppenweise in gemeinsamen Sessions an Projekten. Dabei muss die Arbeit natürlich nicht zwingend als Multi-User-Session erfolgen, Single-User Betrieb ist ebenso möglich. COINEDs Client-/Server-Kommunikation basiert letztlich auf TCP/IP, damit kann es sowohl im LAN (lokale Lehre, eine Gruppe arbeitet mit vernetzten Rechnern in einem Seminarraum) als auch übers Internet (verteilte Lehre, Lernende sitzen an verschiedenen Orten an Rechnern mit Internetanschluss) eingesetzt werden. DA8: Flexible Reaktion auf neue Erkenntnisse Da Änderungen am Modell innerhalb von COINED schnell und einfach umgesetzt werden können, ist es möglich mit relativ wenig Aufwand die neuen Erkenntnis in alternative Modelle einfließen zu lassen und diese im SzenarioRollenspiel zu testen. DA9: Rollenspiel COINED unterstützt interaktives Szenario-Rollenspiel. Benutzer übernehmen die Rolle von Objekten und senden, empfangen und bearbeiten Nachrichten. Der Nachrichtenfluss und Objektzuständen werden in einem RPD visualisiert. Beim Senden einer Nachricht gibt ein Objekt die Kontrolle an den Empfänger der Nachricht ab. Erst mit dem Erhalt der Antwort bekommt der Sender die Kontrolle zurück. Objekte, die auf Antworten warten, also Teil des aktuellen Execution Stacks sind, signalisieren diesen Zustand über das farbige Director-Icon. Bei allen anderen Objekten ist das Icon leicht transparent.

4.2 OO-Entwicklung: Szenario und Lösungsdarstellung Neben dem Einsatz in der Lehre bietet sich im Bereich der Softwareentwicklung eine weitere Einsatzmöglichkeit von COINED. Das folgende Szenario soll exemplarisch verdeutlichen, wie COINED als unterstützendes Werkzeug in der Entwurfsphase eines Softwareprojekts eingesetzt werden kann.

4 Lösungsansatz

58

Eine Autovermietung gibt bei einer auswärts ansässigen Softwareentwicklungsfirma die Entwicklung eines neuen Verwaltungssystems in Auftrag. Das System soll die für Autovermietungen üblichen Funktionalitäten erfüllen, dazu gehört u.a. die Verwaltung des Fahrzeug- und Kundenbestands, das Reservieren oder Ein- und Auschecken von Fahrzeugen, etc. Die Entwicklung soll in einem heterogenen Team aus Mitarbeitern der Softwarefirma und Mitarbeitern der Autovermietung erfolgen. Letztere sollen in den gesamten Entwicklungsprozess (insb. auch in der Entwurfsphase) aktiv einbezogen werden. Im Vorfeld, in einer ersten Analysephase hat das Team bereits Use Cases identifiziert und, z.B. unter zu Hilfenahme von CRC-Karten, ein elementares, informales Modell entwickelt, das jetzt in einer Designphase konkretisiert und verfeinert werden soll.

Abbildung 4.11 –Autovermietung: Use Cases und CRC-Karten

Es gibt noch Unklarheiten bzgl. des genauen Modells, die beteiligten Klassen und Objekte sowie ihr Verhalten und ihre Interaktion müssen noch genauer identifiziert werden. Die Entwurfsphase beinhaltet unter anderem auch, dass bestimmte Implementierungsfragen geklärt werden. Es müssen Entscheidungen zu den tatsächlichen Klassen getroffen werden, ihre Eigenschaften müssen auf konkrete Attribute und Methoden abgebildet werden, für das Zustandekommen von Beziehungen müssen geeignete Umsetzungsformen (durch Konstruktion, Senden von Argumenten, Empfang von Antworten), gefunden werden. Das Modell wird in der Designphase immer wieder geändert, verschiedene Designalternativen werden durchgetestet. Am Ende sollen aus dem Modell JavaKlassenrümpfe generiert werden. Nicht alle Teammitglieder können bei den nun anstehenden Sitzungen vor Ort sein, um face-to-face miteinander zu kommunizieren und Entwurfsentscheidungen wie sonst üblich auf Papier oder Whiteboards zu diskutieren. Deshalb sucht man nach Möglichkeiten einen verteilten Entwurfsprozess zu unterstützen und den Teilnehmern Remote-Zugriff bzw. -Einstieg in gemeinsame Entwurfssitzungen zu bieten. Man entscheidet sich für den Einsatz von COINED. Der COINED-Server wird in der Software-Firma aufgesetzt und so in die Netz-Infrastruktur integriert, dass die Teammitglieder sich über das Internet von verschiedenen Orten mit den, auf ihren Laptops und Desktop-PCs installierten, Clients einloggen können. Im ersten Schritt versuchen die Anwender die Artefakte des Analysemodells auf eine möglichst einfache Art innerhalb von COINED abzubilden, so dass ein erstes Designmodell in Form eins Projekts mit Klassen und Objekten entsteht. In diesem Projekt werden dann die verschiedene Use Cases „durchgespielt“.

4 Lösungsansatz

59

Zur Illustration des konkreten Einsatzes von COINED schauen wir uns den Use Case „Kfz mieten“ genauer an. Unser Team besteht aus John, Jack, Jill und Joe. Alle halten sich an verschiedenen Orten auf. Joe hatte sich bereit erklärt ein initiales Projekt mit einer ersten Umsetzung der CRC-Karten anzulegen. Dieses Projekt soll nun als Ausgangsbasis für die weitere, gemeinsame Entwicklung dienen. Die Teammitglieder loggen sich zu einem verabredeten Zeitpunkt aus der COINED-Perspektive ihrer EclipseUmgebungen am Server ein und öffnen das Projekt „Autovermietung“. Folgende Klassen hat Joe bereits angelegt: • • • •

Kfz - Die Fahrzeuge, die vermietet werden können (ID, Typ, istVerfügbar, miete()) Vermietung– Verwaltet den Fahrzeug- und Kundenbestand (kfzListe, sucheKfz(), kundenListe, sucheKunde()) Mitarbeiter - Nimmt Kundenaufträge entgegen, wie Fahrzeuganfragen, Vermietungen und Rückgaben (ID, Name, mieten(), zurückgeben(), kollaboriert mit Vermietung). Kunde(ID, Name, gemietete Fahrzeuge, ausstehende Gebühren

Den etwas konkreteren Ablauf eines „Kfz mieten“-Szenarios hat das Team schon während der Analyse vorher besprochen, Joe hatte eine textuelle Beschreibung per Email verteilt. Max Muster mietet bei einem Mitarbeiter das Kfz mit der ID “PB-PK 123“. Max Mustermann ist registrierter Kunde mit der ID 321. Das Kfz ist verfügbar. Nach dem Mieten hat das Kfz den Status „nicht verfügbar“ und es ist beim Kunden Max Muster als gemietetes Kfz eingetragen. Nachdem das Team komplett angemeldet ist und das Projekt geöffnet hat (erkennbar an den Status-Icons in der BuddyListe), vergewissert sich Joe über den integrierten Chat als erstes, dass auch alle die entsprechende SzenarioBeschreibung erhalten und vor sich liegen haben. Bei der Gelegenheit wird gleich die Rollenverteilung geklärt, Jack übernimmt die Rolle der Vermietung, Joe spielt die Kunden, Jill ist für die Kfz und John für die Mitarbeiter zuständig. Alle führen die jeweilige Zuordnung gleich in COINED durch (über das Kontextmenü im ClassView, vgl. Abbildung 4.6)

Abbildung 4.12 – ChatView: Joe, Jack, Jill und John besprechen die Rollenverteilung

Ähnlich wie Testdaten für TestCases in einer JUnit-Testumgebung innerhalb der setUp()-Methode initialisiert werden, müssen auch für die Szenarien in COINED initiale Daten vorbereitet werden. Das Erzeugen von Testdaten kann z.B. das Anlegen bestimmter Objekte und das Vorbelegen von Attributwerten umfassen. In unserem Beispiel muss das Team also zunächst entsprechend initiale Objekte

4 Lösungsansatz

60

anlegen, bevor die Simulation starten kann. Jeder erzeugt die erforderlichen Objekte der Klasse für die er als Director zuständig ist und weist gegebenenfalls initiale Attributwerte zu (John: derMitarbeiter, Jack: dieVermietung, Jill: kfz1 und Joe: kunde1). Neue Objekte werden über das Kontextmenü einer Klasse im ClassView erzeugt.

Abbildung 4.13 – Autovermietung: Initialisierte Objekte

Das Szenario soll mit dem initialen Senden der Nachricht mieten(kundenID=“321“, kfzID=“PB-PK 123“) starten. Stellvertretend für die Systemkomponente (z.B. Systemeingaben über das GUI), von der die Bearbeitungsabläufe später tatsächlich ausgelöst werden sollen, gibt es in COINED das theActor-Objekt. Jedes Objekt hat in seinem Kontextmenü den Eintrag „Send Initial Message To“ über den sich eine initiale Nachricht von theActor an dieses Objekt schicken lässt. Diesen Weg nutzt Joe nun um das Rollenspiel und den Mietvorgang anzustoßen (vgl. Abbildung 4.14)

Abbildung 4.14 – Autovermietung: Initiierung, Bearbeitung und Darstellung der ersten Nachricht

John (derMitarbeiter) muss für die Bearbeitung der Anfrage das entsprechende Kunden- und Kfz-Objekt ermitteln. Er stellt fest, dass er selbst nicht über die entsprechenden Informationen verfügt, und auch keine Assoziation zu einem Objekt besitzt, von dem er diese Information bekommen könnte. Ein Blick auf das Diagramm offenbart schnell, dass das Objekt dieVermietung als Verwalter der Kfz und Kundenlisten der richtige Ansprechpartner wäre. Im Chat bespricht John kurz mit dem Team, dass er seinem Objekt gerne eine initiale Referenz auf dieVermietung in Form eines Attributwertes anlegen würde. Da für die Klasse Mitarbeiter sowieso die Responsibilities sucheKfz und sucheKunde vorgesehen sind und spätestens bei deren Umsetzung die Vermietung als Collaborator erforderlich sein wird, stimmen alle sofort zu. John

4 Lösungsansatz

61

erzeugt also für seine Mitarbeiter-Klasse im ClassView das neue Attribut vermietung vom Typ Vermietung. Er wechselt wieder zurück in den ObjectView und weist dem Attribut den konkreten Wert dieVermietung zu. Im Diagramm erscheint eine blaue gerichtete Verbindungslinie, die symbolisiert, dass das Objekt derMitarbeiter das Objekt dieVermietung nun kennt und mit ihm interagieren kann. John kann nun also die Suchanfragen stellen, er schickt die Nachricht sucheKfz(„PB-PK123“) an dieVermietung. Damit geht die Kontrolle an Jack, dieser beantwortet die Nachricht indem er das entsprechende Objekt kfz1 per Drag&Drop aus seinen privaten Attributen auf das Anwortfeld zieht und durch Klicken des Finish-Buttons die Kontrolle zurückgibt. John speichert das erhaltene Fahrzeug kfz1 in einer lokalen Variablen um ihm im nächsten Schritt eine Verfügbarkeitsanfrage senden zu können. Er initiiert die Nachricht diesmal nicht per Drag&Drop sondern über das Kontextmenü der Variable („Send Message To“). Beide Wege sind gleichwertig und führen zum Formular („Create a New Outgoing Request“), in dem das adressierte Objekt, hier jetzt also kfz1, vorgepromptet ist. Bei der Sichtung des Dropdown-Menüs mit den für die Klasse Kfz definierten Nachrichten stellt John fest, das es die Nachricht istVerfügbar() noch nicht gibt. Also gibt er den Namen der Nachricht manuell ein. Er könnte noch Parameter angeben, aber er benötigt keine und schickt die neue Nachricht ab. Jill erhält die Kontrolle und muss nun auf die neue Nachricht reagieren. Sie könnte die Nachricht mit Do-Not-Understand beantworten und so verwerfen. Aber sie sieht sofort, dass es noch keine andere Methode zur Abfrage des privaten verfügbar-Attributs von Kfz gibt. Also akzeptiert sie die Nachricht, indem sie sie erwartungsgemäß beantwortet. Sie zieht den Wert von verfügbar in das Antwortfeld und beendet die Bearbeitung. Im Hintergrund wird damit automatisch eine neue der Nachricht entsprechende Methode in die Klasse Kfz eingefügt. Der weitere Ablauf des Szenarios geht ohne weitere Besonderheiten über die Bühne. John schickt die Nachricht mieten() an kfz1, woraufhin Jill den Verfügbarkeits-Status von kfz1 auf false setzt. John lässt sich das KundenObjekt kunde1 mittels der Nachricht sucheKunde(„321“) von dieVermietung zurückgeben. Mit Senden der Nachricht mieteKfz (kfz1) aktiviert er das Objekt kunde1 von Joe. Joe trägt das übergebene Argument kfz1 in die Liste der gemieteten Fahrzeuge ein und gibt die Kontrolle zurück. Damit kann John nun die Bearbeitung der initialen mieten() Nachricht vom ActorObjekt abschließen.

4 Lösungsansatz

62

Abbildung 4.15 Nachrichtenhistorie und Diagramm am Ende des Szenarios

Nach dem Abschluss des Rollenspiels kann sich das Team die genaue Chronologie des Nachrichtenflusses und alle getätigten Zuweisungen im MessageHistoryView noch einmal vor Augen führen. Dort ist auch die hierarchische Struktur des Nachrichtenstacks gut erkennbar. Jack merkt an, dass die Objektinteraktion ingesamt sehr „Mitarbeiter-lastig“ ist ein Sachverhalt, den man am Diagramm schnell nachvollziehen kann. Man diskutiert kurz alternative Möglichkeiten, z.B. könnte der Mitarbeiter seine Kommunikation mit dem Kfz-Objekt an das Kunden-Objekt delegieren, bleibt dann aber bei der ursprünglichen Version.

Abbildung 4.16 – Codegenerierung: Assistent und Java-Perspektive mit generierten KlassenStubs

Das Team spielt nun noch verschiedene andere Szenarien wie„Kfz zurückgeben“ durch, testet so das Modell und bessert es gegebenenfalls nach. Von der finalen Version ist Joe so begeistert, dass er gerne direkt dem Implementieren loslegen möchte. Dafür lässt er sich von COINED Java-Klassenrümpfe mit Methoden und

4 Lösungsansatz

63

Attributen aus dem Modell generieren (s. Abbildung 4.16). Sein Eclipse wechselt dabei automatisch in die Java-Perspektive in der Joe gleich auf die generierten Klassen zugreifen und diese ausprogrammieren kann. Das vorgestellte Nutzungsszenario illustriert bereits wie COINED einige der Anforderungen aus 2.2.4 erfüllt und unterstützt. Während der Simulation offenbaren sich die Unzulänglichkeiten des Modells auf relativ natürliche Art und Weise, notwendige Artefakte werden identifiziert. So werden beispielsweise intuitiv die fehlende Beziehung zwischen Mitarbeiter und Vermietung (EA4), und die benötigte Nachricht istVerfügbar() (EA3) aufgedeckt. Im Folgenden betrachten wir noch einmal genauer, wie COINED die einzelnen Anforderungen umsetzt. EA1: Identifikation der Objekte EA2: Identifikation der Nachrichten EA3: Reaktion auf Nachrichten EA4: Identifikation der Objektbeziehungen Bei der Simulation der Szenario-Rollenspiele arbeiten die Benutzer direkt auf Objektebene und bewegen sich eben gerade explorierend durch den Objekt-Raum. Die zur Umsetzung einer bestimmten Systemfunktionalität benötigten Objekte werden schnell identifiziert (EA1). Auch die benötigten Nachrichten(EA2), die Reaktionen der Empfänger (EA3) und die erforderlichen Beziehungen zu anderen Objekten um Nachrichten senden können (EA4), können während der Simulation aufgedeckt werden. Im AU Ein besonderes, EA2 unterstützendes, Merkmal von COINED ist die Möglichkeit der Ad-Hoc-Methodengenerierung. Damit ist es möglich, unbekannte Nachrichten an Objekte zu verschicken. Der Sender generiert eine benutzerdefinierte Nachricht mit neuem Namen und Parametern. Der Empfänger hat die Möglichkeit mit DoNot-Understand zu antworten, dann geht die Kontrolle zum Sender zurück und die neue Nachricht/Methode wird verworfen. Der Empfänger kann die Nachricht aber auch akzeptieren, indem er sie auf die im MsgProcessingView übliche Weise bearbeitet und beantwortet. In der Klasse des Empfängers wird dann automatisch eine der Nachricht entsprechenden Methode angelegt. EA5: Testmöglichkeiten Mit COINED lassen sich verschieden Systemfunktionalitäten rollenspielartig simulieren. Diese Simulationen können auch als Tests betrachtet werden. Sie dienen dazu Inkonsistenzen und Fehler im Modell aufzudecken. EA6: Kommunikationsmedium für den Wissenstransfer a) Graphische Visualisierung als Kommunikationsunterstützung In COINED werden Nachrichtenfluss und Objektinteraktion in Diagrammen visualisiert. Diese Diagramme können später als Kommunikationsgrundlage dienen und zu Dokumentationszwecken eingesetzt werden b) Protokolle der Interaktion als Kommunikationsunterstützung Der vollständige Nachrichtenfluss und alle Benutzerinteraktionen werden persistent in der Datenbank gespeichert und im HistoryView zur Anzeige gebracht. Diese Informationen dokumentieren den vollständigen Ablauf der Simulationen und bieten den Anwender eine gemeinsame Kommunikationsbasis aufgrund der weiterführende Design-Entscheidungen getroffen werden können.

4 Lösungsansatz

64

EA7: Unterstützung lokaler und verteilter Teams Analog zu DA7 - COINED wurde mit dem Schwerpunkt auf der Unterstützung von verteilter Gruppenarbeit konzipiert. Mehrere (lokale oder verteilte) Benutzer arbeiten gruppenweise in gemeinsamen Sessions an Projekten. Dabei muss die Arbeit natürlich nicht zwingend als Multi-User-Session erfolgen, Single-User Betrieb ist ebenso möglich. COINEDs Client-/Server-Kommunikation basiert letztlich auf TCP/IP, damit kann es sowohl im LAN (lokale Lehre, eine Gruppe arbeitet mit vernetzten Rechnern in einem Seminarraum) als auch übers Internet (verteilte Lehre, Lernende sitzen an verschiedenen Orten an Rechnern mit Internetanschluss) eingesetzt werden. EA8: Potenzieller Mehrwert Ein konkreter Mehrwert, den die Nutzung von COINED bietet, liegt in der Möglichkeit der Code-Generierung. Aus dem entworfenen Modell können Klassenrümpfe erzeugt werden, die dann als Grundlage für die spätere Implementierung dienen. Ein indirekterer Mehrwert kann sich bzgl. der Qualität des Designs ergeben. Wenn die Möglichkeit, verschiedene Design-Alternativen zu testen, intensiv genutzt wird, führt das dazu, dass der resultierende Entwurf später weniger anfällig auf Änderungen reagiert. Auch die Wahrscheinlichkeit während der späteren Implementierung in Probleme, die auf schlechten Entwurfsentscheidungen basieren, zu geraten, verringert sich. EA9: Flexible Reaktion auf neue Erkenntnisse Da Änderungen am Modell innerhalb von COINED schnell und einfach umgesetzt werden können, ist es möglich mit relativ wenig Aufwand verschiedene Design-Alternativen zu testen. So können neue Erkenntnisse gewonnen und das Design flexibel angepasst werden. EA10: Nachvollziehbarkeit In COINED: Der HistoryView listet alle gesendeten Nachrichten und alle Zuweisungen chronologisch in einer Baumdarstellung auf. Die einzelnen Eben des Baum lassen sich je nach gewünschtem Detailgrad auf oder zu klappen. Über Filter kann die Anzeige auf Zuweisungen oder Nachrichten beschränkt werden. Die Nachrichten sind aufsteigend durchnummeriert. Zu jeder Nachricht lassen sich über ein Kontextmenü Details wie Quell- und Zielobjekt, Parameter, und Zeitstempel anzeigen. Über den HistoryView ist der Nachrichtenfluss also vollständig nachvollziehbar. Die durchgehende Nummerierung der Nachrichten findet sich auch in ihrer Repräsentation im Diagramm. Diese Ansicht ist allerdings eher für eine ausschnittartige Betrachtung des Programmflusses geeignet, aus Gründen der Übersichtlichkeit wird nur eine benutzerdefinierte Anzahl von aktuellen Nachrichten zwischen zwei Objekten angezeigt.

4.3 Konzeptionelle Lösung der technischen Anforderungen In diesem Abschnitt betrachten wir die technische Umsetzung der Lösung. In 4.3.1 stellen wir kurz die Architektur von COINED vor und erläutern im Einzelnen den Bezug zu den in 2.3.2 hergeleiteten technischen Anforderungen. In 4.3.2 gehen wir auf die, in der Lösung verwendeten, Entwurfsmuster aus dem Bereich der, in [SL07] vorgestellten, Computer Mediated Interaction Pattern ein.

4 Lösungsansatz

65

4.3.1 Technischer Überblick und Architektur Wie anfangs bereits erwähnt, wurde COINED als verteiltes Mehrbenutzer-System in Form einer Client-/ Server-Architektur realisiert, wobei der Server die zentrale Instanz ist, welche die Zusammenarbeit der Clients untereinander koordiniert. Der COINED-Server ist eine, der Java-Servlet-Spezifikation entsprechende, Webapplikation, die in einem beliebigen Standard-ServletContainer eingesetzt werden kann. Die Client-/Server-Kommunikation erfolgt zum einen über eine WebService-Schnittstelle (Update- und Datenrequests) und zum anderen über eine JMS-Schnittstelle (Update-Notifications). Der WebService basiert auf der SOAPImplementation Axis und als JMS-konformer Messaging-Dienst wird ActiveMQ eingesetzt. Zur persistenten Datenhaltung wird eine MySQL-Datenbank verwendet. Der COINED-Client wurde als Plugin für das Open-Source Entwicklungsframework Eclipse in der Version 3.2 umgesetzt. Eclipse und Eclipse-Plugins (und damit auch COINED) sind in Java implementiert und somit weitestgehend plattformunabhängig. Für die grafische Diagrammdarstellung wird das Zeichnungs- und Layout-Plugin Draw2D (ein Teil des GEF-Frameworks) verwendet. In Abbildung 4.17 findet sich eine vereinfachte schematische Darstellung der Architektur.

Abbildung 4.17 – Schematische Darstellung von COINEDs Architektur

Die Identifizierung der Clients und die Authorisierung der Zugriffe auf den WebService werden über ein Sessionmanagement geregelt. Den entsprechenden Ablauf beim Start eines Clients kann man sich folgendermaßen vorstellen. Zunächst muss sich der Benutzer am System authentifzieren indem er sich mit seinen Account-Daten (Nickname, Passwort) über einen Login-Dialog am Server anmeldet. Kann der Server die Anmeldedaten validieren, generiert er für den

4 Lösungsansatz

66

Client eine neue Session und gibt die SessionID zurück. Der Client muss danach alle weiterführenden Server-Requests mit dieser SessionID versehen, damit der Server eindeutige Zuordnungen von Requests und Clients machen und die Gültigkeit prüfen kann. Die eigentliche kollaborative Umgebung betritt der Benutzer erst mit dem Öffnen/Erzeugen eines COINED-Projekts. Beim erstmaligen Betreten eines Projekts, wird ein Request an den Server abgesetzt, der dafür sorgt, dass der Benutzer automatisch als Projektmitglied eingetragen wird. Der Server sendet Update-Notifications über das neue Mitglied an alle Clients, die zurzeit im gleichen Projekt registriert sind, diese Clients fordern daraufhin die Daten des neuen Mitglieds vom Server an und aktualisieren die graphische Darstellung in den Benutzerlisten im BuddyListView. Bei dieser Beschreibung erkennt man bereits wie COINED mit Update-Requests und Update-Notifications arbeitet. Ein Mechanismus, der immer verwendet wird, wenn ein Client eine Datenänderung vornimmt. Zur genaueren Illustration der Kommunikationsstrukturen skizzieren wir nun das generelle Muster, nach dem das System auf Benutzerinteraktionen mit Artefakten reagiert und entsprechende Datenmanipulationen umsetzt.

Abbildung 4.18 – Ablauf bei einer Datenänderung

1. Über das GUI eines Clients wird ein Artefakt manipuliert. Das kann z.B. das Verändern einen Attributwerts oder das Senden einer neuen Nachricht sein. 2. Ein entsprechender Update-Request mit den zu ändernden Daten wird an den Server durchgereicht a. View stellt Anfrage beim Model b. Model delegiert an Cache c. Cache stellt Request an WebService 3. Auf Server-Seite gibt der für den Request zuständige Businesshandler die im Request übermittelte SessionID zur Prüfung an den SessionManager weiter.

4 Lösungsansatz

67

Der SessionManager validiert die Session und liefert die mit der Session assoziierten Client-Informationen, wie User- und ProjektID, zurück. 4. Bei positiver Validierung delegiert der Businesshandler die zu ändernden Daten an den entsprechenden DB-Mapper. 5. Die DB-Mapper überträgt die gewünschte Änderung persistent in den Datenbestand der Datenbank. 6. War der DB-Eintrag erfolgreich, informiert der Businesshandler den serverseitigen ChannelManager. 7. Der ChannelManager informiert alle Clients, die am gleichen Projekt interessiert sind (auch den Client, von dem die Änderung ausging), über die erfolgte Änderung, indem er eine Update-Notification im entsprechenden Topic veröffentlicht. Auf Clientseite lauscht ein ChannelManager auf Nachrichten in den Topics des aktuellen Projekts und nimmt diese UpdateNotification in Empfang. 8. Verteilung der Update-Nachicht innerhalb der Clients a. ChannelManager informiert MessageController b. MessageController informiert alle an der Nachricht interessierten Listener 9. Der Cache entfernt ggf. eine alte ungültige Version des Artefakts 10. Anforderung der neuen, geänderten Daten vom Server a. Views fragen beim Model an. b. Model delegiert an Cache c. Cache holt die Daten über den WebService vom Server 11. Der Server holt die Daten aus der DB a. Der Businesshandler delegiert die Anfrage an die entsprechende DBFinder-Klasse b. Der Finder liest die Daten aus der DB 12. Nachdem die ausgelesenen Daten an den Client zurückgegeben und an Model und Views verteilt worden sind, wird die Darstellung der Daten im GUI aktualisiert Abbildung 4.18 stellt das Zusammenspiel von grafisch dar. Es folgt eine detailliertere Zuordnung von COINEDs Merkmalen und den technischen Anforderungen aus 2.3.2 TR1: Gemeinsame Sicht auf ein Diagramm In COINED: Alle Benutzer, die gemeinsam ein Projekt bearbeiten, haben die gleiche Sicht auf das zugehörige Diagramm. Änderungen am Diagramm werden vom Server an die Clients mittels entsprechender Update-Notifcations propagiert. Änderungen können dabei sowohl räumlicher Natur (Objekte sind per Drag&Drop verschieb-/positionierbar) als auch inhaltlicher Natur sein (geänderte Objektzustände, geänderter Aktivitätsstaus, neue Nachrichten, etc.) Die Clients werten die Notifications aus, holen sich die neuen Daten vom Server und updaten ihre Diagrammdarstellung entsprechend. TA2: Kommunikationsmedium für den Wissenstransfer a: Graphische Visualisierung als Kommunikationsunterstützung In COINED werden Nachrichtenfluss und Objektinteraktion in Diagrammen visualisiert. Diese Diagramme können später als Kommunikationsgrundlage dienen und zu Dokumentationszwecken eingesetzt werden

4 Lösungsansatz

68

b: Protokolle der Interaktion als Kommunikationsunterstützung Der vollständige Nachrichtenfluss und alle Benutzerinteraktionen werden persistent in der Datenbank gespeichert und im HistoryView zur Anzeige gebracht. Diese Informationen dokumentieren den vollständigen Ablauf der Simulationen und bieten den Anwender eine gemeinsame Kommunikationsbasis aufgrund der weiterführende Design-Entscheidungen getroffen werden können. TA3: Synchrone Kommunikation COINED besitzt einen integrierten Chat. Chatnachrichten werden persistent und mit Bezug zum jeweils aktiven Objekt abgespeichert. Die Chatnachrichten werden in einer eigenen Ansicht jeweils mit Nickname, User-Icon und Zeitstempel angezeigt. TA4: Awareness In COINED: (a) In der Buddyliste wird rechts neben dem Benutzerbild jedes Benutzers sein Onlinestatus mit einem roten, grünen oder gelben Icon dargestellt. Rot bedeutet: Benutzer ist nicht eingeloggt – Gelb: Benutzer ist eingeloggt, befindet sich aber zurzeit in einem anderen Projekt – Grün: Benutzer ist eingeloggt und hat das gleiche Projekt geöffnet. (b) Während einer Simulation kann man im Diagramm erkennen welches Objekt aktiv ist (Hintergrundfarbe wechselt von Gelb zu Orange, Stern erscheint vor dem Objektnamen). Da in der Repäsentation eines Objekts immer auch das Icon seines Directors angezeigt wird, kann jeder Benutzer jederzeit sehen, wer die aktuelle Kontrolle hat. TA5: Modellierung von Rollen In COINED: Ein Benutzer kann sich über das Kontextmenü im ClassView zum Director einer Klasse erklären. Damit übernimmt er die Kontrolle über die Klasse sowie alle zugehörigen Objekte, und er kann neue Objekte der Klasse erzeugen. Der Director ist für das Verhalten der Objekte einer Klasse verantwortlich. Wenn eins seiner Objekte eine Nachricht erhält, übernimmt er die Rolle des Objekts und bearbeitet und beantwortet die Nachricht. Die Director-Rollen werden durch die Anzeige der entsprechenden Benutzer-Icons visualisiert, sowohl in den Klassenrepräsentationen im ClassView, als auch in den Objektrepräsentationen im ObjectView und im DiagramView. TA6: Synchronisation des Diagramms Wie in TR1 beschrieben, werden Änderungen am Diagramm per UpdateNotifications vom Server an die Clients propagiert. Wenn nun ein Benutzer an einem Client in einem Simulationschritt eine neue Nachricht abschickt, teilt der Client dem Server dieses Vorhaben über einen entsprechenden Request mit, die Nachricht wird als Parameter übergeben. Der Server speichert die Nachricht persistent in der DB ab und schickt anschließend Update-Notifications an alle betroffenen Clients. Die Clients werten die empfangene Notifcation aus und stellen einen Request an den Server um die Daten der neuen Nachricht abzurufen. Erst dann wird das GUI aktualisiert. JMS sorgt dafür das Notifications in der richtigen Reihenfolge ausgewertet werden TA6: Code-Generierung Im ClassView lässt sich auf Knopfdruck aus den, in der COINED-eigenen informalen Notation definierten, Klassen Java-Quellcode generieren. Es wird,

4 Lösungsansatz

69

sofern noch nicht existent, ein Eclipse-Projekt mit Java-Klassenrümpfe, Attribute und Methoden eingeschlossen, erzeugt. Die Integration von COINED in Eclipse ermöglicht es der Umgebung, mit der Generierung automatisch von der COINEDPerspektive in die Java-Perspektive zu wechseln. Der Anwender hat dort dann die Möglichkeit Eclipse in seiner klassischen Funktion als Java-IDE zu nutzen und er kann direkt mit der Auszuprogrammierung der Klassen beginnen. Während der Simulation eines Progammablaufs werden sowohl die gesendeten Nachrichten, als auch die, von den Benutzern im Zuge der Nachrichtenbearbeitung vorgenommen, Zuweisungen aufgezeichnet, im HistoryView visualisiert und in der Datenbank persistent gespeichert. Diese Informationen können z. B als Grundlage für die Generierung von JUnit-Testcase dienen. TA7: Visualisierung des Interaktionsflusses Im Diagramm wird der Interaktions-/bzw. Nachrichtenfluss graphisch visualisiert. Die dynamische Hervorhebung (Hintergrundfarbe, Stern-Icon) des jeweils aktiven Objekts und der letzten Nachricht fokussiert den Blick des Anwenders auf den aktuellen Stand der Simulation. Nachrichten sind in absteigender Reihenfolge mit ihren Nummern an den Verbindungslinien zwischen Objekten aufgelistet. Um die Übersichtlichkeit des Diagramms im Falle vieler Nachrichten nicht einzuschränken, kann die Anzahl der angezeigten Nachrichten pro Verbindung über eine Benutzereinstellung individuell eingestellt werden. Anhand der Nachrichtennummern kann der Fluss schnell nachvollzogen werden. TA9: History Wie bereits in TA6 erwähnt, werden während der Simulation eines Progammablaufs sowohl die gesendeten Nachrichten als auch die, von den Benutzern im Zuge der Nachrichtenbearbeitung vorgenommenen, Zuweisungen aufgezeichnet und im HistoryView chronologisch aufgelistet. Der Nachrichtenfluss kann hier also vollständig nachvollzogen werden. TA10: Usermanagement In COINED müssen Benutzer sich über einen Login-Dialog mit ihren Accountinformationen (Nickname und Passwort) am COINED-Server authentifizieren, bevor sie den kooperativen Arbeitsbereich betreten dürfen. Vor der ersten Benutzung muss jeder Benutzer einen eigenen Account anlegen. Nach der erfolgreichen Authentifizierung kann der Benutzer ein Projekt öffnen, er nimmt damit automatisch an der aktuellen kooperativen Session der Projektmitglieder teil. Beim erstmaligen Betreten eines Projekts wird der Benutzer automatisch als Projektmitglied eingetragen und er wird entsprechend in der Buddyliste des Projekts aufgeführt. Benutzerinformationen, Projekte und die entsprechenden Zuordnungen werden vom Server verwaltet und persistent in der Datenbank gespeichert. T11: Persistenz COINED wurde als Client-/Server-Architektur umgesetzt. Alle Informationen (Benutzer, Projekte, Artefakte, Zuordnungen) werden immer zentral und persistent vom Server in einer SQL-Datenbank gespeichert. Dabei müssen Datenbank und COINED-Server nicht notwendigerweise auf demselben System laufen. Durch die zentrale, persistente Speicherung kann der asynchrone Zugriff unterstützt werden. So können die Anwender auch beim asynchronen Zugriff auf

4 Lösungsansatz

70

gemeinsame Projekte immer den letzten aktuellen Stand abrufen. Die Benutzer können zu jedem Zeitpunkt von jedem Ort (über das Internet) mit dem System arbeiten, unabhängig vom Online-Status anderer Gruppenmitglieder und einzelner Clients.

4.3.2 Verwendete Patterns und ihr Zusammenspiel Groupwaresysteme unterstützen Gruppenprozesse, sie koordinieren die Kommunikation und die Kollaboration innerhalb von Gruppen. In [SL07] werden spezielle Entwurfsmuster (Patterns) für die Entwicklung von Groupwaresystem definiert. Im Folgenden geben wir eine Übersicht darüber, welche dieser Pattern in COINED verwendet wurden. Login In COINED müssen Benutzer sich über einen Login-Dialog mit ihren Accountinformationen (Nickname und Passwort) am COINED-Server authentifizieren, bevor sie den gemeinsamen Arbeitsbereich betreten dürfen. So ist das System in der Lage, innerhalb der kooperativen Sessions jede Aktion einem bestimmten Benutzer zuzuordnen. Das ist eine der Grundvoraussetzungen, um Benutzer identifizierbar werden zu lassen. Der angemeldeten Benutzer wird zum einen durch den Fettdruck seines Namens in der Repräsentation im BuddylistView und zum anderen durch die Anzeige in der Titelzeile des Eclipse-Fensters („logged in as “) kenntlich gemacht. Virtual Me Jeder Anwender kann zur Beschreibung seiner virtuellen Identität ein Profil bearbeiten. In dem Profil hat er die Möglichkeit persönliche Informationen wie Email-Adresse, vollen Namen, sowie ein Bild zu hinterlegen. Dieses Bild wird dann überall zur visuellen Repräsentation des Benutzers verwendet, sowohl in der Buddyliste also auch in den Darstellungen seiner Klassen und Objekte. Wenn ein Benutzer kein eigenes Bild hinterlegt, wird ein Default-Bild angezeigt. Shared Editor Anwender können gleichzeitig Objekt-Positionen manipulieren. per Mediated Upates wird die Darstellung an allen Clients synchronisiert. Objekt-Positionen werden persistent in der Datenbank gespeichert. Semantische Objekt-Manipulationen finden nicht konkurrierend statt, da ausschließlich der Director schreibenden Zugriff auf ein Objekt hat. Floor Control Der in COINED verwendete Kontrollflussmechanismus (nur der Director des gerade aktiven Objekts darf editieren) kann als Variante dieses Patterns ausgeleget werden. Room COINED-Projekte können als eine Ausprägung des Room-Patterns angesehen werden. Ein Projekt enthält Artefakte und Benutzer. Artefakte und Zustände werden persistent in der DB gespeichert, Projekte können sowohl synchron als

4 Lösungsansatz

71

auch asynchron bearbeitet werden. Zwischen den Benutzern eines Projekts existiert ein synchroner Kommunikationskanal, der integrierte Chat. Embedded Chat Mit dem Chat im ChatView bietet COINED den Anwendern die Möglichkeit der synchronen Kommunikation. Das Chatten erfolgt Projekt-bezogen, d.h. es werden nur Nachrichten von Projektteilnehmern verschickt und angezeigt. Die Nachrichten werden persistent in der Datenbank gespeichert. User List Wenn ein Benutzer ein COINED-Projekt öffnet, wird der BuddyListView mit den visuellen Repräsentationen aller Projektteilnehmer aktualisiert. Jeder Teilnehmer wird mit Namen und Benutzerbild aufgeführt. Ein Icon signalisiert jeweils den aktuellen Online-/Projekt-Status eines Benutzers. (Offline, Online und nicht das gleiche Projekt geöffnet, Online und gleiches Projekt geöffnet). Spezielle ClientListener überwachen die Zustände der Clients und sorgen für die dynamische Aktualisierung der Status-Icons, sowohl in Fällen in denen Benutzer sich ordnungsgemäß am Server an-/abmelden und Projekte betreten, als auch bei unerwarteten Fällen wie Verlust von Netzwerkverbindungen oder Systemabstürzen. Über die BuddyListe ist also für jedes Projektmitglied klar erkennbar, wer sich aktuell mit im Projekt befindet und damit an der gemeinsamen Session teilnimmt. Dieses Bewusstsein fördert den freieren Umgang der Benutzer mit den gemeinsamen Artefakten. Wir verwenden hier letztendlich eine Variante des User List Patterns, da die Benutzerrepäsentation nicht komplett aus der Liste entfernt wird, wenn ein Benutzer die Session, bzw. das Projekt verlässt, sondern stattdessen das StatusIcon entsprechend aktualisiert wird. Interactive User Info Über das Kontextmenü der Benutzerrepräsentationen im BuddyListView können die Benutzerprofile eingesehen werden. Activity Log In COINED wird eine sehr eingeschränkte Version des Patterns verwendet. Bestimmte modifizierende Benutzer-Aktivitäten (Zuweisungen, Nachrichten) werden im HistoryView protokolliert. Persistent Session In COINED arbeiten die Benutzer in kooperativen Sessions an Projekten. Die Ergebnisse (Artefakte, Zustandsänderungen, Abläufe) werden persistent auf dem Server in der Datenbank gespeichert. Dadurch wird es möglich die kooperativen Aktivitäten der letzten Session später zu reviewen oder fortzuführen. Es werden nur die Daten der jeweils letzten Session eines Projekts verwaltet, der Zugriff auf ältere Sessions wird nicht unterstützt. State Transfer (aka “What’s up”) Wenn ein Benutzer ein Projekt öffnet, wird der aktuelle Projektzustand vom Server geladen und zur Anzeige gebracht. Dass der Server immer über die

4 Lösungsansatz

72

aktuellste Version der gemeinsamen Daten verfügt, wird dadurch sichergestellt, dass Änderungen grundsätzlich erst wirksam werden, wenn sie erfolgreich in die DB weggeschrieben konnten. So können Benutzer problemlos zu einer laufenden kooperativen Sitzung dazustoßen, sie starten immer mit dem aktuellen Stand und konsistenten Daten. Centralized Objects Alle Artefakte (Klassen, Objekte, Nachrichten,…) werden zentral in einer Datenbank verwaltet. Der Server koordiniert die konkurrierenden Zugriffe und stellt die Artefakte auf Anfrage über eine Webservice-Schnittstelle bereit. Änderungen an gemeinsamen Artefakten kommuniziert der Server mithilfe von Update-Notifications über eine JMS-Schnittstelle an die interessierten Clients Remote Subscription Zur Verteilung von Nachrichten, die Änderungen am gemeinsamen Datenbestand betreffen, verwendet COINED Publish/Subscribe-Messaging, realisiert mit JMS (Java Messaging Service). Wenn ein Benutzer ein Projekt betritt, registriert sich der Client beim Server als Konsument für alle projekt-spezifischen Nachrichten. Die Nachrichten sind in Topics (ClassInfo, ObjectInfo, MessageInfo, UserInfo, usw) organisiert, die der Client jeweils abonniert. Wenn nun eine Änderung am Datenbestand ausgeführt wird, veröffentlicht der Server eine UpdateBenachrichtung im entsprechenden Topic und das System sorgt dafür, dass alle Clients, die dieses Topic abonniert haben, die Nachricht erhalten. Replicated Objects (aka “Replicate for Speed”) Jeder Client verfügt über einen lokalen Cache, der die Artefakte aus den Ergebnissen der Serveranfragen zwischenspeichert. Klassen, die Daten benötigen, stellen Anfragen an den Cache, der diese wiederum an den Server weiterleitet, wenn er sie aktuell nicht bedienen kann. Der Cache erhält Update-Notifications vor allen anderen Message-Listenern, so dass er betroffene Artefakte entfernen kann und keine ungültigen Daten enthält. Wenn der nächste Zugriff auf ein nicht (oder nicht mehr) vorhandenes Artefakt erfolgt, wird es neu vom Server geladen. Auf die gecacheten Daten gibt es nur lesenden Zugriff. Modifikationen erfolgen immer erst nach Serverkommunikation. Mediated Updates Der Server ist die zentrale Instanz an der Clients sich anmelden und für den Empfang von Update-Nachrichten registrieren. Wenn ein Client lokale Daten manipuliert, schickt er einen Update-Request an den Server. Nach erfolgreicher Umsetzung des Requests verteilt der Server Update-Notifications an alle betroffenen Clients, genauer gesagt, er veröffentlicht die Nachricht in dem relevanten Topic und per JMS wird die Nachricht dann an alle Subscriber des Topics verteilt. Der Server übernimmt hier also die Rolle des Mediators, der dafür sorgt, dass Update-Notfications zwischen Clients propagiert werden. Die Clients müssen sich untereinander nicht kennen. Distributed Command In COINED werden die Server-Requests zum Ändern und Abrufen der gemeinsamen Daten mithilfe eines WebServices realisiert. Ein Client ruft eine entfernte Service-Methode auf und der Server führt diese dann aus.

4 Lösungsansatz

73

Commands werden allerdings nicht an Clients weitergeleitet, insofern handelt es sich nur um eine eingeschränkte Variante des Patterns. Zusammenspiel der Patterns Die verwendeten Patterns machen deutlich, dass COINEDs Hauptaugenmerk auf der zielgerichteten Unterstützung von synchroner verteilter Gruppenarbeit liegt. Eine verteilte Gruppe von Benutzern arbeitet in Projekten gemeinsam an zentral verwalteten Artefakten. Das Zusammenspiel der Patterns soll für die Umsetzung wichtiger Groupware-Konzepte sorgen, gerade auch im Umgang mit verteilten Gruppen. In verteilten Gruppen ist es z.B besonders wichtig, den Gruppenmitgliedern die Anwesenheit der anderen bewusst zu machen. Motivationsförderndes Gruppengefühl verliert sich leicht, wenn die Mitglieder alleine an verschiedenen Orten vor ihren Rechnern sitzen. Deshalb verwendet COINED bewusst einige Patterns, die auf die Förderung und den Erhalt des Gruppenbewusstseins abzielen (Virtual Me, User List, Interactive User Info, Sender Recognition,…). Weitere Effekte, die im Zusammenspiel der Patterns angestrebt werden, sind die Anregung und Unterstützung weiterer Gruppenprozesse, wie Diskussion, Entscheidungsfindung und Kommunikation zwischen Gruppenmitgliedern.

5 Details zur Lösung

74

5 Details zur Lösung In 4.3.1 wurde bereits ein kurzer technischer Überblick über COINED und seine Architektur gegeben. Der folgende Abschnitt geht nun bezüglich der verwendeten Technologien und der Implementierung etwas mehr ins Detail.

5.1 Signifikante Implementierungsdetails Der COINED-Server ist in Java implementiert. Er hat die Form einer Webapplikation nach Servlet-Spezifikation und sollte daher in jedem Standardkonformen Servlet Container lauffähig sein. Im Zuge der Entwicklung wurde die Applikation allerdings ausschließlich innerhalb eines Apache Tomcat eingesetzt. Clients stellen Daten- und Änderungsanfragen an den Server. Der COINEDServer muss also u.a. als Datenprovider für die Clients dienen. Diese Funktionalität wird über einen WebService realisiert, der die entsprechenden Methoden zur Abfrage und Änderung von Daten zur Verfügung stellt. WebServices sind plattform- und insbesondere implementations-unabhängig, die Schnittstellen-Beschreibung der bereitgestellten Methoden erfolgt in XMLDateien in WSDL (Web Service Description Language), einer eigenen Spezifikationssprache. Der in COINED umgesetzte WebService stützt sich auf SOAP als Kommunikationsprotokoll. Als Basis für die Konstruktion dieses WebServices dient die SOAP-Engine Apache Axis. Zu diesem Zweck ist Axis als Servlet mit in die COINED-Webapplikation integriert. Die Entwicklung der Webapplikation erfolgte innerhalb der Eclipse Web Tools Platform (WTP1.5). Das umfasst sowohl die Generierung der Transport-Klassen für den Client-Proxy, die den Client Zugriff auf den Server implementieren, als auch die WSDLBeschreibung des WebService. Wobei WTP in diesen Fällen letztlich nur als ein Wrapper für die von Axis-mitgelieferten Tools wsdl2java und java2wsdl dient. Mit der automatischen Erzeugung der Transport-Klassen erhält der Entwickler eine robuste Schnittstelle, ohne sich mit auf elementarer Ebene mit SOAPFunktionsweisen befassen zu müssen. In COINED werden bei der Generierung des Client-Proxys auch die Basis-Model-Klassen, die eine Abbildung der DBTabellen darstellen, vom Server zum Client transferiert. Der in COINED verwendete Benachrichtigungsmechanismus, mit dem Änderungsnachrichten an Clients propagiert werden, basiert auf JMS (Java Messaging Service) - als JMS-konformer Messaging-Dienst wird ActiveMQ eingesetzt. COINED nutzt asynchrones Topic-basiertes Publish/Subscribe-Messaging. Clients registrieren sich (subscribe) beim Server als Konsumenten bestimmter Topics. Topics sind logische Kanäle, mit denen sich Nachrichten filtern lassen. So gibt es in COINED z.B. relativ feingranulierte Topics, welche die jeweiligen Änderungen von Klassendetails betreffen, wie ClassInfo, FieldInfo, MethodInfo und MethodParamInfo. Wenn nun eine Änderung am Datenbestand ausgeführt wird, veröffentlicht (publish) der Server eine Änderungsnachricht im entsprechenden Topic und das JMS-System, also ActiveMQ, sorgt dafür, dass alle Clients, die dieses Topic abonniert haben, die Nachricht erhalten. Zur persistenten Speicherung der Daten wurde während der Entwicklung das freie, unter der GPL stehende, relationale Datenbankmanagementsystem MySQL eingesetzt. Der Umsetzung der Zugriffe von COINED auf die Datenbank erfolgt mittels JDBC über den offiziellen JDBC-Treiber Connector/J von MySQL. Die

5 Details zur Lösung

75

Zugriffe sind in SQL formuliert und in einer eigenen Datenbankschicht der Serverarchitektur innerhalb von Mapperklassen organisiert und implementiert. Es ist prinzipiell möglich andere Datenbanken und Treiber als MySQL und Connector/J für COINEDs Datenhaltung einzusetzen - alle SQL-Abfragen in COINED sind ANSI SQL-92 konform formuliert. In solchen Fällen muss die XML-Konfigurationsdatei des Servers entsprechend angepasst werden und die entsprechenden Treiber-Bibliotheken in die Webapplikation eingebunden werden. Die Mapperklassen der Datenbankschicht bilden die DB-Tabellen in etwa 1-zu-1 auf Basisklassen in ein elementares Klassenmodell ab. Die Bezeichnungen der Datenbanktabellen wird in jeweils in einem Interface zur entsprechenden ModellKlasse definiert und muss dort bei Schema-Änderung ggfs. angepasst werden. coined::server::model::CObject

coined::server::database::CObjectMapper

classID: long

database: Database

description: String

logger: Logger

name: String

CObjectMapper(in database: Database)

CObject()

delete(in id: long)

equals(in o: Object): boolean

findByID(in id: long): CObject

getClassID(): long

findByIDs(in cObjectIDs: long[]): List

getDescription(): String

findByRoleID(in roleID: long): List

getName(): String

findByUserID(in userID: long): List

setClassID(in roleID: long)

getCObjectsByProject(in projectID: long): List

setDescription(in description: String)

insert(in cObject: CObject)

setName(in name: String)

update(in cObject: CObject)

«interface»

coined::server::database::IObject COL_DESCRIPTION: String COL_ID: String COL_ID_CLASS: String COL_NAME: String SQL_TABLE: String

Abbildung 5.1 – Exemplarisch für die Umsetzung der DB-Schnittstelle CMessageMapper, CMessage, IMessage

Session-Management: Client erhalten bei der Anmeldung am Server eine SessionID. Die ID verliert nach 30 Sekunden ihre Gültigkeit, sofern sie nicht durch weitere Requests erneuert wird. Bei Request an den Webservice wird die Gültigkeitsdauer automatisch verlängert. Am Client läuft ein KeepSessionAliveThread der sich regelmäßig beim Server meldet. Der Server räumt seinen SessionID-Pool entsprechend regelmäßig auf, wenn er auf ungültige IDs stößt, korrigiert er ggf. den entsprechenden Client-Status und loggt den Benutzer aus. So werden Inkonsistenzen bzgl. User- und ClientStati vermieden wenn ein Client aufgrund unvorhergesehener Umstände (Absturz, Netzverlust) unvermittelt, also ohne ordentliche Abmeldung, ausscheidet, wird seine SessionID ungültig, damit ist der Server informiert und kann den Statuswechsel an die anderen Clients propagieren.

5 Details zur Lösung

76

Abbildung 5.2 – Paketstrukturen von COINEDs Client und Server

Der Client ist als Eclipse Plugin realisiert. Plugins werden mit einer ActivatorKlasse gestartet. Der Activator für COINED ist CoinedPlugin.java, siehe Abbildung 5.3. .

Abbildung 5.3 – COINEDs Activator-Klasse

In Abbildung 5.2 findet sich ein Überblick über die Paketstrukturen des COINED Clients und des Servers. In Abbildung 5.4 bietet einen Überblick über alle Messaging und Listener-Klassen. Es gibt einen ChannelManager, der die externen JMS-Nachrichten managt und einen MessageController der die Client-Internen Listener-Strukturen verwaltet. Abbildung 5.5 zeigt die Model-Klassen. coined.server.model wird sowohl vom Client als auch vom Server verwendet, die

5 Details zur Lösung

77

Objekte dieser Klassen werden auch über die WebService-Schnittstelle transferiert.

Abbildung 5.4 – Alle Messaging und Listener Klassen

Abbildung 5.5 – Die Modell-Klassen

5 Details zur Lösung

78

5.2 Erfahrungen / Evaluation COINED wurde noch nicht evaluiert. Anhand der Reaktionen auf erste Demonstrationen - u.a. erfolgte eine Demo vor Fachpublikum im Rahmen des Educator’s Symposium der OOPSLA 2006 - lässt sich aber bereits feststellen, dass es bezüglich der Benutzerführung noch einige Verbesserungsmöglichkeiten gibt. Das bestehende User-Interface wird schnell als zu komplex und die Benutzerführung als kompliziert empfunden. Hier könnte man eventuell mit einigen Vereinfachungen und einer strengeren Benutzerführung Abhilfe schaffen. Zudem hängt das Gefühl der Unübersichtlichkeit auch stark von der Auflösung des verwendeten Monitors ab - um alle Views der COINED Perspektive vollständig darstellen zu können, muss mit einer Auflösung von mehr als 1024x768 Pixeln gearbeitet werden. Die Visualisierungsform des Nachrichtenflusses in der Diagrammdarstellung wird dagegen erfahrungsgemäß akzeptiert und als sinnvoll empfunden. Angebracht wäre eventuell noch ein weiteres unterstützendes Element, welches signalisiert, wenn ein Benutzer „an der Reihe ist“, also wenn eins seiner Objekte durch den Erhalt einer Nachricht aktiviert wurde und die Kontrolle erhalten hat. Denkbar wären zum Beispiel ein akustisches Signal, ein Popup-Fenster, das automatische Holen des MessageProcessingViews in den Vordergrund oder einfach die Veränderung der Hintergrundfarbe des MsgProcessingViews.

6 Zusammenfassung

79

6 Zusammenfassung 6.1 Kurzfassung des Problems und wie es gelöst wurde In Rahmen dieser Arbeit wurde der synchroner Mehrbenutzer-Diagrammeditor COINED zur Simulation von Objektinteraktionen konzipiert und implementiert. COINED ist sowohl für den Einsatz im didaktischen Umfeld der OOP-Lehre als auch für den Einsatz im Entwicklungprozess von OO-Systemen geeignet. In Kapitel 4 wurde gezeigt, dass COINED die Anforderungen vollständig erfüllt, sowohl im didaktischen als auch im Entwicklungskontext, sowie technischer Hinsicht. Die vollständige Erfüllung der Anforderungen konnte keiner der für einen Vergleich in Frage kommenden Forschungsansätze leisten. In der Regel unterstützen diese Ansätze den Kooperationsaspekt nicht. COINED dagegen wurde gerade mit dem Schwerpunkt auf Kooperation konzipiert. Es lässt sich sowohl lokal als auch verteilt einsetzen, mehrere Benutzer können gleichzeitig synchron an einem gemeinsamen Projekt arbeiten. Auch war keiner der untersuchten Ansätze gleichermaßen für den Einsatz in der Lehre zur Vermittlung von OO-Konzepten wie für den Einsatz im Kontext der OO-Systementwicklung geeignet. COINED dagegen kann die Anforderungen in beiden Kontexten erfüllen. Die Integration des Editors in die Eclipse-Umgebung ermöglicht eine ganzheitliche Entwicklung. Dabei wird zunächst von einem Entwicklungsteam innerhalb von COINED in einem iterativen Prozess, der u.a. interaktiven Tests in Form von Szenario-Rollenspielen umfasst, das Modell erarbeitet. Aus diesem Modell werden dann per Knopfdruck Java-Klassengerüste in einem Eclipse-Projekt generiert. Der Anwender wechselt innerhalb von Eclipse in die Java-Perspektive und kann direkt mit der Implementierung beginnen.

6.2 Offene Fragen für weitere Forschungsarbeiten Ein offensichtlicher Punkt für eine sinnvolle Erweiterung ist die weitergehende Generierung von Quell-Code. Ein rudimentärer Ansatz ist mit der Möglichkeit der Generierung von Klassengerüsten mit Attributen und Methoden schon vorhanden. Hier kann man nun beliebig aufbauen. Es ist denkbar aus den während einer Simulation gesammelten Informationen JUnit-Testcases zu erzeugen. Das System protokolliert sämtliche Zuweisungen, die die Benutzer durchführen und sämtliche Nachrichten, die verschickt werden. Diese Abläufe stellen letztlich Testcases dar, die einfach nur auf entsprechenden Java-Code abgebildet werden müssen. Zum Definieren und Auslösen der Generierung eines Testcases könnte man den Benutzer zum Beispiel eine Sequenz von Nachrichten im HistoryView markieren lassen und den entsprechenden Punkt im Kontextmenü anbieten. Die Integration von COINED in Eclipse ermöglicht nicht nur das Generieren, sondern auch das direkte Ausführen der generierten JUnit-Tests in der JUnit-Umgebung von Eclipse.

Es wäre denkbar, COINED um Replay-Funktionalitäten zu erweitern. Eine Ablaufsteuerung mit der man auf Knopfdruck eine gespeicherte Simulation vorund zurückspulen und gegebenenfalls noch einmal ganz von vorne betrachten kann. Der Ablauf würde dann am Diagramm animiert und visualisiert. Mit dieser Erweiterung wäre es dann natürlich auch sinnvoll, mehrere Simulationen und Szenarien zu einem Projekt speichern zu können und diese dann eben bei Bedarf abrufen und wiedergeben zu können. Es sollte eine Stackanalyse und History-

6 Zusammenfassung

80

Analyse möglich sein, die aufzeigt, welche Auswirkungen geändertes Verhalten auf frühere Interaktionen hätte. Man könnte COINED um grafische Editiermöglichkeiten erweitern. Der DiagrammView würde dann zum DiagrammEditor mit den entsprechen Möglichkeiten, per Mausklick Objekte und Klassen zu erzeugen und zu manipulieren. Die technische Umsetzung mit dem GEF würde sich anbieten, da COINED ohnehin schon Teile davon (Draw2D) verwendet. Bei Verwendung des GEF wären auch solche Funktionalitäten wie Overview-Fenster zum schnellen Navigieren in großen unübersichtlichen Diagrammen leicht umsetzbar. Auch eine ZoomIn/Out-Funktion ließe sich mit dem GEF sehr einfach realisieren und integrieren. Die Diagrammansicht kann noch beliebig erweitert und in Details verbessert werden. Es wäre praktisch, wenn man in großen Projekten Bereiche des Diagramms aus- und bei Bedarf wieder einblenden könnte. Die Interaktivität könnte mit zusätzlichen Drag&Drop-Möglichkeiten erhöht werden. Objekte sollten sich vom und in den DiagrammView ziehen lassen. Neue Objekte könnten durch das Ziehen von Klassen in den DiagrammView erzeugt werden. Die Generierung formaler UML-Diagramme wäre auch eine denkbare Erweiterungsmöglichkeit. Aus den Klassenbeschreibungen können sich Klassendiagramme erzeugen lassen. Aus den Role-Play-Diagrammen können Objekt-Diagramme und Interaktionsdiagramme wie Kooperations- und Sequenzdiagramme abgeleitet werden. Im Rahmen dieser Arbeit konnten nicht alle Sprachkonzepte von Java verwirklicht werden. In dieser Hinsicht sollten sich noch einige Erweiterungsmöglichkeiten finden lassen. So könnte ein nächster wichtiger Schritt die Umsetzung des Vererbungskonzepts sein. Ebenso sollte sich die Umsetzung des Begriffs der Interfaces einbauen lassen. Eine stärke Verzahnung des COINED-Clients mit dem Projektmanagement von Eclipse wäre ebenfalls eine sinnvolle Erweiterung. In der aktuellen Version arbeitet COINED mit einem eigenen, selbst-definierten Projekt-Begriff - es wäre denkbar, COINED-Projekte in klassische Eclipse-Projekte zu integrieren. Ein Schritt hierbei wäre die Erzeugung einer speziellen project nature für COINED; die dann die Verbindungen zwischen dem Projekt und dem COINED-Plugin definiert und managt. Ein weiteres Thema könnte die lokale Replikation der Daten sein, man könnte COINED dahingehend erweitern, dass es möglich wird auch offline, also ohne Serveranbindung zu arbeiten. Es könnte die Visualisierung beliebiger Java-Programme eingebaut werden, also quasi die entgegengesetzte Richtung zur Code-Generierung bei der am Ende JavaKlassen stehen. Java-Klassen dann dienen als Ausgangsbasis für die Erzeugung eines COINED-Projekts (Reverse-Engineering). Im Zusammenhang mit den Rollespielen sollte die Erfassung von Szenarien in den COINED-Kontext einarbeiten werden.

81

Quellenverzeichnis [Agi01] [Alice07] [And02] [Argo07] [Arm06]

[Baec93]

[Beck89] [Berg01]

[Berg04]

[Bit02] [BlueJ07] [Bör04]

[Bör05] [Borr02]

[Bra04] [Brady05] [Bru01]

[Bru05]

[Coo00]

Agile Manifesto, http://www.agilemanifesto.org/principles.html http://www.alice.org/ S.K. Andrianoff, D.B. Levine, Role Playing in an Object-Oriented World, Computer Science Department, St. Bonaventure University ArgoUML, http://argouml.tigris.org/ Deborah J. Armstrong, "The Quarks of Object-Oriented Development." COMMUNICATIONS OF THE ACM February 2006, 49(2) Baecker, R. M. (1993). Readings in groupware and computersupported cooperative work: assisting human-human collaboration. San Mateo, Calif: Morgan Kaufmann Publishers. Beck, K., Cunningham, W. (1989). A Laboratory for Teaching Object-Oriented Thinking. Proceedings OOPSLA’89. 1-6. Bergin, J., Eckstein, J., Wallingford, E., Manns, M.L. (2001) Patterns for Gaining Different Perspectives. In Proceedings of the 8th Conference on Pattern Languages of Programs (Monticello, Illinois, USA, September 11-15, 2001) Joseph Bergin, Mark Stehlik, Jim Roberts, and Richard Pattis. Karel J. Robot: A gentle introduction to the art of object-oriented programming in Java. Kurt Bittner, Ian Spence (2002). Use Case Modeling. Addison Wesley Professional, 2-3. http://www.bluej.org/ Jürgen Börstler (2004). Object-Oriented Analysis and Design Through Scenario Role-Play. In: UMINF 04.04, ISSN-0348-0542. UMEÅ UNIVERSITY, Department of Computing Science: SE-901 87 UMEÅ, SWEDEN, (Online at: ) Börstler, J. (2005), Improving CRC-Card Role with Role-Play Diagrams, OOPSLA’05, San Diego, USA, 356-364, ACM Press Alf Borrmann, Manfred Rätzmann, Jörg Sauer, Jan Matèrne, Gunnar Landgrebe (2002), UML und Rational Rose – Anleitung zum Praxiseinsatz, Galileo Computing A. Brady (2004), Marine Biology Simulation Case Study. Teaching resources, Febuary 2004. Online at: http://max.cs.kzoo.edu/AP/MBS/ A. Brady (2005), Marine Biology Simulation Case Study, Teaching Resources, Online at http://max.cs.kzoo.edu/AP/MBS/index.html, Kim B. Bruce, Andrea Danyluk, and Thomas Murtagh. A library to support a graphics-based object-first approach to CS 1. In Proceedings of the thirty-second SIGCSE technical symposium on Computer Science Education, pages 6–10. ACM Press, 2001. Kim B. Bruce (2005), Controversy on How to Teach CS 1:A Discussion on the SIGCSE-members Mailing List, Reprint, SIGCSE Bulletin inroads, 37(2):11-117 Stephen Cooper, Wanda Dann, Randy Pausch (2000) Alice: a 3-D tool for introductory programming concepts

82 [Coo03]

Stephen Cooper, Wanda Dann, and Randy Pausch. Teaching objectsfirst in introductory computer science. In Proceedings of the 34th SIGCSE technical symposium on Computer science education, pages 191–195. ACM Press, 2003. [Dan03] Wanda Dann, Stephen Cooper, Randy Pausch (2003). Objects: Visualization of Behavior and State. ITiCSE ’03, S.84-88 [Diaz05a] Guillermo Jiménez-Díaz, Mercedes Gómez-Albarrán,Marco A. Gómez-Martín and Pedro A. González-Calero (2005). Software Behaviour Understanding Supported by Dynamic Visualization.... In: ITiCSE’05 ?. : , 54-58. (Online at: ) [Diaz05b] Guillermo Jiménez-Díaz, Mercedes Gómez-Albarrán,Marco A. Gómez-Martín and Pedro A. González-Calero (2005): ViRPlay: Playing Roles to Understand Dynamic Behvior [Diaz05c] Guillermo Jiménez-Díaz, Mercedes Gómez-Albarrán,Marco A. Gómez-Martín and Pedro A. González-Calero (2005). Understanding Object-Oriented Software through Virtual Role-play. In: IACLT’05 [Fab] Fablusi, The online Role-Play Simulation Platform, Online at http://www.fablusi.com [Gero04] Gerosa, M., H. Fuks, A. Raposo, and C. Lucena (2004, February). Awareness support in the AulaNet learning environment. In Proceedings of the IASTED International Conference on Web-Based Education - WBE 2004, Innsbruck,Austria, pp. 490{495. ACTA Press. [Grud88] Grudin, Jonathan (1988). Why CSCW applications fail: problems in the design and evaluation o.... In: Proceedings of the 1988 ACM conference on Computer-supported cooperative work. ACM Press: Portland, Oregon, United States, 85 - 93. (Online at: http://research.microsoft.com/research/coet/Grudin/papers/CSCW198 8.pdf) [Haa04] Kelsey Van Haaster, Diane Hagan (). Teaching and Learning with BlueJ:an Evaluation of a Pedagogical Tool. [Köl03] M. Kölling , J. Rosenberg. The BlueJ System and its pedagogy. Journal of Computer Science Education, Special issue on Learning and Teaching Object Technology, 13(4):249-268 [MBSC07] http://www.collegeboard.com/student/testing/ap/compsci_a/case.html [Naps02] Naps, T.L., Rößling, G., Almstrum, V., Dann, W., Fleischer, R., Hundhausen, C., Korhonen, A., Malmi, L., McNally, M., Rodger, S., Velázquez-Iturbide (2002), J.A. Exploring the Role of Visualization and Engagement in Computer Science Education. In: M.E. Caspersen, D. Joyce, D. Goelman, I. Utting (eds.): Working group reports from ITiCSE on Innovation and Technology in computer science education, ACM Press, Århus, Denmark, (2002) 131-152 [OMG03] Object Management Group, UML 2.0 Infrastructure Specification. www.omg.org, 2003 [Pau95] Pausch, R. et al. (1995), Alice: Rapid Prototyping system for virtual reality, IEEE Computer Graphics and Applications, 15(3), 8-11 [Pos07] Poseidon for UML, http://www.gentleware.com/products.html [Rag05] N. Ragonis, M. Ben-Ari (2005). On understanding the Statics and

83 Dynamics of Object-Oriented Programs. [Rob01] Roberts, E. & Picard, A. Designing a Java graphicslibrary for CS1. In Proceedings of the 3rd annual conference on Innovation and Technology in Computer Science Education (Dublin, Ireland, July, 1998), 213-218. [Rose07] http://www-06.ibm.com/software/awdtools/developer/rose/enterprise/ [Rupp06] Chris Rupp, Sophist Group: Requirements-Engineering und Management. Carl Hanser Verlag, München 2006, [Schmo07] Schmolitzky, A. (2007), Sieben Thesen zur Verwirrung von Anfängern der objektorientierten Programmierung [Schü00] Schümmer, J., Schümmer, T., Schuckmann, C., (2000). COAST–– Ein Anwendungsframework für synchrone Groupware. In: Conference Proceedings for the “Net.ObjectDays 2000” [Sharf99] Sharf, J., Hsu, T., Ryan, E. (1999). TimeScope: an Educational 3D Multi-User Role-Playing Environment. In Proceedings of the 9th Annual Conference of the Internet Society (San Jose,CA, USA, June 22-25, 1999),. [SL07] Schümmer & Lukosch (2007), Patterns for Computer-Mediated Interaction" [Teu95] Teufel, S., C. Sauter, T. Mühlherr, and K. Bauknecht (1995). Computerunterstützung für die Gruppenarbeit. Addison-Wesley. [Tog07] Borland Together (2007), http://www.borland.com/us/products/together/index.html [UML07] Unified Modeling Language – UML Resource Page, http://www.uml.org/ [Wirf90] Wirfs-Brokc, R., Wilkerson, B., Wiener, L. (1990), Designing Object-Oriented Software. Upper Saddle River, NJ: Prentice Hall

84 Die im Rahmen dieser Arbeit entwickelte kooperative Anwendung COINED (Collaborative Examination of Object Interaction) wird als OpenSource-Projekt weiterentwickelt. Projektinformationen und die aktuelle Executables und Sourcen sind auf den Web-Seiten des Fachbereichs Kooperative Systeme, Praktische Informatik VI, der FernUni Hagen unter folgender URL hinterlegt: http://www.pi6.fernuni-hagen.de/de/projekte/coined.html

View more...

Comments

Copyright © 2020 DOCSPIKE Inc.