ABBILDUNGSVERZEICHNIS...I TABELLENVERZEICHNIS... II LISTINGVERZEICHNIS... III 1 EINLEITUNG...

Größe: px
Ab Seite anzeigen:

Download "ABBILDUNGSVERZEICHNIS...I TABELLENVERZEICHNIS... II LISTINGVERZEICHNIS... III 1 EINLEITUNG..."

Transkript

1 Inhaltsverzeichnis ABBILDUNGSVERZEICHNIS...I TABELLENVERZEICHNIS...II LISTINGVERZEICHNIS... III 1 EINLEITUNG MOTIVATION ZIEL DER ARBEIT INHALT UND AUFBAU GRUNDLEGENDE KONZEPTE TRACING CODE-INSTRUMENTIERUNG MODIFIZIERUNG DER JAVA LAUFZEIT-BIBLIOTHEK JAVA PLATFORM DEBUGGER ARCHITECTURE ASPEKTORIENTIERTE PROGRAMMIERUNG Motivation AspectJ Tracing mit AOP ZUSAMMENFASSUNG ANFORDERUNGSANALYSE ANWENDUNGSFÄLLE SZENARIO: LAUFZEITVERHALTEN AUFZEICHNEN SZENARIO: TRACING MIT CODE-INSTRUMENTIERUNG SZENARIO: TRACING MIT AOP SZENARIO: TRACING MIT JPDA SZENARIO: TRACINGDATEN AUSWERTEN FUNKTIONALE ANFORDERUNG NICHT-FUNKTIONALE ANFORDERUNGEN ENTWURF UND IMPLEMENTIERUNG SYSTEM-ARCHITEKTUR SOFTWAREARCHITEKTUR DESIGN & IMPLEMENTIERUNG STAND DER REALISIERUNG UND FALLBEISPIEL REALISIERUNG FALLBEISPIEL ABSCHLUSS ZUSAMMENFASSUNG AUSBLICK LITERATURVERZEICHNIS GLOSSAR ANHANG A FALLBEISPIEL

2 ANHANG B FALLBEISPIEL ANHANG C INSTALLATIONSHINWEISE ANHANG D BENUTZUNGSHINWEISE ANHANG E DTD FÜR DIE XML-DATEI... 89

3 i Abbildungsverzeichnis Abbildung 2.1 JPDA-Architektur...9 Abbildung 2.2 Implementierung von Logging mit OOP Abbildung 2.3 Modularisierung mit AOP...12 Abbildung 2.4 Aspektweber...13 Abbildung 2.5 Realisierung der Tracing-Funktionalität in einer Java-Anwendung...15 Abbildung 3.1 Anwendungsfalldiagramm: Java Usability Tracing System...19 Abbildung 3.2 Szenario: Tracing mit Code-Instrumentierung...21 Abbildung 3.3 Szenario: Tracing mit AOP...23 Abbildung 3.4 Szenario: Tracing mit JPDA...24 Abbildung 3.5 Szenario: Tracingdaten auswerten...25 Abbildung 4.1 Systemarchitektur Tracing mit AOP...31 Abbildung 4.2 Schichtenmodell des Prototyps...32 Abbildung 4.3 Schnittstelle zum Zugriff auf die Anwendungsschicht...34 Abbildung 4.4 Implementierung der verschiedenen Tracing-Ansätze...35 Abbildung 4.5 Nachbildung der statischen Struktur...37 Abbildung 4.6 Einheitliche Schnittstelle für die Logging-Funktion...40 Abbildung 5.1 Record-Mode: Eingabe der erforderlichen Daten...43 Abbildung 5.2 Eingabe der Klassenpfade...44 Abbildung 5.3 Filtereinstellung...45 Abbildung 5.4 Kompilieren...47 Abbildung 5.5 Überwachung der zu analysierenden Anwendung...47 Abbildung 5.6 Eintritt einer Ausnahmebehandlung...48 Abbildung 5.7 Play-Mode...49 Abbildung 6.1 Eingabe der erforderlichen Daten...84

4 ii Tabellenverzeichnis Tabelle 2-1 Tracing-Ansätze...6 Tabelle 2-2 Vergleich der vier Tracing-Ansätzen...17 Tabelle 3-1 Funktionale Anforderungen an den Prototyp...28 Tabelle 3-2 Nicht-funktionale Anforderungen an den Prototyp...29 Tabelle 4-1 Beschreibung der Zuständigkeiten der Schichten...33 Tabelle 4-2 Elemente der statischen Struktur...36 Tabelle 4-3 Übermittelte Informationen mit dem Ereignis Methodeneintritt & -austritt...39 Tabelle 4-4 Verfügbare Ereignisse für das Tracing...39 Tabelle 5-1 Stand der Realisierung: funktionale Anforderungen...42 Tabelle 5-2 Hinweise beim Kompilierungsvorgang...46 Tabelle 5-3 Symbol der Ereignisse...46

5 iii Listingverzeichnis Listing 2-1 HelloWorld Beispiel mit Logging als Crosscuting concerns...12 Listing 2-2 Implementierung des Aspektcodes für das Beispiel in Listing Listing 2-3 Implementierung des Codes in Listing 2.1 ohne Crosscuting concerns...14 Listing 4-1 Template für den Traceaspekt-Code...38

6 Kapitel 1. Einleitung 1 Kapitel 1 Einleitung 1.1 Motivation Neben der Verwirklichung innerer Softwarequalität ist die optimale Erfüllung äußerer Qualitätsmerkmale eine zweite Herausforderung. In diesem Zusammenhang ist Benutzbarkeit von Software anzuführen. Benutzbarkeit bedeutet zum Einen, wie einfach das Programm zu bedienen ist, und zum Anderen, wie schnell seine Funktionalität erfasst und erlernt werden kann. Es existieren in diesem Sinne verschiedene Verfahren, mit denen die Benutzbarkeit von Software beurteilt werden kann. Ein mögliches Verfahren ist die Protokollierung der Interaktionen zwischen einem Benutzer und dem Programm. Es stellt sich aber schnell heraus, dass die Umsetzung dieses Verfahrens besondere Konzepte erfordert, wenn alle Vorgänge möglichst präzise protokolliert werden sollen. An der Hochschule für angewandte Wissenschaften in Hamburg wird dieses Ziel mit der Einrichtung einer Usability-Labor näher verfolgt. In dem Labor werden die Interaktionen des Benutzers mit dem Programm gefilmt und dessen Kommentare aufgezeichnet. Somit kann man die kritischen Stellen bei der Benutzung des Programms leichter analysieren, da die Stellen oft wiederholt werden können. Um die Analyse des aufgenommenen Materials komplementär zu unterstützen, entsteht der Bedarf nach einem geeigneten Werkzeug, das die relevanten internen Vorgänge innerhalb des Programms während des Benutzungstests aufzeichnet und diese mit den kritischen Stellen im Film anhand Zeitmarke synchronisieren kann. Hieraus lassen sich folgende Anforderungen für das Werkzeug ableiten: Die im Programm durch die Benutzer-Interaktionen entstehenden Objekte und deren Dynamik sollen zur Laufzeit verfolgt und aufgezeichnet werden. Dieses Erstellen eines Protokolls des Programmablaufs wird im Verlauf dieser Arbeit als Tracing benannt.

7 Kapitel 1. Einleitung 2 Die aufgezeichneten Informationen sollen anhand einer Zeitmarke referenziert werden können. Zurzeit steht kein Mechanismus im Labor zur Verfügung, um das Programm und das Werkzeug hardwaremäßig zu synchronisieren. Das bedeutet, absolute Synchronisierung ist nicht gewährleistet. Um mit diesem Problem umzugehen, ergeben sich andere Anforderungen an das Werkzeug: Das Werkzeug soll bei bestimmten Ereignissen der Benutzeroberfläche des Programms einen Schnappschuss des Bildschirmfotos (Screenshot) des Programms erfassen. Außerdem sollen die Audio-Kommentare des Benutzers aufgezeichnet werden. Hiermit hat man zumindest durch Vergleich des Videobilds und des Bildschirmfotos bzw. der Audio-Kommentare des Benutzers eine genügende Synchronisierungsmöglichkeit. 1.2 Ziel der Arbeit Diese Arbeit verfolgt das Ziel, ein Konzept zu entwickeln, um Tracing mit Hilfe der Aspektorientierte Programmierung zu realisieren. Die oben genannten Anforderungen an das Werkzeug sollen bei der Konzeption berücksichtigt werden. Auf Basis dieser Anforderungen soll ein Prototyp entwickelt werden, der die Machbarkeit des Konzeptes demonstriert. Folgende Randbedingungen werden im Rahmen dieser Arbeit festgelegt: Der Prototyp wird in der Programmiersprache Java implementiert. Der Prototyp soll als Single-User-System implementiert werden. Die zur Laufzeit zu analysierenden Programme sollen ausschließlich objektorientierte Systeme und Java-Programme sein. 1.3 Inhalt und Aufbau Diese Arbeit ist in folgende Kapitel unterteilt: Im Kapitel 2 werden die einführenden und grundlegenden Konzepte erläutert. Um einen Einblick in den Problembereich zu bekommen, wird zunächst ein Überblick über Tracing gegeben. Es werden die unterschiedlichen Anwendungsgebiete erklärt. Anschließend wird eine Übersicht über Tracing-Ansätze in Java diskutiert. Dabei wird den Einsatz der Code-Instrumentierung, der Java Plattform Debug Architektur, der modifizierten Java-Laufzeit-Bibliothek und der aspektorientierte Programmie-

8 Kapitel 1. Einleitung 3 rung behandelt. Es wird gezeigt, dass mittels aspektorientierter Programmierung einige Nachteile der anderen Ansätze vermieden werden können. Im Kapitel 3 werden die an den Prototyp gestellten Anforderungen beschrieben. Die Anforderungen basieren auf den abgeleiteten Werkzeuganforderungen in Abschnitt 1.1 und gewonnene Erkenntnisse aus dem Kapitel 2.Bei der Anforderungsanalyse dominiert als zentrales Element das Anwendungsfallmodell, das die Benutzer- System- Interaktion aus Benutzersicht modelliert. Anschließend werden die Anforderungen in funktionale und nicht-funktionale Anforderungen aufgeteilt und beschrieben. Im Kapitel 4 werden die Architektur, Entwurf und Implementierung des Prototyps erläutert. Die Struktur des Gesamtsystems wird zunächst dargestellt. Dabei werden die Konzepte für die Realisierung der Tracingfunktionalität mit Hilfe aspektorientierter Programmierung gezeigt. Anschließend werden die wichtigsten Pakete der Anwendung und deren Verantwortlichkeiten beschrieben. In Abschnitt 4.3 wird dann die Klassenstruktur einiger ausgewählter Pakete näher erläutert. Kapitel 5 verschafft einen kurzen Überblick zum Stand der Realisierung. Anhand eines Fallbeispiels wird die Arbeitsweise des Prototyps gezeigt. Abschließend im Kapitel 6 wird die Diplomarbeit zusammengefasst, das Ziel bewertet und ein Ausblick über mögliche Weiterentwicklungen speziell für das Tracing mit Hilfe aspektorientierter Programmierung gegeben.

9 Kapitel 2. Grundlegende Konzepte 4 Kapitel 2 Grundlegende Konzepte Durch die wachsende strukturelle Komplexität von Softwaresystemen und die rapiden Technologiewechsel wird es immer schwieriger, die gewünschte Qualität der Softwaresysteme sicherzustellen. Die Methoden zur Qualitätssicherung lassen sich in statische und dynamische Analysemethoden gliedern. Bei einer statischen Analysemethode wird das Softwaresystem analysiert, ohne das Softwaresystem auszuführen. Eine dynamische Analysemethode verlangt die Ausführung des Softwaresystems mit konkreten Eingaben in der realen Umgebung. Dabei werden relevante Daten aufgezeichnet. Ein Beispiel dafür ist das Tracing. In diesem Kapitel wird ein Überblick über Tracing und dessen Einsatzmöglichkeiten vermittelt. Anschließend werden vier verschiedene Tracingansätze in der Programmiersprache Java diskutiert und gegenübergestellt. 2.1 Tracing Eine Möglichkeit ein Programm zu analysieren besteht darin, Informationen zur Laufzeit zu protokollieren und später auszuwerten. Dieses Mitprotokollieren wird Tracing genannt. Dabei werden wichtige Ereignisse mitprotokolliert. Die Menge der gesammelten Informationen wird im Verlauf dieser Arbeit als Tracerecords, oder auch Tracingdaten bezeichnet. Diese Daten informieren über einen bestimmten Zustand in der Reihe seines Auftretens in der Anwendung. Debugging dient vor allem der Fehlersuche in Programmen. Dazu kann Tracing auch verwendet werden, indem bei der Analyse der Tracingdaten beispielsweise falsche Methodenaufrufe festgestellt werden. Tracing ist jedoch noch wesentlich mächtiger, weil dabei auch Informationen über das dynamische Programmverhalten ermittelt werden, indem alle Methodenaufrufe, Objekterzeugungen, usw. mitprotokolliert werden. Dadurch können kritische Pfade innerhalb einer oder auch mehrerer, Applikationen entdeckt und verbessert werden. Ebenso können dabei unnütze Methodenaufrufe, beispielsweise mehrere Aufrufe der Initialisierungsmethode einer Biblio-

10 Kapitel 2. Grundlegende Konzepte 5 thek, entdeckt und beseitigt werden. Kernigan und Pike haben in Ihrem Buch The Practice Of Programming [KP99, S. 119] die Vorteile des Tracing folgendermaßen dargestellt: As personal choice, we tend not to use debuggers beyond getting a stack trace or the value of a variable or two. One reason is that it is easy to get lost in details of complicated data structures and control flow; we find stepping through a program less productive than thinking harder and adding output statements and self-checking code at critical places. Clicking over statements takes longer than scanning the output of judiciously-placed displays. It takes less time to decide where to put print statements than to single-step to the critical section of code, even assuming we know where that is. More important, debugging statements stay with the program; debugging sessions are transient. Tracing kann im gesamten Software-Entwicklungszyklus angewendet werden. Abhängig von der jeweiligen Entwicklungsphase: Fehleranalyse. Vor der Fehlerbehebung ist eine Fehleranalyse durchzuführen. Dabei werden Fehler identifiziert und lokalisiert. Zur Fehleranalyse werden neben dem Quellcode und der Systemdokumentation auch die Tracedaten verwendet. Durch die Unterstützung in der Fehleranalyse kann es zu einer schnelleren Fehlerfindung kommen und dadurch zu einer Kostenreduzierung in der Entwicklung und im Support. Architekturanalyse. Die Tracedaten können für eine grafische Darstellung des Programmablaufes verwendet werden. Diese Darstellung (z.b. Sequenz- Diagramm) kann zu Architekturanalysen herangezogen werden. Qualitätssicherung Testen ist für die Software-Qualität unerlässlich. Durch die Verwendung von Tracedaten können Testergebnisse überprüft werden. Zur Überprüfung, ob ein Testlauf erfolgreich war, können die Tracedaten mit denen von früheren Testläufen verglichen werden. Diese Art der Anwendung findet man häufig bei automatisierten Testumgebungen. Wartung. Trotz erfolgreicher Tests sind Probleme im produktiven Einsatz oft unvermeidlich. Die Analyse der Probleme beim Kunden wird durch Tracedaten erleichtert. Evaluationsmethode in der Ergonomie. Die Beurteilung der Benutzbarkeit eines Programms kann durch Tracing unterstützt werden, hierbei interessiert man sich auch für die Verfolgung aller Eingaben am Rechner wie beispielsweise Tastatur und Mausklicks. Es wird zwischen zwei Methoden unterschieden, um die Tracing-Funktionalität in einem bestehenden Programm zu integrieren. Bei invasiven Methoden wird das Pro-

11 Kapitel 2. Grundlegende Konzepte 6 gramm verändert und mit der Tracing-Funktionalität eingefügt. Bei nicht-invasiven Methoden ist es nicht erforderlich, das Programm zu verändern [Renaud 2000]. Im Folgenden werden jeweils zwei Möglichkeiten für invasives und nichtinvasives Tracing in der Programmiersprache Java vorgestellt. Diese Ansätze werden in Tabelle 2-1 dargestellt. Tracing-Ansatz Code-Instrumentierung Modifizierung der Java Laufzeit-Bibliothek Java Platform Debugger Architecture Aspektorientierte Programmierung Methode invasiv nichtinvasiv Tabelle 2-1 Tracing-Ansätze 2.2 Code-Instrumentierung Unter Code-Instrumentierung versteht man das Einfügen von zusätzlichen Code- Anweisungen in den Quellcode. Ein instrumentiertes Programm enthält dann an bestimmten Stellen zusätzlich eingefügte Anweisungen, die zur Aufzeichnung von Informationen während der Programmausführung dienen. Die Instrumentierung kann automatisch durch Werkzeuge, oder manuell erfolgen. Bei der manuellen Instrumentierung werden verschiedene Methoden in der Praxis eingesetzt, angefangen von einfachen,,print -Anweisungen im Quellcode, bis hin zu einer vollständigen Einbindung in ein Logging-Rahmenwerk. Die Code-Instrumentierung hat folgende Vorteile: Die Instrumentierung in den Quellcode kann nachvollzogen werden. Ein Software-Entwickler kann genau entscheiden, welche Teile seines Programms instrumentiert werden sollen, und welche nicht. So werden nur die interessanten Methoden instrumentiert. Bei geeigneter Dokumentation kann die Instrumentierung automatisch zur Dokumentation der Implementierung dienen. Der instrumentierte Quellcode kann mit jedem Java-Compiler in Bytecode überführt und ausgeführt werden. Die Ausführung der eingefügten Anweisungen können je nach Betriebmodus deaktiviert werden. Zu den Nachteilen zählen: Das Programm wird durch Einfügen der Anweisungen verändert. Bei Programmänderungen muss das Programm je nach Anzahl der Instrumentierten Anweisungen in erheblichem Maße verändert werden.

12 Kapitel 2. Grundlegende Konzepte 7 Häufig werden externe Programmbibliotheken, für welche kein Quellcode zur Verfügung steht, eingesetzt. Bei fehlendem Quellcode kann mit der Instrumentierung keine Erweiterung um die Tracing-Funktionalität durchgeführt werden. Es ist schwierig, in Bezug auf die Informationen und den Zeitpunkt zu entscheiden, welche Stellen interessant und welche eher uninteressant sind. Es existiert kein allgemeiner Standard für den Inhalt der Tracingdaten. Im produktiven System müssen die Traceanweisungen entfernt werden oder unwirksam gemacht werden, z.b. aus Performance-Gründen. 2.3 Modifizierung der Java Laufzeit-Bibliothek Eine ähnliche Methode der manuellen Instrumentierung besteht darin, nicht das Programm an sich zu instrumentieren, sondern die benutzten Bibliotheken. Dies kann in Java beispielsweise erfolgen, in dem man die Java Laufzeit-Bibliothek rt.jar instrumentiert. Im Zusammenhang mit der Beurteilung der Benutzbarkeit, kann hier die in der Laufzeit-Bibliothek enthaltene Java-Swing-Bibliothek mit zusätzlichen Anweisungen für die Verfolgung der Mausklicks oder Tastatur-Eingaben eingefügt werden. Dieser Ansatz hat folgende Vorteile: Da nur die Bibliotheken verändert werden, bleibt der Quellcode des Programms unverändert. So kann Tracing einfach und ohne Aufwand einem bestehenden Quellcode hinzugefügt werden. Die einmal instrumentierten Bibliotheken können mit verschiedenen Programmen genutzt werden. Ferner können solche Bibliotheken in verschiedenen Versionen (unter anderem mit und ohne Tracing) auf einem System vorhanden sein. So kann Tracing einfach durch Nutzung der passenden Bibliothek erreicht werden. Die Nachteile sind: Um die Bibliothek angemessen zu instrumentieren, werden tiefe Kenntnisse der Struktur und der Arbeitsweise der Bibliothek erfordert. Es ist nicht immer mit vertretbarem Aufwand möglich, Bibliotheken manuell zu instrumentieren. Dann sollte die Instrumentierung automatisiert werden. Bei Freigabe einer neuen offiziellen Version der Bibliothek durch den Hersteller muss die Konsistenz mit der veränderten Version verglichen werden. Mit diesem Ansatz können nur Bibliotheksaufrufe verfolgt werden, nicht aber Vorgänge innerhalb des Codes der Anwendung. Es existiert kein allgemeiner Standard für den Inhalt der Tracingdaten.

13 Kapitel 2. Grundlegende Konzepte Java Platform Debugger Architecture Die Java Platform Debugger Architecture (JPDA) ist seit dem SDK 1.3 Bestandteil der Java 2 Platform. JPDA bietet komfortable Schnittstellen für die Überwachung von laufenden Java-Programmen [URL JPDA] [Gae03]. In der Praxis wird JPDA meistens für das Debugging verwendet. Die meistens Debugger innerhalb kommerzieller Java-Entwicklungsumgebung wie beispielsweise JBuilder basieren auf der JPDA [URL JBuilder]. Mit JPDA können auch Tracing- und Monitoring-Werkzeuge implementiert werden. Die JPDA besteht aus zwei Schnittstellen (JVMDI und JDI), einem Protokoll (JDWP) sowie zwei Software-Komponenten, die diese Elemente miteinander verbinden (Front-End und Back-End). (siehe Abbildung 2.1): Das Java Virtual Machine Debug Interface (JVMDI) beschreibt die Debugging-Funktionalität einer Java Virtual Maschine (JVM). Diese Schnittstelle beschreibt die Funktion für das Beobachten eines laufenden Programms, das Anhalten und Fortsetzen eines Programms und den Zugriff auf den Zustand eines angehaltenen Programms. Die JVMDI-Referenzimplementierung von Sun Microsystems im SDK 1.3 und 1.4 wird als nativer Bestandteil (C Interface) der JVM implementiert. Auf diesem Interface basiert das Back-End, welches die nativen Funktionsaufrufe für ein plattformunabhängiges Protokoll (JDWP) aufbereitet. Das Java Debug Wire Protocol (JWDP) ist ein Protokoll, um das JVMDI von einem anderen Rechner oder Prozess zu benutzen. Das Protokoll wird von einem Backend auf der JVM des überwachten Programms implementiert. Das Backend leitet Anfragen an das JVMDI weiter und sendet Antworten des JVMDI zurück. Das Java Debug Interface (JDI) ist ein Java-API, um über das JDWP mit dem JVMDI zu kommunizieren. Daher bieten JDI und JVMDI im Wesentlichen die gleiche Funktionalität an. Diese API ( Application Programming Interface ) ermöglicht den komfortablen Zugriff auf das überwachte Programm von einer Java Applikation. Die Implementierung des JDI wird als Frontend bezeichnet. Das überwachende Programm, welches das JDI benützt, und das Frontend laufen auf einer anderen JVM als das überwachte Programm. Das JDWP kann über Shared Memory oder über eine TCP-Verbindung genutzt werden. Diese Auswahl erfolgt über das JDI. Die Überwachung eines Programms läuft wie folgt ab. Entweder verbindet sich das überwachende Programm mit einem bereits laufenden Programm oder das überwachende Programm startet das zu überwachende Programm selber. Zur Beobachtung des laufenden Programms registriert sich das überwachende Programm für Ereignisse, die im JVMDI bzw. JDI vordefiniert sind. Zur Behandlung der Ereignisse stellt

14 Kapitel 2. Grundlegende Konzepte 9 das überwachende Programm Callback-Methoden bereit. Beim Auftreten der Ereignisse werden ereignisspezifische Informationen an diese Methoden übergeben. Das Überwachende Programm Das Überwachte Programm JDI Backend Frontend JVM1 JVMDI JVM2 Abbildung 2.1 JPDA-Architektur Beim Registrieren legt das überwachende Programm außerdem fest, wie das überwachte Programm bei Auftreten der Ereignisse gesteuert wird. Entweder läuft das überwachte Programm weiter oder es wird angehalten (Suspend-Modus). Dieser Ansatz hat folgende Vorteile: Der Quellcode des Programms bleibt unverändert. Demzufolge kann der Quellcode in der Binärform vorliegen. Die JPDA bietet einen Standard für die Verfolgung des Programmablaufs. Die Traceinhalte werden in den von JPDA zur Verfügunggestellten Schnittstellen spezifiziert. JVMDI und JDI bieten die Möglichkeit, Ereignisse beliebiger Pakete und Klassen herauszufiltern. Damit kann man genau auswählen, welcher Teil des Programms überwacht werden soll. Die Nachteile sind: Performanzprobleme. Der gesamte Programmzustand kann nur im Suspend- Modus untersucht werden, das bedeutet bei jedem Methodeneintritt und - austritt muss das Programm kurzzeitig angehalten werden. Die Verwendung des Suspend-Modus verlangsamt das überwachte Programm zusätzlich. Der Einsatz von Filtern verkürzt einerseits die Laufzeit, indem sie die Anzahl der zu behandelnden Ereignisse reduzieren. Andererseits kann die Ausführung von Filtern zu Laufzeit-Overhead führen. Der Laufzeit-Overhead durch die JPDA ist größtenteils erheblich und kann insbesondere bei Tracing von lange laufenden Programmen Probleme bereiten. Probleme können auch entstehen,

15 Kapitel 2. Grundlegende Konzepte 10 wenn das überwachte Programm mit anderen Programmen interagiert, die die Verlangsamung nicht akzeptieren [Gae03],[YRN02]. Die Implementierung des JPDA in Sun s SDK erlaubt keinen direkten Zugriff auf den Rückgabewert einer Methode. Kompilierung mit Debug-Option: Um die volle Funktionalität des JDI nutzen zu können, muss das untersuchte Programm Debug-Informationen enthalten. Das Programm muss mit der Debug-Option (Aufruf des Sun Java Compilers mit javac -g) kompiliert sein. Andernfalls kann nicht auf Variablen und Methodenparameter zugegriffen werden. Diese Einschränkung betrifft nicht die gesamte Java Platform Debugger Architecture (JPDA), sondern nur das Java Debug Interface (JDI). Das JVMDI ermöglicht den Zugriff auf Variablen, auch wenn der entsprechende Code keine Debug-Informationen enthält. 2.5 Aspektorientierte Programmierung Motivation Die Entwicklung komplexer Softwaresysteme ist nur durch Modularisierung und Trennung der Verantwortlichkeiten innerhalb der Module beherrschbar. Objektorientierte Programmierung erlaubt demzufolge die Modularisierung in Klassen. Dennoch bleiben Fälle offen, in denen diese Methode keine Modularisierungsmöglichkeit anbietet. Diese Probleme treten auf, wenn man es mit den so genannten Crosscuting concerns zu tun hat [Kic97],[AJPG03],[Lad03]. Sie werden auch oft als modulübergreifende Anliegen bezeichnet[lau03]. Konto Kunde Angestellter Relevante Codeabschnitte zum Aufrufen der Logging- Dienste Logging Kopplung Abbildung 2.2 Implementierung von Logging mit OOP.

16 Kapitel 2. Grundlegende Konzepte 11 In Abbildung 2.2 ist eine solche Situation für den Anwendungsbereich Bankgeschäfte beispielhaft dargestellt. Mit Objektorientierter Programmierung lassen sich beispielsweise die Objekte wie Konto, Kunde und Angestellter in Klassen kapseln. Solche funktionalen Anforderungen werden als Common concerns bezeichnet [AJPG03], da die Anforderungen die Kern-Funktionalität für den Anwendungsbereich darstellen. Es gibt aber auch andere nicht funktionale, mehr technische Anforderungen. Ein Beispiel dafür ist Logging. Solche Anforderungen werden Crosscutting concerns genannt, weil sie nicht zu den eigentlichen Anforderungen des Anwendungsbereichs gehören, sondern durch diese durchschneiden. Um die Logging- Dienste zu benutzen, müssen in der Klasse Konto, Kunde und Angestellter relevante Codeabschnitte zum Aufrufen der Dienste integriert werden. Dieser Code wird mit Grau-Farbe im Bild dargestellt. Mit Objektorientierter Programmierung ist es nicht möglich, die Crosscutting concerns, die sich durch das gesamte System verstreut vorliegen, getrennt von den funktionalen Anforderungen zu implementieren und in Modulen zu kapseln. Dies führt zu redundantem Code und senkt die Softwarequalität erheblich. Beispielsweise leidet die Wartbarkeit. Müssen Änderungen an dem Code vorgenommen werden, so ziehen sie sich oft durch das gesamte System und müssen mehrfach vorgenommen werden. Es gilt alle entsprechenden Code-Stellen zu finden und zu ändern. Außerdem muss versucht werden sicher zu stellen, dass auch wirklich alle nötigen Änderungen durchgeführt wurden. Dafür bietet die Objektorientierte Programmierung aber keine Verfahren bzw. Methoden an. Implementiert man die Crosscuting concerns dennoch in Klassen, so erfüllen diese zwar nach funktionalen Gesichtspunkten die Forderungen nach loser Kopplung und starkem inneren Zusammenhalt. Aber für die Gesamtheit der Systemanforderungen entsteht folgende Problematik: Auf der einen Seite sind in einer Klasse mehrere Aspekte zu berücksichtigen (die eigentlichen funktionalen und die zusätzlichen technischen), auf der anderen Seite ist ein einzelner Aspekt (Logging) über mehrere Klassen hinweg zerstreut. Dies führt zu den bekannten Problemen fehlender Modularisierung. Eine Lösung bietet hierbei die Aspektorientierte Programmierung (AOP). Dies wird durch Trennung der funktionalen Anforderungen und Crosscutting concerns auf Implementierungsebene ermöglicht. D.h. man versucht die Crosscutting concerns zu erkennen und auszulagern. AOP liefert dafür den benötigten Ansatz zum Erkennen und Abtrennen von den Crosscutting concerns.

17 Kapitel 2. Grundlegende Konzepte 12 OOP Ein Modul (z.b. eine Klasse) AOP Ein Modul (z.b. eine Klasse) Aspekt Funktionaler Code Aspekt- Code Crosscutting concerns Common concerns Abbildung 2.3 Modularisierung mit AOP Das Modul, in dem logisch Crosscutting-concern zusammengepackt sind, wird Aspekt genannt (siehe Abbildung 2.3). Ein Aspekt kapselt Crosscutting concerns ausserhalb eines herkömmlichen Software-Moduls und ist vergleichbar mit einer Java-Klasse. Ein einfaches Beispiel für eine Klasse mit Crosscutting concerns wird in Listing 2-1 gezeigt. In der Methode helloworld wird vor und nach der eigentlichen Ausführung des funktionalen Codes ( hello, world ausdrücken) eine einfache Loggingfunktion ausgeführt. Dieses Logging stellt eine Crosscutting concern dar. public class HelloWorld { public static void helloworld() { //logging System.out.println("Vor der Ausführung von helloworld"); System.out.println("hello, world"); Common concerns //logging System.out.println("Nach der Ausführung von helloworld"); Crosscutting concerns Listing 2-1 HelloWorld Beispiel mit Logging als Crosscuting concerns Die Zusammenführung dieser Crosscutting concerns in einem Aspektcode kann auf vielerlei Weisen geschehen. Eine Möglichkeit wird mit AspectJ in folgenden Kapitel gezeigt.

18 Kapitel 2. Grundlegende Konzepte AspectJ Wie jede Programmiertechnik, erfordert aspektorientierte Programmierung eine Programmiersprache und Werkzeuge für ihre Implementierung, nämlich: die Sprache, in der die Aspekte und ihre Schnittpunkte zur funktionalen Anforderungen spezifiziert werden, und den Aspekt-Weber, der die funktionalen Codes und Aspekt-Codes zu einer Anwendung verbindet. AspectJ ist eine Erweiterung der Programmiersprache Java und implementiert den AOP Ansatz durch neue Konzepte und Sprachkonstrukte. Bei der Ausführung der Anwendung müssen vorher die funktionalen Codes und die Aspect-Codes zusammengebracht werden (siehe Abbildung 2.4). Diese Aufgabe übernimmt der Aspektweber. Der AspectJ-Compiler ist ein Aspektweber für AspectJ. Vom Compiler erzeugte class-dateien sind kompatibel zu Standard-Java-Class-Dateien und sind damit lauffähig auf jeder beliebigen Java Virtuellen Maschine. AOP Klassen Aspekte Funktionale Codes Aspekt- Codes Aspekt- Weber Anwendung (class-datei) AspectJ-Sprache AspectJ-Compiler Abbildung 2.4 Aspektweber Für die Implementierung des Aspekt-Codes werden einige neue Sprach-Konstrukte vom AspektJ spezifiziert, die in Java selbst nicht zu finden sind. Wenn man einen Aspekt-Code mit einem funktionalen Code zusammenführen (weben) will, muss in irgendeiner Weise beschrieben werden, an welchen Stellen der Aspekt-Code zur Geltung kommen soll. Zu diesem Zweck gibt es sogenannte Pointcuts, die einen oder auch mehrere Join Points in einem Programm identifizieren. Joint Points sind die Stellen im funktionalen Code, an denen der Aspekt-Code mit dem funktionalen Code verwebt wird. Der Pointcut execution(public static void Hello- World.helloWorld())im Aspekt LoggingHelloWorldAspect in Listing 2-2 identifiziert beispielsweise die Ausführung der Methode public static void helloworld einer Instanz der Klasse HelloWorld in Listing 2-1. Eine komplette Übersicht aller verfügbaren Pointcuts und ihre Beschreibung findet man in [AJPG2003]. Es ist auch möglich, Pointcuts mit Bezeichnern (im Codebeispiel:

19 Kapitel 2. Grundlegende Konzepte 14 logginghelloworld()) zu versehen, sie also wie Variablen zu deklarieren und später im Code zu verwenden. public aspect LoggingHelloWorldAspect { Pointcut-Bezeichnern //Pointcut-Definitionen pointcut logginghelloworld(): execution(public static void HelloWorld.helloWorld()); Pointcut //Advice-Definitionen before() : logginghelloworld() { System.out.println("Vor der Ausführung von HelloWorld"); after() : logginghelloworld() { System.out.println("Nach der Ausführung von HelloWorld"); Listing 2-2 Implementierung des Aspektcodes für das Beispiel in Listing 2-1. Ein Advice implementiert die an den durch Pointcuts identifizierten Join points durchzuführende Crosscutting-Logik. Dabei wird spezifiziert, ob die Durchführung vor (before) oder nach (after) dem jeweiligen Join Point erfolgt, oder ob er komplett unter der Kontrolle des Advices steht (around), das bedeutet die Ausführung des Join Points kann durch einen around Advice unterbunden werden. Im Beispiel in Listing 2-2 werden zwei Advices definiert: Der erste Advice wird vor der Ausführung der mit logginghelloworld definierten Pointcut ausgeführt. Der zweite Advice wird dann nach der Ausführung des definierten Pointcuts ausgeführt. Somit kann man mit dem Aspekt-Code in Listing 2-2 die Logging-Funktion (Crosscuting concerns) im Codebeispiel in Listing 2-1 realisieren, ohne diese im funktionalen Code zu implementieren (siehe Listing 2-3). Fdfdfd Um Tracing mit Hilfe der Aspektorientierte Programmierung zu realisieren, wird das Tracing als Crosscutting concern betrachtet. Demzufolge erfolgt die Implementiepublic class HelloWorld { public static void helloworld() { System.out.println("hello, world"); Listing 2-3 Implementierung des Codes in Listing 2.1 ohne Crosscuting concerns Tracing mit AOP

20 Kapitel 2. Grundlegende Konzepte 15 rung als Trace-Aspekt. Um in einer Java-Anwendung die Trace-Funktionalität zu integrieren, werden die beiden Codes mit einem Aspektweber zusammengefügt. Dieser Vorgang wird in Abbildung 2.5 dargestellt. Java- Anwendung + Trace- Aspekt Aspekt- Weber Java-Anwendung + Tracing Funktionalität Abbildung 2.5 Realisierung der Tracing-Funktionalität in einer Java-Anwendung Dieser Ansatz hat folgende Vorteile: Der Quellcode der Anwendung wird nicht verändert und kann in der Binärform vorliegen. Bessere Performanz als JPDA. Der Quellcode der Anwendung und der Aspektcode werden durch einen Compiler einmalig miteinander verwebt. Das heißt die Verknüpfungen sind danach nicht mehr änderbar. Dies hat den Vorteil, dass der Code für seinen Einsatz optimiert werden kann: z.b. dass der Compiler Inlinecode daraus macht. Der zusätzliche Laufzeit-Overhead durch die Verwebung kann im Normalfall vernachlässigt werden [Dav03] [PGG02], [Aspectj_FAQ]. Modularisierte Implementierung der Tracing-Funktionalität. Die Folge ist ein leichtes handhabbares und besser wartbares System. Automatisierung der Instrumentierung auf die Bytecode-Ebene. Dadurch hat dieser Ansatz auch alle Vorteile der Code-Instrumentierung. Die Traceinhalte werden in der AspectJ-API spezifiziert. Die Nachteile sind (bedingt durch die Einschränkungen des jetzigen Aspectj- Compilers Version 1.1.1): Die Binär-Dateien müssen im Form von kompilierter JAR-Datei zur Verfügung gestellt. Vor der Ausführung der Anwendung müssen die Codes der Anwendung und die Aspektcodes verwebt werden. Bei komplexen Anwendungen ist der Kompilierungsvorgang zeitaufwendig. Join Points im Code von nativen Methoden (Java Native Interface) können nicht verwebt werden.

21 Kapitel 2. Grundlegende Konzepte Zusammenfassung Die Ansätze lassen sich für den Tracing-Einsatz nach folgenden relevanten Kriterien unterscheiden: Instrumentierungsaufwand. Das Einfügen von Traceausgaben in den Quellcode kann je nach verwendeter Technik zu einem aufwendigen Prozess werden. Die Praxis hat gezeigt, dass vor allem einfache Lösungen, die diesen Aufwand gering halten, von den Entwicklern akzeptiert werden. Die Verfügbarkeit des Quellcodes. Im Idealfall soll der Quellcode der Anwendung nicht verändert werden, weil er beispielsweise nicht verfügbar ist oder nur in binärer Form vorliegt. Laufzeit-Overhead. Durch die Ausführung zusätzlicher Programmanweisungen des Tracings wird die Laufzeit eines Softwaresystems verlängert. Die Verlängerung der Ausführungszeit wird auch Laufzeit-Overhead genannt. Eine Minimierung des Overhead ist wünschenswert. Traceinhalte. Eine Traceausgabe ist immer eine Momentaufnahme des aktuellen Zustandes. Damit eine Traceausgabe für die weitere Verarbeitung nützlich ist, sollte diese am bestimmten Standard festhalten. Mindestens sollten folgenden Informationen enthalten sein: - Fortlaufende Nummer und Zeitmarke. Dadurch kann die Reihenfolge der Traceausgaben ermittelt werden. - Herkunft. Gibt an, von welchem Prozess / Programmteil / Methoden die Traceausgabe erstellt wurde. - Parameterwert und andere Kontextinformationen. - Beschreibung. Information über den Grund der Traceausgabe. Wartbarkeit. Die Tracingfunktionalität sollte bei Code-Änderungen der Anwendung einfach wartbar sein. Die vier Tracing-Ansätze lassen sich nach den obigen genannten Kriterien vergleichen. In Tabelle 2-2 ist der Vergleich zusammengefasst.

22 Kapitel 2. Grundlegende Konzepte 17 Vergleichskriterien Instrumentierungsaufwand Verfügbarkeit des Quellcodes Laufzeit-Overhead TraceInhalte Wartbarkeit Legende: 1. Code-Instrumentierung 2. Modifizierung der Laufzeit-Bibliothek 3. Java Platform Debugger Architecture 4. Aspektorientierte Programmierung Tabelle 2-2 Vergleich der vier Tracing-Ansätzen Die Tabelle 2-2 zeigt, dass Tracing mit Hilfe aspektorientierter Programmierung eine Lösung für die Probleme der drei anderen Ansätze ist.

23 Kapitel 3. Anforderungsanalyse 18 Kapitel 3 Anforderungsanalyse In diesem Kapitel werden die an den Prototyp gestellten Anforderungen beschrieben. Die Anforderungen basieren auf den abgeleiteten Werkzeuganforderungen in Abschnitt 1.1 auf Seite 1 und den Erkenntnissen aus Kapitel 2. Bei der Anforderungsanalyse dominiert als zentrales Element das Anwendungsfallmodell, das die Benutzer- System- Interaktion aus Benutzersicht modelliert. Anschließend werden die Anforderungen in funktionale und nicht-funktionale Anforderungen aufgeteilt und beschrieben. 3.1 Anwendungsfälle Anwendungsfälle sind ein Hilfsmittel zur Anforderungsanalyse im Rahmen eines objektorientierten Entwicklungsprozesses. Durch einen Anwendungsfall wird eine typische Interaktion eines Benutzers mit einem Computersystem beschrieben. Es wird damit das gewünschte externe Systemverhalten aus Sicht des Benutzers beschrieben. [Kal01] Ein UML-Anwendungsfalldiagramm in Abbildung 3.1 gibt einen Überblick über die identifizierten Anwendungsfälle des Prototyps und zeigt Beziehungen zwischen den Anwendungsfällen und ihren Akteuren. Es werden vier konkrete und fünf abstrakte Anwendungsfälle identifiziert. Ein abstrakter Anwendungsfall ist nicht instanziierbar. Somit können abstrakte Anwendungsfälle niemals allein existieren, sondern werden immer als Teil eines anderen Anwendungsfalles ausgeführt. Der Name der abstrakten Anwendungsfälle wird kursiv geschrieben. Mit der <<include>>- Beziehung wird dargestellt, dass innerhalb eines Anwendungsfalles ein anderer Anwendungsfall vorkommt. [OMG01].

24 Kapitel 3. Anforderungsanalyse 19 Java Usability Tracing System Benutzer Erfassung mit AOP Erfassung mit modifiziertem JDK Java-Anwendung Screenshot erfassen Audio aufzeichnen <<include>> <<include>> Laufzeitverhalten aufzeichnen Tracing mit der Code Instrumentierung Tracing mit AOP Tracing mit JPDA Protokolle auswerten Abbildung 3.1 Anwendungsfalldiagramm: Java Usability Tracing System Durch Szenarios werden die identifizierten Anwendungsfälle weiter spezifiziert. Ein Szenario beschreibt die Interaktionsfolge zwischen dem Benutzer und dem zu entwickelnden Prototyp aus Sicht des Benutzers. Im Folgenden werden anhand von Szenarios auf die wichtigsten Anwendungsfälle eingegangen. Die Szenarios werden als UML-Sequenzdiagramme dargestellt. 3.2 Szenario: Laufzeitverhalten aufzeichnen 1. Der Benutzer wählt einen Tracing-Ansatz, der für das Tracing eingesetzt wird. Folgende drei Ansätze werden als Auswahl zur Verfügung gestellt: Tracing- mit Code-Instrumentierung Tracing mit Hilfe aspektorientierter Programmierung Tracing mit JPDA

25 Kapitel 3. Anforderungsanalyse Der Benutzer gibt Daten an, um die Java-Anwendung zu analysieren und zu starten. Die eingegebenen Daten werden vom Prototyp überprüft. Bei einer fehlerhaften Eingabe wird dem Benutzer eine Fehlermeldung am Bildschirm mitgeteilt. Folgende Angaben sind bei allen Ansätzen erforderlich: - Ein Quellverzeichnis, das die Quellcode oder die binären Programmdateien enthält. - Ein Verzeichnis der Java-Laufzeitumgebung. Der Prototyp erkennt automatisch deren Verzeichnis, wenn diese auf dem Rechner richtig installiert ist. Optional kann der Benutzer folgende Daten angeben: - Ein Verzeichnis der modifizierten Java-Laufzeit-Bibliothek für die Screenshot-Erfassung. - Ein Hilfsklassenpfad, der Bibliotheken enthält, die die Java-Anwendung zur Ausführung benötigt. - Ein zum Starten der Anwendung benötigtes Programmargument. Der Benutzer kann optional den einzusetzenden Ansatz (Modifizierte Java- Laufzeit-Bibliothek oder AOP) zur Erfassung der Screenshots auswählen. Folgende Datenangaben sind für die Speicherung der aufgezeichneten Tracingdaten erforderlich: - Ein Verzeichnis und ein Name der XML-Datei der aufzuzeichnenden Tracingdaten. Als die Standardeinstellung wird ein Standard-Benutzerverzeichnis angegeben - Das Verzeichnis und Name der MP3-Datei der Audiokommentare (optional) - Ein Verzeichnis der Screenshots (optional). Die Aufzeichnung der Audio-Kommentare und der Screenshots kann deaktiviert werden. 3. Bei allen Ansätzen wird das Tracing mit der Start-Taste gestartet. Die Java- Anwendung wird ausgeführt und erscheint an der Oberfläche. Der Benutzer kann jetzt Aktionen auf der Anwendung direkt ausführen. 4. Das Tracing wird beendet, wenn der Benutzer auf die Stopp-Taste drückt. Damit wird auch die Java-Anwendung beendet. 5. Nach einer erfolgten Ausführung der Aktion Nr. 3 und 4 kann der Benutzer die Tracingdaten in einer XML-Datei speichern.

26 Kapitel 3. Anforderungsanalyse Szenario: Tracing mit Code-Instrumentierung Prototyp Benutzer 1: Tracing mit Code-Instrumentierung wählen 1.1: GUI anzeigen 2: Erforderliche Daten eingeben 2.1: Dateneingabe überprüfen 3: Java-Anwendung starten 3.1: Anwendung starten Java-Anwendung 4:*[Aktion!= Ende-Aktion] //Aktion ausführen 5: Tracingdaten an den Prototyp senden 5.1: Tracingdaten anzeigen 6: Java-Anwendung beenden 6.1: Anwendung beenden 7: Tracingdaten speichern Abbildung 3.2 Szenario: Tracing mit Code-Instrumentierung Das Diagramm in Abbildung 3.2 beschreibt die Vorgänge, die beim Tracing mit der Code-Instrumentierung ablaufen. Dieser Anwendungsfall erweitert und erbt das Verhalten des Ober-Anwendungsfalles Laufzeitverhalten aufzeichnen. 1. Der Benutzer wählt den Tracing-Ansatz mit der Code-Instrumentierung aus und gibt alle Datenangaben wie im Ober-Anwendungsfall Laufzeitverhalten aufzeichnen an. Zusätzlich muss eine Klasse (mit main methode), die zum Starten der Java-Anwendung aufgerufen werden soll, angegeben werden. 2. Um die Java-Anwendung zu starten, führt der Benutzer die Aktion Nr. 3 im Ober- Anwendungsfall aus.

27 Kapitel 3. Anforderungsanalyse Bei jeder Ausführung der explizit instrumentierten Anweisungen in der Java- Anwendung werden die internen Ereignisse an den Prototyp weitergeleitet und am Bildschirm präsentiert. 4. Der Benutzer kann die Aktionen Nr. 4 und 5 im Ober-Anwendungsfall ausführen. 3.4 Szenario: Tracing mit AOP 1. Der Benutzer wählt den Tracing-Ansatz mit Hilfe aspektorientierter Programmierung aus. Der Prototyp zeigt dann die entsprechende GUI-Komponente an. Der Benutzer gibt alle erforderliche Datenangabe wie im Ober-Anwendungsfall Laufzeitverhalten aufzeichnen an. Zusätzlich für die Datenangabe ist ein Verzeichnis des Aspectj-Compilers bei diesem Ansatz erforderlich. Als die Standardeinstellung wird der AspectJ-Compiler in der Version 1.1.1, der mit dem Prototyp geliefert wird, verwendet. 2. Der Benutzer kann einen Beobachtungsfilter definieren, indem er die Taste Filter betätigt. Dafür analysiert der Prototyp die statische Struktur der Java- Anwendung und präsentiert sie dem Benutzer am Bildschirm. Mit dem Filter kann der Benutzer gezielt auswählen, welche Teile Pakete, Klassen und Methoden- der Java-Anwendung analysiert werden sollen. Hier kann der Benutzer die Startklasse ( Klasse mit main Methode) angeben, die zum Starten der Java- Anwendung aufgerufen werden soll. 3. Um die Java-Anwendung zu starten, führt der Benutzer die Aktion Nr. 3 im Ober- Anwendungsfall aus. Der Prototyp generiert anschließend abhängig von der Filtereinstellung in Aktion Nr. 2 einen Aspektcode. Der Aspektcode wird dann mit dem Code der Java-Anwendung verwebt. Dabei werden nur relevante Teile der Anwendung abhängig von der Filtereinstellung mit dem Aspektcode verwebt. Anschließend startet der Prototyp die Java-Anwendung in einem neuen Prozess. 4. Die Java-Anwendung leitet dann die Tracingdaten an den Prototyp weiter. Der Prototyp präsentiert sie dem Benutzer am Bildschirm. 5. Der Benutzer kann die Aktionen Nr.4 & 5 im Ober-Anwendungsfall ausführen. Die beschriebenen Szenarios werden in Abbildung 3.3 dargestellt.

28 Kapitel 3. Anforderungsanalyse 23 Prototyp Benutzer 1: Tracing mit AOP wählen 1.1: GUI-Komponente anzeigen 2: erforderliche Daten eingeben 3: Beobachtungsfilter einstellen 2.1: Dateneingabe überprüfen 3.1: Statische Struktur analysieren 4: Tracing starten 3.2: Statische Struktur präsentieren 4.1: Aspektcode generieren 4.2: Aspectcode und fachlicher Code verweben Java-Anwendung 4.3: Java-Anwendung starten 5:[Aktion!= Ende-Aktion] //Aktion ausführen 6: Tracingdaten an den Prototyp senden 6.1: Tracingdaten anzeigen 7: Java-Anwendung beenden 7.1: Anwendung beenden 8: Tracingdaten speichern Abbildung 3.3 Szenario: Tracing mit AOP

29 Kapitel 3. Anforderungsanalyse Szenario: Tracing mit JPDA Die Szenarios werden in Abbildung 3.4 dargestellt und basieren zum Teil auf der Arbeit im [Gae03]. Prototyp Benutzer 1: Tracing mit JPDA wählen 1.1: GUI-Komponente anzeigen 2: erforderliche Datenangaben eingeben 3: Beobachtungsfilter einstellen 2.1: Datenangaben überprüfen 3.1: Statische Struktur analysieren 3.2: Statische Struktur präsentieren 4: Tracing starten 4.1: VM-Instanz erzeugen VM der Java-Anwendung 4.2: Ereignisse (Filter) registrieren 4.3: Startklasse aufrufen 5:*[Aktion!= Ende-Aktion] //Aktion ausführen 6:[Ereigniss registriert] //Ereignis melden 6.1: Ereignis auswerten 7: Java-Anwendung beenden 6.2: Tracingdaten anzeigen 7.1: VM stoppen 8: Tracingdaten speichern Abbildung 3.4 Szenario: Tracing mit JPDA 1. Der Benutzer wählt den Tracing-Ansatz mit JPDA aus und gibt alle Datenangaben wie im Ober-Anwendungsfall Laufzeitverhalten aufzeichnen an. Der Prototyp zeigt dann die entsprechende GUI-Komponente an.

30 Kapitel 3. Anforderungsanalyse Der Benutzer kann mit der Filter-Taste einen Beobachtungsfilter definieren. Dafür analysiert der Prototyp die statische Struktur der Java-Anwendung und präsentiert sie dem Benutzer am Bildschirm. Mit dem Filter kann der Benutzer gezielt auswählen, welche Teile Pakete, Klassen und Methoden- der Java- Anwendung analysiert werden sollen. Hier kann der Benutzer die Startklasse (Klasse mit main Methode) angeben, die zum Starten der Java-Anwendung aufgerufen werden soll. 3. Um die Java-Anwendung zu starten, führt der Benutzer die Aktion Nr. 3 im Ober- Anwendungsfall aus. Der Prototyp erzeugt dann eine virtuelle Maschine und registriert den in Aktion Nr.2 definierten Filter. Anschließend wird die in Aktion Nr. 2 angegebene Startklasse aufgerufen und die Java-Anwendung ausgeführt. 4. Die Java-Anwendung meldet die internen Ereignisse über JPDA an den Prototyp. Der Prototyp wertet die ankommenden Ereignisse aus und präsentiert sie dem Benutzer am Bildschirm. 5. Der Benutzer kann die Aktionen Nr.4 & 5 im Ober-Anwendungsfall ausführen. 3.6 Szenario: Tracingdaten auswerten Prototyp Benutzer 1: Aufgezeichnete Tracedaten laden 1.1: XML-Datei parsen 2: Tracedaten anhand einer Zeitmarke suchen 1.2: Tracedaten präsentieren 2.1:[Treffer gefunden] //Treffer anzeigen 3: Manuelle Zeit-Synchronisierung 2.2:[Treffer nicht gefunden] //Meldung anzeigen 4: Suchen aktualisieren 4.1:[Treffer gefunden] //Treffer anzeigen 4.2:[Treffer nicht gefunden] //Meldung anzeigen Abbildung 3.5 Szenario: Tracingdaten auswerten

31 Kapitel 3. Anforderungsanalyse 26 Der in Abbildung 3.5 dargestellte Anwendungsfall Tracingdaten auswerten wird durch folgende Szenarios beschrieben. 1. Der Benutzer wählt aufgezeichnete Tracingdaten aus, indem er die entsprechende XML-Datei mit dem Prototyp öffnet. Der Prototyp analysiert anschließend die XML-Datei und präsentiert sie dem Benutzer geeignet am Bildschirm, sodass der Benutzer die Daten komfortabel positionieren kann. 2. Der Benutzer kann anhand einer Zeitmarke (Stunde: Minute: Sekunde: Millisekunde) die gewünschte Tracingdaten-Eintragung suchen. Bei der Betätigung der Taste Suchen wird der Prototyp die in dieser eingegebenen Zeit aufgezeichnete Daten-Eintragung suchen und das Ergebnis dem Benutzer präsentieren. Wenn für die eingegebene Zeit kein Treffer gefunden ist, wird die naheliegendste Eintragung gezeigt oder der Prototyp zeigt eine Meldung, dass es keinen Treffer gefunden wurde. 3. Für die manuelle Zeit-Synchronisierung kann der Benutzer eine Offsetzeit (Stunde:Minute: Sekunde: Millisekunde) angeben. Der Benutzer kann mit der Taste Suchen das Suchergebnis aktualisieren. 4. Mit der Taste Paket-Filter kann der Benutzer die am Bildschirm präsentierten Tracingdaten nach Java-Paketgruppen filtern.

32 Kapitel 3. Anforderungsanalyse Funktionale Anforderung Im vorangehenden Abschnitt wurde ein Überblick über die Funktionalität des Systems aus Sicht des Benutzers gegeben. Dies genügt jedoch nicht um die Anforderungen an das System vollständig zu beschreiben. Jeder Anwendungsfall ist ein in sich geschlossenes Szenario des Verhaltens eines Benutzers, welches ohne den Gesamtzusammenhang des Systems betrachtet wurde. In diesem Abschnitt werden die Anforderungen beschrieben, die nicht direkt in einem Anwendungsfall sichtbar werden, sondern von allgemeiner Gütigkeit sind. Die funktionalen Anforderungen ergeben sich hauptsächlich aus den im Abschnitt 3.1 aufgelisteten Anwendungsfällen und beschreiben die Funktionalität des Prototyps und die Operationen, die dieser erfüllen soll. Es wird dabei zwischen grundlegenden (must have) und ergänzenden Funktionen (nice to have) unterschieden. Im groben umfassen diese die folgenden Punkte (siehe Tabelle 3-1): Nr Funktionale Anforderung 1 Aufzeichnung des systeminternen Verhaltens (Tracing) Kriterium 2. Die Interaktionen zwischen dem Benutzer und der zu analysierenden Java-Anwendung lösen intern Nachrichtenverkehr durch das Versenden von Botschaften zwischen Objekten aus. Der Prototyp soll zur Laufzeit relevante Vorgänge (Methodenaufrufe) auf der Anwendung beobachten und aufzeichnen, so dass eine Rekonstruktion des systeminternen Verhaltens in zeitlicher Reihenfolge ihres Auftretens für eine spätere Auswertung möglich wird. Folgende drei Tracing-Ansätze sollen je nach Möglichkeit implementiert werden: Code-Instrumentierung Aspektorientierte Programmierung Java Platform Debugger Architecture Erfassung der Screenshots Bei bestimmten Ereignissen und Zustandsänderungen der Benutzeroberfläche der zu analysierenden Java-Anwendung soll ein Schnappschuss des Bildschirmfotos der Benutzeroberfläche erfasst werden und in einer Datei (GIF-Format) gespeichert werden. Diese Funktionalität sollte mit der modifizierter Java-Laufzeit-Bibliothek oder AOP realisiert werden.

33 Kapitel 3. Anforderungsanalyse Aufzeichnen der Audio-Kommentare des Benutzers Die Kommentare des Benutzers werden aufgenommen und anschließend in das MPEG Layer 3 Format komprimiert. Auswertung der aufgezeichneten Tracingdaten Die Tracingdaten sollen anhand einer Zeitmarke (Minuten: Sekunde: Millisekunde + Offsetzeit) referenziert werden können. Die Tracingdaten sollen geeignet dargestellt werden, so dass man eine gezielte Information in der zeitlichen Reihenfolge ansehen kann (z.b. Blättern-Funktion ). Die angezeigten Methodenaufrufe sollen nach Paketgruppen (Package) gefiltert werden können. Wird beispielsweise vom Benutzer ein bestimmtes Tracingdatum ausgewählt, soll die Position der in dieser Zeit ausgeführten Methode im Eclipse-Java-Editor mittels Eclipse-PlugIn in der entsprechenden Klasse markiert werden. Es soll auch über die Zeitmarke möglich sein, die entsprechende Bild-/Audio-Datei automatisch zu öffnen. Sprachunabhängigkeit der aufgezeichneten Tracingdaten Die aufgezeichneten Tracingdaten sollen im XML-Format gespeichert werden, damit sie flexibel zwischen den verschiedensten Plattformen austauschbar sind. Schnittstelle für die anderen Programmiersprachen In der Zukunft soll der Prototyp in der Lage sein, entfernte Methodeaufrufe von Client-Anwendungen, die in anderen Programmiersprachen wie beispielsweise C# implementiert wurden, Dienste zur Verfügung zu stellen. Die Architektur des Prototyps soll nach Möglichkeit für diese Erweiterung entworfen werden. Legende: Musskriterien Wunschkriterien Tabelle 3-1 Funktionale Anforderungen an den Prototyp Die Musskriterien beschreiben Anforderungen, die für das Produkt unabdingbar sind, damit es für den vorgesehenen Einsatzzweck verwendet werden kann. Bei den Wünschkriterien handelt es sich um Anforderungen, die nicht unabdingbar sind, de-

Trace- und Zeit-Zusicherungen beim Programmieren mit Vertrag

Trace- und Zeit-Zusicherungen beim Programmieren mit Vertrag Trace- und Zeit-Zusicherungen beim Programmieren mit Vertrag Mark Brörkens Universität Oldenburg, Fachbereich Informatik Email: Mark.Broerkens@informatik.uni-oldenburg.de Einleitung Programmieren mit Vertrag

Mehr

1 Motivation und Einleitung

1 Motivation und Einleitung AspectJ - AOP für Java Georg Blaschke (georg.blaschke@stud.informatik.uni-erlangen.de) Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Betriebssysteme und Verteilte Systeme 3. Mai 2003

Mehr

spectj AOP mit Java, Konzepte und Beispiele

spectj AOP mit Java, Konzepte und Beispiele A spectj AOP mit Java, Konzepte und Beispiele AspectJ Ist eine Erweiterung von Java Ist eine aspektorientierte Sprache (wie Java eine objektorientierte Sprache ist) Ist frei verfügbar der Compiler ist

Mehr

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder Java: Kapitel 1 Überblick Programmentwicklung WS 2008/2009 Holger Röder holger.roeder@informatik.uni-stuttgart.de Was ist Java? Die Java-Technologie umfasst die Programmiersprache Java sowie die Java-Plattform

Mehr

Aspektorientierte Programmierung mit.net

Aspektorientierte Programmierung mit.net Aspektorientierte Programmierung mit.net David Hahn & Viktor Steinwand 1 1. 2. 3. 4. 5. Vorgehen beim AOP 6. 7. durch AOP 8. 9. 10. 2 1. AOP ist ein mächtiges Werkzeug für den Entwickler-Werkzeugkoffer

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java Einführung in die Programmierung mit Java Martin Wirsing 2 Ziele Geschichte der OO-Programmiersprachen Warum Java als Programmiersprache verwenden? Ein einfaches Java-Programm erstellen, übersetzen und

Mehr

Objektorientierte Analyse (OOA) Inhaltsübersicht

Objektorientierte Analyse (OOA) Inhaltsübersicht Inhaltsübersicht Einführung Anforderungen an die UML-Diagramme Verhalten: Use-Case-Diagramm Verhalten: Aktivitätsdiagramm Verhalten: Zustandsautomat Struktur: Klassendiagramm Seite 1 Einführung In der

Mehr

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object Smalltalk vs. Objective-C Klassen als Objekte Klassendeklarationen Selektoren als first-class values Objekt-Erzeugung Implementierung: Eigene VM vs. Einbettung in C Smalltalk: Everything is an object Klassen

Mehr

Zur Performanz der Überwachung von Methodenaufrufen mit der Java Platform Debugger Architecture (JPDA)

Zur Performanz der Überwachung von Methodenaufrufen mit der Java Platform Debugger Architecture (JPDA) Zur Performanz der Überwachung von Methodenaufrufen mit der Java Platform Debugger Architecture (JPDA) Katharina Mehner Kurzfassung Die Java Platform Debugger Architecture (JPDA) bietet komfortable Schnittstellen

Mehr

Einführung: Verteilte Systeme - Remote Method Invocation -

Einführung: Verteilte Systeme - Remote Method Invocation - Einführung: Verteilte Systeme - - Prof. Dr. Michael Cebulla 11. Dezember 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 43 M. Cebulla Verteilte Systeme Gliederung 1 2 Architektur RMI Kommunikation

Mehr

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke Java 1 Markus Reschke 06.10.2014 Überblick Einführung in die Programmierung zur Vereinfachung des Einstiegs ins Studium Erstellung von ausführbaren Programmen für den Computer Denk- und Vorgehensweisen

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 2. Teil 18. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Eclipse Tutorial.doc

Eclipse Tutorial.doc Berner Fachhochschule Hochschule für Technik und Informatik, HTI Fachbereich Elektro- und Kommunikationstechnik Labor für Technische Informatik Eclipse Tutorial 2005, HTI Burgdorf R. Weber Dateiname: Eclipse

Mehr

Dokumentationskonzept

Dokumentationskonzept 1. Eigene Java Code Convention Dokumentationskonzept Soweit nichts Abweichendes angegeben, sind die Implementierer dazu gehalten, sich an die Regeln für guten Code aus den allgemeinen SUN Konventionen

Mehr

Objektorientierte Programmierung (OOP)

Objektorientierte Programmierung (OOP) orientierte Programmierung (OOP) 1. Motivation Die objektorientierte Sichtweise der Welt Als Motivation für die OOP sieht man sich am besten die reale Welt an: Die reale Welt besteht aus "en", z. B.: Gegenstände,

Mehr

T:\Dokumentationen\Asseco_BERIT\Schulung\BERIT_LIDS7_Basiskurs\Impo rt_export\beritde_lt_do_20120918_lids7.basisschulung_import_export.

T:\Dokumentationen\Asseco_BERIT\Schulung\BERIT_LIDS7_Basiskurs\Impo rt_export\beritde_lt_do_20120918_lids7.basisschulung_import_export. LIDS 7 Import/Export Mannheim, 11.02.2013 Autor: Anschrift: Version: Status: Modifiziert von: Ablage: Christine Sickenberger - Asseco BERIT GmbH Asseco BERIT GmbH Mundenheimer Straße 55 68219 Mannheim

Mehr

Einführung in die Programmierung I. 1.0 EBNF 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I. 1.0 EBNF 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung I 1.0 EBNF 2.0 Einfache Java Programme Thomas R. Gross Department Informatik ETH Zürich Graphische Darstellung von EBNF Regeln Syntax Graph: graphische Darstellung

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Teil 3 - Java. Grundlagen Klassen, Attribute Methoden

Teil 3 - Java. Grundlagen Klassen, Attribute Methoden Teil 3 - Java Grundlagen Klassen, Attribute Methoden 1 Java 2 - Geschichte Ursprung: Green -Project bei der Firma Sun Microsystems 1991 Entwicklung eines Systems mit folgenden Eigenschaften: hardwareunabhängig

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Einführung Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 04.10.2016 Technische Universität Braunschweig, IPS Überblick Organisatorisches Hello! 04.10.2016 Dr. Werner Struckmann / Stephan Mielke,

Mehr

Kapitel 5: Das Design

Kapitel 5: Das Design Nach der Analyse kommt... Kapitel 5: Das Design SoPra 2008 Kap. 5: Das Design (1/20) Kapitel 5.1: Überblick Was ist Design? Ergebnis der Analyse: abstrakte Definitionen Objektmodell: Klassen, Assoziationen,

Mehr

Das Interface-Konzept am Beispiel der Sprache Java

Das Interface-Konzept am Beispiel der Sprache Java Das Interface-Konzept am Beispiel der Sprache Java Klaus Kusche, November 2013 Inhalt Motivation: Wozu braucht man Interfaces? Interfaces in Java Was spricht gegen die große Lösung? Voraussetzungen Kenntnisse

Mehr

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007 Systemprogrammierung Projekt: Java RMI Wintersemester 2006 / 2007 Systemprogrammierung 1. Einleitung 2. Einführung in RPC 3. RMI 4. Code Beispiele 5. Live Vorstellung 6. Ausblick 7. Fazit 2 1. Einleitung

Mehr

Software ubiquitärer Systeme (SuS) Aspektorientierte Programmierung

Software ubiquitärer Systeme (SuS) Aspektorientierte Programmierung Software ubiquitärer Systeme (SuS) Aspektorientierte Programmierung https://ess.cs.tu-dortmund.de/de/teaching/ss2016/sus/ Horst Schirmeier, Olaf Spinczyk horst.schirmeier@tu-dortmund.de https://ess.cs.tu-dortmund.de/~hsc

Mehr

ECDL MODUL COMPUTING. Syllabus Version 1.0

ECDL MODUL COMPUTING. Syllabus Version 1.0 ECDL MODUL COMPUTING Syllabus Version 1.0 DLGI Dienstleistungsgesellschaft für Informatik Am Bonner Bogen 6 53227 Bonn Tel.: 0228-688-448-0 Fax: 0228-688-448-99 E-Mail: info@dlgi.de, URL: www.dlgi.de In

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition

Mehr

Ein erstes "Hello world!" Programm

Ein erstes Hello world! Programm OOP Henrik Horstmann 14. September 2014 Inhaltsverzeichnis Inhaltsverzeichnis 1 Bedeutung der Symbole...1 2 Die Benutzer Oberfläche von HOOPLU...2 2.1 Projekte öffnen und speichern...2 2.2 Die Klasse Program

Mehr

Instrumentation von Android Anwendungen mit ExplorViz

Instrumentation von Android Anwendungen mit ExplorViz Instrumentation von Android Anwendungen mit ExplorViz Jan Witzany 28. September 2016 Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 1 / 19 Gliederung 1. Motivation

Mehr

Dabei sollen die Nutzern nach einer Authentifizierung entsprechend ihren Rechten Begriffe ändern, anlegen und kommentieren können.

Dabei sollen die Nutzern nach einer Authentifizierung entsprechend ihren Rechten Begriffe ändern, anlegen und kommentieren können. Seite: 1 / 10 Designentwurf 1 Allgemeines 1.1 Kurzcharakterisierung Die Glossarverwaltung soll eine einheitliche Terminologie zwischen allen Beteiligten sicherstellen, hier zwischen den Mitarbeitern der

Mehr

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Einführung Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 04.10.2017 Technische Universität Braunschweig, IPS Überblick Organisatorisches Arbeitsablauf Hello World 04.10.2017 Dr. Werner Struckmann

Mehr

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi 06.09.10 1

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi 06.09.10 1 Kapitel 1 Einstieg in Java Dr. Elham Firouzi 06.09.10 1 1 : Einstieg in Java Einleitung Ein erstes Beispiel Berner Fachhochschule Entwicklung von Java-Programmen Applikationen Applets Vor und Nachteile

Mehr

Vom Testkonzept zu JUnit

Vom Testkonzept zu JUnit Testen und Testkonzept Dipl.-Inf. (FH) Christopher Olbertz 2. Dezember 2014 Testen und Testkonzept Warum testen? Wichtig, obwohl bei Programmierern unbeliebt Stellt weitgehend korrekte Funktionsweise eines

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter Die Programmiersprache Java Dr. Wolfgang Süß Thorsten Schlachter Eigenschaften von Java Java ist eine von der Firma Sun Microsystems entwickelte objektorientierte Programmiersprache. Java ist......a simple,

Mehr

OOP. Tagesprogramm. Aspekte und Annotationen. Software-Entwurfsmuster. Factory-Method. Prototype

OOP. Tagesprogramm. Aspekte und Annotationen. Software-Entwurfsmuster. Factory-Method. Prototype 1 2017-01-11 Tagesprogramm Aspekte und Annotationen Software-Entwurfsmuster Factory-Method Prototype 2 2017-01-11 Aspekte und Annotationen Aspektorientierte Programmierung Paradigma der Modularisierung

Mehr

Export erfasster Buchungen

Export erfasster Buchungen Export erfasster Buchungen Mit Hilfe des Programms ist es möglich die erfassten Daten zu exportieren. Zum Starten des Exports klicken Sie auf die Schaltfläche Exportieren... im Kopfbereich der Erfassungsseite.

Mehr

Es gibt keinen Algorithmus zum Schreiben eines Programms bzw. Algorithmus.

Es gibt keinen Algorithmus zum Schreiben eines Programms bzw. Algorithmus. 1 Einführung Programmiersprachen: Ermöglichen formale Beschreibung von Problemlösungsverfahren, die auf einem Computer oder Computersystemen ausführbar sind. Bilden die Basis zur Entwicklung von Software

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

9. Ausnahmebehandlung

9. Ausnahmebehandlung Schwerpunkte Ausnahmen und Laufzeitfehler 9. Ausnahmebehandlung Java-Beispiele: Ausnahme.java TryCatch.java TryCatchAll.java Finally.java TryInTry.java KeyboardTry.java Oeffnungszeit.java Stack-Trace Java-Ausnahmeklassen-Hierarchie

Mehr

Aspektorientierte Programmierung (aspect-oriented programming, AOP)

Aspektorientierte Programmierung (aspect-oriented programming, AOP) Aspektorientierte Programmierung (aspect-oriented programming, AOP) Abstract Die aspektorientierte Programmierung ist ein neues Programmierparadigma, das die Probleme und Nachteile, die aus der prozeduralen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer

Mehr

Rekonfiguration durch dynamische aspektorientierte Programmierung

Rekonfiguration durch dynamische aspektorientierte Programmierung Rekonfiguration durch dynamische aspektorientierte Programmierung Martin Gumbrecht 13. Juni 2014 Motivation Dynamische Rekonfiguration von Softwaresystemen Fehlerbehebung, Sicherheitsaktualisierungen,

Mehr

Polymorphie und UML Klassendiagramme

Polymorphie und UML Klassendiagramme Polymorphie und UML Klassendiagramme Prof. Dr.-Ing. Thomas Schwotzer 1 Einführung Vererbung hat einen sehr interessanten und effektiven Effekt: die Polymorphie. Darum geht es in dieser Veranstaltung. 2

Mehr

Java-Einführungskurs Informatik II (D-ITET) Vincent Becker,

Java-Einführungskurs Informatik II (D-ITET) Vincent Becker, Java-Einführungskurs Informatik II (D-ITET) Vincent Becker, vincent.becker@inf.ethz.ch Was haben wir heute vor? Vorbereitung auf die Übungen zu Informatik II Vorstellung des Teams Organisatorisches Theorie

Mehr

Mail Integration Solution White Paper

Mail Integration Solution White Paper Integration Solution White Paper Inhalt Allgemeine Information... 3 IMAP... 3 Rapid Automation (RA)... 3 RA Agent... 3 RA Solution... 3 Integration Solution... 4 Anwendungsfälle... 5 Download eingehender

Mehr

Programme erstellen in Java

Programme erstellen in Java Programmieren mit Java Modul 0 Programme erstellen in Java Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Schreiben von Computerprogrammen 3 2.1 Computerprogramme bestehen aus Daten und Instruktionen.......

Mehr

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein Objektorientierung Klassen und Objekte Dr. Beatrice Amrhein Überblick Konzepte der Objektorientierten Programmierung Klassen und Objekte o Implementierung von Klassen o Verwendung von Objekten 2 Konzepte

Mehr

CS1005 Objektorientierte Programmierung

CS1005 Objektorientierte Programmierung CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Funktionen / statische Methoden - Definition - Verwendung - Ausführung Seite 1 Th Letschert Funktionen: Definition und Verwendung

Mehr

Definitionen/Vorarbeit zum Thema Java

Definitionen/Vorarbeit zum Thema Java Definitionen/Vorarbeit zum Thema Java Programmiersprachen: System von Wörtern und Symbolen, die zur Formulierung von Programmen für die elektronische Datenverarbeitung verwendet werden. Arten: z.b. Javascript

Mehr

Ich war's nicht! Fehler & Ursachensuche in APEX Peter Raganitsch FOEX GmbH Österreich Schlüsselworte APEX, Fehler, Debug, Logging, Nachforschung.

Ich war's nicht! Fehler & Ursachensuche in APEX Peter Raganitsch FOEX GmbH Österreich Schlüsselworte APEX, Fehler, Debug, Logging, Nachforschung. Ich war's nicht! Fehler & Ursachensuche in APEX Peter Raganitsch FOEX GmbH Österreich Schlüsselworte APEX, Fehler, Debug, Logging, Nachforschung. Einleitung Wenn mal was nicht so klappt wie man sich das

Mehr

Realtime Daten-Rückschreibung in Tableau mit der Extensions API //

Realtime Daten-Rückschreibung in Tableau mit der Extensions API // Was wir vorhersagen, soll auch eintreffen! Realtime Daten-Rückschreibung in Tableau mit der Extensions API // Pascal Muth Zusammenfassung In diesem Whitepaper wird die Tableau Extensions API von Tableau

Mehr

II.1.1. Erste Schritte - 1 -

II.1.1. Erste Schritte - 1 - 1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.1.1. Erste Schritte - 1 - 1.

Mehr

Java-Einführungskurs Informatik II (D-ITET) Vincent Becker,

Java-Einführungskurs Informatik II (D-ITET) Vincent Becker, Java-Einführungskurs Informatik II (D-ITET) Vincent Becker, vincent.becker@inf.ethz.ch Was haben wir heute vor? Vorbereitung auf die Übungen zu Informatik II Vorstellung des Teams Organisatorisches Theorie

Mehr

Verteiltes Debugging. Gemeinsames Debuggen in Saros

Verteiltes Debugging. Gemeinsames Debuggen in Saros Verteiltes Debugging Gemeinsames Debuggen in Saros Motivation Saros unterstützt bislang nur das gemeinsame editieren von Quelltext > Support auf Compile Time Ebene Softwaredesign Fehler (Anw Logik) erst

Mehr

Einführung in Eclipse und Java

Einführung in Eclipse und Java Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski Einführung in Eclipse und Java Dipl.Inf. Manuel Götz Lehrstuhl für Angewandte Informatik

Mehr

Programmierparadigmen

Programmierparadigmen Programmierparadigmen Paradigma = Denkweise oder Art der Weltanschauung klassische Einteilung: Programmiersprache imperativ deklarativ prozedural objektorientiert funktional logisch Zusammenhänge tatsächlich

Mehr

Rückgabewerte von Methoden

Rückgabewerte von Methoden OOP Rückgabewerte von Methoden Henrik Horstmann 14. September 2014 Inhaltsverzeichnis Inhaltsverzeichnis 1 Bedeutung der Symbole...1 2 Rückgabewerte von Methoden...2 3 Der freundliche Computer...2 3.1

Mehr

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation Teil 3 RMI over IIOP

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation Teil 3 RMI over IIOP UNIVERSITÄT LEIPZIG Mainframe Internet Integration Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth SS2013 Java Remote Method Invocation Teil 3 RMI over IIOP el0100 copyright Abt. Technische Informatik,

Mehr

1 EINLEITUNG PROJEKTABLAUF Allgemeine Zielsetzung Projektstruktur und Zeitplan ANFORDERUNGSANALYSE...

1 EINLEITUNG PROJEKTABLAUF Allgemeine Zielsetzung Projektstruktur und Zeitplan ANFORDERUNGSANALYSE... Inhaltsverzeichnis Inhaltsverzeichnis 1 EINLEITUNG... 1 2 PROJEKTABLAUF... 4 2.1 Allgemeine Zielsetzung... 4 2.2 Projektstruktur und Zeitplan... 4 3 ANFORDERUNGSANALYSE... 8 3.1 Der Prototyp des Anlagenmodells...

Mehr

Behutsame Modernisierung

Behutsame Modernisierung Software Evolution mit Legacy Systemen Forum Forschungsförderung / ViSEK Trends im Software Engineering Software Evolution mit Legacy Systemen Behutsame Modernisierung Jan Wloka

Mehr

Softwaretechnik 2015/2016

Softwaretechnik 2015/2016 Softwaretechnik 2015/2016 PST Lehrstuhl Prof. Dr. Matthias Hölzl HAUPT-/ BACHELOR- SEMINAR ADAPTIVE SYSTEME PST Joschka PROF. DR. Rinke WIRSING 14. JUNI 2009 VORNAME NAME AGENDA Übung 11: 14.01.2016 Schon

Mehr

Grundlagen der Informatik für Ingenieure I

Grundlagen der Informatik für Ingenieure I 2 Java: Java-Einführung 2 Java: Java-Einführung 2.1 Java-Entwicklungsgeschichte 2.2 Java Eigenschaften 2.3 Java-Entwicklungsumgebung 2.4 Application vs. Applet 2.5 Ein erstes Programm 2.1 2.1 Java - Entwicklungsgeschichte

Mehr

Waitomo. Compilerbaupraktikum Wintersemester 2006/2007. Stefan Wehr. 24. Oktober 2006

Waitomo. Compilerbaupraktikum Wintersemester 2006/2007. Stefan Wehr. 24. Oktober 2006 Waitomo Compilerbaupraktikum Wintersemester 2006/2007 Stefan Wehr 24. Oktober 2006 1 Einleitung Quellsprache für das Compilerbaupraktikum ist Waitomo, ein Java-ähnliche Sprache mit Unterstützung für Typklassen

Mehr

SWE1 - Übung 1 Projektbeschreibung: Chat

SWE1 - Übung 1 Projektbeschreibung: Chat SWE1 - Übung 1 Projektbeschreibung: Chat Use-Case Diagramm: Client Client Einloggen mittels Nickname Chat-Raum wechseln hinzufügen Benutzer bearbeiten Hilfe anfordern Use-Case Diagramm: Benutzer verwarnen

Mehr

Geschachtelte Klassen

Geschachtelte Klassen Geschachtelte Klassen Die Programmiersprache Java bietet nicht nur die Möglichkeit innerhalb von Klassen Datenfelder und Methoden zu definieren, sondern auch Klassen. Solche Klassen heißen en geschachtelte

Mehr

Programmierparadigmen A01 OOP. Programmierparadigmen

Programmierparadigmen A01 OOP. Programmierparadigmen 2013-10-09 Programmierparadigmen 1 185.A01 OOP Programmierparadigmen 2013-10-09 Programmierparadigmen 2 OOP Klassische Programmierparadigmen Paradigma = Denkweise oder Art der Weltanschauung klassische

Mehr

UML (Unified Modelling Language) von Christian Bartl

UML (Unified Modelling Language) von Christian Bartl UML (Unified Modelling Language) von Inhaltsverzeichnis Inhaltsverzeichnis... 2 1 UML Unified Modelling Language... 3 2 Diagrammtypen... 3 2.1 Aktivitätsdiagramm... 3 2.1.1 Notation... 4 2.1.2 Beispieldiagramm...

Mehr

ALGOL 68 im Aspekt einer modernen Programmiersprache???

ALGOL 68 im Aspekt einer modernen Programmiersprache??? ALGOL 68 im Aspekt einer modernen Programmiersprache??? General-purpose-Programmiersprache: Ein sehr wichtiges Kriterium ist die Möglichkeit, alle Algorithmen (=Lösungsverfahren) in einer Programmiersprache

Mehr

(Ausnahmebehandlung)

(Ausnahmebehandlung) 16. Exceptions (Ausnahmebehandlung) 16-1 Objektorientierte Programmierung (Winter 2010/2011) Kapitel 16: Exceptions (Ausnahmebehandlung) Motivation Throw und Catch 16. Exceptions (Ausnahmebehandlung) 16-2

Mehr

Anwendungsfalldiagramm UseCaseDiagramm

Anwendungsfalldiagramm UseCaseDiagramm Anwendungsfalldiagramm UseCaseDiagramm Notation und Beispiele Prof. DI Dr. Erich Gams htl wels.e.gams@eduhi.at UML Seminar HTL-Wels 2010 Anwendungsfall und SE Prozess Ein Anwendungsfalldiagramm ist ein

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

OO-Design. Klausur FHF * WI1 / WI2 * SS Name:.../ Semester:...

OO-Design. Klausur FHF * WI1 / WI2 * SS Name:.../ Semester:... OO-Design Klausur FHF * WI1 / WI2 * SS 2000 Name:.../ Semester:... Lineares Benotungsschema: 90 Punkte = Note 1, 30 Punkte = Note 4 Aufgabe 1: (28 Punkte) - Ergänzen Sie zum Fallbeispiel "Seminaranmeldung"

Mehr

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1 Inhaltsverzeichnis Grundlagen und Einführung (1. Band) 1 1 Einleitung und Vorwort 1 1.1 Vorwort zur 13. Auflage....................... 1 1.2 Vorwort zur 10. Auflage....................... 1 1.3 Voraussetzungen...........................

Mehr

Auf einen Blick. 1 Einleitung Die Basis der Objektorientierung Die Prinzipien des objektorientierten Entwurfs...

Auf einen Blick. 1 Einleitung Die Basis der Objektorientierung Die Prinzipien des objektorientierten Entwurfs... Auf einen Blick Auf einen Blick 1 Einleitung... 15 2 Die Basis der Objektorientierung... 29 3 Die Prinzipien des objektorientierten Entwurfs... 41 4 Die Struktur objektorientierter Software... 67 5 Vererbung

Mehr

Enthaltene Programmänderungen. DMP-Assist Version

Enthaltene Programmänderungen. DMP-Assist Version Enthaltene Programmänderungen DMP-Assist Version 4.0.1.0 Inhaltsverzeichnis 1 Systemvoraussetzungen...3 2 Datensicherung vor dem Update...3 3 Die Installation des Updates...5 3.1. Wichtige Hinweise zum

Mehr

Verteidigung der Diplomarbeit 3D-Netzwerk-Visualisierung

Verteidigung der Diplomarbeit 3D-Netzwerk-Visualisierung 1 Verteidigung der Diplomarbeit 3D-Netzwerk-Visualisierung Stefan Ziegler 11. März 2005 INHALTSVERZEICHNIS 2 Inhaltsverzeichnis 1 Aufgabe 3 2 Umsetzung 4 3 Struktur 5 4 Paketverarbeitung 8 5 Grafische

Mehr

Entwurfsmuster (Design Patterns)

Entwurfsmuster (Design Patterns) Entwurfsmuster (Design Patterns) SEP 303 Entwurfsmuster (Design Patterns) In der alltäglichen Programmierarbeit tauchen viele Probleme auf, die man schon einmal gelöst hat und die man in der Zukunft wieder

Mehr

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11

Mehr

Microsoft Visual Studio Code mit RPG und IceBreak

Microsoft Visual Studio Code mit RPG und IceBreak Microsoft Visual Studio Code mit RPG und IceBreak ( 2018 Markus A. Litters) Inhaltsverzeichnis 1. Vorwort... 2 2. Voraussetzungen und Installation... 3 3. Der erste Start... 4 4. Die IceBreak Erweiterung...

Mehr

Das a. Franz Zieris Institut für Informatik, FU Berlin Bachelorarbeit

Das a. Franz Zieris Institut für Informatik, FU Berlin Bachelorarbeit Bachelorarbeit Das a Franz Zieris Institut für Informatik, FU Berlin Gliederung 1. Inhalt der Arbeit Motivation Aufgabenstellung 2. Vorgehensweise Voraussetzungen Technische Umsetzung Probleme und deren

Mehr

Enthaltene Programmänderungen. DMP-Assist Version

Enthaltene Programmänderungen. DMP-Assist Version Enthaltene Programmänderungen DMP-Assist Version 4.0.2.0 Inhaltsverzeichnis 1 Systemvoraussetzungen...3 2 Datensicherung vor dem Update...3 3 Die Installation des Updates...5 3.1. Wichtige Hinweise zum

Mehr

Telecooperation/RBG. Grundlagen der Informatik I Thema 0: Einführung. Dr. Guido Rößling. Copyrighted material; for TUD student use only

Telecooperation/RBG. Grundlagen der Informatik I Thema 0: Einführung. Dr. Guido Rößling. Copyrighted material; for TUD student use only Technische Universität Darmstadt Telecooperation/RBG Grundlagen der Informatik I Thema 0: Einführung Dr. Guido Rößling Copyrighted material; for TUD student use only 1 Worum es in der Informatik nicht

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe: Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -

Mehr

Technische Dokumentation SilentStatistikTool

Technische Dokumentation SilentStatistikTool Technische Dokumentation SilentStatistikTool Version 1.0 Marko Schröder 1115063 Inhalt Einleitung... 3 Klasse Program... 3 Klasse ArgumentHandler... 3 Bereitgestellte Variablen... 3 Bereitgestellte Methoden...

Mehr

EINFÜHRUNG IN DIE WIRTSCHAFTSINFORMATIK -ÜBUNGEN- Marina Tropmann-Frick mtr@is.informatik.uni-kiel.de www.is.informatik.uni-kiel.

EINFÜHRUNG IN DIE WIRTSCHAFTSINFORMATIK -ÜBUNGEN- Marina Tropmann-Frick mtr@is.informatik.uni-kiel.de www.is.informatik.uni-kiel. EINFÜHRUNG IN DIE WIRTSCHAFTSINFORMATIK -ÜBUNGEN- Marina Tropmann-Frick mtr@is.informatik.uni-kiel.de www.is.informatik.uni-kiel.de/~mtr FRAGEN / ANMERKUNGEN Vorlesung Neue Übungsaufgaben MODELLIERUNG

Mehr

Aspektorientierte Programmierung

Aspektorientierte Programmierung Aspektorientierte Programmierung Programmierparadigma AspectJ separation of concerns Modularisierung Aspekte kapseln Verhalten das mehrere Klassen betrifft Objektorientierte Programmiertechniken: Aspektorientiertheit,

Mehr

Internetanwendungstechnik (Übung)

Internetanwendungstechnik (Übung) Internetanwendungstechnik (Übung) JacORB S. Bissell, G. Mühl Technische Universität Berlin Fakultät IV Elektrotechnik und Informatik Kommunikations- und Betriebssysteme (KBS) Einsteinufer 17, Sekr. EN6,

Mehr

Constraint-basierte Planung und Optimierung von Prüfungsterminen mithilfe einer graphischen Benutzeroberfläche

Constraint-basierte Planung und Optimierung von Prüfungsterminen mithilfe einer graphischen Benutzeroberfläche Douglas Cunningham,Petra Hofstedt, Klaus Meer, IngoSchmitt (Hrsg.): INFORMATIK 2015 LectureNotes in Informatics (LNI), Gesellschaft für Informatik, Bonn 2015 Constraint-basierte Planung und Optimierung

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ziele Sie verstehen wie Polymorphismus

Mehr

MSE/SWF - API Design. Arthur Zaczek. Feb 2015

MSE/SWF - API Design. Arthur Zaczek. Feb 2015 Arthur Zaczek Feb 2015 1 Einleitung Dieses Dokument ist eine Zusammenfassung des Buches Practical API Design: Confessions of a Java Framework Architect. [@Tulach2012] 1.1 Cluelessness Je einfacher eine

Mehr

Inhaltsverzeichnis 1. Objektorientierung: Ein Einstieg 2. Objekte, Klassen, Kapselung

Inhaltsverzeichnis 1. Objektorientierung: Ein Einstieg 2. Objekte, Klassen, Kapselung Inhaltsverzeichnis 1. Objektorientierung: Ein Einstieg... 1 1.1 Objektorientierung: Konzepte und Stärken...... 1 1.1.1 Gedankliche Konzepte der Objektorientierung....... 2 1.1.2 Objektorientierung als

Mehr

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen Th Letschert FH Gießen-Friedberg Th. Letschert OOP 2 Sichtbarkeitsbeziehungen und Geheimnisprinzip Sichtbarkeitsbeziehungen realisieren

Mehr

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich WS 02/03 Warum muss ein Objekt wissen, zu welcher Klasse es gehört? Damit die Klassenzugehörigkeit

Mehr

Sichtbarkeiten, Klassenmember und -methoden

Sichtbarkeiten, Klassenmember und -methoden Sichtbarkeiten, Klassenmember und -methoden Prof. Dr.-Ing. Thomas Schwotzer 11. November 2017 1 Einführung Wir haben uns mit Klassen und Objekten beschäftigt. Wir wissen nun, dass Objekte anhand von Klassen

Mehr