Refactoring. Dominique Steiner 1 und Monica De Donato 2. dedom1@bfh.ch

Größe: px
Ab Seite anzeigen:

Download "Refactoring. Dominique Steiner 1 und Monica De Donato 2. dedom1@bfh.ch"

Transkript

1 Refactoring Dominique Steiner 1 und Monica De Donato 2 1 Berner Fachhochschule Technik und Informatik, 2502 Biel, CH, steid3@bfh.ch, 2 Berner Fachhochschule Technik und Informatik, 2502 Biel, CH, dedom1@bfh.ch Abstract. Refaktorisieren 3 ist eine Technik, die benutzt wird, um die Struktur bestehender Software, die im Laufe der Zeit an Qualität verloren hat, zu überarbeiten, ohne dabei die Funktionalitäten zu verändern. Mit Refaktorisieren wird nicht, wie vermutet Zeit verloren, sondern durch den übersichtlicheren Code kann beim Implementieren von neuen Funktionalitäten sogar Zeit gewonnen werden. Das Java-Beispiel bietet einen kleinen Einblick in die Technik und das Vorgehen beim Refaktorisieren. Um Programmierern das Refaktorisieren zu vereinfachen, bieten viele moderne Entwicklungsumgebungen Möglichkeiten an, die diesen Prozess unterstützen und automatisieren. Selbstprüfende Tests sind beim Rektorisieren zum Überprüfen des Codes und zum Vermeiden von Fehlern unumgänglich. Beim Verwenden von Java ist JUnit ein sehr praktisches Hilfsmittel. Neben all den positiven Aspekten gibt es Situationen, in denen der Einsatz von Refaktorisierung zusätzliche Schwierigkeiten mit sich bringt, oder in denen ganz darauf verzichtet werden sollte. Key words: Refaktorisieren, Lesbarkeit, Übersichtlichkeit, Tests, Struktur Optimierung 1 Was ist Refaktorisieren? Im Herstellungsprozess von Software werden immer wieder, von verschiedenen Programmierern, Änderungen und neue Funktionen in die Programme eingebaut. Dies führt dazu, dass die Software immer unübersichtlicher wird und die Struktur der Software darunter leidet. Mit der Zeit wird es sehr auwändig Änderungen vorzunehmen, weil sich diese in der aktuellen Struktur fast nicht einbauen lassen. Um dieses Phänomen zu minimieren, kann der Code regelmässig refaktorisiert werden. Refaktorisieren ist eine Technik, bei der in kleinen Schritten die Struktur und die Verständlichkeit bestehender Software, durch anwenden bestimmter Refaktorisierungen, verbessert wird. Dazu gehören zum Beispiel Methode extrahieren, Variable und Methode umbenennen, Klasse extrahieren und viele weitere. Anschliessend lassen sich in der optimierten Softwareänderungen und neue Funktionalitäten viel einfacher einbauen. Im Buch von Martin Fowler 3 Der Einfachheit halber wird die deutsche Form verwendet, obwohl diese nicht ganz der deutschen Rechtschreibung entspricht.

2 2 Dominique Steiner, Monica De Donato ndet man die folgenden Denitionen, je nach Kontext in dem das Wort verwendet wird. Denition 1. Refaktorisierung (Substantiv): Eine Änderung an der internen Struktur einer Software, um sie leichter verständlich zu machen und einfacher zu verändern, ohne ihr beobachtetes Verhalten zu ändern. [1] Denition 2. Refaktorisieren (Verb): Eine Software umstrukturieren, ohne ihr beobachtetes Verhalten zu ändern, indem man eine Reihe von Refaktorisierungen anwendet. [1] Wichtig ist, dass während dem Refaktorisieren die Funktionalitäten des Codes nicht verändert werden. Die Software muss nach dem Refaktorisieren genau das Gleiche tun wie vorher. Um dies zu erreichen, müssen die folgenden Schritte eingehalten werden. Zuerst müssen automatisierte Tests geschrieben werden, die alle bisherigen Funktionalitäten der Software testen und die während dem Refaktorisieren immer wieder angewendet werden können. Diese Tests geben die Sicherheit, dass keine Fehler eingebaut werden und dass sich das Verhalten der Software nicht verändert. Im zweiten Schritt wird der Code durch das Anwenden von Refaktorisierungen neu strukturiert und vereinfacht. Erst wenn die Phase des Refaktorisierens abgeschlossen ist, dürfen der Software wieder neue Funktionalitäten hinzugefügt werden. Das folgende Java-Beispiel, ein bearbeiteter Ausschnitt des Beispiels von Fowler [1], zeigt exemplarisch das Anwenden einfacher Refaktorisierungen. Es handelt sich um Software eines Videoverleihs, die die Rechnungen der Kunden druckt. Dazu wird anhand der Ausleihdauer und der Kategorie von Filmen die Miete berechnet. Zusätzlich werden bei Filmen, die der Kategorie 'Neuerscheinungen' angehören, Bonuspunkte vergeben, die auch auf der Rechnung vermerkt werden. Fig. 1. Assoziationen zwischen den Klassen Movie, Rental und Customer // Datenklasse fuer die verschiedenen Filme public class Movie { public static final int CHILDREN = 2; public static final int REGULAR = 0; public static final int NEW_ RELEASE = 1; private String title ; private int pricecode ;

3 Refactoring 3 public Movie ( String title, int pricecode ){ this. title = title ; this. pricecode = pricecode ; public int getpricecode () { return this. pricecode ; public void setpricecode ( int arg ){ this. pricecode = arg ; public String gettitle () { return this. title ; // Die Klasse Rental repraeseniert die Ausleihen eines Films durch einen Kunden class Rental { private Movie movie ; private int daysrented ; public Rental ( Movie movie, int daysrented ){ this. movie = movie ; this. daysrented = daysrented ; public int getdaysrented () { return this. daysrented ; public Movie getmovie () { return this. movie ; // Klasse fuer Kunden der Videothek public class Customer { private String name ; private List < Rental > rentals = new ArrayList < Rental >() ; public Customer ( String name ){ this. name = name ; public void addrental ( Rental arg ){ this. rentals. add ( arg ); public String getname () { return this. name ; public String statement () { double totalamount = 0;

4 4 Dominique Steiner, Monica De Donato int frequentrenterpoints = 0; Iterator it = rentals. iterator () ; String result = " Rental Record for " + getname () + "\ n"; while ( it. hasnext () ) { double thisamount = 0; Rental each = ( Rental ) it. next () ; // Betraege pro Zeile ermitteln switch ( each. getmovie (). getpricecode () ){ case Movie. REGULAR : thisamount +=2; if ( each. getdaysrented () > 2) thisamount += ( each. getdaysrented () - 2) * 1.5; case Movie. NEW_ RELEASE : thisamount += each. getdaysrented () * 3; case Movie. CHILDREN : thisamount += 1.5; if ( each. getdaysrented () > 3) thisamount += ( each. getdaysrented () - 3) * 1.5; // Bonuspunkte aufaddieren frequentrenterpoints ++; // Bonuspunkte fuer zweitaegige Ausleihe einer Neuerscheinung if (( each. getmovie (). getpricecode () == Movie. NEW_RELEASE ) && each. getdaysrented () > 1) frequentrenterpoints ++; // Zahlen fuer diese Ausleihe ausgeben result += "\t" + each. getmovie (). gettitle () + "\t" + String. valueof ( thisamount ) + "\n"; totalamount += thisamount ; // Fusszeilen einfuegen result += " Amount owned is " + String. valueof ( totalamount ) + "\n"; result += " You earned " + String. valueof ( frequentrenterpoints ) + " frequent renter points "; return result ; Die Methode statement() gibt einen String mit der Rechnung des Kunden zurück. Ziel des Beispiels von Fowler ist es, die gewünschte Änderung, die Ausgabe der

5 Refactoring 5 Rechnung in HTML, zu ermöglichen. Dies wäre hier zwar möglich, es müsste dazu jedoch eine ganz neue Methoden geschrieben werden, da die bisherige Methode statement() sehr lang und unübersichtlich ist. Zudem lassen sich auch keine Teile dieser Methode wiederverwenden, was dazu führen würde, dass nach dem Einfügen der Änderung duplizierter Code vorhanden ist. Dies soll nun mit Hilfe von Refaktorisieren geändert werden, damit einzelne Funktionen, die sich bisher in der Methode statement() benden, auch für die moderne Ausgabe zur Verfügung stehen. Dazu wird im ersten Schritt der Switch-Abschnitt mit Methode extrahieren in eine eigenständige Methode amountfor() umgewandelt. Dabei muss besonders auf die Parameter und lokalen Variablen acht gegeben werden. private String name ; private List < Rental > rentals = new ArrayList < Rental >() ; public Customer ( String name ){ this. name = name ; public void addrental ( Rental arg ){ this. rentals. add ( arg ); public String getname () { return this. name ; public String statement () { double totalamount = 0; int frequentrenterpoints = 0; Iterator it = rentals. iterator () ; String result = " Rental Record for " + getname () + "\ n"; while ( it. hasnext () ) { double thisamount = 0; Rental each = ( Rental ) it. next () ; thisamount = amountfor ( each ); // Bonuspunkte aufaddieren frequentrenterpoints ++; // Bonuspunkte fuer zweitaegige Ausleihe einer Neuerscheinung if (( each. getmovie (). getpricecode () == Movie. NEW_RELEASE ) && each. getdaysrented () > 1) frequentrenterpoints ++; // Zahlen fuer diese Ausleihe ausgeben result += "\t" + each. getmovie (). gettitle () + "\t" + String. valueof ( thisamount ) + "\n"; totalamount += thisamount ;

6 6 Dominique Steiner, Monica De Donato // Fusszeilen einfuegen result += " Amount owned is " + String. valueof ( totalamount ) + "\n"; result += " You earned " + String. valueof ( frequentrenterpoints ) + " frequent renter points "; return result ; private double amountfor ( Rental each ) { double thisamount = 0; // Betraege pro Zeile ermitteln switch ( each. getmovie (). getpricecode () ){ case Movie. REGULAR : thisamount +=2; if ( each. getdaysrented () > 2) thisamount += ( each. getdaysrented () - 2) * 1.5; case Movie. NEW_ RELEASE : thisamount += each. getdaysrented () * 3; case Movie. CHILDREN : thisamount += 1.5; if ( each. getdaysrented () > 3) thisamount += ( each. getdaysrented () - 3) * 1.5; return thisamount ; Als zweiter Schritt werden nun die Variablen each und thisamount umbenennt. Durch einen aussagekräftigen Namen wird der Code besser lesbar und es ist sofort erkennbar, was für ein Wert in der Variable gespeichert ist. private double amountfor ( Rental arental ) { double result = 0; // Betraege pro Zeile ermitteln switch ( arental. getmovie (). getpricecode () ){ case Movie. REGULAR : result +=2; if ( arental. getdaysrented () > 2) result += ( arental. getdaysrented () - 2) * 1.5; case Movie. NEW_ RELEASE : result += arental. getdaysrented () * 3; case Movie. CHILDREN : result += 1.5;

7 Refactoring 7 if ( arental. getdaysrented () > 3) result += ( arental. getdaysrented () - 3) * 1.5; return result ; Da die Methode amountfor() enger mit der Klasse Rental als mit der Klasse Customer zusammenarbeitet, ist es sinnvoller, diese Methode in die Klasse Rental zu verschieben. Beim Verschieben der Methode, muss diese der neuen Umgebung angepasst werden. class Rental { private Movie movie ; private int daysrented ; public Rental ( Movie movie, int daysrented ){ this. movie = movie ; this. daysrented = daysrented ; public int getdaysrented () { return this. daysrented ; public Movie getmovie () { return this. movie ; double getcharge () { double result = 0; // Betraege pro Zeile ermitteln switch ( getmovie (). getpricecode () ){ case Movie. REGULAR : result +=2; if ( getdaysrented () > 2) result += ( getdaysrented () - 2) * 1.5; case Movie. NEW_ RELEASE : result += getdaysrented () * 3; case Movie. CHILDREN : result += 1.5; if ( getdaysrented () > 3) result += ( getdaysrented () - 3) * 1.5; return result ; public class Customer {

8 8 Dominique Steiner, Monica De Donato... /* * deprecated Use Rental # getcharge () instead */ private double amountfor ( Rental arental ) { return arental. getcharge () ; Nun wird der Methodenaufruf in der Klasse Customer durch einen Aufruf der neuen Klasse ersetzt. Dadurch kann die veraltete Methode aus der Klasse Customer entfernt werden. public class Customer { private String name ; private List < Rental > rentals = new ArrayList < Rental >() ; public Customer ( String name ){ this. name = name ; public void addrental ( Rental arg ){ this. rentals. add ( arg ); public String getname () { return this. name ; public String statement () { double totalamount = 0; int frequentrenterpoints = 0; Iterator it = rentals. iterator () ; String result = " Rental Record for " + getname () + "\ n"; while ( it. hasnext () ) { double thisamount = 0; Rental each = ( Rental ) it. next () ; thisamount = each. getcharge () ; // Bonuspunkte aufaddieren frequentrenterpoints ++; // Bonuspunkte fuer zweitaegige Ausleihe einer Neuerscheinung if (( each. getmovie (). getpricecode () == Movie. NEW_RELEASE ) && each. getdaysrented () > 1) frequentrenterpoints ++; // Zahlen fuer diese Ausleihe ausgeben

9 Refactoring 9 result += "\t" + each. getmovie (). gettitle () + "\t" + String. valueof ( thisamount ) + "\n"; totalamount += thisamount ; // Fusszeilen einfuegen result += " Amount owned is " + String. valueof ( totalamount ) + "\n"; result += " You earned " + String. valueof ( frequentrenterpoints ) + " frequent renter points "; return result ; Da thisamount in dieser Klasse nur zweimal vorkommt, kann diese Variable durch den Einsatz von direkten Methodenaufrufen eingespart werden. public class Customer { private String name ; private List < Rental > rentals = new ArrayList < Rental >() ; public Customer ( String name ){ this. name = name ; public void addrental ( Rental arg ){ this. rentals. add ( arg ); public String getname () { return this. name ; public String statement () { double totalamount = 0; int frequentrenterpoints = 0; Iterator it = rentals. iterator () ; String result = " Rental Record for " + getname () + "\ n"; while ( it. hasnext () ) { Rental each = ( Rental ) it. next () ; // Bonuspunkte aufaddieren frequentrenterpoints ++; // Bonuspunkte fuer zweitaegige Ausleihe einer Neuerscheinung if (( each. getmovie (). getpricecode () == Movie. NEW_RELEASE ) && each. getdaysrented () > 1) frequentrenterpoints ++; // Zahlen fuer diese Ausleihe ausgeben result += "\t" + each. getmovie (). gettitle () + "\t" + String. valueof ( each. getcharge () ) + "\n";

10 10 Dominique Steiner, Monica De Donato totalamount += each. getcharge () ; // Fusszeilen einfuegen result += " Amount owned is " + String. valueof ( totalamount ) + "\n"; result += " You earned " + String. valueof ( frequentrenterpoints ) + " frequent renter points "; return result ; Nun ist die Methode statement() der Klasse Customer bereits deutlich schlanker. Wichtig ist, dass beim Refaktorisieren immer kleine Schritte gemacht und mit den vorbereiteten Tests geprüft werden. Natürlich ist das Refaktorisieren dieser Klassen und das Einbauen der Veränderung hier keineswegs schon abgeschlossen. Martin Fowler zeigt in seinem Buch noch weitere Techniken des Refaktorisieren und führt diese und weitere Änderungen zu Ende. 2 Warum Refaktorisieren? Refaktorisierung ist ein Werkzeug, das für verschiedene Zwecke eingesetzt werden kann und hilft, Software im Gri zu behalten. Durch Eliminieren von Redundanz kann die Menge des Codes oft verringert werden. Dies hilft, einen besseren Überlick zu behalten und bei Änderungen diese nur an einer Stelle durchführen zu müssen. Zudem macht eine optimierte Struktur Software leichter verständlich für Programmierer, die Änderungen daran vornehmen müssen und hilft so Zeit zu sparen. Bei refaktorisiertem Code sind die Absichten der einzelnen Methoden besser erkennbar, vor allem wenn darauf geachtet wird, die Konvention eine Methode für eine Aufgabe einzuhalten. Als sinnvoll hat sich auch erwiesen, alles Wichtige direkt im Code zu dokumentieren. So steht das Wissen nicht nur dem aktuellen Programmierer, sondern auch seinen Nachfolgern genau dann zur Verfügung, wenn es nötig ist und hilft beim Verständnis für den Code. Durch die klar erkennbaren Absichten des Codes, die Dokumentation und das bessere Verständnis lassen sich viele Fehler vermeiden, was natürlich auch dazu beiträgt, produktiver zu arbeiten. Dass sich Qualität, Lesbarkeit und Struktur des Codes verbessern, ist oensichtlich. Dass Refaktorisierung auch hilft schneller zu programmieren, ist nicht ganz so schnell erkennbar. Dies ist darauf zurückzuführen, dass Programmmierer sehr viel Zeit darauf verwenden, Fehler in der Software zu nden. Durch das Refaktorisieren in kleinen Schritten und den Tests, die immer wieder angewendet werden, sind Fehler viel schneller zu nden, wodurch sich viel Zeit einsparen lässt. In vielen Firmen ist der Zeitdruck für Neuerungen in der Software hoch, so dass der Refaktorisierung des Codes keine Zeit eingeräumt wird. Zudem ist Refaktorisierung auf den ersten Blick auch mit mehr Aufwand und mehr Kosten

11 Refactoring 11 verbunden, was für Unternehmen eher dagegen spricht. Trotzdem kommt die Refaktorisierung der bestehenden Software, in welche bereits viel Geld geossen ist, in der Regel billiger, als die ganze Software neu zu programmieren. Zudem ist es für Programmierer, welche später an der Software arbeiten, einfacher, refaktorisierten Code zu verstehen, was für das Unternehmen auch Kosteneinsparungen bedeutet. Bei refaktorisiertem Code ist es oft einfacher, einen Überblick zu gewinnen. Oft werden beim Schreiben der Tests auch Fehler in der bisherigen Software gefunden. Diese können während dem Refaktorisieren behoben werden. 3 Wann wird Refaktorisieren eingesetzt? 3.1 Zeitpunkt des Refaktorisierens Refaktorisieren sollte immer in kleinen Schritten gemacht werden. Es ist besser, nicht Zeit einzuplanen zum Refaktorisieren, sondern Refaktorisieren dann einzusetzen, wenn es hilft etwas anderes einfacher zu machen. In seinem Buch empehlt Fowler die Dreierregel, die dabei helfen kann, den Zeitpunkt zum Refaktorisieren festzulegen. Wenn Sie etwas das erste Mal machen, tun Sie es einfach. Das zweite Mal, wenn Sie etwas ähnliches machen, so scheuen Sie zwar die Wiederholung, aber Sie machen es trotzdem noch einmal. Wenn Sie etwas Ähnliches das dritte Mal tun, refaktorisieren Sie.[1, Seite 46] Häug wird refaktorisiert, wenn Software etwas Neues hinzuzufügt wird. Hier können Anpassungen der Struktur ermöglichen, dass Neues leichter eingefügt werden kann. Das Verbessern der Struktur des Codes dank Refaktorisierung trägt dazu bei, dass Fehler in Programmen gefunden werden können. Code-Reviews in kleinen Teams dienen dazu, Wissen gleichmässig zu verteilen und an jüngere weiterzugeben. Hier können mehrere Personen nützliche Infos beitragen zum Verbessern von Software. Es lohnt sich auch hier, bei Vorschlägen, zu überlegen, ob diese durch Refaktorisieren leicht umzusetzen sind und dies bei guten Vorschlägen direkt zu machen. 3.2 Welcher Code muss Refaktorisiert werden? Duplizierter Code Wenn die gleiche Codestruktur in einem Programm an mehr als einer Stelle vorkommt, sollte immer refaktorisiert und dieser Code vereinigt werden. Kommt der Code in der gleichen Klasse zweimal vor, kann dies sehr einfach durch Methode extrahieren an der einen Stelle gemacht werden. Danach wird die neu erstellte Methode an beiden Orten aufgerufen. Kommt der gleiche Code in verschiedenen Geschwisterklassen oder ähnlicher Code in mehreren Klassen vor, kann auch hier, durch den Einsatz geeigneter Refaktorisierungen, das Programm verbessert werden.

12 12 Dominique Steiner, Monica De Donato Lange Methode Kurze Methoden machen ein Programm durch bessere Verständlichkeit, gemeinsame Nutzung und Auswahl viel langlebiger. Es ist jedoch sehr wichtig, dass diese kurzen Methoden gute Name haben, so dass der Rumpf nicht gelesen werden muss um zu wissen was gemacht wird. Methoden verkürzen wird durch Methode extrahieren gemacht, hier sollte darauf geachtet werden, dass nicht zu viele Parameter mitgegeben werden. Diese sollten, wenn möglich, durch temporäre Variablen oder direkte Aufrufe ersetzt werden, was mit den entsprechenden Refaktorisierungen einfach umzusetzen ist. Grosse Klasse Grosse Klassen, die zu viel tun, sind meist an zu vielen Instanzvariablen erkennbar. Hier kann oft Klasse extrahieren angewandt werden, um aus Instanzvariablen, die zusammenpassen ein neues Objekt zu erzeugen. In Klassen, die viel Code und sehr lange Methoden enthalten, bendet sich oft auch redundanter Code, der durch kürzere Methoden mehrfach genutzt werden kann. Lange Parameterliste Bei der objektorientierten Programmierung wird nicht mehr alles, was eine Methode benötigt, als Parameter übergeben. Es wird nur soviel übergeben, dass die Methode sich die anderen Informationen selber holen kann. Daher sollen Parameter wenn möglich durch einen direkten Methodenaufruf ersetzt werden, was durch die Refaktorisierung Paramter durch explizite Methode ersetzen erreicht wird. Divergierende Änderungen Divergierende Änderungen lassen sich dadurch erkennen, dass die Struktur der Software es nicht zulässt, Änderungen an einer Stelle einfach vorzunehmen. Dies kann dadurch entstehen, dass einen Klasse häug verändert wird. Müssen bei Änderungen an mehreren Stellen Anpassungen vorgenommen werden, kann es helfen, die Klasse mit Klassse extrahieren zu teilen und zwei Objekte daraus zu machen. 3.3 Schwierigkeiten beim Refaktorisieren Refaktorisieren ist eine sehr gute Methode, doch es gibt Situtationen, bei denen sich Schwierigkeiten ergeben können. Bei Datenbanken bringt die enge Anbindung an Applikationen sowie die Migration von Daten Schwierigkeiten beim Refaktorisieren mit sich. Bei nicht objektorientierten Datenbanken gibt es die Möglichkeit, dies durch eine zusätzliche Softwareschicht zu lösen, da sich die Veränderungen so isolieren lassen. Die Migration von objektorientierte Datenbanken ist mit sehr viel Aufwand verbunden, auch wenn einige Datenbanken automatische Funktionen zur Migration von Objekten anbieten.

13 Refactoring 13 Das Ändern von öentlichen Schnittstellen (public Methoden) kann Auswirkungen auf nicht vorhersehbare Komponenten haben, da diese oft von anderen Programmen genutzt werden. Viele Refaktorisierungs-Techniken verändern jedoch die Schnittstellen, wie zum Beispiel Methode umbenennen. Daher braucht das Ändern dieser Schnittstellen eine aufwändigen Prozess. Über längere Zeit werden beide Schnittstellen beibehalten, wobei alte als deprecated bezeichnet wird, die nicht mehr verwendet werden soll. Erst nachdem alle Nutzer die Möglichkeit hatten ihre Programme anzupassen, darf die alte Schnittstelle aufgehoben werden. Beim Veröentlichen von Schnittstellen sollte daher gut überlegt werden, welche wirklich geönet werden. Wenn Code sehr schlecht ist und nicht funktioniert, kann nicht refaktorisiert werden. Denn um refaktorisieren zu können, müssen die Tests, welche die Funktionalität prüfen, alle korrekt durchlaufen. In dieser Situation ist es einfacher, den Code neu zu schreiben. Ein weiterer Zeitpunkt, zu dem eine Refaktorisierung des Codes nicht sinnvoll ist, ist kurz vor dem Abgabetermin. Hier kann kein Produktivitätsgewinn mehr herausgeholt werden. 3.4 Refaktorisieren und Design Obwohl sich durch Refaktorisieren das Design verbessern lässt, lohnt es sich, das Design zuerst zu planen und danach zu programmieren. Wenn sich beim Planen verschiedene Möglichkeiten bieten, kann Refaktorisieren mithelfen sich zu entscheiden. Wenn sich nämlich die einfachere Lösung durch Refaktorisieren ohne viel Aufwand in die exiblere, meist aber kompliziertere Lösung umbauen lässt, ist es sinnvoll zu diesem Zeitpunkt die einfache Lösung zu implementieren. Falls es nötig wird, kann diese dann später immer noch zur exibleren Lösung ausgebaut werden. 3.5 Refaktorisieren und Performance Durch das Refaktorisieren wird die Struktur des Programms zwar übersichtlicher, dabei jedoch meist langsamer. Hier wird der Ansatz so gewählt, dass zuerst refaktorisiert wird, danach wird an dem optimierten Code ein Performace Tuning durchgeführt. Die Ausnahme sind Echtzeitsysteme, bei denen für alle Methoden ein Zeitbudget erstellt wird, dass eingehalten werden muss. 4 Refaktorisierungs-Werkzeuge (Tools) 4.1 Allgemein In Entwicklungsumgebungen sind heute Werkzeuge zum Refaktorisieren eingebaut, die viele der erwähnten Techniken unterstützen. Dies erleichtert die Arbeit der Programmierer, da sie nicht mehr auf Hilfsmittel wie Suchen/Ersetzen angewiesen sind, sondern genau auf die anzuwendende Refaktorisierung abgestimmte Methoden nutzen können. Was natürlich hilft Zeit zu sparen, aber auch vermeidet, dass aus Versehen neue Fehler in den Code eingebaut werden.

14 14 Dominique Steiner, Monica De Donato Table 1. Übersicht über verschieden Werkzeuge zum Refaktorisieren Sprache IDE How To Eclipse integriert in die Grundinstallation von Eclipse Java Refactorit Plattformunabhängiges Plugin für NetBeans, Eclipse und andere IDEs JRefactory Bietet neben Refaktorisierung auch Funktionalitäten für UML Diagramme.NET C#Refactory in Visual Studio integriert, funktioniert ähnlich wie bei Eclipse C/C++ REF++ intergriert in Visual Studio zum Refaktorisieren von C++ Code Visual Basic Refactor for VB Plugin für Visual Studio Delphi ModelMaker In diesem Plugin stehen nur die einfachsten Refaktorisierungen zur Verfügung 4.2 Eclipse Auch Eclipse bietet bereits in der Grundinstallation die gängigen Techniken zum Refaktorisieren an. Diese benden sich im Menu Refactor (Fig. 3 Eclipse- Menu) oder können durch einen rechten Mausklick aufgerufen werden. Das Refaktorisieren von Code mit Eclipse ist sehr einfach, da beim Benutzen die Angaben, die zum Ausführen der jeweiligen Refaktorisierung notwendig sind, in Dialogfenstern (Fig. 4) gemacht werden können. Am Schluss bietet Eclipse eine Vorschau (Fig. 5), in der der aktuelle Code und der zukünftige Code nebeneinander stehen und verglichen werden. 5 Refaktorisieren mit Eclipse Das folgende Beispiel zeigt die Refaktorisierung Methode extrahieren mit Eclipse 3.4. Der Code der verwendet wird, ist aus dem Beispiel im ersten Kapitel. Es geht darum den Switch-Abschnitt, mit Hilfe von Eclipse, automatisiert in eine eigene Methode umzuwandeln. Dazu wird als erstes die Codestelle, die extrahiert werden soll, markiert (Fig. 2). Fig. 2. Markieren der Codestelle

15 Refactoring 15 Als Nächstes wird im Menu Refactor der Punkt Extract Method... aufgerufen (Fig. 3). Fig. 3. Auswählen des Menupunktes Nun önet sich ein Dialogfenster. Hier wird der Name der neuen Methode angegeben. Zudem besteht die Möglichkeit Parameter, die übergeben werden, zu bearbeiten (Fig. 4). Fig. 4. Dialogfenster zum Eingeben der nötigen Parameter

16 16 Dominique Steiner, Monica De Donato Bevor die Refaktorisierung vollständig durchgeführt wird, können die Änderungen im nächsten Fenster kontrolliert werden (Fig. 5). Fig. 5. Vorschaufenster zum Kontrollieren der Änderungen Nun ist die Methode extrahiert. Eclipse hat an der markierten Stelle automatisch den Aufruf der neuen Methode eingefügt. Die neue Methode wurde nach den bestehenden Methoden hinzugefügt (Fig. 6). Fig. 6. Änderungen im Code 6 Detaillierte Beschreibung einer Refaktorisierung 6.1 Klasse extrahieren Klassen wachsen mit der Zeit. Es werden laufend mehr Methoden und Daten hinzugefügt, so dass sie gross und schlecht verständlich werden. In diesem Fall

17 Refactoring 17 sollte eine Klasse zerlegt werden. Dazu werden die Daten und Methoden, die zusammen passen in eine neue Klasse gepackt. Fig. 7. Klasse Person, die in die beiden Klassen Person und TelephoneNumber aufgeteilt wird public class Person { public String getname () { return this. name ; public String gettelephonenumber () { return "(" + this. officeareacode + ") " + this. officenumber ; public String getofficeareacode () { return this. officeareacode ; public void setofficeareacode ( String arg ){ this. officeareacode = arg ; public String getofficenumber () { return this. officenumber ; public void setofficenumber ( String arg ){ this. officenumber = arg ; private String name ; private String officeareacode ; private String officenumber ; In diesem Beispiel ist die Klasse Person gewachsen und enthält Informationen zum Tefonnummer-Verhalten, die in eine eigene Klasse verschoben werden können. Hierfür wird im ersten Schritt die neue Klasse deniert. public class TelephoneNumber { Nun werden die notwendigen Assoziationen gemacht. public class Person {

18 18 Dominique Steiner, Monica De Donato private TelephoneNumber officetelephone = new TelephoneNumber () ;... Als Nächstes werden mit Feld verschieben die Variablen erstellt. public class Person { public String getname () { return this. name ; public String gettelephonenumber () { return "(" + getofficeareacode () + ") " + this. officenumber ; public String getofficeareacode () { return this. officetelephone. getareacode () ; public void setofficeareacode ( String arg ){ this. officetelephone. setareacode ( arg ); public String getofficenumber () { return this. officenumber ; public void setofficenumber ( String arg ){ this. officenumber = arg ; private TelephoneNumber officetelephone = new TelephoneNumber () ; private String name ; private String officenumber ; Nun werden die Methoden durch Methode verschieben in die neue Klasse verschoben. public class Person { public String getname () { return this. name ; public String gettelephonenumber () { return this. officetelephone. gettelephonenumber () ; public TelephoneNumber getofficetelephone () { return this. officetelephone ; TelephoneNumber officetelephone = new TelephoneNumber () ; private String name ; public class TelephoneNumber { public String gettelephonenumber () {

19 Refactoring 19 return ("("+ this. areacode +")"); public String getareacode () { return this. areacode ; public void setareacode ( String arg ){ this. areacode = arg ; public String getnumber () { return this. number ; public void setnumber ( String arg ){ this. number = arg ; private String areacode ; private String number ; Zuletzt wird entschieden welche Methoden öentlich gemacht werden. Jetzt haben beide Klassen wieder klar denierte Verantwortlichkeiten die sie wahrnehmen. 7 Unit Tests Geeignete Tests sind etwas vom Wichtigsten beim Refaktorisieren, auch wenn die Refaktorisierungen mit Hilfsmitteln durchgeführt werden. Das Schreiben von Test bringt meist ein erhöhtes Programmiertempo mit sich, da viel weniger Zeit für die Fehlersuche aufgewendet werden muss. Jedes mal beim Verändern des Codes werden die Tests ausgeführt. So sind Fehler viel schneller zu nden, da in den kleinen Schritten nur wenig Code verändert werden muss und dieser dem Programmierer noch präsent ist. Durch das intensive Auseinandersetzen mit dem Code, werden auch Fehler von früher in den Programmen entdeckt und können verbessert werden. Mit dem Schreiben der Tests sollte vor oder mit dem Programm begonnen werden. Geeignet ist, zuerst die Tests zu schreiben und danach die entsprechende Funktionalität zu implementieren. Durch die Konzentration auf die Schnittstelle beim Schreiben der Tests, ist das Implementieren der Funktion meist einfacher, da klar ist, was die Funktion machen muss. Zudem ist eindeutig, dass die Funktion fertig implementiert ist, sobald der Test funktioniert. Um jedoch das Refaktorisieren sinnvoll mit Tests unterstützen zu können, müssen diese so angelegt werden, dass sie vollständig automatisiert sind, dass heisst jeder Test muss sich selbst überprüfen und zurückgeben, ob er korrekt durchgelaufen ist oder nicht. Üblich ist, dass pro Klasse eine Testklasse geschrieben wird, welche die Methoden überprüft. Gut geeignet dazu ist das JUnit Framework. Nach dem Durchführen der Test werden die Resultate in der Konsole oder im GUI ausgegeben. Das GUI stellt die Resultate mit roten oder grünen Balken graphisch

20 20 Dominique Steiner, Monica De Donato dar, so ist auf einen Blick sichtbar, ob die Tests erfolgreich durchgelaufen sind. Während dem Refaktorisieren werden nur die Test, zu der veränderten Programmstelle ausgeführt. Wenn immer alle Tests durchgeführt würden, wäre dies ein zu grosser Zeitverlust. Die gesamten Test werden meist über Nacht durchgeführt, wenn niemand dadurch bei der Arbeit gestört wird. 8 Fazit Refaktorisierung ist eine hervorragende Technik, die heute noch viel zu wenig eingesetzt wird. Es wäre wünschenswert, dass sie sich weiter verbreiten und vermehrt zum Einsatz kommen würde. Dazu müssten sicher bei vielen Leuten erst Vorurteile über Aufwand und Kosten abgebaut und der Gewinn, der mit Refaktorisieren gemacht werden kann, aufgezeigt werden. Oft müsste dazu wohl erst eine solide Testumgebung aufgebaut werden, was für den Anfang einen Mehraufwand bedeutet, der sich jedoch, nach der Umstellungsphase durch produktiveres Arbeiten auszahlen wird. Als Programmierer ist es sinnvoll, sich die Technik des Refaktorisierens anzueignen, um sie zum produktivieren Arbeiten nutzen zu können. Mit den Tools, die heute zum Refaktorisieren zur Verfügung stehen, können die verschiedenen Refaktorisierungen sehr einfach und schnell angewendet werden. Dadurch wird der eigene Code übersichtlicher und besser verständlich für sich selber und andere Programmierer. References 1. Fowler, M.: Refactoring. Wie Sie das Design vorhandener Software verbessern. Addison-Wesley Verlag (Deutschland) GmbH, Bonn (2005) 2. Fowler, M.: Refactoring. Improving The Design of Existing Code. Addison-Wesley Publishing Co., Inc., Reading, MA (1999) 3. Fowler, M.,: Refactoring. Online,

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

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

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen.

Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen. Millennium SMS Service Schnellübersicht Seite 1 von 6 1. Tägliche Arbeiten mit der SMS Bestätigung Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen.

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

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

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

Hilfe zur Urlaubsplanung und Zeiterfassung

Hilfe zur Urlaubsplanung und Zeiterfassung Hilfe zur Urlaubsplanung und Zeiterfassung Urlaubs- und Arbeitsplanung: Mit der Urlaubs- und Arbeitsplanung kann jeder Mitarbeiter in Coffee seine Zeiten eintragen. Die Eintragung kann mit dem Status anfragen,

Mehr

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

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

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Bilder zum Upload verkleinern

Bilder zum Upload verkleinern Seite 1 von 9 Bilder zum Upload verkleinern Teil 1: Maße der Bilder verändern Um Bilder in ihren Abmessungen zu verkleinern benutze ich die Freeware Irfan View. Die Software biete zwar noch einiges mehr

Mehr

ARCO Software - Anleitung zur Umstellung der MWSt

ARCO Software - Anleitung zur Umstellung der MWSt ARCO Software - Anleitung zur Umstellung der MWSt Wieder einmal beschert uns die Bundesverwaltung auf Ende Jahr mit zusätzlicher Arbeit, statt mit den immer wieder versprochenen Erleichterungen für KMU.

Mehr

bilder.tibs.at Upload-Assistent

bilder.tibs.at Upload-Assistent bilder.tibs.at Upload-Assistent Der bisherige Upload-Assistent, der als Windowsprogramm vorlag, wird nun durch eine neue Version abgelöst. Diese Version ermöglicht den Upload der Bilder direkt über die

Mehr

! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006

!  # $  % & Nicki Wruck worldwidewruck 08.02.2006 !"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst

Mehr

Urlaubsregel in David

Urlaubsregel in David Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5

Mehr

Anwendungsbeispiele. Neuerungen in den E-Mails. Webling ist ein Produkt der Firma:

Anwendungsbeispiele. Neuerungen in den E-Mails. Webling ist ein Produkt der Firma: Anwendungsbeispiele Neuerungen in den E-Mails Webling ist ein Produkt der Firma: Inhaltsverzeichnis 1 Neuerungen in den E- Mails 2 Was gibt es neues? 3 E- Mail Designs 4 Bilder in E- Mails einfügen 1 Neuerungen

Mehr

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos in Verbindung mit der Webshopanbindung wurde speziell auf die Shop-Software shop to date von DATA BECKER abgestimmt. Mit

Mehr

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Seite erstellen Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Es öffnet sich die Eingabe Seite um eine neue Seite zu erstellen. Seiten Titel festlegen Den neuen

Mehr

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung Anleitung zur Daten zur Datensicherung und Datenrücksicherung Datensicherung Es gibt drei Möglichkeiten der Datensicherung. Zwei davon sind in Ges eingebaut, die dritte ist eine manuelle Möglichkeit. In

Mehr

Zimmertypen. Zimmertypen anlegen

Zimmertypen. Zimmertypen anlegen Zimmertypen anlegen Hier legen Sie Ihre Zimmer an, damit sie auf der Homepage dargestellt werden und online buchbar gemacht werden können. Wobei wir ausdrücklich darauf hinweisen möchten, dass es ganz

Mehr

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen Menü Macro WinIBW2-Macros unter Windows7?... 1 Macros aufnehmen... 1 Menübefehle und Schaltflächen in Macros verwenden... 4 Macros bearbeiten... 4 Macros löschen... 5 Macro-Dateien... 5 Macros importieren...

Mehr

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Wenn der Name nicht gerade www.buch.de oder www.bmw.de heißt, sind Internetadressen oft schwer zu merken Deshalb ist es sinnvoll, die Adressen

Mehr

1. Software installieren 2. Software starten. Hilfe zum Arbeiten mit der DÖHNERT FOTOBUCH Software

1. Software installieren 2. Software starten. Hilfe zum Arbeiten mit der DÖHNERT FOTOBUCH Software 1. Software installieren 2. Software starten Hilfe zum Arbeiten mit der DÖHNERT FOTOBUCH Software 3. Auswahl 1. Neues Fotobuch erstellen oder 2. ein erstelltes, gespeichertes Fotobuch laden und bearbeiten.

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

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt Inhaltsverzeichnis Aufgabe... 1 Allgemein... 1 Active Directory... 1 Konfiguration... 2 Benutzer erstellen... 3 Eigenes Verzeichnis erstellen... 3 Benutzerkonto erstellen... 3 Profil einrichten... 5 Berechtigungen

Mehr

Zwischenablage (Bilder, Texte,...)

Zwischenablage (Bilder, Texte,...) Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen

Mehr

Kostenstellen verwalten. Tipps & Tricks

Kostenstellen verwalten. Tipps & Tricks Tipps & Tricks INHALT SEITE 1.1 Kostenstellen erstellen 3 13 1.3 Zugriffsberechtigungen überprüfen 30 2 1.1 Kostenstellen erstellen Mein Profil 3 1.1 Kostenstellen erstellen Kostenstelle(n) verwalten 4

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

Mehr

teischl.com Software Design & Services e.u. office@teischl.com www.teischl.com/booknkeep www.facebook.com/booknkeep

teischl.com Software Design & Services e.u. office@teischl.com www.teischl.com/booknkeep www.facebook.com/booknkeep teischl.com Software Design & Services e.u. office@teischl.com www.teischl.com/booknkeep www.facebook.com/booknkeep 1. Erstellen Sie ein neues Rechnungsformular Mit book n keep können Sie nun Ihre eigenen

Mehr

Kleines Handbuch zur Fotogalerie der Pixel AG

Kleines Handbuch zur Fotogalerie der Pixel AG 1 1. Anmelden an der Galerie Um mit der Galerie arbeiten zu können muss man sich zuerst anmelden. Aufrufen der Galerie entweder über die Homepage (www.pixel-ag-bottwartal.de) oder über den direkten Link

Mehr

FastBill Automatic. Dokumentation Versand. FastBill GmbH. Holteyer Straße 30 45289 Essen Telefon 0201 47091505 Telefax 0201 54502360

FastBill Automatic. Dokumentation Versand. FastBill GmbH. Holteyer Straße 30 45289 Essen Telefon 0201 47091505 Telefax 0201 54502360 FastBill GmbH Holteyer Straße 30 45289 Essen Telefon 0201 47091505 Telefax 0201 54502360 FastBill Automatic Dokumentation Versand 1 Inhaltsverzeichnis: 1. Grundlegendes 2. Produkteinstellungen 2.1. Grundeinstellungen

Mehr

EINFACHES HAUSHALT- KASSABUCH

EINFACHES HAUSHALT- KASSABUCH EINFACHES HAUSHALT- KASSABUCH Arbeiten mit Excel Wir erstellen ein einfaches Kassabuch zur Führung einer Haushalts- oder Portokasse Roland Liebing, im November 2012 Eine einfache Haushalt-Buchhaltung (Kassabuch)

Mehr

Computeria Rorschach Mit Excel Diagramme erstellen

Computeria Rorschach Mit Excel Diagramme erstellen Mit Excel Diagramme erstellen 25.12.2010 Roland Liebing Mit Excel Diagramme erstellen Diagramme können Zahlenwerte veranschaulichen, das heisst, mit Hilfe eines Diagramms können Zahlen besser miteinander

Mehr

1. Einschränkung für Mac-User ohne Office 365. 2. Dokumente hochladen, teilen und bearbeiten

1. Einschränkung für Mac-User ohne Office 365. 2. Dokumente hochladen, teilen und bearbeiten 1. Einschränkung für Mac-User ohne Office 365 Mac-User ohne Office 365 müssen die Dateien herunterladen; sie können die Dateien nicht direkt öffnen und bearbeiten. Wenn die Datei heruntergeladen wurde,

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

WordPress. Dokumentation

WordPress. Dokumentation WordPress Dokumentation Backend-Login In das Backend gelangt man, indem man hinter seiner Website-URL einfach ein /wp-admin dranhängt www.domain.tld/wp-admin Dabei gelangt man auf die Administrationsoberfläche,

Mehr

Problemdefinition. Cash Flow Reminder. 1 Problembeschreibung: 2 Projektziel: 3 Aufgaben des Benutzers

Problemdefinition. Cash Flow Reminder. 1 Problembeschreibung: 2 Projektziel: 3 Aufgaben des Benutzers Cash Flow Reminder Problemdefinition 1 Problembeschreibung: Viele Studenten verfügen über ein eher geringes monatliches Budget, mit welchem sie aber alle Lebensunterhaltskosten decken sollten. Deshalb

Mehr

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis www.wir-lieben-shops.de 1

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis www.wir-lieben-shops.de 1 Beispiel Shop-Eintrag Ladenlokal & Online-Shop. Als Händler haben Sie beim Shop-Verzeichnis wir-lieben-shops.de die Möglichkeit einen oder mehrere Shop- Einträge zu erstellen. Es gibt 3 verschiedene Typen

Mehr

Der Kalender im ipad

Der Kalender im ipad Der Kalender im ipad Wir haben im ipad, dem ipod Touch und dem iphone, sowie auf dem PC in der Cloud einen Kalender. Die App ist voreingestellt, man braucht sie nicht laden. So macht es das ipad leicht,

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

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

etermin Einbindung in Outlook

etermin Einbindung in Outlook etermin Einbindung in Outlook 1. Einführung Über etermin gebuchte Termine können bei Bedarf auch mit externen Terminkalendern, wie zum Beispiel Outlook, ical oder Google synchronisiert werden. Dieses Dokument

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

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

Firefox: Die Lesezeichen im Griff

Firefox: Die Lesezeichen im Griff Firefox: Die Lesezeichen im Griff Die Favoriten im Internet Explorer sind eine Lachnummer gegen die Lesezeichen im Firefox. Eingetippte Schlagworte reichen, um sie aufzurufen. Außerdem können ganze Befehlsfolgen

Mehr

Die Dateiablage Der Weg zur Dateiablage

Die Dateiablage Der Weg zur Dateiablage Die Dateiablage In Ihrem Privatbereich haben Sie die Möglichkeit, Dateien verschiedener Formate abzulegen, zu sortieren, zu archivieren und in andere Dateiablagen der Plattform zu kopieren. In den Gruppen

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Tipps & Tricks im CRM

Tipps & Tricks im CRM Tipps & Tricks im CRM 1. Mehrere Datensätze gleichzeitig bearbeiten S. 2 2. Änderung der Spaltenreihenfolge S. 3 3. Auto-Vervollständigung S. 3 4. Katalogwert wählen, ohne Katalog zu öffnen S. 4 5. Tastenkombination

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

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

Ich möchte eine Bildergalerie ins Internet stellen

Ich möchte eine Bildergalerie ins Internet stellen Ich möchte eine Bildergalerie ins Internet stellen Ich habe viele Fotos von Blumen, von Häusern, von Menschen. Ich möchte zu einem Thema Fotos sammeln, eine Vorschau erstellen und die Fotos so in der Größe

Mehr

Unsere Webapplikation erweitern

Unsere Webapplikation erweitern Unsere Webapplikation erweitern Um die Webapplikation zu benutzen: 1. Starten Sie den Server, indem Sie das Hauptprogramm in der Klasse ImdbServer starten. 2. Laden Sie im Browser die Seite http://localhost:8080/html/index.html.

Mehr

Refactoring. PG Reclipse Seminar: Refactoring Jan-Christopher Bals (1/30)

Refactoring. PG Reclipse Seminar: Refactoring Jan-Christopher Bals (1/30) Refactoring PG Reclipse Seminar: Refactoring Jan-Christopher Bals (1/30) Gliederung des Vortrags Definition Hintergrund und Motivation Refactoring am Beispiel Refactoring-Katalog Unterstützung durch Tools

Mehr

Das Design: Themen und Varianten anwenden

Das Design: Themen und Varianten anwenden Das Design: Themen und Varianten anwenden 1 a In Kapitel 1 haben Sie schon gesehen, wie einfach Sie in PowerPoint eine Designvorlage anwenden können. Lesen Sie hier, wie Sie aus noch mehr Vorlagen auswählen

Mehr

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Second Steps in eport 2.0 So ordern Sie Credits und Berichte Second Steps in eport 2.0 So ordern Sie Credits und Berichte Schritt 1: Credits kaufen, um Zugangscodes generieren zu können Wählen Sie Credits verwalten und klicken Sie auf Credits kaufen. Geben Sie nun

Mehr

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Ab der Version forma 5.5 handelt es sich bei den Orientierungshilfen der Architekten-/Objektplanerverträge nicht

Mehr

Internet Explorer Version 6

Internet Explorer Version 6 Internet Explorer Version 6 Java Runtime Ist Java Runtime nicht installiert, öffnet sich ein PopUp-Fenster, welches auf das benötigte Plugin aufmerksam macht. Nach Klicken auf die OK-Taste im PopUp-Fenster

Mehr

Reporting Services und SharePoint 2010 Teil 1

Reporting Services und SharePoint 2010 Teil 1 Reporting Services und SharePoint 2010 Teil 1 Abstract Bei der Verwendung der Reporting Services in Zusammenhang mit SharePoint 2010 stellt sich immer wieder die Frage bei der Installation: Wo und Wie?

Mehr

Sie wollen Was heißt das? Grundvoraussetzung ist ein Bild oder mehrere Bilder vom Wechseldatenträger

Sie wollen Was heißt das? Grundvoraussetzung ist ein Bild oder mehrere Bilder vom Wechseldatenträger Den Speicherplatz wechseln oder eine Sicherungskopie erstellen. Es lässt sich nicht verhindern. Manche Sachen liegen am falschen Platz, können gelöscht werden oder man will vor der Bearbeitung eine Sicherungskopie

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

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

Das Persönliche Budget in verständlicher Sprache

Das Persönliche Budget in verständlicher Sprache Das Persönliche Budget in verständlicher Sprache Das Persönliche Budget mehr Selbstbestimmung, mehr Selbstständigkeit, mehr Selbstbewusstsein! Dieser Text soll den behinderten Menschen in Westfalen-Lippe,

Mehr

SICHERN DER FAVORITEN

SICHERN DER FAVORITEN Seite 1 von 7 SICHERN DER FAVORITEN Eine Anleitung zum Sichern der eigenen Favoriten zur Verfügung gestellt durch: ZID Dezentrale Systeme März 2010 Seite 2 von 7 Für die Datensicherheit ist bekanntlich

Mehr

1. Einführung. 2. Weitere Konten anlegen

1. Einführung. 2. Weitere Konten anlegen 1. Einführung In orgamax stehen Ihnen die gängigsten Konten des Kontenrahmens SKR03 und SKR04 zur Verfügung. Damit sind im Normalfall alle Konten abgedeckt, die Sie zur Verbuchung benötigen. Eine ausführliche

Mehr

Installation von Updates

Installation von Updates Installation von Updates In unregelmässigen Abständen erscheinen Aktualisierungen zu WinCard Pro, entweder weil kleinere Verbesserungen realisiert bzw. Fehler der bestehenden Version behoben wurden (neues

Mehr

Online Newsletter III

Online Newsletter III Online Newsletter III Hallo zusammen! Aus aktuellem Anlass wurde ein neuer Newsletter fällig. Die wichtigste Neuerung betrifft unseren Webshop mit dem Namen ehbshop! Am Montag 17.10.11 wurde die Testphase

Mehr

ACDSee 2009 Tutorials: Rote-Augen-Korrektur

ACDSee 2009 Tutorials: Rote-Augen-Korrektur In diesem Tutorial lernen Sie den schnellsten Weg zum Entfernen roter Augen von Ihren Fotos mit der Rote-Augen- Korrektur. Die Funktion zur Reduzierung roter Augen ist ein Untermenü des Bearbeitungsmodus.

Mehr

Hilfe zur Dokumentenverwaltung

Hilfe zur Dokumentenverwaltung Hilfe zur Dokumentenverwaltung Die Dokumentenverwaltung von Coffee-CRM ist sehr mächtig und umfangreich, aber keine Angst die Bedienung ist kinderleicht. Im Gegensatz zur Foto Galeria können Dokumente

Mehr

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost Adobe Photoshop Lightroom 5 für Einsteiger Bilder verwalten und entwickeln Sam Jost Kapitel 2 Der erste Start 2.1 Mitmachen beim Lesen....................... 22 2.2 Für Apple-Anwender.........................

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

Kurzanleitung MAN E-Learning (WBT)

Kurzanleitung MAN E-Learning (WBT) Kurzanleitung MAN E-Learning (WBT) Um Ihr gebuchtes E-Learning zu bearbeiten, starten Sie bitte das MAN Online- Buchungssystem (ICPM / Seminaris) unter dem Link www.man-academy.eu Klicken Sie dann auf

Mehr

Fachhochschule Deggendorf Platzziffer:...

Fachhochschule Deggendorf Platzziffer:... Sommersemester 2008 Zahl der Blätter: 9 Fachbereich: Betriebswirtschaft WI Bachelor Hilfsmittel: alles ohne Computer Zeit: 90 Minuten 1 Betrachten Sie die drei markierten Zeilen. 1. Angenommen Sie hätten

Mehr

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden. In einer Website haben Seiten oft das gleiche Layout. Speziell beim Einsatz von Tabellen, in denen die Navigation auf der linken oder rechten Seite, oben oder unten eingesetzt wird. Diese Anteile der Website

Mehr

SAMMEL DEINE IDENTITÄTEN::: NINA FRANK :: 727026 :: WINTERSEMESTER 08 09

SAMMEL DEINE IDENTITÄTEN::: NINA FRANK :: 727026 :: WINTERSEMESTER 08 09 SAMMEL DEINE IDENTITÄTEN::: :: IDEE :: Ich selbst habe viele verschiedene Benutzernamen und Passwörter und wenn ich mir diese nicht alle aufschreiben würde, würde ich alle durcheinander bringen oder welche

Mehr

Fülle das erste Bild "Erforderliche Information für das Google-Konto" vollständig aus und auch das nachfolgende Bild.

Fülle das erste Bild Erforderliche Information für das Google-Konto vollständig aus und auch das nachfolgende Bild. Erstellen eines Fotoalbum mit "Picasa"-Webalben Wie es geht kannst Du hier in kleinen Schritten nachvollziehen. Rufe im Internet folgenden "LINK" auf: http://picasaweb.google.com Jetzt musst Du folgendes

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

YouTube: Video-Untertitel übersetzen

YouTube: Video-Untertitel übersetzen Der Easytrans24.com-Ratgeber YouTube: Video-Untertitel übersetzen Wie Sie mit Hilfe von Easytrans24.com in wenigen Schritten Untertitel für Ihre YouTube- Videos in mehrere Sprachen übersetzen lassen können.

Mehr

Software Engineering Interaktionsdiagramme

Software Engineering Interaktionsdiagramme Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11 Kurzanleitung MEYTON Aufbau einer Internetverbindung 1 Von 11 Inhaltsverzeichnis Installation eines Internetzugangs...3 Ist mein Router bereits im MEYTON Netzwerk?...3 Start des YAST Programms...4 Auswahl

Mehr

Word austricksen FORTSETZUNG. Serienbriefe Für Word XP. Word austricksen Fortsetzung: Serienbriefe. Roland Egli Educational Solutions

Word austricksen FORTSETZUNG. Serienbriefe Für Word XP. Word austricksen Fortsetzung: Serienbriefe. Roland Egli Educational Solutions Word austricksen FORTSETZUNG Serienbriefe Für Word XP Roland Egli Educational Solutions Educational Solutions Roland Egli edusol@hispeed.ch Seite 1 Grundlegendes Um Serienbriefe versenden zu können, müssen

Mehr

Einrichtung eines E-Mail-Zugangs mit Mozilla Thunderbird

Einrichtung eines E-Mail-Zugangs mit Mozilla Thunderbird Einrichtung eines E-Mail-Zugangs mit Mozilla Thunderbird Inhaltsverzeichnis 1. Vollständige Neueinrichtung eines E-Mail-Kontos 2. Ändern des Servers zum Versenden von E-Mails (Postausgangsserver) 3. Ändern

Mehr

Tevalo Handbuch v 1.1 vom 10.11.2011

Tevalo Handbuch v 1.1 vom 10.11.2011 Tevalo Handbuch v 1.1 vom 10.11.2011 Inhalt Registrierung... 3 Kennwort vergessen... 3 Startseite nach dem Login... 4 Umfrage erstellen... 4 Fragebogen Vorschau... 7 Umfrage fertigstellen... 7 Öffentliche

Mehr

Gruppenrichtlinien und Softwareverteilung

Gruppenrichtlinien und Softwareverteilung Gruppenrichtlinien und Softwareverteilung Ergänzungen zur Musterlösung Bitte lesen Sie zuerst die gesamte Anleitung durch! Vorbemerkung: Die Begriffe OU (Organizational Unit) und Raum werden in der folgenden

Mehr

Kapitel 3 Frames Seite 1

Kapitel 3 Frames Seite 1 Kapitel 3 Frames Seite 1 3 Frames 3.1 Allgemeines Mit Frames teilt man eine HTML-Seite in mehrere Bereiche ein. Eine Seite, die mit Frames aufgeteilt ist, besteht aus mehreren Einzelseiten, die sich den

Mehr

Anmeldung bei einem registrierten Konto (Account)

Anmeldung bei einem registrierten Konto (Account) Anmeldung bei einem registrierten Konto (Account) Aufrufen des Anmeldefensters Geben sie in die Adresszeile ihres Internet-Browsers die Adresse (http://www.quid4bid.com) ein. Sie können entweder auf die

Mehr

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. In diesem Artikel werden wir Ihnen zeigen, wie Sie eine Datenbank verschlüsseln können, um den Zugriff einzuschränken, aber trotzdem noch eine

Mehr

Bedienungsanleitung. Stand: 26.05.2011. Copyright 2011 by GEVITAS GmbH www.gevitas.de

Bedienungsanleitung. Stand: 26.05.2011. Copyright 2011 by GEVITAS GmbH www.gevitas.de GEVITAS-Sync Bedienungsanleitung Stand: 26.05.2011 Copyright 2011 by GEVITAS GmbH www.gevitas.de Inhalt 1. Einleitung... 3 1.1. Installation... 3 1.2. Zugriffsrechte... 3 1.3. Starten... 4 1.4. Die Menü-Leiste...

Mehr

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH MORE Profile Pass- und Lizenzverwaltungssystem erstellt von: Thorsten Schumann erreichbar unter: thorsten.schumann@more-projects.de Stand: MORE Projects GmbH Einführung Die in More Profile integrierte

Mehr

Comic Life 2.x. Fortbildung zum Mediencurriculum

Comic Life 2.x. Fortbildung zum Mediencurriculum Comic Life 2.x Fortbildung zum Mediencurriculum - 1 - Comic Life Eine kurze Einführung in die Bedienung von Comic Life 2.x. - 2 - Starten von Comic Life Bitte starte das Programm Comic Life. Es befindet

Mehr

Artikel Schnittstelle über CSV

Artikel Schnittstelle über CSV Artikel Schnittstelle über CSV Sie können Artikeldaten aus Ihrem EDV System in das NCFOX importieren, dies geschieht durch eine CSV Schnittstelle. Dies hat mehrere Vorteile: Zeitersparnis, die Karteikarte

Mehr

Anwendungspraktikum aus JAVA Programmierung im SS 2006 Leitung: Albert Weichselbraun. Java Projekt. Schiffe Versenken mit GUI

Anwendungspraktikum aus JAVA Programmierung im SS 2006 Leitung: Albert Weichselbraun. Java Projekt. Schiffe Versenken mit GUI Anwendungspraktikum aus JAVA Programmierung im SS 2006 Leitung: Albert Weichselbraun Java Projekt Schiffe Versenken mit GUI 1. Über den Autor: Name: Marija Matejic Matrikelnummer: 9352571 E-mail: marijamatejic@yahoo.com

Mehr

Updatehinweise für die Version forma 5.5.5

Updatehinweise für die Version forma 5.5.5 Updatehinweise für die Version forma 5.5.5 Seit der Version forma 5.5.0 aus 2012 gibt es nur noch eine Office-Version und keine StandAlone-Version mehr. Wenn Sie noch mit der alten Version forma 5.0.x

Mehr

Das Leitbild vom Verein WIR

Das Leitbild vom Verein WIR Das Leitbild vom Verein WIR Dieses Zeichen ist ein Gütesiegel. Texte mit diesem Gütesiegel sind leicht verständlich. Leicht Lesen gibt es in drei Stufen. B1: leicht verständlich A2: noch leichter verständlich

Mehr

Nicht über uns ohne uns

Nicht über uns ohne uns Nicht über uns ohne uns Das bedeutet: Es soll nichts über Menschen mit Behinderung entschieden werden, wenn sie nicht mit dabei sind. Dieser Text ist in leicht verständlicher Sprache geschrieben. Die Parteien

Mehr