Software Engineering. 4. Unit Testing und Refactoring. Franz-Josef Elmer, Universität Basel, HS 2007

Größe: px
Ab Seite anzeigen:

Download "Software Engineering. 4. Unit Testing und Refactoring. Franz-Josef Elmer, Universität Basel, HS 2007"

Transkript

1 Software Engineering 4. Unit Testing und Refactoring Franz-Josef Elmer, Universität Basel, HS 2007

2 Software Engineering: 4. Unit Testing und Refactoring 2 Unit Testing Unit Test: Automatischer Test welcher eine Einheit (z.b. Modul, Klasse, Komponente etc.) testet. Unit Testing: Erstellen, Verwalten und Ausführen aller Unit Tests. Unit Tests werden gleichzeitig mit dem produktiven Code geschrieben. Motto: Code a little, test a little. Produktiver Code Test Code Gebrochene Unit Tests werden sofort geflickt. Unit Testing ist das Fundament aller agilen Softwareentwicklungsmethodologien. Zeit

3 Software Engineering: 4. Unit Testing und Refactoring 3 JUnit: Unit Testing Framework für Java Ein Test ist eine Methode einer Testklasse (Subklasse von TestCase) mit einer der beiden folgenden Signaturen: public void testxxx() public void testxxx() throws YYY Dabei ist XXX beliebig und YYY ist eine beliebige Subklasse von Throwable. Ein Test Runner führt alle Testmethoden der Test Klasse aus (Reihenfolge ist unbestimmt). Ein Test ist erfolgreich wenn die Testmethode kein Throwable wirft. Die Methode fail wirft ein AssertionFailedError. Alle Methoden von TestCase, die mit assert beginnen, prüfen einen erwarteten Wert mit dem aktuellen Wert und werfen ein AssertionFailedError.

4 Software Engineering: 4. Unit Testing und Refactoring 4 Beispiel TemperaturConverterTest /** * Temperature converter between Fahrenheit and Celcius. * Conversion is based on the formula * <pre>fahrenheit = 9 * Celcius / </pre> */ public class TemperatureConverter { /** Converts the specified temperature from Celsius to Fahrenheit. */ public double converttofahrenheit(double temperature){ return 1.8 * temperature + 32; /** Converts the specified temperature from Fahrenheit to Celsius. */ public double converttocelcius(double temperature) { return (temperature 32) / 1.8;

5 Software Engineering: 4. Unit Testing und Refactoring 5 TemperatureConverterTest import junit.framework.testcase; public class TemperatureConverterTest extends TestCase { private static final double TOL = 1e 6; public void testconverttofahrenheit() { TemperatureConverter converter = new TemperatureConverter(); assertequals(32, converter.converttofahrenheit(0), TOL); assertequals(86, converter.converttofahrenheit(30), TOL); public void testconverttocelcius() { TemperatureConverter converter = new TemperatureConverter(); assertequals(0, converter.converttocelcius(32), TOL); assertequals(30, converter.converttocelcius(86), TOL); public static void main(string[] args) { junit.textui.testrunner.run(temperatureconvertertest.class);

6 Software Engineering: 4. Unit Testing und Refactoring 6 Test Setup und Tear Down TestCase hat zwei überschreibbare Methoden, die vor bzw. nach jedem Test aufgerufen werden: protected void setup() throws Exception protected void teardown() throws Exception TestRunner «create» YYYTest setname( testxxx ) runbare() setup() testxxx() teardown()

7 Software Engineering: 4. Unit Testing und Refactoring 7 Erwartete Exceptions testen Es sollten auch Tests geschrieben werden, die das korrekte Verhalten auf Verletzung der Vorbedingungen überprüfen. Test Code: Typisch: Verletzung der Vorbedingungen Exception Verletzung in try catch Klammer provizieren. Vor dem catch Statement wird fail() Methode aufgerufen. Im catch Teil kann die Exception weiter untersucht werden. Beispiel: public void testparseinvalidinteger() { try { Integer.parseInt("blabla"); fail("numberformatexception expected"); catch (NumberFormatException e) { asserttrue(e.getmessage().indexof("blabla") >= 0);

8 Software Engineering: 4. Unit Testing und Refactoring 8 Beispiel StackTest import java.util.*; public class Stack<E> { private final List<E> _stack = new ArrayList<E>(); /** Pushs the specified element onto the stack. element Any object of type E. <code>null</code> is allowed. */ public void push(e element) { _stack.add(element); /** Returns <code>true</code> if the stack is empty. */ public boolean isempty() { return _stack.isempty(); /** Removes and returns the element on the top of the stack. IllegalStateException if the stack is empty. */ public E pop() { if (isempty()) { throw new IllegalStateException("Can not pop from an empty stack."); return _stack.remove(_stack.size() 1);

9 Software Engineering: 4. Unit Testing und Refactoring 9 StackTest import junit.framework.testcase; public class StackTest extends TestCase { public void testisempty() { Stack<String> stack = new Stack<String>(); asserttrue(stack.isempty()); stack.push("hello"); assertfalse(stack.isempty()); stack.pop(); asserttrue(stack.isempty()); public void testpushpop() { Stack<String> stack = new Stack<String>(); stack.push("hello"); stack.push(null); stack.push("world"); assertequals("world", stack.pop()); assertnull(stack.pop()); assertequals("hello", stack.pop()); public void testpopfromemptystack() { Stack<String> stack = new Stack<String>(); try { stack.pop(); fail("illegalstateexception expected"); catch (IllegalStateException e) {

10 Software Engineering: 4. Unit Testing und Refactoring 10 Test Suite Test Cases werden in Test Suiten zusammengefasst. TestSuite ist Subklasse von TestCase hierarchische Organisation aller Tests. Beispiel: import junit.framework.*; public class AllTests { public static Test suite() { TestSuite suite = new TestSuite("Test for junitexample"); suite.addtestsuite(temperatureconvertertest.class); suite.addtestsuite(stacktest.class); return suite; public static void main(string[] args) { junit.textui.testrunner.run(alltests.suite());

11 Software Engineering: 4. Unit Testing und Refactoring 11 JUnit Konventionen Der Name einer Testklasse beginnt mit dem Name der zu testenden Klasse und endet mit Test. Beispiel: Klasse: Stack, Testklasse: StackTest Die Testklasse ist im selben Paket wie die zutestende Klasse: Vorteil: Testklasse hat Zugriff auf package-protected Attribute und Methoden. Alle Klassen mit den Test Suiten heissen AllTests. Enhält Testklasse des selben Pakets und Test Suiten der Unterpakete. Beispiel: public static Test suite() { TestSuite suite= new TestSuite(); suite.addtestsuite(jcckit.svgplottertest.class); suite.addtest(jcckit.transformation.alltests.suite()); suite.addtest(jcckit.util.alltests.suite()); return suite;

12 Software Engineering: 4. Unit Testing und Refactoring 12 Vorurteile Tests schreiben ist minderwertiges Programmieren, dass kann man ruhig den Testern oder Junior- Programmieren überlassen. Unit Tests schreiben ist mindestens so anspruchsvoll wie produktiven Code schreiben. Alle Designprinzipien sollten auch beim Schreiben von Testcode einfliessen. Tests schreiben ist eine langweilige und stupide Tätigkeit. Unit Tests programmieren ist genau so kreative und macht genauso viel Spass wie produktiven Code schreiben. Unit Tests sind Zeitverschwendung. Unit Tests sind ein Sicherheitsnetz unter dem Trapezakt Softwareentwicklung. Unit Tests verbessern das Design des produktiven Codes.

13 Software Engineering: 4. Unit Testing und Refactoring 13 Die Kunst des Unit Testing Unit Testing hat Einfluss auf das Design. Der zu testende Code muss testbar sein, d.h. es ist möglich automatische Tests zu schreiben. Wenn ein Bug gefunden wurde: 1.Finde die Ursache. 2.Schreibe einen Unit Test, der wegen des Bugs scheitert. 3.Fixe den Bug bis der Unit Test nicht mehr fehlschlägt. Unit Tests sind Test Cases und sollten deshalb so leicht lesbar sein wie manuelle Test Cases. Keine Verzweigungen in der Test Methode. Klare Trennung von Testdaten und Testcode. Komplexere Überprüfungen in eigene assert Methoden auslagern. Beispiel: CommandLineTest

14 Software Engineering: 4. Unit Testing und Refactoring 14 Beispiel CommandLineTest import java.util.*; public class CommandLine { private final Set<String> _options; private final List<String> _arguments; public CommandLine(String[] args) { Set<String> options = new HashSet<String>(); List<String> arguments = new ArrayList<String>(); for (String arg : args) { if (arg.startswith(" ")) { options.add(arg.substring(1)); else { arguments.add(arg); _options = Collections.unmodifiableSet(options); _arguments = Collections.unmodifiableList(arguments); public List<String> getarguments() { return _arguments; public Set<String> getoptions() { return _options;

15 Software Engineering: 4. Unit Testing und Refactoring 15 CommandLineTest public class CommandLineTest extends TestCase { public void testwithoutoptions() { checknooptions(new String[] {"hello"); checknooptions(new String[] {"hello", "world"); public void testwithoptions() { check(new String[] {"b", "c", new String[] {"hi", new String[] {" b", "hi", " c"); private void checknooptions(string[] args) { check(new String[0], args, args); private void check(string[] expectedoptions, String[] expectedarguments, String[] args) { CommandLine commandline = new CommandLine(args); assertequals(expectedoptions, commandline.getoptions().toarray()); assertequals(expectedarguments, commandline.getarguments().toarray()); private void assertequals(object[] array1, Object[] array2) { for (int i = 0, n = Math.min(array1.length, array2.length); i < n; i++) { assertequals("array[" + i + "]", array1[i], array2[i]); assertequals(array1.length, array2.length);

16 Software Engineering: 4. Unit Testing und Refactoring 16 Die Kunst des Unit Testing Unit Tests müssen reproduzierbar sein. Dazu braucht es eine wohldefinierte Testumgebung (Testfixture). Ein Unit Test sollte den Zustand seiner Umgebung vor dem Test wieder herstellen. Vermeidet Seiteneffekte. Tests sind reproduzierbar unabhängig der Reihenfolge ihrer Ausführung. Problem: Statische Attribute von Klassen, die ihren Zustand ändern.

17 Software Engineering: 4. Unit Testing und Refactoring 17 Der Sinn von setup() und teardown() Wiederverwendung von Code, den jede Testmethode vor bzw. nach dem eigentlichen Test ausführen muss. Bereitstellung bzw. Freigabe von externen Resourcen. Z.B.: Temporäre Dateien, Datenbankverbindungen. Erzeugung bzw. Entfernung von Testfixtures. Z.B.: setup() spielt Testdaten in eine Datenbank ein und teardown() löscht diese wieder. Beispiel: LineCounterTest

18 Software Engineering: 4. Unit Testing und Refactoring 18 Beispiel LineCounterTest Die Klasse LineCounter zählt die Zeilen einer Textdatei: import java.io.*; public class LineCounter { public int countnumberoflines(file file) throws IOException { FileReader reader = null; try { reader = new FileReader(file); BufferedReader bufferedreader = new BufferedReader(reader); int count = 0; while (bufferedreader.readline()!= null) { count++; return count; finally { if (reader!= null) { reader.close();

19 Software Engineering: 4. Unit Testing und Refactoring 19 LineCounterTest Die Testklasse muss eine Beispieldatei erzeugen und wieder wegräumen: public class LineCounterTest extends TestCase { private static final String TEMP_FILE = "temp.txt"; protected void setup() throws Exception { super.setup(); FileWriter writer = null; try { writer = new FileWriter(TEMP_FILE); writer.write("hello\nworld"); finally { writer.close(); protected void teardown() throws Exception { super.teardown(); new File(TEMP_FILE).delete(); public void test() throws IOException { assertequals(2, new LineCounter().countNumberOfLines(new File(TEMP_FILE)));

20 Software Engineering: 4. Unit Testing und Refactoring 20 Refactoring Definition: Verbesserung des Codes ohne Änderung des Verhaltens. Allgemeine Erfahrung: Code Qualität Code Qualität Zahl der Features Zeit Zahl der Features Refactoring Phasen Zeit

21 Software Engineering: 4. Unit Testing und Refactoring 21 Refactoring Refactoring ist riskant, deshalb Risiko mindern durch gute Unit Test Abdeckung Immer in kleinen Schritten: Ein Refactoring Schritt Testen Nächster Refactoring Schritt Testen usw. Häufiger Wechsel zwischen Implementation eines neuen Features und Refactoring Neue Features Refactoring Zeit

22 Software Engineering: 4. Unit Testing und Refactoring 22 Ziele des Refactoring Lesbarkeit des Codes erhöhen. Refactoring kann parallel zu einem Code Review erfolgen. Design verbessern (sogenannte Bad Smells beseitigen). Code so umbauen, dass es möglich ist, Unit Tests zu schreiben. Code so vorbereiten, dass neue Features implementiert werden können.

23 Software Engineering: 4. Unit Testing und Refactoring 23 Reengineering Bestehende (Alt)Software (engl. legacy software) fit machen für Erweiterungen neue Umgebung Performance Optimierungen etc. Zwei Strategien: Viele kleine Schritte: Refactoring im Grossen. Zwei grosse Schritte: 1.Reverse Engineering: Von der Implementierung zurück zur Abstraktion und dem Design 2.Forward Engineering: Redesign und neue Implementierung

24 Software Engineering: 4. Unit Testing und Refactoring 24 Bad Smell Bad Smells sind Stellen im Code die stinken, d.h. es gibt Probleme wegen Verstoss gegen Design Prinzipien schlecht lesbarem Code. Die wichtigsten Bad Smells: Duplizierter Code Hoher Wartungsaufwand da Änderungen überall nachgeführt werden müssen. Lange Methode Schwierig zu verstehen Schlechte Wiederverwendbarkeit Ursache von Code Duplikationen Grosse Klasse Oft schlechte Wiederverwendbarkeit da die Klasse viele verschiedene Dinge machte Ursache von Code Duplikationen Lange Parameter Liste Schwierig zu lesen Switch Statements bzw. if-else-if Ketten Möglicherweise unflexibel für Erweiterungen Gleichartige Switch Statements: Code Duplikationen

25 Software Engineering: 4. Unit Testing und Refactoring 25 Refactoring Katalog Katalog der verschiedenen möglichen Refactorings. Wichtigster Katalog für objekt-orientiertes Refactoring: Format: Martin Fowler et al.: Refactoring Improving the Design of Existing Code. Addison-Wesley (2000) Name Zusammenfassung: Kurze Problembeschreibung Kurze Lösungsbeschreibung Einfaches Vorher-Nachher Beispiel Motivation: Beschreibung warum und warum nicht. Mechanik: Schritt-für-Schritt Anleitung. Beispiele: Grössere(s) Beispiel(e).

26 Software Engineering: 4. Unit Testing und Refactoring 26 Methode extrahieren (Extract Method) Ein Codefragment kann zusammengefasst werden. Setze das Fragment in eine Methode, deren Name den Zweck bezeichnet. void printowing(double amount) { printbanner(); //print details System.out.println ("name: " + _name); System.out.println ("amount " + amount); void printowing(double amount) { printbanner(); printdetails(amount); void printdetails(double amount) { System.out.println ("name: " + _name); System.out.println ("amount " + amount);

27 Software Engineering: 4. Unit Testing und Refactoring 27 Methode extrahieren (Extract Method) Motivation: Verbesserung der Lesbarkeit. Indiz: Kommentarzeile vor dem Fragment das extrahiert werden kann. Codeduplikation: Verschiedene Codefragmente tun (fast) dasselbe. Name der neuen Methode sollte selbstsprechend sein. Nicht möglich wenn mehr als eine lokale Variable im Fragment geändert wird aber danach noch benötigt wird. Mechanik: 1.Neue Methode erzeugen. 2.Zu extrahierendes Codefragment dort hin kopieren. 3.All lokalen Variablen, die gelesen werden, werden Methodenparameter. 4.Die lokale Variable, die geändert wird, wird der Rückgabewert. 5.Compiler laufen lassen und Fehler beheben. 6.Zu extrahierenden Code entfernen und durch Aufruf der neuen Methode ersetzen. 7.Compiler laufen lassen und Fehler beheben. 8.Unit Test der Klasse (besser alle Unit Tests) ausführen.

28 Software Engineering: 4. Unit Testing und Refactoring 28 Methode extrahieren (Extract Method) Beispiel: void handlearguments(string[] args) { try { _width = Integer.parseInt(args[0]); catch (Exception e) { _width = DEFAULT_WIDTH; try { _height = Integer.parseInt(args[1]); catch (Exception e) { _height = DEFAULT_HEIGHT; Refactored: void handlearguments(string[] args) { _width = getintegerargument(args, 0, DEFAULT_WIDTH); _height = getintegerargument(args, 1, DEFAULT_HEIGHT); int getintegerargument(string[] args, int index, int defaultvalue) { try { return Integer.parseInt(args[index]); catch (Exception e) { return defaultvalue;

29 Software Engineering: 4. Unit Testing und Refactoring 29 Beschreibende Variable einführen (Introduce Explaining Variable) Es gibt einen komplizierten Ausdruck. Setze den Ausdruck (oder Teile) in eine lokale Variable deren Name den Zweck erklärt. if ( (platform.touppercase().indexof("mac") > 1) && (browser.touppercase().indexof("ie") > 1) && wasinitialized() && resize > 0 ) { // do something final boolean ismacos = platform.touppercase().indexof("mac") > 1; final boolean isiebrowser = browser.touppercase().indexof("ie") > 1; final boolean wasresized = resize > 0; if (ismacos && isiebrowser && wasinitialized() && wasresized) { // do something

30 Software Engineering: 4. Unit Testing und Refactoring 30 Methode umbenennen (Rename Method) Der Name einer Methode macht ihre Absicht nicht deutlich. Ändere den Name der Methode. Customer +getinvcdlimit() Customer +getinvoicablecreditlimit()

31 Software Engineering: 4. Unit Testing und Refactoring 31 Methode hochziehen (Pull Up Method) Es gibt Methoden mit identischen Ergebnissen in den Unterklassen. Verschiebe die Methoden in die Oberklasse. Superclass Superclass +method() SubclassA +method() SubclassB +method() SubclassA SubclassB

32 Software Engineering: 4. Unit Testing und Refactoring 32 Template Method einsetzen (Form Template Method) Zwei Methoden in Unterklassen führen ähnliche aber im Detail verschiedene Schritte in derselben Reihenfolge aus. Extrahiere die Schritte in Methoden gleicher Signatur, so dass die ursprünglichen Methoden identisch werden. Verschiebe diese dann in die Oberklasse.

33 Software Engineering: 4. Unit Testing und Refactoring 33 Form Template Method Site ResidentialSite getbillableamount():double LifelineSite getbillableamount():double double base = _units * _rate; double tax = base * Site.TAX_RATE; return base + tax; double base = _units * _rate * 0.5; double tax = base * Site.TAX_RATE * 0.2; return base + tax; Site getbillableamount():double getbaseamount():double gettaxamount():double return getbaseamount() + gettaxamount(); ResidentialSite getbaseamount():double gettaxamount():double LifelineSite getbaseamount():double gettaxamount():double

34 Software Engineering: 4. Unit Testing und Refactoring 34 Parameterobjekt einführen (Introduce Parameter Object) Ein Gruppe von Parametern die zusammengehören. Ersetze diese Parameter durch ein Objekt. Customer +amountinvoicedin(start:date, end:date) +amountreceivedin(start:date, end:date) +amountoverduein(start:date, end:date) Customer +amountinvoicedin(range:daterange) +amountreceivedin(range:daterange) +amountoverduein(range:daterange)

35 Software Engineering: 4. Unit Testing und Refactoring 35 Refactoring in IDEs Viele integerierte Entwicklungsumgebungen (IDEs) unterstützen automatisches Refactoring. Vorteile: Einfach und schnell Zuverlässig High-level source code editing Nachteile: Unzuverlässig Unerwartete Seiteneffekte

36 Software Engineering: 4. Unit Testing und Refactoring 36 Links JUnit Home Page: Refactoring Home Page Joel Spolsky: Rub a dub dub (2002) Eine Geschichte von erfolgreichem Refactoring (nicht in Java) David Gallardo: Refactoring for everyone - How and why to use Eclipse's automated refactoring features (2003)

Software Engineering. 3. JUnit und ANT. Franz-Josef Elmer, Universität Basel, HS 2012

Software Engineering. 3. JUnit und ANT. Franz-Josef Elmer, Universität Basel, HS 2012 Software Engineering 3. JUnit und ANT Franz-Josef Elmer, Universität Basel, HS 2012 Software Engineering: 3. JUnit und ANT 2 Unit Testing Unit Test: Automatischer Test welcher eine Einheit (z.b. Modul,

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

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Testing

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Testing Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005 Testing Assoziationen / Datentransferobjekte (DTO) Testing Refactoring GUIs Tk toolkit

Mehr

Test-Driven Design: Ein einfaches Beispiel

Test-Driven Design: Ein einfaches Beispiel Test-Driven Design: Ein einfaches Beispiel Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 2 Ziele Veranschaulichung der Technik des Test-Driven Design am Beispiel eines Programms

Mehr

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept Testkonzept 1.Einführung Um die Zuverläsigkeit und die Qualität der Software und des gesamten Systems zu verbessern, sind Tests durchzuführen. Die Testreihe läst sich in drei Stufen einteilen, nülich Komponententest,

Mehr

Das Test-Framework JUnit ETIS SS04

Das Test-Framework JUnit ETIS SS04 Das Test-Framework JUnit ETIS SS04 Gliederung Motivation TestFirst Grundlagen Assert TestCase Lebenszyklus TestCase UML-Diagramm TestCase TestSuite Zusammenfassung 2 Motivation (I) Kostspielige Folgen

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

am Beispiel von JUnit

am Beispiel von JUnit Aufbau eines Testwerkzeugs am Beispiel von JUnit Üblicher Ansatz für Tests und Fehlersuche: Print-Befehle, Debugger-Ausdrücke, Test-Skripte möglichst über globale Variable debug steuerbar Command Pattern

Mehr

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Fortgeschrittenes Programmieren mit Java. Test Driven Development Fortgeschrittenes Programmieren mit Java Test Driven Development Test getriebene Programmierung Benedikt Boeck Hochschule für Angewandte Wissenschaften Hamburg 6. November 2009 B. Boeck (HAW Hamburg) Test

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

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

Programmiertechnik II

Programmiertechnik II Modultests Ziele Überprüfung der Korrektheit eines Moduls Korrektheit: Übereinstimmung mit (informaler) Spezifikation Modul: kleine testbare Einheit (Funktion, Klasse) Engl.: unit test White box testing

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

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

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Testen von graphischen Benutzeroberflächen. 26. Juni 2013 Testen von graphischen Benutzeroberflächen 26. Juni 2013 Überblick Testarten Methoden-, Klassen-, Komponenten-, Systemtests Motivation für automatisches Testen von graphischen Benutzeroberflächen Entwicklungsprinzipien

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

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

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

Software-Engineering Software-Management

Software-Engineering Software-Management Software-Engineering Software-Management 12.3 Unit-Tests mit JUnit - Wissen, was der Sourcecode macht! Lösung Prof. Dr. Rolf Dornberger Software-Engineering: 12.3 Unit-Tests mit JUnit 30.04.2006 1 12.3

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

JUnit - Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1

JUnit - Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1 JUnit - Test Driven Development Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1 Gliederung 1.Einleitung 1.1 Geschichte 1.2 Was sind Unit-Tests? 1.3 Failures/Errors 1.4 Ziele und Nutzen

Mehr

Testen von graphischen Benutzeroberflächen. 24. Juni 2015

Testen von graphischen Benutzeroberflächen. 24. Juni 2015 Testen von graphischen Benutzeroberflächen 24. Juni 2015 Überblick Motivation für das automatische Testen von graphischen Benutzeroberflächen Entwicklungsprinzipien für GUIs Capture / Replay Testmethode

Mehr

Software Engineering. 9. Refactoring und Entwurfsmuster. Franz-Josef Elmer, Universität Basel, HS 2011

Software Engineering. 9. Refactoring und Entwurfsmuster. Franz-Josef Elmer, Universität Basel, HS 2011 Software Engineering 9. Refactoring und Entwurfsmuster Franz-Josef Elmer, Universität Basel, HS 2011 Software Engineering: 9. Refactoring und Entwurfsmuster 2 Refactoring Definition: Verbesserung des Codes

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

Unit Tests und Fehlersuche

Unit Tests und Fehlersuche Unit Tests und Fehlersuche SE 1 - Softwareentwicklungspraktikum Test Deadline! Sinnvolle Tests kompilierbar im CVS d.h. Schnittstellen zu Strategiemethoden etc. schon erstellen Kommentieren! Besser ein

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

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

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

Mehr

Beispiel: DB-Mock (1/7)

Beispiel: DB-Mock (1/7) Beispiel: DB-Mock (1/7) Aufgabe: DB, auf die vereinfachend nur lesend zugeriffen wird mocken warum: benötigte keine DB-Lizenz, garantiert gleiche Werte ohne aufwändiges reset, kein Zeitverlust durch Verbindungsaufbau

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

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf 16 Exceptions Zur Behandlung unerwarteter Situationen bietet Java Unterstützung in Form von Exceptions oder Ausnahmen. Den Sinn von Exceptions können wir Ihnen an einem kleinen Beispiel klarmachen. Nehmen

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

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

Java Einführung Collections

Java Einführung Collections Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...

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

Testen mit JUnit. Apcon Workplace Solutions Member of itelligence. Testen von Java-Code mit JUnit. ÿstruktur eines Testfalls

Testen mit JUnit. Apcon Workplace Solutions Member of itelligence. Testen von Java-Code mit JUnit. ÿstruktur eines Testfalls Testen von Java-Code mit JUnit ÿmotivation ÿjunit-testklassen ÿjunit-testfälle ÿstruktur eines Testfalls Henning Wolf APCON Workplace Solutions GmbH wolf@jwam.de Motivation: Werkzeugunterstützung für Tests

Mehr

Software - Testung ETIS SS05

Software - Testung ETIS SS05 Software - Testung ETIS SS05 Gliederung Motivation Was ist gute Software? Vorurteile gegenüber Testen Testen (Guidelines + Prinzipien) Testarten Unit Tests Automatisierte Tests Anforderungen an Testframeworks

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Pragmatik von Programmiersprachen

Pragmatik von Programmiersprachen Pragmatik von Programmiersprachen Im Kontext der Notation von Quelltexten Mike Becker, 11. Dezember 2014 Szenario: IT Dienstleister Unternehmen: Produkte: Kunden: IT Dienstleistung Beratung und Software

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Dateien lesen und schreiben 2 Übersicht der heutigen Inhalte File Streams try-with-resources Properties csv-dateien 3 Klasse File Die Klasse java.io.file bietet Unterstützung im Umgang

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

TDD für iphone OS. xpdays 2009. Tammo Freese

TDD für iphone OS. xpdays 2009. Tammo Freese TDD für iphone OS xpdays 2009 Tammo Freese Inhalt Unit Testing für iphone OS Mockobjekte für iphone OS TDD für iphone OS? Unit Testing auf dem iphone Vor iphone OS 3.0: kaum dokumentiert nur auf dem Entwicklungsrechner

Mehr

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions try-catch Schlüsselworte try-catch e Schlüsselwort Schlüsselwort selbst erstellte ermöglichen die Behandlung von Fehlern, die zur Laufzeit entstehen. try-catch in C: Fehler führt immer zum Abbruch des

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

Nathan Burgener. Design by Contract. Modul SWE

Nathan Burgener. Design by Contract. Modul SWE NathanBurgener DesignbyContract ModulSWE NathanBurgener Inhaltsverzeichnis 1 WasistDesignbyContract...3 1.1 Überblick...3 1.2 DesignbyContractmitMethoden...4 1.3 DesignbyContractmitKlassen...5 1.4 Vererbung...6

Mehr

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur

Mehr

Assoziation und Aggregation

Assoziation und Aggregation Assoziation und Aggregation Martin Wirsing in Zusammenarbeit mit Matthias Hölzl, Nora Koch 05/03 2 Ziele Verstehen der Begriffe Assoziation und Aggregation Implementierung von Assoziationen in Java schreiben

Mehr

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Lösungsvorschläge. zu den Aufgaben im Kapitel 4 Lösungsvorschläge zu den Aufgaben im Kapitel 4 Aufgabe 4.1: Der KNP-Algorithmus kann verbessert werden, wenn in der Funktion nexttabelle die Zuweisung next[tabindex] = ruecksprung; auf die etwas differenziertere

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

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

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

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 Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E

Mehr

Allgemein: Klassen testbar machen. 5. Mocking. Mocks programmieren. Zusammenspiel von Klassen testen

Allgemein: Klassen testbar machen. 5. Mocking. Mocks programmieren. Zusammenspiel von Klassen testen 5. Mocking Allgemein: Klassen testbar machen Wie werden Klassen testbar Entwicklung von Mocks mit der Hand Einführung in JMock Spezifikation von Mocks mit JMock Wann ist Mocking-Werkzeug sinnvoll Literatur:

Mehr

188.154 Einführung in die Programmierung für Wirtschaftsinformatik

188.154 Einführung in die Programmierung für Wirtschaftsinformatik Beispiel 1 Vererbung (Liste) Gegeben sind die beiden Klassen ListNode und PersonNode. 188.154 Einführung in die Programmierung für Wirtschaftsinformatik Wiederholung, Prüfungsvorbereitung Monika Lanzenberger

Mehr

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Markus Wichmann. Testen von Java Code mit. JUnit

Markus Wichmann. Testen von Java Code mit. JUnit Markus Wichmann Testen von Java Code mit JUnit Demotivation... Am Anfang war der Zeitdruck... Hilfe, ich habe doch keine Zeit zum Testen! Ich schreibe einfach keine Tests, dadurch werde ich schneller fertig

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

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

Typumwandlungen bei Referenztypen

Typumwandlungen bei Referenztypen Typumwandlungen bei Referenztypen Genau wie es bei einfachen Typen Typumwandlungen gibt, gibt es auch bei Referenztypen Umwandlungen von einem Referenztypen in einen anderen Referenztypen, die wie bei

Mehr

Praktische Übung 'JUnit-Test'

Praktische Übung 'JUnit-Test' Praktische Übung 'JUnit-Test' Starten Sie für die folgende Übung Eclipse und laden Sie das Testprojekt von folgender URL: http://pi.informatik.uni-siegen.de/berlik/swt/currency.zip Darin ist die Klasse

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

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7 Java Einführung Umsetzung von Beziehungen zwischen Klassen Kapitel 7 Inhalt Wiederholung: Klassendiagramm in UML Java-Umsetzung von Generalisierung Komposition Assoziationen 2 Das Klassendiagramm Zweck

Mehr

Einführung in die Programmierung Blockkurs Java

Einführung in die Programmierung Blockkurs Java Michael Bader 8. 12. April 2002 Freitag Inhaltsübersicht Exceptions und Errors Ausnahmebehandlung: try/catch/finally Threads Zugriffskontrolle bei gemeinsamen Variablen: synchronized, wait(), notify()

Mehr

Testphase. Das Testen

Testphase. Das Testen Testphase VIS Projekt Freie Universität Berlin N.Ardet - 17.4.2001 Das Testen Testen ist das Ausführen eines Software- (Teil)systems in einer definierten Umgebung und das Vergleichen der erzielten mit

Mehr

Unit Tests mit Junit 4. Dario Borchers

Unit Tests mit Junit 4. Dario Borchers Unit Tests mit Junit 4 Dario Borchers Agenda Warum testgetriebene Entwicklung von Software? - Motivation Was ist testgetriebene Entwicklung? - Prozess der testgetriebenen Entwicklung - Arten von Tests

Mehr

Java Einführung Abstrakte Klassen und Interfaces

Java Einführung Abstrakte Klassen und Interfaces Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 5 Lösungsvorschlag Objektorientierte Programmierung 22. 05. 2006 Lösung 9 (SMS-Eingabe am

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java Bisherige Beobachtungen zu Objekten: werden in Klassen zusammengefasst besitzen Eigenschaften und Verhalten verbergen private Informationen werden geboren, leben und

Mehr

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12

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

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln Daten verstecken und kapseln Sichtbarkeitsmodifikatoren: public Klasse, Variable oder Methode überall sichtbar und damit auch überall benutztbar. private private-variable sind nur in den Methoden sichtbar,

Mehr

Unit Testing mit JUnit. Dr. Andreas Schroeder

Unit Testing mit JUnit. Dr. Andreas Schroeder Unit Testing mit JUnit Dr. Andreas Schroeder Überblick Was dieses Video behandelt Warum Testen? Was sind Unit Tests? Der Teufelskreis des Nicht-Testens JUnit Unit Test Vorteile Test-Inspiration Wann aufhören?

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

Software Engineering in der Praxis

Software Engineering in der Praxis Software Engineering in der Praxis Praktische Übungen Dirk Wischermann Marc Spisländer Lehrstuhl für Software Engineering Friedrich-Alexander-Universität Erlangen-Nürnberg 18. Dezember 2006 Inhalt Nachlese

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

Synchronisation in Java. Invisible Web

Synchronisation in Java. Invisible Web Synchronisation in Java Studienprojekt Invisible Web Tang Zhihong Synchronisation in Java Synchronisationsproblem Monitore Wait und notify PipedInputStream und PipedOutputStream Synchronisation von Collections

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 1 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 12.10.2015 Technische Universität Braunschweig, IPS Überblick Organisatorisches Arbeitsablauf Hello! 12.10.2015 Dr. Werner Struckmann / Stephan

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:

Mehr

Folge 18 - Vererbung

Folge 18 - Vererbung Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung Grundlagen der Programmierung Prof. H. Mössenböck 14. Schrittweise Verfeinerung Entwurfsmethode für Algorithmen Wie kommt man von der Aufgabenstellung zum Programm? Beispiel geg.: Text aus Wörtern ges.:

Mehr

Planung für Organisation und Technik

Planung für Organisation und Technik Planung für Organisation und Technik MOA-VV Algorithmen-Beschreibung Version 0.0.2 Inhaltsverzeichnis 1. Die Vollmachtsprüfung... 3 1.1 Eingangsdaten... 3 1.2 einfache Vollmacht und Online-Vollmacht...

Mehr

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering 5 Programmentwicklung und Debuggen mit IDE und CASE-Tools Übungen Prof. Dr. Rolf Dornberger OPTSWE_SWE: 5 Programmentwicklung

Mehr

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Aufgabenblatt Nr. 5 Generizität und TicTacToe Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung

Mehr

Info: Standard DO-178B. 5. Mocking. Zusammenspiel von Klassen testen. Allgemein: Klassen testbar machen

Info: Standard DO-178B. 5. Mocking. Zusammenspiel von Klassen testen. Allgemein: Klassen testbar machen Info: Standard DO-178B Zertifizierung Federal AviationAdministration (FAA), Software für Luftverkehrssysteme durch Standard DO-178B für requirement-based Tests and Code Coverage Analyse DO-178B-Levels

Mehr

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Abschnitt 12: Strukturierung von Java-Programmen: Packages Abschnitt 12: Strukturierung von Java-Programmen: Packages 12. Strukturierung von Java-Programmen: Packages 12.1 Strukturierung durch Packages 12.2 Zugriffsspezifikationen 12.3 Zusammenfassung 12 Strukturierung

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr