Ideen der Aspektorientierung in Prolog

Größe: px
Ab Seite anzeigen:

Download "Ideen der Aspektorientierung in Prolog"

Transkript

1 Universität Rostock, Fakultät für Informatik und Elektrotechnik, Institut für Informatik Diplomarbeit Ideen der Aspektorientierung in Prolog vorgelegt von Guido Wachsmuth Betreuer: Gutachter: Prof. Dr. rer. nat. Dr.-Ing. habil. Günter Riedewald Dipl. Inf. Wolfgang Lohmann Prof. Dr. rer. nat. Dr.-Ing. habil. Günter Riedewald Prof. Dr.-Ing. habil. Peter Forbrig

2

3 Zusammenfassung Unter Verwendung herkömmlicher Modularisierungskonzepte moderner Programmiersprachen lassen sich die Implementationen gewisser Eigenschaften einer Software nicht innerhalb eines Moduls separat beschreiben. Stattdessen neigen solche Eigenschaften dazu, modulare Implementationen anderer Eigenschaften mit ihrer Implementation zu überschneiden. Dies erschwert Verständnis, Wartbarkeit, Erweiterbarkeit und Wiederverwendbarkeit der erstellten Software-Komponenten. Die aspektorientierte Programmierung addressiert dieses Problem. Sie führt mit Aspekten ein Modularisierungskonzept für die Implementation solcher Crosscutting Concerns ein. Die vorliegende Arbeit untersucht die Übertragung dieser Ideen auf Prolog. Es wird gezeigt, dass Crosscutting Concerns auch in der Programmierung mit Prolog auftreten und sich diese mit Hilfe von Prädikaten und Klauseln nicht modular implementieren lassen. Anschließend werden Lösungsansätze wie Port-Annotationen und die Methode des Stepwise Enhancements, welche abseits der aspektorientierten Programmierung für dieses Problem in Prolog existieren, vorgestellt, mit Ideen der aspektorientierten Programmierung verglichen und bewertet. Darauf aufbauend wird ein Modell zur aspektorientierten Programmierung in Prolog entwickelt. Unter Verwendung dieses Modells werden Programmiertechniken generisch beschrieben. Ferner wird gezeigt, wie die aspektorientierte Entwicklung von Sprachprozessoren generisch unterstützt werden kann. Abstract Some software properties can not be implemented as separated modules using common concepts of modern programming languages. Instead implementations of those properties tend to crosscut modular implementations of other properties. This decreases understanding, maintainibility, extensibility, and reusability of software components. Aspect-oriented programming overcomes this problem by introducing aspects as a new concept to implement these crosscutting concerns in isolation. This work investigates the adaption of those ideas to Prolog. It is shown that crosscutting concerns occur in Prolog programs and can not be modularised by the use of predicates and clauses. Existing solutions addressing this problem for Prolog programs like port annotations and the method of stepwise enhancement are presented, compared to aspect-oriented concepts, and evaluated subsequently. Based on those reflections a model for aspect-oriented programming in Prolog is developed. The model is used to formalise programming techniques in a generic manner. Furthermore a generic approach to assist aspect-oriented developing of language processors is presented. CR-Klassifikation: D.1.6, D.2.3, D.2.7, D.2.13, D.3.3 Schlüsselwörter: Prolog, logische Programmierung, aspektorientierte Programmierung, Programmsynthese, Erweiterbarkeit, Wiederverwendbarkeit, Wartbarkeit, Design by Contract, Stepwise Enhancement, Programmiertechniken, Sprachprozessoren

4 Inhaltsverzeichnis 1 Einleitung Motivation Zielstellung Vorgehen und Aufbau Grundlagen der Aspektorientierung Ausgangslage Software-Entwicklungsprozess Separation of Concerns Hierarchische Modularisierung Crosscutting Concerns Aspektorientierte Programmierung Komponenten und Aspekte Webevorgang Joinpoint-Modelle Aspektorientierung aus objektorientierter Sicht Modularisierungskonzepte Typische Anwendungen AspectJ Anliegen Dynamisches Joinpoint-Modell Übersetzung Method-Call Interception Anliegen Dynamisches Joinpoint-Modell Übersetzung Aspektorientierung aus Prolog-Sicht Modularisierungskonzepte Typische Anwendungen Stepwise Enhancement Methodik Programmkomponenten Komposition von Komponenten Aspektorientierung

5 Inhaltsverzeichnis Verwandte Konzepte Port-Annotationen Portmodell Annotationen Umsetzung Aspektorientierung Verwandte Konzepte Statisches Joinpoint-Modell Joinpoints Erweitertes Portmodell Boxen und Joinpoints Pointcut-Beschreibungen Erfassung von Joinpoints Kontext Fixpunkt-Semantik Advices Port-Advices Around-Advices Term-Advices Reihenfolge von Advices Aspekte Einfache Aspekte Abhängigkeiten zwischen Aspekten Generische Aspekte Anwendungen Design by Contract Spezifikation durch dynamische Tests Spezifikation von Sortierprädikaten Techniken Techniken und Aspekte Build- und Calculate-Technik Akkumulator-Techniken Differenzstrukturen Kontextpropagierung Sprachprozessoren Implementation von Sprachprozessoren in Prolog Parser Unparser

6 Inhaltsverzeichnis 7 Abschließende Betrachtungen Ergebnisse der Arbeit Weiterführende Arbeiten Konzeptuelle Weiterentwicklung Tool-Support Anwendungen Literaturverzeichnis 97 A Implementation 106 A.1 Pointcut-Beschreibungen A.1.1 Kontext A.1.2 Fixpunkt-Algorithmus A.2 Advices A.2.1 Port-Advices A.2.2 Term-Advices A.3 Aspekte A.4 Weber A.4.1 Dateien A.4.2 Programme A.4.3 Klauseln A.4.4 Ziele A.4.5 Port-Advices A.4.6 Term-Advices A.4.7 Vereinfachungen A.5 Hilfsprädikate A.5.1 Subsumption A.5.2 Mehrere Lösungen A.5.3 Ein- und Ausgabe A.5.4 Variablennamen

7 1 Einleitung 1.1 Motivation Das Paradigma der aspektorientierten Programmierung hat seit der Präsentation der grundsätzlichen Ideen und Ziele [45] eine weite Akzeptanz gefunden und ist heute Gegenstand weitgehender Forschungen [5, 63, 25]. Ein Großteil dieser Forschung bezieht sich nach wie vor auf eine Sicht der Aspektorientierung als Erweiterung für objektorientierte Programmiersprachen. Seit ihrer Entstehung beeinflusst die Idee der Aspektorientierung jedoch auch andere Paradigmen [17, 56], darunter auch das deklarative Paradigma [54]. Prolog stellt eine Ausprägung dieses Paradigmas da. Dabei dient die Sprache auch der Entwicklung größerer Anwendungen wie Prototypen verschiedener Art [12, 75, 10, 57], Expertensystemen [15, 32, 27, 80] oder wissenschaftlichen Modellierungen und Simulationen [2, 79]. Eine Strukturierung und Modularisierung solcher Anwendungen trägt entscheidend zu deren Verständlichkeit, Wartbarkeit und Wiederverwendbarkeit bei. Darüber hinaus stellt gerade die Entwicklung von Prototypen hohe Anforderungen an die Erweiterbarkeit von Implementationen. Aspektorientierte Ansätze adressieren genau diese Anforderungen. Hierbei ergeben sich für objektorientierte Anwendungen ähnlicher Dimensionen die angestrebten Vorteile [45, 44, 31]. Konkrete Realisierungen für deklarative Beschreibungsformalismen [49, 39] zeigen, dass diese Vorteile durch eine Übertragung aspektorientierter Ideen auch im deklarativen Paradigma zum Tragen kommen. Des Weiteren existiert mit der prozeduralen Semantik Prologs ein direkter Bezug zu prozeduralen und objektorientierten Programmiersprachen, welcher bei einer Übertragung existenter aspektorientierter Ansätze ausgenutzt werden kann. 1.2 Zielstellung Die vorausgehenden Überlegungen zeigen, dass eine Übertragung aspektorientierter Ideen auf Prolog grundsätzlich möglich und mit den klassischen Vorteilen der Aspektorientierung verbunden sein könnte. Ziel dieser Arbeit ist es deshalb zunächst, die tatsächliche Relevanz aspektorientierter Ansätze für die Programmierung in Prolog aufzuzeigen. Filman und Friedman als prominente Vertreter der AOP-Community bestreiten in [26] eben diese Relevanz: Rule-based systems like [...] Prolog are programming with purely dynamically quantified statements. [...] If we all programmed with rules, we wouldn t have AOP discussions. We would just talk about how rules that expressed concerns X, Y, and Z 1

8 1 Einleitung could be added to the original system, with some mention of the tricks involved in getting those rules to run in the right order and to communicate with each other. Vor der Diskussion zur Übertragung aspektorientierter Ideen auf Prolog oder der Entwicklung neuer Ansätze gilt es daher, diese Aussage zu widerlegen. Es wird daher gezeigt, dass die Problematik der fehlenden Modularisierbarkeit von Crosscutting Concerns auch in Prolog existiert. Des Weiteren wird nachgewiesen, dass konkrete Anwendungen von dieser Problematik betroffen sind, Aspektorientierung diese auch in Prolog beheben kann und so bei der Entwicklung konkreter Anwendungen die Vorteile der Aspektorientierung zum Tragen kommen. Im nächsten Schritt ist zu prüfen, inwiefern aspektorientierte Ansätze für Prolog bereits existieren. Dies beinhaltet auch die Untersuchung von Methoden zur Programmentwicklung in Prolog auf eventuell inhärente aspektorientierte Ideen. Ziel der Arbeit ist dann die Entwicklung eines eigenen Ansatzes zur Aspektorientierung in Prolog. Anhand von Anwendungsbeispielen wird gezeigt, dass durch diesen Ansatz konkrete Anwendungen von den Vorteilen der Aspektorientierung profitieren. 1.3 Vorgehen und Aufbau Im Anschluss an dieses Einleitungskapitel widmet sich Kapitel 2 den Grundlagen der Aspektorientierung. Aufbauend auf einer kurzen Darstellung verschiedener Anforderungen an den Software-Entwicklungsprozess werden die grundlegenden aspektorientierten Konzepte zur Erfüllung dieser Anforderungen erläutert. Dabei werden sowohl Begriffe als auch die verschiedenen Bestandteile einer aspektorientierten Programmiersprache berücksichtigt. Da das Paradigma der aspektorientierten Programmierung vor allem von objektorientierten Ansätzen geprägt ist, wird dieses in Kapitel 3 aus objektorientierter Sicht betrachtet. Den Ausgangspunkt bildet eine Darstellung objektorientierter Modularisierungskonzepte. Daraufhin werden Anwendungsfälle, welche sich für gewöhnlich nicht mit Hilfe dieser Konzepte modularisieren lassen, erläutert und klassifiziert. Den Abschluss des Kapitels bilden die Beschreibungen von AspectJ und der Method-Call Interception. Beide Ansätze beschreiben die aspektorientierte Erweiterung objektorientierter Programmiersprachen. AspectJ bezieht sich dabei nur auf die Programmiersprache Java und hat die Diskussion um Aspektorientierung und dessen Begriffe entscheidend geprägt. Die Method-Call Interception zeigt, dass sich eine beliebige objektorientierte Programmiersprache durch die Einführung eines einzigen neuen Sprachkonstrukts um ein Mittel zur aspektorientierten Programmierung erweitern lässt. Das anschließende Kapitel 4 enthält eine analoge Betrachtung des aspektorientierten Paradigmas aus der Sicht von Prolog. Auch hier werden zunächst Konzepte zur Modularisierung präsentiert. Es wird untersucht, inwiefern sich gewisse Anwendungsfälle nicht durch diese Konzepte modularisieren lassen. Dabei liefern einige Anwendungsfälle aus der objektorientierten Betrachtung nützliche Hinweise. Im Anschluss werden mit der Methodik des Stepwise Enhancements und den Port-Annotationen zwei Konzepte logischer Programmierung betrachtet, welche einerseits einen Bezug zu diesen Anwendungsfällen 2

9 1.3 Vorgehen und Aufbau und andererseits aspektorientierte Lösungsansätze zur Modularisierung aufweisen. Dies ist besonders interessant, da beiden Ansätzen die Idee der Aspektorientierung nicht bekannt ist. Aufbauend auf den vorhergehenden Darstellungen wird in Kapitel 5 ein Modell zur aspektorientierten Programmierung in Prolog schrittweise vorgestellt. Das Modell orientiert sich dabei an den Ideen AspectJs, der Port-Annotationen und des Stepwise Enhancements. Im folgenden Kapitel 6 werden dann verschiedene Anwendungen aspektorientiert entwickelt. Zunächst werden aspektorientierte Beschreibungsmöglichkeiten von Spezifikationen logischer Prädikate beschrieben. Anschließend werden Implementationen der Techniken des Stepwise Enhancements als generische Aspekte vorgestellt sowie deren Anwendung an typischen Einführungsbeispielen aus der Literatur zum Stepwise Enhancement erläutert. Abschließend wird gezeigt, wie sich diese Techniken zur aspektorientierten Implementation von Sprachprozessoren verwenden lassen. Kapitel 7 fasst die Ergebnisse der Arbeit zusammen und gibt einen Ausblick auf weiterführende Themen. 3

10 2 Grundlagen der Aspektorientierung In diesem Kapitel werden zunächst die Ursprünge der Aspektorientierung und ihre Grundlagen vorgestellt. Dazu werden der Prozess der Software-Entwicklung und die Rolle der Modularisierung von Software-Systemen kurz analysiert sowie das Problem der Crosscutting Concerns identifiziert. Anschließend wird gezeigt, wie die Aspektorientierung dieses Problem zu lösen versucht. Dabei werden grundlegende Begriffe und Verfahrensweisen allgemein erläutert. Die folgenden Kapitel 3 und 4 enthalten dann spezifische Betrachtungen aus Sicht der objektorientierten Programmierung bzw. aus der Programmierung in Prolog. 2.1 Ausgangslage Software-Entwicklungsprozess Mit der steigenden Komplexität von Software-Systemen wächst auch die Komplexität der Entwicklung solcher Systeme. Dies führt zu einem enormen Bedarf an Ressourcen. Wissenschaftliche Fundierungen des Software-Entwicklungsprozesses versuchen daher, die Komplexität von Software-Systemen und deren Entwicklung beherrschbar zu halten und somit den Bedarf an Ressourcen zu kontrollieren [7]. Einen zentralen Punkt bildet dabei die Strukturierung. Davon ist zunächst den Entwicklungsprozess selbst betroffen. Verschiedene Modelle unterscheiden hier Phasen der Anforderungsanalyse, der Spezifikation des zu entwickelnden Systems, des Systementwurfs, der Implementation, des Tests und der Verwendung des Systems. Durch eine Strukturierung des Systems kann dessen Komplexität übersichtlich gehalten werden. Ein wesentliches Ziel ist es hierbei, auf allen Stufen der System-Entwicklung ein besseres Verständnis des Systems und seiner Umsetzung zu erhalten. Aus diesem besseren Verständnis heraus ergeben sich dann weitere Vorteile. So kann es den Aufwand für die Wartung erheblich reduzieren. Umgekehrt kann ein fehlerhaftes Verständnis die Wartung eines Systems unmöglich machen. Ein strukturiertes und wohlverstandenes System ist überdies leichter erweiterbar, was hilft, eine vollständige Neuentwicklung bei veränderten Anforderungen zu vermeiden. Die Wiederverwendbarkeit von Teilen des Systems spielt eine weitere wichtige Rolle in der Kontrolle von Ressourcen. Fehlende Strukturierung und ein unvollständiges Verständnis des Systems behindern diese ebenfalls erheblich. 4

11 2.1 Ausgangslage Separation of Concerns Die Strukturierung eines Systems wird neben der Abstraktion durch eine weitere kognitive Fähigkeit des Menschen maßgeblich unterstützt. Die Fokussierung auf einen Teil einer Gesamtheit ermöglicht es, diesen isoliert zu betrachten und Erkenntnisse über ihn zu sammeln [23]. Dabei wird die Einbettung in die Gesamtheit zwar berücksichtigt, die Gesamtheit selbst aber weitestgehend ausgeblendet. Diese Fähigkeit gestattet es, komplexe Probleme und Strukturen aufzubrechen und somit zu beherrschen. Sie durchzieht sämtliche Phasen des Software-Entwicklungsprozesses. So lassen sich bestimmte Anforderungen an ein System, Spezifikationsfragmente, Teile eines Entwurfs oder einer Implementation oder auch gewisse Testfälle isoliert betrachten. Ein solcher isoliert betrachteter Teil bildet ein Concern. Definition 1 (Concern) Ein Concern ist ein Teil einer Anforderung, einer Spezifikation, eines Entwurfs, einer Implementation oder eines Tests, welches im Interesse oder Fokus einer Betrachtung liegt. Um die im vorherigen Abschnitt aufgeführten Vorteile eines strukturierten Systems zu erreichen, muss in den einzelnen Phasen des Entwicklungsprozess eine Trennung identifizierter Concerns erfolgen (Separation of Concerns) [23]. Je besser diese Trennung gelingt und je weniger sich verschiedene Concerns überlappen, desto eher lassen sich die angestrebten Vorteile erzielen [72]. Verschiedene Software-Entwicklungsmethoden unterstützen daher die Trennung von Concerns. Als besonders kritisch erweisen sich dabei die Phasen des Entwurfs und der Implementation. Die Wahl einer Entwurfsmethode und einer Programmiersprache beeinflusst, ob Concerns, welche in den vorherigen Phasen der Anforderungsanalyse und der Spezifikation separat betrachtet werden konnten, auch im Entwurf und in der Implementation getrennt voneinander umsetzbar sind Hierarchische Modularisierung Für die Trennung von Concerns während des Entwurfs oder der Implementation sind die Modularisierungskonzepte der verwendeten Entwurfsmethoden bzw. Programmiersprachen entscheidend. In Abschnitt 3.1 werden objektorientierte Programmiersprachen auf solche Konzepte hin untersucht. Abschnitt 4.1 überträgt diese Überlegungen auf Prolog. An dieser Stelle sei vorweggenommen, dass sowohl objektorientierte Programmiersprachen als auch Prolog hierarchische Modularisierungskonzepte anbieten. Solche Konzepte bieten gewisse Basismodule, welche in immer größeren Moduleinheiten zusammengefasst werden können. Die dabei entstehende Hierarchie formt die Struktur des Systems. So lassen sich beispielsweise in objektorientierten Prgrammiersprachen Daten und auf ihnen auszuführende Operationen zu Objekten zusammenfassen. Objekte wiederum können zu Klassen von Objekten mit ähnlichem Verhalten gruppiert werden. Durch die 5

12 2 Grundlagen der Aspektorientierung 1 class Account{ 2 private int balance = 0; 3 private TransactionLog log = new TransactionLog(); 4 5 public void deposit(int amount) { 6 if!(balance >= -amount) 7 throw new BalanceException(balance, amount); 8 balance += amount; 9 log.addentry(balance); 10 } } Abbildung 2.1: Implementation zweier Crosscutting Concerns. Nutzung von Vererbung entsteht eine Klassenhierarchie. Weitere übergeordnete Modularisierungskonzepte wie Pakete führen diese Hierarchisierung fort Crosscutting Concerns Bei der Implementation eines Software-Systems kann es vorkommen, dass ein Concern nicht modularisiert wird. Die Implementation dieses Concerns verteilt sich dann auf die Implementation anderer Concerns. Eine Ursache hierfür kann darin liegen, dass das Concern während der Implementation nicht als eigenständig berücksichtigt wurde. In diesem Fall kann eine nachträgliche Modularisierung Abhilfe schaffen. Im Gegensatz dazu gibt es Concerns, welche sich mit Hilfe hierarchischer Konzepte nicht modularisieren lassen. Die Implementation dieser Crosscutting Concerns ist mit den Implementationen anderer Concerns vermischt, ohne dass eine Trennung möglich ist [43]. Definition 2 (Crosscutting Concern) Ein Crosscutting Concern ist ein Concern, welches sich unter Verwendung hierarchischer Modularisierungskonzepte nicht modularisieren lässt und daher die Modularisierung anderer Concerns beeinflusst. Crosscutting Concerns führen zu einer engen Kopplung des Systems. Somit werden Verständlichkeit, Wartbarkeit, Erweiterbarkeit und Wiederverwendbarkeit der Implementation erschwert. Oftmals ist das Crosscutting dabei im Wesen des Concerns verankert. Die Abschnitte 3.2 und 4.2 identifizieren typische Crosscutting Concerns für objektorientierte Programmiersprachen respektive Prolog. Abbildung 2.1 zeigt die Implementation einer Klasse Account zur Verwaltung eines Bankkontos in der objektorientierten Programmiersprache Java. Die gezeigte Klasse modularisiert die Daten des Kontos und die auf dem Konto auszuführenden Operationen. Neben dieser Implementation der Kernfunktionalität weist die Klasse die Implementation zweier weiterer Concerns auf, welche in unterschiedlichen Grautönen unterlegt sind. 6

13 2.2 Aspektorientierte Programmierung 1 class Account{ 2 private int balance = 0; 3 public void deposit(int amount) { 4 balance += amount; 5 } } Abbildung 2.2: Komponente ohne Implementationen von Crosscutting Concerns. Das erste Concern adressiert das Logging von Transaktionen. Jedes Konto erhält ein eigenes Logging-Objekt. Nach erfolgreicher Abarbeitung der Methode deposit(int) wird der neue Kontostand aufgezeichnet. Dieses Concern ist ein typisches Crosscutting Concern. Die Implementation verteilt sich auf verschiedene Kontoklassen und -methoden. Dies hat schwerwiegende Auswirkungen auf die Wartbarkeit und Erweiterbarkeit der Implementation. Ändert sich beispielsweise die Signatur des Logging-Objekts, ergeben sich Änderungen an allen Klassen, welche Methoden enthalten, die den Kontostand beeinflussen. Das zweite Concern beinhaltet die Prüfung einer Vorbedingung. Wie das Logging bildet auch dieses ein typisches Crosscutting Concern. 2.2 Aspektorientierte Programmierung Komponenten und Aspekte Aspektorientierte Programmiersprachen bieten neben herkömmlichen hierarchischen Konzepten ein zusätzliches Modularisierungskonzept für Crosscutting Concerns. Concerns, welche von Crosscutting Concerns beeinflusst werden, können so ohne deren Einflüsse separat als Komponenten durch Nutzung hierarchischer Konzepte modularisiert werden. Definition 3 (Komponente) Eine Komponente modularisiert ein Concern mit Hilfe hierarchischer Modularisierungskonzepte. Abbildung 2.2 zeigt die auf diese Art um die Implementation von Crosscutting Concerns bereinigte Klasse Account. Die Crosscutting Concerns können dann als Aspekte modularisiert werden. Definition 4 (Aspekt) Ein Aspekt modularisiert ein Crosscutting Concern eines Programms. Ein Aspekt beschreibt dabei den Einfluss eines Crosscutting Concerns auf die Implementation von Komponenten und anderen Aspekten. Als Modularisierungskonzept bieten Aspekte eine zu hierarchischen Konzepten orthogonale Möglichkeit der Modularisierung [88]. Dabei weisen Aspekte neue, von hierarchischen Konzepten unbekannte Eigenschaften auf. So überlappen Aspekte andere Module, sowohl Komponenten als auch andere Aspekte. Dies ermöglicht erst die Implementation von Crosscutting Concerns. 7

14 2 Grundlagen der Aspektorientierung 1 aspect Logging{ 2 private TransactionLog Account.log = new TransactionLog(); 3 after(account ac, int nb): set(int Account.balance) && target(ac) && args(nb) { 4 ac.log.addentry(nb); 5 } 6 } 1 aspect DesignByContract{ 2 before(account ac, int amount): execution(account.deposit(int)) && 3 target(ac) && args(amount) { 4 if!(ac.balance >= -amount) 5 throw new BalanceException(ac.balance, amount); 6 } 7 } Abbildung 2.3: Implementation von Crosscutting Concerns als Aspekte. Abbildung 2.3 zeigt die Implementation der beiden Crosscutting Concerns aus dem Kontobeispiel als Aspekte. Als Beschreibungssprache dient dabei AspectJ, eine aspektorientierte Erweiterung von Java, welche in Abschnitt 3.3 vorgestellt wird. Der Logging- Aspekt erweitert die Klasse Account um eine zusätzliche Membervariable, welche das Logging-Objekt aufnimmt. Des Weiteren spezifiziert der Aspekt, dass nach jeder Veränderung des Kontostandes der neue Wert dort vermerkt wird. Der zweite Aspekt implementiert die Prüfung einer Vorbedingung, welche sicherstellt, dass Abbuchungen den aktuellen Kontostand nicht übersteigen Webevorgang Eine wesentliche Fragestellung beim Entwurf einer aspektorientierten Programmiersprache ist die der Komposition von Modulen zu einem Gesamtprogramm. Diese Komposition erfolgt durch einen sogenannten Weber. Der Weber berücksichtigt dabei die als Aspekte implementierten Crosscutting Concerns und webt diese in die Komponenten ein. Der Vorgang kann zu unterschiedlichen Zeitpunkten geschehen. Danach lassen sich statische (Komposition zur Übersetzungszeit) und dynamische Weber (Komposition zur Laufzeit) unterscheiden. Eine weitere Möglichkeit besteht in der Komposition zur Ladezeit eines Programms. Eine aspektorientierte Programmiersprache kann sich aus mehreren Teilsprachen zusammensetzen. So kann es verschiedene Beschreibungssprachen für Komponenten, Aspekte und das durch den Weber erzeugte Programm geben. Vor allem die Beschreibungssprache für die Aspekte orientiert sich dabei zumeist an einer bestimmten Art von Crosscutting Concerns, welche modularisiert werden sollen. Spezielle Komponentensprachen bieten sich an, wenn für eine Steuerung des Webevorgangs eine höhere Stufe der Abstraktion als in der Ausgabesprache von Nöten ist. Beispielsweise enthält die Kom- 8

15 2.2 Aspektorientierte Programmierung ponentensprache in [45] Abstraktionen für Schleifen, welche bei der Optimierung des Gesamtprogramms durch den Weber genutzt werden. Oft wird jedoch ein allgemeinerer Ansatz gewählt und eine bestehende Programmiersprache um ein zusätzliches Modularisierungskonzept für Crosscutting Concerns erweitert. Komponenten können dann in der ursprünglichen Sprache implementiert werden, während Aspekte mittels der neuen Sprachkonstrukte beschreibbar sind. Oftmals erzeugt ein statischer Weber dann Programme in der Ausgangssprache, womit deren Übersetzer, Laufzeitumgebungen, Bibliotheken und weitere Tools weiter nutzbar sind Joinpoint-Modelle Für den Entwurf einer Beschreibungssprache für Aspekte ist es eine naheliegende Idee, Beschreibungsmittel für das Crosscutting eines Aspekts zur Verfügung zu stellen und diese Beschreibungen dann beim Webevorgang zu nutzen. Vor allem durch den Einfluss von AspectJ [44, 6] haben sich Joinpoint-Modelle als Grundlage für dieses Vorgehen etabliert. Ein Joinpoint-Modell legt zunächst Punkte fest, an denen ein Aspekt eine Komponente oder einen anderen Aspekt generell beeinflussen kann. Lediglich an solchen Joinpoints können Aspekte eingewoben werden. Definition 5 (Joinpoint) Ein Joinpoint ist ein wohldefinierter Punkt eines Programms, an dem ein Aspekt das Verhalten des Programms beeinflussen kann. Dabei kann sich ein Joinpoint-Modell auf die statische Struktur, d.h. auf Punkte im Quelltext als Joinpoints, oder auf die dynamische Struktur, d.h. auf Punkte in der Ausführung des Programms, beziehen. Hiernach lassen sich statische und dynamische Joinpoint-Modelle unterscheiden. Ein statisches Joinpoint-Modell legt einen Webevorgang zur Übersetzungs- oder Ladezeit eines Programms nahe, kann unter Umständen aber auch durch einen dynamischen Weber umgesetzt werden. Umgekehrt lässt sich ein dynamisches Joinpoint-Modell durch das Einweben dynamischer Tests in den Quellcode eines Programms statisch umsetzen. Des Weiteren definiert ein Joinpoint-Modell, wie Teilmengen von Joinpoints beschrieben werden können. Die Beschreibung solcher Pointcuts spezifiziert dann Orte des Crosscuttings eines Aspekts. Definition 6 (Pointcut) Ein Pointcut ist eine Teilmenge aus der Menge aller Joinpoints eines Programms. Ein Pointcut kann Werte aus dem Ausführungskontext dieser Joinpoints referenzieren. Abschließend legt das Joinpoint-Modell fest, wie ein Aspekt das Verhalten an Joinpoints eines Pointcuts beeinflussen kann. Dieser Einfluss wird mit Hilfe von Advices formuliert. Definition 7 (Advice) Ein Advice beschreibt den Einfluss eines Aspekts auf das Verhalten an allen in einem Pointcut enthaltenen Joinpoints. 9

16 2 Grundlagen der Aspektorientierung Damit ermöglicht ein Joinpoint-Modell die Beschreibung von Aspekten folgenderweise: Zunächst werden mittels Pointcut-Beschreibungen die Stellen im Programm deklariert, welche durch den Aspekt beeinflusst werden. Dann wird durch die Zuordnung von Advices zu Pointcuts bestimmt, wie das Verhalten an diesen Stellen verändert wird. Für gewöhnlich enthalten Advices dabei zusätzliche oder alternative Implementationen, welche am Joinpoint zur Ausführung kommen. 10

17 3 Aspektorientierung aus objektorientierter Sicht Die Ideen der aspektorientierten Programmierung sind maßgeblich durch Erweiterungen des objektorientierten Paradigmas geprägt. Daher werden in diesem Kapitel zunächst die Modularisierungskonzepte objektorientierter Programmiersprachen betrachtet. Darauf basierend werden typische Anwendungsfälle für Crosscutting Concerns identifiziert. Im folgenden Kapitel werden diese Darstellungen aufgegriffen und zum Vergleich mit der Situation in Prolog genutzt. Im zweiten Teil dieses Kapitels werden mit AspectJ und der Method-Call Interception zwei Ansätze zur Integration aspektorientierter Programmierung in objektorientierte Sprachen vorgestellt. AspectJ erweitert die Programmiersprache Java und hat das aspektorientierte Paradigma entscheidend geprägt. Die Method-Call Interception verfolgt einen allgemeineren Ansatz und zeigt, dass sich durch ein zusätzliches Sprachkonstrukt Aspektorientierung in beliebige objektorientierte Sprachen integrieren lässt. 3.1 Modularisierungskonzepte Objektorientierte Programmiersprachen bieten verschiedene hierarchische Konzepte zur Modularisierung einer Implementation. Analog zum Prozedurkonzept imperativer Programmiersprachen lassen sich Algorithmen in Methoden modularisieren. Dabei hängen Methoden von anderen Methoden, welche sie aufrufen, ab. Hieraus ergibt sich oftmals eine hierarchische Organisation der Methoden. Objekte fassen Datenstrukturen und Methoden, welche Operationen auf diesen ausführen, zur Laufzeit zusammen. Klassen bieten ein korrespondierendes Modularisierungskonzept zur Übersetzungszeit. Durch die Nutzung von Vererbung ergibt sich eine Klassenhierarchie. Übergeordnete Konzepte wie Pakete fassen Klassen und andere Pakete zusammen, was erneut zu einer hierarchischen Organisation führt. Crosscutting Concerns können sich auf allen Modularisierungsebenen auswirken. So ist es möglich, dass die Implementation eines Crosscutting Concerns die Modularisierung eines Algorithmus als Methode durchzieht. Unter Umständen sind davon mehrere Methoden in unterschiedlichen Klassen betroffen. Darüber hinaus ist es möglich, dass ein Crosscutting Concern nur ausgewählte Objekte einer Klasse, nicht aber die gesamte Klasse, betrifft. Dies ist beispielsweise der Fall, wenn die Ausführung des Concerns vom Zustand der betroffenen Objekte abhängt. 11

18 3 Aspektorientierung aus objektorientierter Sicht 3.2 Typische Anwendungen Optimierungen Eines der ersten identifizierten Crosscutting Concerns adressiert die Effizienz eines Systems [45]. Um ein System effizienter zu gestalten, wird die Implementation der Systemfunktionalität optimiert. Dabei kann es von Vorteil sein, getrennte Implementationen zu koppeln, etwa bei der Optimierung von Schleifen. Diese Kopplung führt somit zu Crosscutting, obwohl die Implementationen ohne Berücksichtigung der Effizienz modularisierbar sind. Tracing und Logging Die Ausgabe von Informationen an bestimmten Punkten eines Programmes ist eines der Standardbeispiele für Crosscutting Concerns, da die Anweisungen zur Ausgabe die Implementation der eigentlichen Funktionalität des Programms durchziehen. Solche Ausgaben können während des Debuggings nützlich sein, um die Abarbeitungsreihenfolge des Programms nachvollziehen und eventuelle Fehler finden zu können (Tracing). Ferner können individuelle Ausgaben über ausgeführte Systemaktionen zu Zwecken der Wartung oder zur Rückverfolgung eines Systemzustands genutzt werden (Logging). Fehlerbehandlung Eine einheitliche Strategie zur Behandlung von Fehlern ist ebenfalls ein typisches Crosscutting Concern. Die entsprechende Umsetzung der Fehlerbehandlung ist über Module, in denen die Fehler auftreten können, verteilt. Persistenz Sollen die Daten eines Systems persistent gehalten werden, muss die Datenhaltung an zahlreichen Stellen im Programm entsprechend angepasst werden. Somit handelt es sich auch hier um ein Crosscutting Concern. Synchronisation Die Synchronisation von Systemoperationen stellt ein weiteres Crosscutting Concern dar, da zusätzliche Anweisungen in der Implementation dieser Operationen die Synchronität gewährleisten. Design by Contract Die objektorientierte Programmiersprache Eiffel [62] stellt mit dem Konzept des Design by Contract einen nahtlosen Ansatz zur Integration von Spezifikation, Entwurf und Implementation einer Software zur Verfügung. Dabei werden Spezifikationen sowohl in den Entwurf als auch in die Implementation integriert. Dies ist formal durch Zusicherungen in Form von Vor- und Nachbedingungen möglich. Durch eine spezielle Compiler-Option ist es möglich, diese Bedingungen zur Laufzeit prüfen zu lassen. Das Konzept lässt sich auf andere objektorientierte Programmiersprachen übertragen [40]. Durch die fehlende Integration in die Syntax dieser Sprachen müssen die Prüfungen allerdings von Hand implementiert werden. Die Vor- und Nachbedingungen stellen hierbei Crosscutting Concerns dar [82]. Ihre Implementation durchsetzt die eigentliche Implementation des Entwurfs. Durch eine Modularisierung der Spezifikationsfragmente 12

19 3.3 AspectJ als Aspekt ist es möglich, die Implementation von der Prüfung der Vor- und Nachbedingungen zu trennen. Darüber hinaus ist es so möglich, die reine Implementation als effiziente Version ohne Prüfung der verschiedenen Bedingungen zu nutzen. 3.3 AspectJ Eine der meistbeachteten Umsetzungen aspektorientierter Programmierung für objektorientierte Programmiersprachen ist AspectJ [44, 6]. Daher werden im folgenden Abschnitt die grundlegenden Ideen, welche sich im Umfeld von AspectJ gebildet haben, vorgestellt. Dabei werden auch bereits eingeführte Begriffe, welche AspectJ entscheidend geprägt hat, nochmals erläutert. Im weiteren Verlauf der Arbeit werden dann aspektorientierte Ansätze mit AspectJ in Verbindung gesetzt Anliegen Mit AspectJ verbindet sich der Versuch, die Diskussion um aspektorientierte Programmierung durch empirische Untersuchungen voranzutreiben. Hauptziel ist es dabei, eine Benutzergemeinschaft aufzubauen, welche aspektorientierte Programmierung betreibt. Diese Gemeinschaft soll dann Informationen liefern, welche Eigenschaften aspektorientierte Programmierung in der reellen Verwendung aufweist. Dabei ist es auch beachtenswert, ob die erhofften Vorteile, wie sie in [45] beschrieben sind, tatsächlich zum Tragen kommen. AspectJ bildet in diesen Bemühungen lediglich die Grundlage, indem es eine aspektorientierte Programmiersprache bereitstellt. Hierbei wird der Ansatz verfolgt, keine eigene Sprache zur Beschreibung der Aspekte zu verwenden, sondern stattdessen eine existierende Sprache um Beschreibungsmöglichkeiten für Aspekte zu erweitern. Dadurch werden sowohl Komponenten als auch Aspekte in einer Sprache beschrieben. Da die Komponenten mit Sprachanteilen einer bereits existenten Programmiersprache beschrieben werden, ist der Einstieg in die neue Programmiersprache dementsprechend leicht. Im Falle von AspectJ bildet Java die Grundlage der Erweiterung. Alle Java-Programme formen so auch AspectJ-Programme, welche lediglich aus Komponenten bestehen. Neben dieser Aufwärtskompatibilität wurde bei der Erweiterung auf weitere Kompatibilität geachtet, so dass der Umstieg von Java auf AspectJ möglichst einfach zu vollziehen ist. Dies betrifft einerseits die Plattformkompatibilität, welche es ermöglicht, alle AspectJ- Programme auf Java Virtual Machines auszuführen. Weitere wichtige Punkte im Aufbau einer Benutzergemeinschaft bilden die Toolkompatibilität und die Benutzerkompatibilität. Erstere ermöglicht die sukzessive Erweiterung von Java-Entwicklungstools zur Verwendung mit AspectJ. Letztere versucht dem AspectJ-Programmierer das Gefühl zu geben, wie in Java zu programmieren. 13

20 3 Aspektorientierung aus objektorientierter Sicht Dynamisches Joinpoint-Modell Die Idee, zur Beschreibung von Aspekten Joinpoint-Modelle zu verwenden, wurde durch AspectJ entscheidend geprägt. Dabei wurden zunächst verschiedene Modelle untersucht. Letztlich ergab sich ein dynamisches Joinpoint-Modell, welches im Folgenden erläutert wird. Joinpoints Das Joinpoint-Modell von AspectJ orientiert sich an der Ausführung des Programms. Es beschreibt verschiedene Arten dynamischer Joinpoints als Punkte in der Programmausführung. Diese sind der Aufruf einer Methode oder eines Konstruktors, der Empfang eines Methoden- oder Konstruktoraufrufs, die Ausführung einer Methode oder eines Konstruktors, das Lesen oder Schreiben eines Feldes, die Ausführung einer Ausnahmebehandlung und die Initialisierung von Klassen oder Objekten. Jeder Joinpoint wird dabei zweimal passiert. Zunächst geschieht dies vor der Ausführung der mit dem Joinpoint verknüpften Aktion. Anschließend wird der Joinpoint nach Ausführung der Aktion erneut passiert. Pointcuts Pointcuts umfassen Joinpoints, an denen ein Aspekt durch Advices das Verhalten des Programms beeinflusst. Sie lassen sich in AspectJ auf verschiedene Art und Weise beschreiben. Den Ausgangspunkt bilden dabei primitive Pointcut-Beschreibungen. Für jede Art von Joinpoints ist eine solche Beschreibung vorgesehen. So beschreibt zum Beispiel calls(signature ) die Menge aller Joinpoints, an denen eine Methode der Signatur Signature aufgerufen wird. In der Signatur werden dabei Ergebnistyp und Parametertypen berücksichtigt, wobei die üblichen Untertyp-Relationen zur Anwendung kommen. Zusätzlich können sowohl bei den Typen als auch beim Methodennamen Wildcards benutzt werden. Des Weiteren bietet AspectJ auch primitive Pointcut-Beschreibungen, welche Joinpoints unterschiedlicher Arten adressieren. So ist es möglich, mittels within(classname ) die Menge aller Joinpoints in Objekten der Klasse ClassName zu beschreiben. Der Programmierer kann unter Verwendung primitiver Beschreibungen und logischer Kombinatoren benutzerdefinierte Pointcut-Beschreibungen erstellen. Diese können entweder unbenannt sein oder zur weiteren Verwendung mit einem Namen versehen werden. Darüber hinaus ist es möglich, Werte aus dem Ausführungskontext durch den Pointcut zu referenzieren. Typische solcher Werte sind beispielsweise aktuelle Parameter eines Methodenaufrufs oder das Empfängerobjekt eines solchen Aufrufs. Advice Ein Aspekt kann das Verhalten an den Joinpoints eines Pointcuts beeinflussen. Dieser Einfluss wird durch die Zuordnung von Advices zu Pointcuts beschrieben. Das Joinpoint- Modell von AspectJ ermöglicht als Advices zusätzlichen oder alternativen Programm- 14

21 3.3 AspectJ code. Dabei sind drei Arten von Advices vorgesehen. Before-Advices beschreiben Programmcode, der beim Eintritt in einen durch den Pointcut adressierten Joinpoint, also vor der Ausführung der mit dem Joinpoint verknüpften Aktion, ausgeführt werden soll. After-Advices ermöglichen hingegen die Beschreibung von Programmcode, der bei Verlassen des Joinpoints, also nach der Ausführung der verknüpften Aktion, auszuführen ist. Around-Advices bieten die Möglichkeit, Programmcode an Stelle der mit dem Joinpoint verknüpften Aktion zur Ausführung kommen zu lassen. Dabei kann in einem solchen Advice mittels einer Proceed-Anweisung die ursprüngliche Aktion des Joinpoints mit eventuell veränderten Parametern zur Ausführung gebracht werden. Aspekte Mit Hilfe von Pointcut- und Advice-Deklarationen lassen sich in AspectJ Aspekte separat beschreiben. Aspekte bilden damit ein neues Modularisierungskonzept zur Implementation von Crosscutting Concerns. Die Modularisierung der Crosscutting Concerns durch Aspekte befindet sich dabei auf einer Ebene mit der Modularisierung durch Klassen. Daher werden in AspectJ Aspekte auch ähnlich wie Klassen deklariert. Neben Pointcutund Advice-Deklarationen können diese weitere Deklarationen enthalten, wie sie auch in Klassendeklarationen vorkommen. Zur Laufzeit gibt es gewöhnlich zu jedem Aspekt genau eine Instanz, in deren Kontext die verschiedenen Advices ausgeführt werden Übersetzung Damit AspectJ-Programme gemäß der geforderten Plattform-Kompatibilität auf Java Virtual Machines ausgeführt werden können, müssen diese in Java Bytecode übersetzt werden. AspectJ selbst schreibt dabei nicht vor, wann Aspekte und Komponenten, d.h. Klassen, miteinander verwoben werden. Die Entwickler der Sprache bieten jedoch eine Implementation an, welche den Webevorgang soweit wie möglich zur Übersetzungszeit vollzieht. Zur Umsetzung wird der Quellcode des Programms schrittweise transformiert. Programmteile, in denen keine Advices zur Anwendung kommen, bleiben dabei unverändert. In allen anderen Programmteilen werden Stellen im Programmcode untersucht, welche mit dynamischen Joinpoints korrespondieren. Besteht die Möglichkeit, dass eine Pointcut-Beschreibung einen Joinpoint adressiert, werden statische Veränderungen an der entsprechenden Programmstelle vorgenommen. Hierzu wird der zu einem dynamischen Joinpoint gehörige Code durch eine korrespondierende Methode umhüllt. Eventuell kann für einen Joinpoint erst zur Laufzeit entschieden werden, ob dieser durch einen Pointcut adressiert wird, und somit bestimmte Advices zur Ausführung gelangen. In diesem Fall werden innerhalb der Methode entsprechende dynamische Tests generiert. Ein Advice, das an einem durch einen Pointcut adressierten Joinpoint zur Ausführung kommen soll, wird dann aus der korrespondierenden Methode heraus zur Ausführung gebracht. Um dies zu ermöglichen, werden die Körper von Advice-Deklarationen in Java- Methoden transformiert. 15

22 3 Aspektorientierung aus objektorientierter Sicht 3.4 Method-Call Interception Die Method-Call Interception [55] bietet eine weitere Möglichkeit, objektorientierte Programmiersprachen um ein Konzept zur Beschreibung von Crosscutting Concerns zu erweitern. Im Ansatz ähnelt die Beschreibung zwar AspectJ, jedoch erfolgt die Integration in die existierende Sprache auf völlig anderem Wege, weshalb diese Idee hier kurz Beachtung finden soll Anliegen Die Idee der Method-Call Interception ist es, an bestimmten Punkten um die Ausführung von Methoden zusätzliche Funktionalität zur Ausführung kommen zu lassen. Dieses Konzept kann durch ein zusätzliches Sprachkonstrukt in eine existente objektorientierte Programmiersprache eingeführt werden. Damit unterscheidet sich die Method-Call Interception im Ansatz nicht von anderen Ansätzen, wie z.b. AspectJ, welche ähnliche Ausdrucksmöglichkeiten bieten. Während in AspectJ und anderen Implementationen jedoch Programmtransformationen und Reflection zur Umsetzung des Webevorgangs zur Anwendung kommen, zeigt die Method-Call Interception, dass es auf einfache Art und Weise möglich ist, aspektorientierte Sprachkonzepte in die Semantikdefinition einer Sprache einzubinden. Damit haben solche Konstrukte keinen Sonderstatus mehr innerhalb der Sprache Dynamisches Joinpoint-Modell Dem Ansatz der Method-Call Interception liegt ein Modell zugrunde, welches beschreibt, an welchen Punkten zusätzliche Funktionalität zur Ausführung kommen kann. Darüber hinaus bildet dieses Modell die Grundlage zur Koordination von Basis- und zusätzlicher Funktionalität. Im Folgenden wird dieses als dynamisches Joinpoint-Modell betrachtet und unter der Verwendung der durch AspectJ geprägten Begriffe beschrieben. Joinpoints In AspectJ gibt es drei Arten von dynamischen Joinpoints, welche bei der Ausführung von Methoden passiert werden. Dies sind der Aufruf einer Methode, der Empfang eines Methodenaufrufs und die Ausführung der Methode. Jeder dieser Joinpoints wird dabei zweimal durchschritten, jeweils vor und nach der Ausführung der mit ihm verbundenen Aktion. Im Joinpoint-Modell der Method-Call Interception wird jede dieser beiden Möglichkeiten separat betrachtet. Von den somit sechs Möglichkeiten werden lediglich drei als Joinpoints aufgefasst, da sowohl auf Joinpoints vor und nach dem Empfang eines Methodenaufrufs, als auch auf Joinpoints nach dem Aufruf einer Methode verzichtet wird. Die verbleibenden drei Arten von Joinpoints veranschaulicht Abbildung 3.1. Den Zusammenhang zu Joinpoint- und Advice-Arten in AspectJ zeigt Tabelle 3.1 auf. 16

23 3.4 Method-Call Interception enter <o, mn> <o, mn > exp.mn (...) dispatch Abbildung 3.1: Joinpoints bei der Abarbeitung von Methodenaufrufen in objektorientierten Programmiersprachen. exit Die erste Art bilden Dispatch-Punkte. Diese werden nach der Berechnung des Empfängerobjekts für einen Methodenaufruf (Dispatch), aber vor der Berechnung der Argumente der Methode, passiert. Zusätzliche Funktionalität, welche an einem solchen Punkt zur Ausführung gelangt, entspricht einem Before-Advice für einen Methodenaufruf in AspectJ. Nach der Berechnung der zusätzlichen Argumente wird der Methodenkörper einer aufgerufenen Methode betreten. Dabei durchschrittene Enter-Punkte bilden die zweite Art von Joinpoints. In AspectJ kann an diesen Punkten mittels Before- Advice für Methodenausführungen zusätzliche Funktionalität zur Ausführung gelangen. Die dritte Art von Joinpoints bilden die Exit-Punkte, welche beim Austritt aus einem Methodenkörper erreicht werden. AspectJ bietet die Möglichkeit, über After-Advice für Methodenausführungen an diesen Punkten zusätzliche Funktionalität anzubringen. Pointcuts Zur Platzierung von Advice wird auch bei der Method-Call Interception eine Pointcut- Beschreibung für Mengen von Joinpoints verwendet. Dabei werden grundsätzlich nur Joinpoints einer Art beschrieben, d.h. entweder Dispatch- oder Enter- oder Exit-Punkte. Diese Beschränkung ist jedoch willkürlich. Unter Verwendung einer anderen Syntax ist eine Pointcut-Beschreibung, welche Joinpoints unterschiedlicher Art umfasst, möglich. Neben der Art der Joinpoints qualifiziert eine Pointcut-Beschreibung über Eigenschaften von Methodenaufrufen. Hierzu gehören das Empfängerobjekt des Methodenauf- AspectJ-Joinpoint Advice MCI-Joinpoint Methodenaufruf before dispatch after Methodenempfang before after Methodenausführung before enter after exit Tabelle 3.1: Zusammenhang zwischen den Joinpoint-Modellen von AspectJ und Method- Call Interception. 17

24 3 Aspektorientierung aus objektorientierter Sicht rufs, die Klasse dieses Objektes, der Methodenname, der Ergebnistyp und die Argumente der Methode. Für jede dieser Eigenschaften existieren primitive Pointcut-Beschreibungen, welche wie in AspectJ mittels logischer Operatoren kombiniert werden können. Eine Parametrisierung mit Daten aus dem Kontext des Methodenaufrufs ist im Gegensatz zu AspectJ nicht nötig, da die Interaktion mit dem Kontext auf anderem Wege realisiert wurde. Darüber hinaus kann eine Pointcut-Beschreibung durch eine weitere Pointcut-Beschreibung qualifiziert werden, welche angibt, innerhalb welches Kontextes eine Methode aufgerufen wird. So umfasst der Pointcut enter method a within method b alle Enter-Punkte der Methode a, welche während der Abarbeitung der Methode b durchschritten werden. Pointcut-Beschreibungen der Method-Call Interception sind grundsätzlich anonym, da sie nur in Kombination mit Advice, welches an den enthaltenen Joinpoints zur Ausführung gelangen soll, verwendet werden. Auch dies ist zunächst nur der Syntax der Beispielsprache zur Method-Call Interception geschuldet. Eine entsprechende Erweiterung der Syntax und Semantik um Pointcut-Variablen ist theoretisch möglich. Advices Advices folgen einer anonymen Pointcut-Beschreibung und enthalten einen Ausdruck, welcher an Joinpoints, welche durch diese Beschreibung erfasst werden, evaluiert werden soll. Innerhalb dieses Ausdrucks ist es dabei möglich, mit dem Kontext eines Methodenaufrufs zu interagieren. Hierzu werden in die Ausgangssprache zusätzliche Ausdrücke zum Zugriff auf den Sender und den Empfänger eines Methodenaufrufs sowie für den Zugriff auf die Argumente und das Ergebnis des Aufrufs eingeführt. Aspekte Die Method-Call Interception verzichtet auf ein gesondertes Sprachkonstrukt für Aspekte. Stattdessen wird in die Ausgangssprache ein zusätzlicher Ausdruck eingeführt, welcher die Platzierung von Advices ermöglicht. Solche Platzierungsausdrücke können also an allen Stellen eines Programms auftreten, an denen auch andere Ausdrücke erlaubt sind. Um einen Aspekt zu modularisieren, kann man jedoch auf die Modularisierung durch eine Klasse zurückgreifen. In der Initialisierungsmethode können dann sämtliche Platzierungsausdrücke des Aspektes zusammengefasst werden. Zusätzlich bietet eine solche Modularisierung die Möglichkeit, aus den Advice heraus auf Methoden und Felder der Aspekt-Klasse zurückzugreifen. Auf diese Art lassen sich Informationen eines Crosscutting Concerns zentral verwalten. 18

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008 Konzeption und Implementierung einer automatisierten Testumgebung, 10. Dezember 2008 1 Gliederung Einleitung Softwaretests Beispiel Konzeption Zusammenfassung 2 Einleitung Komplexität von Softwaresystemen

Mehr

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte

Mehr

Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements. von Stephanie Wilke am 14.08.08

Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements. von Stephanie Wilke am 14.08.08 Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements von Stephanie Wilke am 14.08.08 Überblick Einleitung Was ist ITIL? Gegenüberstellung der Prozesse Neuer

Mehr

Robot Karol für Delphi

Robot Karol für Delphi Robot Karol für Delphi Reinhard Nitzsche, OSZ Handel I Version 0.1 vom 24. Januar 2003 Zusammenfassung Nach der Einführung in die (variablenfreie) Programmierung mit Robot Karol von Freiberger und Krško

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Zeichen bei Zahlen entschlüsseln

Zeichen bei Zahlen entschlüsseln Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren

Mehr

Objektorientierter Software-Entwurf Grundlagen 1 1. Analyse Design Implementierung. Frühe Phasen durch Informationssystemanalyse abgedeckt

Objektorientierter Software-Entwurf Grundlagen 1 1. Analyse Design Implementierung. Frühe Phasen durch Informationssystemanalyse abgedeckt Objektorientierter Software-Entwurf Grundlagen 1 1 Einordnung der Veranstaltung Analyse Design Implementierung Slide 1 Informationssystemanalyse Objektorientierter Software-Entwurf Frühe Phasen durch Informationssystemanalyse

Mehr

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup. 04.06.2005 Conrad Kobsch

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup. 04.06.2005 Conrad Kobsch Ein Blick voraus des Autors von C++: Bjarne Stroustrup 04.06.2005 Conrad Kobsch Inhalt Einleitung Rückblick Nur eine Übergangslösung? Was würde C++ effektiver machen? Quelle 2 Einleitung Wo steht C++,

Mehr

Daniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers

Daniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns Daniel Warneke warneke@upb.de 08.05.2006 Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns 1/23 Übersicht Einleitung / Motivation Design Patterns Beispiele Rolle des

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

BEISPIELKLAUSUR Softwareentwicklung:

BEISPIELKLAUSUR Softwareentwicklung: Prof. Dr. Andreas Fink Institut für Informatik Fakultät für Wirtschafts- und Sozialwissenschaften Helmut-Schmidt-Universität / Universität der Bundeswehr Hamburg BEISPIELKLAUSUR Softwareentwicklung: Objektorientierte

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007 Fachhochschule Bonn-Rhein-Sieg University of Applied Sciences Fachbereich Informatik Prof. Dr. Peter Becker Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Mehr

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche etutor Benutzerhandbuch Benutzerhandbuch XQuery Georg Nitsche Version 1.0 Stand März 2006 Versionsverlauf: Version Autor Datum Änderungen 1.0 gn 06.03.2006 Fertigstellung der ersten Version Inhaltsverzeichnis:

Mehr

Autorisierung. Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente

Autorisierung. Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente Autorisierung Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente Dokumentation zum Referat von Matthias Warnicke und Joachim Schröder Modul: Komponenten basierte Softwareentwickelung

Mehr

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015 Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015 CODESYS a trademark of 3S-Smart Software Solutions GmbH Agenda 1 Warum

Mehr

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Zählen und Zahlbereiche Übungsblatt 1 1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Für alle m, n N gilt m + n = n + m. in den Satz umschreiben:

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

C++11 C++14 Kapitel Doppelseite Übungen Musterlösungen Anhang

C++11 C++14 Kapitel Doppelseite Übungen Musterlösungen Anhang Einleitung Dieses Buch wendet sich an jeden Leser, der die Programmiersprache C++ neu lernen oder vertiefen möchte, egal ob Anfänger oder fortgeschrittener C++-Programmierer. C++ ist eine weitgehend plattformunabhängige

Mehr

Beschreibung des MAP-Tools

Beschreibung des MAP-Tools 1. Funktionen des MAP-Tool 2. Aufbau des MAP-Tools 3. Arbeiten mit dem MAP-Tool Beschreibung MAP-Tool.doc Erstellt von Thomas Paral 1 Funktionen des MAP-Tool Die Hauptfunktion des MAP-Tools besteht darin,

Mehr

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Klassendiagramme Ein Klassendiagramm dient in der objektorientierten Softwareentwicklung zur Darstellung von Klassen und den Beziehungen,

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Client-Server-Beziehungen

Client-Server-Beziehungen Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server

Mehr

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

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Dateiname: ecdl5_01_00_documentation_standard.doc Speicherdatum: 14.02.2005 ECDL 2003 Basic Modul 5 Datenbank - Grundlagen

Mehr

SDD System Design Document

SDD System Design Document SDD Software Konstruktion WS01/02 Gruppe 4 1. Einleitung Das vorliegende Dokument richtet sich vor allem an die Entwickler, aber auch an den Kunden, der das enstehende System verwenden wird. Es soll einen

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

Mehr

Data Mining-Projekte

Data Mining-Projekte Data Mining-Projekte Data Mining-Projekte Data Mining stellt normalerweise kein ei nmaliges Projekt dar, welches Erkenntnisse liefert, die dann nur einmal verwendet werden, sondern es soll gewöhnlich ein

Mehr

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum C A R L V O N O S S I E T Z K Y Agile Vorgehensmodelle in der Softwareentwicklung: Scrum Johannes Diemke Vortrag im Rahmen der Projektgruppe Oldenburger Robot Soccer Team im Wintersemester 2009/2010 Was

Mehr

Vgl. Oestereich Kap 2.7 Seiten 134-147

Vgl. Oestereich Kap 2.7 Seiten 134-147 Vgl. Oestereich Kap 2.7 Seiten 134-147 1 Sequenzdiagramme beschreiben die Kommunikation/Interaktion zwischen den Objekten (bzw. verschiedenen Rollen) eines Szenarios. Es wird beschrieben, welche Objekte

Mehr

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Aufgabe 3: Konto Um Geldbeträge korrekt zu verwalten, sind zwecks Vermeidung von Rundungsfehlern entweder alle Beträge in Cents umzuwandeln und

Mehr

IT-Governance und Social, Mobile und Cloud Computing: Ein Management Framework... Bachelorarbeit

IT-Governance und Social, Mobile und Cloud Computing: Ein Management Framework... Bachelorarbeit IT-Governance und Social, Mobile und Cloud Computing: Ein Management Framework... Bachelorarbeit zur Erlangung des akademischen Grades Bachelor of Science (B.Sc.) im Studiengang Wirtschaftswissenschaft

Mehr

Use Cases. Use Cases

Use Cases. Use Cases Use Cases Eigenschaften: Ein Use Case beschreibt einen Teil des Verhaltens eines Systems aus externer Sicht (Formuliert in der der Fachsprache der Anwendung) Dies geschieht, indem ein Systemdialog beschrieben

Mehr

Some Software Engineering Principles

Some Software Engineering Principles David L. Parnas: Some Software Engineering Principles Marco Oppel 30.06.2004 Seminar Software-Architektur Institut für Informatik Humboldt Universität zu Berlin 1 Problemstellung Software Engineering Multi-Personen

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Testen mit JUnit. Motivation

Testen mit JUnit. Motivation Test First Design for Test in Eclipse (eigentlich: ) zu einer Klasse Beispiel zur Demonstration Ergänzungen Test First "Immer dann, wenn Du in Versuchung kommst, etwas wie eine print- Anweisung oder einen

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr

Software Engineering. Sommersemester 2012, Dr. Andreas Metzger

Software Engineering. Sommersemester 2012, Dr. Andreas Metzger Software Engineering (Übungsblatt 2) Sommersemester 2012, Dr. Andreas Metzger Übungsblatt-Themen: Prinzip, Technik, Methode und Werkzeug; Arten von Wartung; Modularität (Kohäsion/ Kopplung); Inkrementelle

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

«Eine Person ist funktional gesund, wenn sie möglichst kompetent mit einem möglichst gesunden Körper an möglichst normalisierten Lebensbereichen

«Eine Person ist funktional gesund, wenn sie möglichst kompetent mit einem möglichst gesunden Körper an möglichst normalisierten Lebensbereichen 18 «Eine Person ist funktional gesund, wenn sie möglichst kompetent mit einem möglichst gesunden Körper an möglichst normalisierten Lebensbereichen teilnimmt und teilhat.» 3Das Konzept der Funktionalen

Mehr

Innere Klassen in Java

Innere Klassen in Java Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird

Mehr

1 Einleitung. 1.1 Motivation und Zielsetzung der Untersuchung

1 Einleitung. 1.1 Motivation und Zielsetzung der Untersuchung 1 Einleitung 1.1 Motivation und Zielsetzung der Untersuchung Obgleich Tourenplanungsprobleme zu den am häufigsten untersuchten Problemstellungen des Operations Research zählen, konzentriert sich der Großteil

Mehr

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen Alexander Schunk Henry Trobisch Inhalt 1. Vergleich der Unit-Tests... 2 2. Vergleich der Codeabdeckungs-Tests... 2 3. Vergleich

Mehr

Aufgabenheft. Fakultät für Wirtschaftswissenschaft. Modul 32701 - Business/IT-Alignment. 26.09.2014, 09:00 11:00 Uhr. Univ.-Prof. Dr. U.

Aufgabenheft. Fakultät für Wirtschaftswissenschaft. Modul 32701 - Business/IT-Alignment. 26.09.2014, 09:00 11:00 Uhr. Univ.-Prof. Dr. U. Fakultät für Wirtschaftswissenschaft Aufgabenheft : Termin: Prüfer: Modul 32701 - Business/IT-Alignment 26.09.2014, 09:00 11:00 Uhr Univ.-Prof. Dr. U. Baumöl Aufbau und Bewertung der Aufgabe 1 2 3 4 Summe

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Copyright 2014 Delta Software Technology GmbH. All Rights reserved. Karlsruhe, 21. Mai 2014 Softwareentwicklung - Modellgetrieben und trotzdem agil Daniela Schilling Delta Software Technology GmbH The Perfect Way to Better Software Modellgetriebene Entwicklung Garant für

Mehr

Design Patterns 2. Model-View-Controller in der Praxis

Design Patterns 2. Model-View-Controller in der Praxis Design Patterns 2 Model-View-Controller in der Praxis Design Patterns Oft Schablonen für eine Klassenstruktur... aber nicht immer! Dahinterliegende Konzepte wichtiger als wörtliche Umsetzung Pattern werden

Mehr

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken? UErörterung zu dem Thema Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken? 2000 by christoph hoffmann Seite I Gliederung 1. In zu großen Mengen ist alles schädlich. 2.

Mehr

Gesicherte Prozeduren

Gesicherte Prozeduren Gesicherte Prozeduren Wenn eine Anwendung auf einer Client-Maschine läuft, wird normalerweise jede SQL-Anweisung einzeln vom Client an den Server gesandt, und jedes Ergebnistupel wird einzeln zurückgeliefert.

Mehr

PHP Kurs Online Kurs Analysten Programmierer Web PHP

PHP Kurs Online Kurs Analysten Programmierer Web PHP PHP Kurs Online Kurs Analysten Programmierer Web PHP Akademie Domani info@akademiedomani.de Allgemeines Programm des Kurses PHP Modul 1 - Einführung und Installation PHP-Umgebung Erste Lerneinheit Introduzione

Mehr

OUTSOURCING ADVISOR. Analyse von SW-Anwendungen und IT-Dienstleistungen auf ihre Global Sourcing Eignung. Bewertung von Dienstleistern und Standorten

OUTSOURCING ADVISOR. Analyse von SW-Anwendungen und IT-Dienstleistungen auf ihre Global Sourcing Eignung. Bewertung von Dienstleistern und Standorten Outsourcing Advisor Bewerten Sie Ihre Unternehmensanwendungen auf Global Sourcing Eignung, Wirtschaftlichkeit und wählen Sie den idealen Dienstleister aus. OUTSOURCING ADVISOR Der Outsourcing Advisor ist

Mehr

Beschreibung und Bedienungsanleitung. Inhaltsverzeichnis: Abbildungsverzeichnis: Werkzeug für verschlüsselte bpks. Dipl.-Ing.

Beschreibung und Bedienungsanleitung. Inhaltsverzeichnis: Abbildungsverzeichnis: Werkzeug für verschlüsselte bpks. Dipl.-Ing. www.egiz.gv.at E-Mail: post@egiz.gv.at Telefon: ++43 (316) 873 5514 Fax: ++43 (316) 873 5520 Inffeldgasse 16a / 8010 Graz / Austria Beschreibung und Bedienungsanleitung Werkzeug für verschlüsselte bpks

Mehr

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank

Mehr

Content Management System mit INTREXX 2002.

Content Management System mit INTREXX 2002. Content Management System mit INTREXX 2002. Welche Vorteile hat ein CM-System mit INTREXX? Sie haben bereits INTREXX im Einsatz? Dann liegt es auf der Hand, dass Sie ein CM-System zur Pflege Ihrer Webseite,

Mehr

ActiveCharts. Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0

ActiveCharts. Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0 Jens Kohlmeyer 05. März 2007 Institut für Programmiermethodik und Compilerbau ActiveCharts Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0 Seite 2 Übersicht

Mehr

Handbucherweiterung Zuschlag

Handbucherweiterung Zuschlag Handbucherweiterung Zuschlag Inhalt 1. Allgemeines S. 1 2. Installation S. 1 3. Erweiterungen bei den Zeitplänen S. 1 4. Erweiterung der Baumstruktur S. 2 5. Erweiterung im Personalstamm S. 2 6. Erweiterung

Mehr

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten Das große x -4 Alles über das Wer kann beantragen? Generell kann jeder beantragen! Eltern (Mütter UND Väter), die schon während ihrer Elternzeit wieder in Teilzeit arbeiten möchten. Eltern, die während

Mehr

Druckvorlagen Als Druckvorlagen sind dafür vorhanden:!liste1.ken (Kennzahlen)!Liste2.KEN (Kontennachweis)

Druckvorlagen Als Druckvorlagen sind dafür vorhanden:!liste1.ken (Kennzahlen)!Liste2.KEN (Kontennachweis) Kennzahlen und Kennzeichen Dieses Dokument zeigt Ihnen in wenigen kurzen Schritten die Logik und Vorgehensweise der Definition der Kennzahlen und Kennzeichen und deren Auswertung in eigens dafür vorhandenen

Mehr

Bei der Focus Methode handelt es sich um eine Analyse-Methode die der Erkennung und Abstellung von Fehlerzuständen dient.

Bei der Focus Methode handelt es sich um eine Analyse-Methode die der Erkennung und Abstellung von Fehlerzuständen dient. Beschreibung der Focus Methode Bei der Focus Methode handelt es sich um eine Analyse-Methode die der Erkennung und Abstellung von Fehlerzuständen dient. 1. F = Failure / Finding An dieser Stelle wird der

Mehr

Das Pflichtenheft. Dipl.- Ing. Dipl.-Informatiker Dieter Klapproth Ains A-Systemhaus GmbH Berlin

Das Pflichtenheft. Dipl.- Ing. Dipl.-Informatiker Dieter Klapproth Ains A-Systemhaus GmbH Berlin Fragestellungen: Warum reicht das Lastenheft nicht aus? Was kann ich mit dem Lastenheft machen? Was unterscheidet das Pflichtenheft vom Lastenheft? Was gehört zum Auftragsumfang einer Individualsoftware?

Mehr

Objektorientierte Programmierung OOP

Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel WS2012/13 08. Oktober 2013 Objektorientierte Programmierung OOP Objektorientierte Programmierung Objektorientierte

Mehr

GI-Technologien zur Umsetzung der EU-Wasserrahmenrichtlinie (WRRL): Wissensbasen. Teil 1: Einführung: Wissensbasis und Ontologie.

GI-Technologien zur Umsetzung der EU-Wasserrahmenrichtlinie (WRRL): Wissensbasen. Teil 1: Einführung: Wissensbasis und Ontologie. GI-Technologien zur Umsetzung der EU-Wasserrahmenrichtlinie (WRRL): Wissensbasen Teil 1: Einführung: Wissensbasis und Ontologie Was ist eine Wissensbasis? Unterschied zur Datenbank: Datenbank: strukturiert

Mehr

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Guide DynDNS und Portforwarding

Guide DynDNS und Portforwarding Guide DynDNS und Portforwarding Allgemein Um Geräte im lokalen Netzwerk von überall aus über das Internet erreichen zu können, kommt man um die Themen Dynamik DNS (kurz DynDNS) und Portweiterleitung(auch

Mehr

VB.net Programmierung und Beispielprogramm für GSV

VB.net Programmierung und Beispielprogramm für GSV VB.net Programmierung und Beispielprogramm für GSV Dokumentation Stand vom 26.05.2011 Tel +49 (0)3302 78620 60, Fax +49 (0)3302 78620 69, info@me-systeme.de, www.me-systeme.de 1 Inhaltsverzeichnis Vorwort...2

Mehr

Die Lernumgebung des Projekts Informationskompetenz

Die Lernumgebung des Projekts Informationskompetenz Beitrag für Bibliothek aktuell Die Lernumgebung des Projekts Informationskompetenz Von Sandra Merten Im Rahmen des Projekts Informationskompetenz wurde ein Musterkurs entwickelt, der den Lehrenden als

Mehr

Eine Logikschaltung zur Addition zweier Zahlen

Eine Logikschaltung zur Addition zweier Zahlen Eine Logikschaltung zur Addition zweier Zahlen Grundlegender Ansatz für die Umsetzung arithmetischer Operationen als elektronische Schaltung ist die Darstellung von Zahlen im Binärsystem. Eine Logikschaltung

Mehr

Einführung in die Informatik Tools

Einführung in die Informatik Tools Einführung in die Informatik Tools Werkzeuge zur Erstellung von Softwareprojekten Wolfram Burgard 8.1 Motivation Große Softwareprojekte werden schnell unübersichtlich. Änderungen im Code können leicht

Mehr

D i e n s t e D r i t t e r a u f We b s i t e s

D i e n s t e D r i t t e r a u f We b s i t e s M erkblatt D i e n s t e D r i t t e r a u f We b s i t e s 1 Einleitung Öffentliche Organe integrieren oftmals im Internet angebotene Dienste und Anwendungen in ihre eigenen Websites. Beispiele: Eine

Mehr

AZK 1- Freistil. Der Dialog "Arbeitszeitkonten" Grundsätzliches zum Dialog "Arbeitszeitkonten"

AZK 1- Freistil. Der Dialog Arbeitszeitkonten Grundsätzliches zum Dialog Arbeitszeitkonten AZK 1- Freistil Nur bei Bedarf werden dafür gekennzeichnete Lohnbestandteile (Stundenzahl und Stundensatz) zwischen dem aktuellen Bruttolohnjournal und dem AZK ausgetauscht. Das Ansparen und das Auszahlen

Mehr

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern 1 Einleitung Lernziele Symbolleiste für den Schnellzugriff anpassen Notizenseiten drucken eine Präsentation abwärtskompatibel speichern eine Präsentation auf CD oder USB-Stick speichern Lerndauer 4 Minuten

Mehr

Patch Management mit

Patch Management mit Patch Management mit Installation von Hotfixes & Patches Inhaltsverzeichnis dieses Dokuments Einleitung...3 Wie man einen Patch installiert...4 Patch Installation unter UliCMS 7.x.x bis 8.x.x...4 Patch

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

Leseprobe. Thomas Konert, Achim Schmidt. Design for Six Sigma umsetzen ISBN: 978-3-446-41230-9. Weitere Informationen oder Bestellungen unter

Leseprobe. Thomas Konert, Achim Schmidt. Design for Six Sigma umsetzen ISBN: 978-3-446-41230-9. Weitere Informationen oder Bestellungen unter Leseprobe Thomas Konert, Achim Schmidt Design for Six Sigma umsetzen ISBN: 978-3-446-41230-9 Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-41230-9 sowie im Buchhandel. Carl

Mehr

Microsoft SharePoint 2013 Designer

Microsoft SharePoint 2013 Designer Microsoft SharePoint 2013 Designer Was ist SharePoint? SharePoint Designer 2013 Vorteile SharePoint Designer Funktionen.Net 4.0 Workflow Infrastruktur Integration von Stages Visuelle Designer Copy & Paste

Mehr

Die Softwareentwicklungsphasen!

Die Softwareentwicklungsphasen! Softwareentwicklung Die Softwareentwicklungsphasen! Die Bezeichnungen der Phasen sind keine speziellen Begriffe der Informatik, sondern den allgemeinen Prinzipien zur Produktion integrierter Systeme entliehen.

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Integration mit. Wie AristaFlow Sie in Ihrem Unternehmen unterstützen kann, zeigen wir Ihnen am nachfolgenden Beispiel einer Support-Anfrage.

Integration mit. Wie AristaFlow Sie in Ihrem Unternehmen unterstützen kann, zeigen wir Ihnen am nachfolgenden Beispiel einer Support-Anfrage. Integration mit Die Integration der AristaFlow Business Process Management Suite (BPM) mit dem Enterprise Information Management System FILERO (EIMS) bildet die optimale Basis für flexible Optimierung

Mehr

Kompilieren und Linken

Kompilieren und Linken Kapitel 2 Kompilieren und Linken Bevor wir uns auf C++ selbst stürzen, brauchen wir einiges Vorgeplänkel, wie man komfortabel ein größeres C++- kompilieren kann. Mit Java stellt sich der Kompiliervorgang

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion

Mehr

Anleitung BFV-Widget-Generator

Anleitung BFV-Widget-Generator Anleitung BFV-Widget-Generator Seite 1 von 6 Seit dem 1. Oktober 2014 hat der Bayerische Fußball-Verband e.v. neue Widgets und einen neuen Baukasten zur Erstellung dieser Widgets veröffentlicht. Im Folgenden

Mehr

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom 21.10.2013b

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom 21.10.2013b AGROPLUS Buchhaltung Daten-Server und Sicherheitskopie Version vom 21.10.2013b 3a) Der Daten-Server Modus und der Tresor Der Daten-Server ist eine Betriebsart welche dem Nutzer eine grosse Flexibilität

Mehr

Qualitätsmanagement im Projekt

Qualitätsmanagement im Projekt Software-Engineering Qualitätsmanagement im Projekt Vorlesung im Wintersemester 2008/2009 Fakultät Wirtschaftsinformatik Klaus Mairon, M.Sc. Inhalte Messen und Bewerten: Metriken in der Qualitätssicherung

Mehr

.. für Ihre Business-Lösung

.. für Ihre Business-Lösung .. für Ihre Business-Lösung Ist Ihre Informatik fit für die Zukunft? Flexibilität Das wirtschaftliche Umfeld ist stärker den je im Umbruch (z.b. Stichwort: Globalisierung). Daraus resultierenden Anforderungen,

Mehr

Application Lifecycle Management als strategischer Innovationsmotor für den CIO

Application Lifecycle Management als strategischer Innovationsmotor für den CIO Application Lifecycle Management als strategischer Innovationsmotor für den CIO Von David Chappell Gefördert durch die Microsoft Corporation 2010 Chappell & Associates David Chappell: Application Lifecycle

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22 Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften

Mehr

Softwaretechnik (Allgemeine Informatik) Überblick

Softwaretechnik (Allgemeine Informatik) Überblick Softwaretechnik (Allgemeine Informatik) Überblick 1 Einführung und Überblick 2 Abstraktion 3 Objektorientiertes Vorgehensmodell 4 Methoden der Anforderungs- und Problembereichsanalyse 5 UML-Diagramme 6

Mehr

Data Mining: Einige Grundlagen aus der Stochastik

Data Mining: Einige Grundlagen aus der Stochastik Data Mining: Einige Grundlagen aus der Stochastik Hagen Knaf Studiengang Angewandte Mathematik Hochschule RheinMain 21. Oktober 2015 Vorwort Das vorliegende Skript enthält eine Zusammenfassung verschiedener

Mehr

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen 9 3 Web Services 3.1 Überblick Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen mit Hilfe von XML über das Internet ermöglicht (siehe Abb.

Mehr

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv Roboter programmieren mit NXC für Lego Mindstorms NXT 1. Auflage Roboter programmieren mit NXC für Lego Mindstorms NXT schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv Verlag

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes. Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel

Mehr