11. Refactoring Advanced Programming Techniques. Wintersemester 2009/2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Größe: px
Ab Seite anzeigen:

Download "11. Refactoring Advanced Programming Techniques. Wintersemester 2009/2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik"

Transkript

1 11. Refactoring Advanced Programming Techniques Wintersemester 2009/2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

2 Agenda Entwicklungsumgebung Programmierprinzipien Refactoring Literatur

3 Dienste und Werkzeuge für die Phase Programmierung UML- / CASE-Tools (Together, Rational XDE, Enterprise Architect, StarUML, ) Modelltransformation, Code-Generierung (ArcStyler, IQGen, AndroMDA, ) Modelling Transformation Synchronisation, Versionen, Konfigurationen, Releases (Subversion, RCS, Continuus, Endeavour, ) QA / Software Controlling Editor, Compiler, Debugger, Profiler, (Eclipse, NetBeans, IntelliJ, ) Virtual Machine (z.b. JRE,.NET, ), Application Server (z.b. JBoss, ), Datenbank (z.b. Oracle, ) Development Runtime Configuration Management Repository Metriken, Konformität zu Spezifikation, Programmierund Design-Richtlinien (Checkstyle, Findbugs, Sotograph, ) Fehler- und Change Request Management (Bugzilla, ) Testframework, GUI- / Last-Tests, Testüberdeckung, (JUnit, TestRunner, EMMA, ) Test Navigation zwischen Artefakten Issue Tracking Build Management Nightly Build and Test (Maven 2, Ant, ) Legende: Dienst Datenfluss 3 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. Kontrollfluss

4 Agenda Entwicklungsumgebung Programmierprinzipien Refactoring Literatur

5 Merkmale guter Programme Ein gutes Programm hat ein sauberes Layout, verwendet sinnvolle Namen, ist ausführlich kommentiert und verwendet Konstrukte der Sprache derart, dass maximale Robustheit und Lesbarkeit des Programms erreicht werden. Die Erstellung eines solchen Programms erfordert vom Programmierer Sorgfalt, Disziplin und ein gutes Stück handwerklichen Stolz. Ian Sommerville, Software Engineering, Addison-Wesley Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

6 Programmiernahe Design Prinzipien (1/2) Separation of Concerns DRY: Don t Repeat Yourself "Once and only once" Speaking Code Principle Open Closed Principle Liskov Substitution Principle Dependency Inversion Interface Segregation Principle Jede Klasse hat genau eine Verantwortlichkeit. Gleicher oder ähnlicher Code sollte nur einmal im System vorhanden sein. Der Code soll für sich "sprechen". Eine Komponente soll offen für Erweiterungen sein. Bei Anpassungen sollen vorhandene Clients nicht ungültig werden. Eine Instanz einer Klasse muss überall an Stelle ihrer Oberklasse verwendbar sein. High-Level-Konzepte sollen nicht von Low-Level-Principle Konzepten oder Implementierungen abhängen. Schnittstellen sollen klein sein. Die Methoden einzelner Schnittstellen sollten eine hohe Kopplung besitzen. Common Reuse Principle Die Klassen einer Komponente werden als Ganzes wiederverwendet. 6 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

7 Programmiernahe Design Prinzipien (2/2) Common Closure Principle Die Klassen einer Komponente sollen gegen denselben Typ von Änderungen geschlossen sein. Wird eine Änderung durchgeführt, soll nur eine Komponente betroffen sein. Acyclic Dependency Principle Die Abhängigkeitsstruktur zwischen Komponenten soll azyklisch sein. Stable Dependency Principle Stable Abstractions Principle Tell, Don t Ask Inversion of Control Law of Demeter Eine Komponente soll nur von Komponenten abhängen, die mindestens so stabil sind wie es selbst. Je stabiler eine Komponente ist, desto abstrakter soll sie sein. Instabile Komponenten sollen konkret sein. Frag' ein Objekt nicht nach einem Objekt, sondern sag ihm, was es tun soll. Ein Objekt ist passiv; es wird von oben mit allen benötigten Informationen versorgt. Jedes Objekt soll nur mit Objekten sprechen, die es als Attribute hält, oder als Parameter übergeben bekommt. 7 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

8 Law of Demeter (1/2): Spreche nur mit unmittelbaren Freunden Schlechtes Beispiel: B gibt Zugriff auf C public class A { private B b; public void needit() { b.getc().doit(); } } public class B { private C c; public C getc() { return c; } } public class C { public void doit() {... } } Gutes Beispiel: B delegiert an C public class A { private B b; public void needit() { b.delegate(); } } public class B { private C c; public void delegate() { c.doit(); } } public class C { public void doit() {... } } Alle Attribute sind als private zu deklarieren. 8 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

9 Law of Demeter (2/2) Auswirkungen auf das Design von Klassen Angewandt auf Klassen und Methoden bedeutet dies: public class Demeter { private MyClass myobj; private int mymethod() {.. } public void yourmethod(hisclass hisobj) { LocalClass localobj; int i = mymethod(); hisobj.invert(); Eine Methode darf nur aufrufen: Methoden der eigenen Klasse direkt übergebener Parameter } } localobj = new LocalClass(); localobj.setactive(); myobj.print(); selbst erzeugter Objekte selbst gehaltener Objekte 9 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

10 Law of Demeter (3/3) Diskussion Quelltext wird anpassungsfähiger und robuster. Aber: die lose Kopplung gibt es nicht umsonst. Erstellung von kapselnden Methoden zur Delegation an die eigentlichen Empfänger erforderlich. Mehr Code ( Laufzeit, Speicherbedarf). Daher in der Praxis den Einsatz abwägen. Evtl. bei kritischen Modulen engere Kopplung zulassen. 10 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

11 Veränderbare vs. unveränderbare Objekte (1/2) (mutable vs. immutable objects) Unveränderbare Objekte sind sicherer als veränderbare: public class MyClass { private String mystring; // immutable private Map mymap; // mutable public MyClass(String mystring, Map mymap) { this.mystring = mystring; // keine Seiteneffekte this.mymap = mymap.clone(); // Seiteneffekte vermeiden } public String getmystring() { // keine Seiteneffekte return mystring; } } public Map getmymap() { return mymap.clone(); } // Seiteneffekte vermeiden 11 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

12 Veränderbare vs. unveränderbare Objekte (2/2) Unveränderbarkeit spielt immer dann eine Rolle, wenn Objekte gemeinsam verwendet werden (Object-Sharing). Unveränderbarkeit ist eine bewusste Entscheidung, die dokumentiert werden sollte. Unveränderliche Typen helfen den Performance-Overhead für das Kopieren von Objekten zu eliminieren Wir unterscheiden zwischen Read-Only-Sichten und echten unveränderbaren Objekten. Duale Klassen bieten die Möglichkeit, sowohl veränderliche als auch unveränderliche Ausprägungen einer Abstraktion zu verwenden. Bei einer als final deklarierten Objektvariablen ändert sich die Referenz nicht. Der Wert kann sich aber sehr wohl ändern. 12 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

13 Prinzip der minimalen Annahme Verwende Schnittstellen, wo sie zur Verfügung stehen: List statt ArrayList Map statt HashMap Verwende die allgemeinste Schnittstelle, die den erforderlichen Dienst bereitstellt: Collection statt List Iterator statt ListIterator 13 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

14 Design von Methodensignaturen Wähle sorgfältig einen aussagekräftigen Namen aus. Stelle keine unnötigen Convenience-Methoden bereit. Vermeide lange Parameterlisten. Besonders unschön sind lange gleichartige Parameterlisten. Beim Parametertyp die Schnittstelle einer Implementierung vorziehen. Wäge den Einsatz von funktionaler Programmierung vernünftig ab. 14 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

15 Defensives Programmieren Es gibt keine fehlerfreie Software: Irren ist menschlich Wir können nicht alle Eventualitäten absehen Wir müssen sinnvoll mit Fehlern umgehen: Erwarte das Unerwartete! Sei informativ! Handle angemessen! Minimiere den Schaden im Fehlerfall! Folgende Techniken helfen bei der Auffindung und Beseitigung: Design Fehlerbehandlung ( separate Vorlesung) Assertions zum Prüfen von Vor- und Nachbedingungen Debugging, Tracing, Logging ( separate Vorlesung) Frühzeitiges und ausgiebiges Testen ( separate Vorlesung) 15 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

16 Programmierrichtlinien Sind verbindliche Vorgaben für alle Entwickler im Team, z.b. zu: Dokumentation Namenskonventionen Regeln für gutes Programmieren Ziele: Zusammenarbeit in einem Projekt erleichtern Integration und Test erleichtern Langjährige Wartung ermöglichen Zuverlässigkeit und Robustheit erhöhen Werden gerne ignoriert: "Schönes Programmieren ruiniert die Performanz" der Unterschied wird von heutigen Compilern weg-optimiert! "Kommentare in halbfertigem Code sind sinnlos" grundlegende Entscheidungen sollen im Modell getroffen werden "Die Anpassungen mache ich, wenn ich fertig bin" das passiert dann nie Die Richtlinien müssen als etwas Positives empfunden werden! Erstellung durch Programmier-Profis unter Beteiligung aller Projektparteien 16 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

17 Agenda Entwicklungsumgebung Programmierprinzipien Refactoring Literatur

18 Jeder Dummkopf kann Code schreiben, den ein Computer versteht. Gute Programmierer schreiben Code, den Menschen verstehen. Martin Fowler: Refactoring 18 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

19 Bad Code Gewinner des "20C7: 20th Chaos Communication Congress Compact C Coding Contest" Was tut dieses Programm? Auflösung siehe 19 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

20 Historie und Definitionen Erstmalige Benutzung des Begriffs in Arbeit von Ralph Johnson und William Opdyke 1990: "Refactoring: An aid in designing application frameworks and evolving object-oriented systems" in: Proceedings of Symposion on Object-Oriented Programming Emphasizing Practical Applications, September 1990 Definitionen Kent Beck in "Extreme Programming Explained" "A change to the system that leaves its behaviour unchanged, but enhances some nonfunctional quality - simplicity, flexibility, understandibility, performance" Martin Fowler "Describes how to alter the design of existing software in a controlled and rapid manner". "A technique to restructure code in a disciplined way" 20 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

21 Katalog von Refactoring-Maßnahmen (siehe Refactoring-Muster (ähnlich Entwurfsmuster): Name Ziel Symptom(e) Reihe von Arbeitsanweisungen, die für das Refactoring umgesetzt werden müssen 21 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

22 Klassifikation der Maßnahmen Composing Methods Composing Methods Moving Features between Objects Organizing Data Simplifying Conditional Expressions Ein- und Auslagern von Methodenteilen Redesign des Objektmodells Umgang mit Datenstrukturen und Datenkapselung Vereinfachung von Bedingungen und Fallunterscheidungen Making Method Calls Simpler Methoden-Bezeichner und - Signaturen modifizieren Dealing with Generalization Klassenhierarchie und Methoden-/ Attribut-Zuordnung ändern 22 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

23 "Composing Methods" Ein- und Auslagern von Methodenteilen 1/3 Methode extrahieren (Extract Method) Symptom Aktion Ein Codefragment kann zusammengefasst werden. Setze die Fragmente in eine Methode, deren Namen den Zweck kennzeichnet. 23 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

24 "Composing Methods" Ein- und Auslagern von Methodenteilen 2/3 Ersetze eine Methode durch ein Methoden-Objekt (Replace Method with Method Object) In einer langen Methode werden lokale Variablen so (verstreut) benutzt, dass diese nicht in eine Methode extrahierbar sind. Ersetze die lange Methode durch ein eigenes Objekt. Die lokalen Variablen werden Attribute dieses neuen Objektes. Die lange Methode kann in verschiedene (private) Objekt- Methoden aufgeteilt werden. 24 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

25 "Composing Methods" Ein- und Auslagern von Methodenteilen 3/3 Methode inline setzen (Inline Method) Der Rumpf einer Methode ist so klar wie der Methodenname. Setze den Methodenrumpf für den Aufruf ein. Entferne die Methode. Temporäre Variable entfernen (Inline Temp) Eine temporäre Variable wird nur mit einem einfachen Ausdruck initialisiert. Ersetze Verweise auf die Variable durch den Ausdruck. Entferne Zuweisung an Parametervariable (Remove Assignments to Parameters) Programmcode benutzt Parametervariablen. Nutze eine temporäre Variable statt der Parametervariablen. 25 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

26 Klassifikation der Maßnahmen Composing Methods Moving Features between Objects Moving Features between Objects Organizing Data Simplifying Conditional Expressions Ein- und Auslagern von Methodenteilen Redesign des Objektmodells Umgang mit Datenstrukturen und Datenkapselung Vereinfachung von Bedingungen und Fallunterscheidungen Making Method Calls Simpler Methoden-Bezeichner und - Signaturen modifizieren Dealing with Generalization Klassenhierarchie und Methoden-/ Attribut-Zuordnung ändern 26 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

27 "Moving Features between Objects" Redesign des Objektmodells 1/5 Extrahiere Klasse (Extract Class) Eine Klasse macht Arbeit "für zwei". Erzeuge eine neue Klasse. Verschiebe die relevanten Attribute und Methoden von der alten Klasse in die neue. 27 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

28 "Moving Features between Objects" Redesign des Objektmodells 2/5 Verstecke den Delegate (Hide Delegate) Die Client-Klasse ruft Methoden eines "Delegate". Erzeuge Methode(n) zum Verstecken des Delegate-Objektes. Remove Middle Man Entferne Klasse in der Mitte (Remove Middle Man) Eine Klasse macht zu viele einfache Delegationen. Die Client-Klasse soll selbst die Methoden des Delegates aufrufen. Hide Delegate 28 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

29 "Moving Features between Objects" Redesign des Objektmodells 3/5 Führe fremde Methode ein (Introduce Foreign Method) Eine nicht änderbare Klasse benötigt eine zusätzliche Methode. Erzeuge die Methode in der Client-Klasse mit einem Verweis auf die Klasse als erstes Argument. Introduce Foreign Method 29 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

30 "Moving Features between Objects" Redesign des Objektmodells 4/5 Führe lokale Erweiterung ein (Introduce Local Extension) Eine nicht änderbare Klasse benötigt eine Reihe zusätzlicher Methoden. Erzeuge eine neue Klasse, die diese neuen Methoden enthält. Diese neue Klasse ist eine Erweiterung (Ableitung) oder ein Wrapper um die ursprüngliche Klasse. Introduce Local Extension 30 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

31 "Moving Features between Objects" Redesign des Objektmodells 5/5 Verschiebe Methode (Move Method) Eine Methode wird von einer anderen Klasse mehr verwendet als von der definierenden Klasse. Erzeuge eine Methode mit ähnlichem Rumpf in der Klasse, die die Eigenschaft am meisten nutzt. Delegiere in der alten Methode an die neue Implementierung, oder lösche sie. Verschiebe Attribut (Move Field). Analog zu "Move Method" Setze Klasse inline (Inline Class) Eine Klasse macht nicht viel. Verschiebe alle Eigenschaften in eine andere Klasse und lösche sie. 31 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

32 Klassifikation der Maßnahmen Composing Methods Moving Features between Objects Organizing Data Data Simplifying Conditional Expressions Ein- und Auslagern von Methodenteilen Redesign des Objektmodells Umgang mit Datenstrukturen und Datenkapselung Vereinfachung von Bedingungen und Fallunterscheidungen Making Method Calls Simpler Methoden-Bezeichner und - Signaturen modifizieren Dealing with Generalization Klassenhierarchie und Methoden-/ Attribut-Zuordnung ändern 32 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

33 "Organizing Data" Umgang mit Datenstrukturen und Datenkapselung 1/2 Ersetze Typ-spezifischen Code durch Unterklassen (Replace Type Code with Subclasses) Ein unveränderlicher Programmcode bestimmt das Verhalten einer Klasse. Ersetze den Typ-spezifischen Code durch eine Unterklasse. Replace Type Code with Subclasses Ersetze Typ-spezifischen Code durch Zustand/Strategie-Muster (Replace Type Code with State/Strategy) Eine "Was-bin-ich"-Variable bestimmt das Verhalten, aber Unterklassen für das spezifische Verhalten können nicht gebildet werden. Replace Type Code with State/Strategy Ersetze den Typ-spezifischen Code durch ein Zustands-Objekt. 33 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

34 "Organizing Data" Umgang mit Datenstrukturen und Datenkapselung 2/2 Ersetze Unterklassen durch Attribute (Replace Subclass with Fields) Unterklassen unterscheiden sich nur durch Methoden, die einen konstanten Wert liefern. Führe ein Attribut in der Oberklasse ein, verschiebe die Methoden dorthin und entferne alle Unterklassen. Ersetze magische Zahl durch symbolische Konstante (Replace Magic Number with Symbolic Constant) Ein Zahl-Literal steht für eine bestimmte fachliche ("magic") Bedeutung. Lege eine Konstante an, dessen Name die Fachlichkeit (gut!) erklärt. 34 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

35 Klassifikation der Maßnahmen Composing Methods Moving Features between Objects Organizing Data Simplifying Conditional Expressions Simplifying Conditional Expressions Ein- und Auslagern von Methodenteilen Redesign des Objektmodells Umgang mit Datenstrukturen und Datenkapselung Vereinfachung von Bedingungen und Fallunterscheidungen Making Method Calls Simpler Methoden-Bezeichner und - Signaturen modifizieren Dealing with Generalization Klassenhierarchie und Methoden-/ Attribut-Zuordnung ändern 35 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

36 "Simplifying Conditional Expressions" Vereinfachung von Bedingungen u. Fallunterscheidungen 1/2 Geschachtelte Bedingungen durch Wächter ersetzen (Replace Nested Conditional with Guard Clauses) Die Fallunterscheidung ist kompliziert und der normale Ausführungspfad ist nicht offensichtlich. Ersetze die geschachtelten Bedingungen durch Wächter. 36 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

37 "Simplifying Conditional Expressions" Vereinfachung von Bedingungen u. Fallunterscheidungen 2/2 Ersetze Fallunterscheidungen durch Polymorphie (Replace Conditional with Polymorphism) Eine Fallunterscheidung führt abhängig vom Typ eines Objektes unterschiedliches Verhalten aus. Lege jeden Zweig der Fallunterscheidung in eine Methode einer Unterklasse. Die Methode der Oberklasse wird abstrakt und die neuen Methoden überschreiben die abstrakte Methode. 37 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

38 Klassifikation der Maßnahmen Composing Methods Moving Features between Objects Organizing Data Ein- und Auslagern von Methodenteilen Redesign des Objektmodells Umgang mit Datenstrukturen und Datenkapselung Simplifying Conditional Expressions Making Method Calls Vereinfachung von Bedingungen und Fallunterscheidungen Making Method Calls Simpler Methoden-Bezeichner und - Simpler Signaturen modifizieren Dealing with Generalization Klassenhierarchie und Methoden-/ Attribut-Zuordnung ändern 38 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

39 "Making Method Calls Simpler" Methoden-Bezeichner und -Signaturen modifizieren 1/3 Trenne Anfrage von Veränderung (Separate Query from Modifier) Eine Methode liefert einen Wert zurück und ändert gleichzeitig den Zustand des Objekts. Teile in zwei Methoden auf: Eine für die Anfrage und eine zur Modifikation. Parametrisiere Methode (Parameterize Method) Verschiedene Methoden führen ähnliche Dinge mit verschiedenen Werten im Rumpf aus. Schreibe eine Methode, die einen Parameter für die verschiedenen Werte nutzt. 39 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

40 "Making Method Calls Simpler" Methoden-Bezeichner und -Signaturen modifizieren 2/3 Ersetze Parameter durch explizite Methoden (Replace Parameter with Explicit Methods) Eine Methode führt abhängig von bestimmten übergebenen Argumenten Programmcode aus. Lege für jedes der möglichen Argumente eine Methode an. 40 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

41 "Making Method Calls Simpler" Methoden-Bezeichner und -Signaturen modifizieren 3/3 Parameter-Objekt einführen (Introduce Parameter Object) Eine Gruppe einzelner Parametern wird typischerweise zusammen übergeben und benutzt. Ersetze die einzelnen Parameter durch ein Objekt, dessen Attribute die Parameter sind. Explizite Typanpassung kapseln (Encapsulate Downcast) Eine Methode liefert ein Objekt, welches vom Client mit einer expliziten Typanpassung angepasst werden muss. Die explizite Typanpassung wird bereits in die Methode gesetzt. 41 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

42 Klassifikation der Maßnahmen Composing Methods Moving Features between Objects Organizing Data Simplifying Conditional Expressions Ein- und Auslagern von Methodenteilen Redesign des Objektmodells Umgang mit Datenstrukturen und Datenkapselung Vereinfachung von Bedingungen und Fallunterscheidungen Making Method Calls Simpler Methoden-Bezeichner und - Signaturen modifizieren Dealing with with Generalization Klassenhierarchie und Methoden-/ Attribut-Zuordnung ändern 42 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

43 "Dealing with Generalization" Klassenhierarchie, Methoden-/Attribut-Zuordnung ändern 1/4 Ersetze Vererbung durch Delegation (Replace Inheritance with Delegation) Eine Unterklasse nutzt nur Teile der Schnittstelle der Oberklasse oder will keine Eigenschaften erben. Erzeuge ein Attribut für die Oberklasse und passe die Methoden an, so dass sie auf die Methoden der Oberklasse delegieren. Entferne die Unterklasse. 43 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

44 "Dealing with Generalization" Klassenhierarchie, Methoden-/Attribut-Zuordnung ändern 2/4 Ersetze Delegation durch Vererbung (Replace Delegation with Inheritance) Methoden einer Klasse delegieren fast immer an eine andere Klasse. Der Delegate wird zur Oberklasse. 44 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

45 "Dealing with Generalization" Klassenhierarchie, Methoden-/Attribut-Zuordnung ändern 3/4 Attribut hochziehen (Pull Up Field) Zwei oder mehr Unterklassen besitzen das gleiche Attribut. Verschiebe das Attribut in die gemeinsame Oberklasse. Methode hochziehen (Pull Up Method) Analog für Methoden. Konstruktor-Körper hochziehen (Pull Up Constructor Body) Analog für Konstruktoren. Attribut nach unten verlegen (Push Down Field) Ein Attribut wird nur von einer/einigen Unterklassen verwendet. Verschiebe das Attribut in die Unterklassen. Methode nach unten verlegen (Push Down Method). Analog für Methoden. 45 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

46 "Dealing with Generalization" Klassenhierarchie, Methoden-/Attribut-Zuordnung ändern 4/4 Hierarchien abbauen (Collapse Hierarchy) Eine Unterklasse und Oberklasse unterscheiden sich kaum. Vereinige sie in eine gemeinsame Klasse. Extrahiere Unterklasse (Extract Subclass) Eine Klasse hat Eigenschaften, die nur in einigen Instanzen verwendet wird. Erzeuge für die Untermenge an Eigenschaften (je) eine Unterklasse. Extrahiere Oberklasse (Extract Superclass) Es gibt zwei oder mehr Klassen mit gemeinsamen Eigenschaften. Erzeuge eine neue Oberklasse mit den gemeinsamen Eigenschaften. Extrahiere Schnittstelle (Extract Interface) Unterschiedliche Clients nutzen die gleiche Untermenge einer Schnittstelle der Klasse. Zwei Klassen haben zum Teil gleiche Schnittstellen. Erzeuge aus der Teilmenge eine eigene Schnittstelle. 46 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

47 Refactoring Unterstützung durch die IDE Beispiel: NetBeans IDE Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

48 Agenda Entwicklungsumgebung Programmierprinzipien Refactoring Literatur

49 Literatur (1/2) Martin Fowler: "Refactoring: Improving the Design of Existing Code" William C. Wake: "Refactoring Workbook" Erich Gamma et al: "Design Patterns. Elements of Reusable Object-Oriented Software." William J. Brown et al: "AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis" Stefan Roock: "Refactoring in Large Software Projects" 49 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

50 Literatur (2/2) Java 2 Platform, Standard Edition API Specification Effective Java. Programming Language Guide. Joshua Bloch, Addison Wesley Professional, 2001, ISBN Vermeulen, et al; Elements of Java Style; SIGS, 2000 Ambler; Writing Robust Java Code; Hunt, Thomas: The Pragmatic Programmer 50 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

51 Links Refactoring.com c2.com Artikel William F. Opdyke: Original-Dissertation von 1993 Roedy Green: Wie wird unwartbarer Quelltext geschrieben? ftp://st.cs.uiuc.edu/pub/papers/refactoring/opdyke-thesis.ps.z Fowlers Refactoring-Katalog englisch (schlechte) deutsche Übersetzung Refactoring & Patterns Refactoring Tools SWW: Refactoring-Workshop von Gerd Neugebauer Patterns Anti-Patterns 51 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/

9. Programmierung, Konfigurationsmanagement. Softwaretechnik (CNAM)

9. Programmierung, Konfigurationsmanagement. Softwaretechnik (CNAM) 9. Programmierung, Konfigurationsmanagement Softwaretechnik (CNAM) Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt,

Mehr

9. Programmierungs- Phase Softwaretechnik (CNAM) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

9. Programmierungs- Phase Softwaretechnik (CNAM) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 9. Programmierungs- Phase Softwaretechnik (CNAM) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik

Mehr

1. Einführung Advanced Programming Techniques. Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

1. Einführung Advanced Programming Techniques. Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1. Einführung Advanced Programming Techniques Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced

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

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

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

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

Objektorientierte Programmierung OOP

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

Mehr

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

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

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

Mehr

Objektorientierte Programmierung

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

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

Übungen zur Softwaretechnik

Übungen zur Softwaretechnik Technische Universität München Fakultät für Informatik Lehrstuhl IV: Software & Systems Engineering Markus Pister, Dr. Bernhard Rumpe WS 2002/2003 Lösungsblatt 9 17. Dezember 2002 www4.in.tum.de/~rumpe/se

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

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

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

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

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

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

5. Abstrakte Klassen

5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg,

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

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X SwissMacMeeting #1 26. Juni 2004 Messeturm Basel http://mac.naepflin.com Was ist das Ziel dieses Kurses? Starthilfe Einblick in die Möglichkeiten,

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

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

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

Software-Refactoring. 29. Mai 2013

Software-Refactoring. 29. Mai 2013 Software-Refactoring 29. Mai 2013 Überblick Was ist Refactoring und wozu dient es? Welche Refactorings gibt es? Refactoring-Katalog: www.refactoring.com Wann, wo und wie führt man Refactorings durch? Wie

Mehr

Entwicklungswerkzeuge

Entwicklungswerkzeuge Entwicklungswerkzeuge Werner Struckmann & Tim Winkelmann 10. Oktober 2012 Gliederung Anforderungen Projekte Debugging Versionsverwaltung Frameworks Pattern Integrated development environment (IDE) Werner

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

Nachklausur Programmieren / Algorithmen und Datenstrukturen 1

Nachklausur Programmieren / Algorithmen und Datenstrukturen 1 Programmieren / Algorithmen und Datenstrukturen Autor: Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt Datum: 7. Oktober 200 Nachklausur Programmieren / Algorithmen und Datenstrukturen Spielregeln

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

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

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

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

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen Open Source professionell einsetzen 1 Mein Background Ich bin überzeugt von Open Source. Ich verwende fast nur Open Source privat und beruflich. Ich arbeite seit mehr als 10 Jahren mit Linux und Open Source.

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

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

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

Mehr

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

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

Mehr

Javakurs 2013 Objektorientierung

Javakurs 2013 Objektorientierung Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0

Mehr

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Vermeiden Sie es sich bei einer deutlich erfahreneren Person dranzuhängen, Sie sind persönlich verantwortlich für Ihren Lernerfolg. 1 2 3 4 Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg. Gerade beim Einstig in der Programmierung muss kontinuierlich

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

Client-Server Beziehungen

Client-Server Beziehungen Ersetzbarkeit, Client-Server Beziehungen 182.132 VL Objektorientierte Programmierung Peter Puschner nach Folien von Franz Puntigam, TU Wien Überblick Ersetzbarkeit Kovarianz, Kontravarianz, Invarianz Client-Server

Mehr

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de s & Servlet Integration Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Motivation Das Interface Stateful und Stateless s Programmierung einer Stateful

Mehr

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

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

Mehr

Programmieren Tutorium

Programmieren Tutorium Programmieren Tutorium Tom Schildhauer Tutorium 12 Universität Karlsruhe (TH) Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by Tom Schildhauer,

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

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ IBBB 2010 Workshop 6 Einführung in die objektorientierte Programmierung Dozenten: J. Penon, J. Frank, A. Schindler Teil: Java mit BlueJ Dozent: A. Schindler Einf. i. d. OOP - Java u. BlueJ / A. Schindler

Mehr

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

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

Mehr

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

Factory Method (Virtual Constructor)

Factory Method (Virtual Constructor) Factory Method (Virtual Constructor) Zweck: Definition einer Schnittstelle für Objekterzeugung Anwendungsgebiete: Klasse neuer Objekte bei Objekterzeugung unbekannt Unterklassen sollen Klasse neuer Objekte

Mehr

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords 4.0 Proinformatik III Objektorientierte Programmierung Michael Kölling University of Kent Canterbury, UK Selbstbestimmtes Lernen Vorlesung Tutorium Übungen Buch Web-Seite Üben, üben, üben! Format Vorlesung:

Mehr

Was ist EMF? Wie wird EMF eingesetzt? Was ist ecore? Das Generatormodell Fazit

Was ist EMF? Wie wird EMF eingesetzt? Was ist ecore? Das Generatormodell Fazit Was ist EMF? Wie wird EMF eingesetzt? Was ist ecore? Das Generatormodell Fazit EMF ist ein eigenständiges Eclipse-Projekt (Eclipse Modeling Framework Project) EMF ist ein Modellierungsframework und Tool

Mehr

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

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

Mehr

Einführung in die Programmierung für NF

Einführung in die Programmierung für NF Einführung in die Programmierung für NF UML Valerie Holmeyer Michael Kirsch Direct Feedback Eure Mitarbeit ist mir wichbg Quiz nach den jeweiligen AbschniGen Jeder kann mitmachen App socra&ve auf Smartphone

Mehr

2015-06-11 Tagesprogramm

2015-06-11 Tagesprogramm 1 2015-06-11 Tagesprogramm Design-by-Contract 2 Vertragspartner Anbieter (Server) bietet Leistungen (Services) an Kunde (Client) nimmt von Anbietern angebotene Leistungen in Anspruch Details der Inanspruchnahme

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

Kapitel 6. Vererbung

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

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

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

OO Softwareentwicklung

OO Softwareentwicklung OO Softwareentwicklung Objektorientierung Prof. Dr. Bernhard Schiefer 1 OO als Ansatz zur Verbesserung der Software-Qualität Modellierung der Welt als selbständig agierende Objekte. Gemeinsame Beschreibung

Mehr

Umfrage zum Informationsbedarf im Requirements Engineering

Umfrage zum Informationsbedarf im Requirements Engineering Umfrage zum Informationsbedarf im Requirements Engineering Vielen Dank für Ihre Teilnahme an dieser Studie! Im Rahmen eines Forschungsprojektes an der Universität Hamburg und der TU Graz führen wir eine

Mehr

Probeklausur. Lenz Belzner. January 26, 2015. Lenz Belzner Probeklausur January 26, 2015 1 / 16

Probeklausur. Lenz Belzner. January 26, 2015. Lenz Belzner Probeklausur January 26, 2015 1 / 16 Probeklausur Lenz Belzner January 26, 2015 Lenz Belzner Probeklausur January 26, 2015 1 / 16 Definieren Sie Software Engineering in Abgrenzung zu Individual Programming. Ingenieursdisziplin professionelle

Mehr

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

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

Mehr

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

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

Übung 6: Feinentwurf. Prof. Dr. Dr. h.c. Manfred Broy Dr. Herbert Ehler, Martin Feilkas 6. Juli 2006 Bernd Spanfelner, Sebastian Winter

Übung 6: Feinentwurf. Prof. Dr. Dr. h.c. Manfred Broy Dr. Herbert Ehler, Martin Feilkas 6. Juli 2006 Bernd Spanfelner, Sebastian Winter Prof. Dr. Dr. h.c. Manfred Broy Sommersemester Dr. Herbert Ehler, Martin Feilkas 6. Juli 2006 Bernd Spanfelner, Sebastian Winter Einführung in die Softwaretechnik Übung 6: Feinentwurf Aufgabe 17: Entwurfsmuster

Mehr

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank In den ersten beiden Abschnitten (rbanken1.pdf und rbanken2.pdf) haben wir uns mit am Ende mysql beschäftigt und kennengelernt, wie man

Mehr

Business-Rule-Management als Instrument des Software-Reengineering

Business-Rule-Management als Instrument des Software-Reengineering Business-Rule-Management als Instrument des Software-Reengineering Olaf Resch Olaf Resch am 4. Mai 2005 in Bad Honnef 1 Agenda Software und Wissen. Verschmelzung als Evolutionshindernis. Business-Rule-Technologie.

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

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

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert: Firewall für Lexware professional konfigurieren Inhaltsverzeichnis: 1. Allgemein... 1 2. Einstellungen... 1 3. Windows XP SP2 und Windows 2003 Server SP1 Firewall...1 4. Bitdefender 9... 5 5. Norton Personal

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

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe crm-now/ps Webforms: Webdesigner Handbuch Copyright 2006 crm-now Versionsgeschichte Version 01 2006-08-21 Release Version crm-now c/o im-netz Neue

Mehr

Konsolidierung und Neuimplementierung von VIT. Aufgabenbeschreibung für das Software Engineering Praktikum an der TU Darmstadt

Konsolidierung und Neuimplementierung von VIT. Aufgabenbeschreibung für das Software Engineering Praktikum an der TU Darmstadt Konsolidierung und Neuimplementierung von VIT Aufgabenbeschreibung für das Software Engineering Praktikum an der TU Darmstadt Inhaltsverzeichnis 1 Was ist der Kontext?... 1 2 VIT: Ein sehr erfolgreiches

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

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

Einführung in Eclipse und Java

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

Mehr

Reengineering und Refactoring von Softwarearchitekturen

Reengineering und Refactoring von Softwarearchitekturen Methodische und Praktische Grundlagen der Informatik 3 Reengineering und Refactoring von Softwarearchitekturen Steffen Helke Technische Universität Berlin Fachgebiet Softwaretechnik WS 2008/2009 Lernziele?

Mehr

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

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

Mehr

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2 EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0 EDV Kurs 13/2 Inhaltsverzeichnis 1 Objekte... 1 2 Klassen... 3 2.1 Beziehungen zwischen Klassen... 4 2.1.1 Vererbung... 4 2.1.2

Mehr

09.01.14. Vorlesung Programmieren. Unified Modeling Language (UML) Unified Modeling Language (UML) Unified Modeling Language (UML)

09.01.14. Vorlesung Programmieren. Unified Modeling Language (UML) Unified Modeling Language (UML) Unified Modeling Language (UML) Vorlesung Programmieren Unified Modeling Language (UML) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Unified Modeling Language (UML)

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Unified Modeling Language (UML) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Unified Modeling Language (UML)

Mehr

.NET Code schützen. Projekt.NET. Version 1.0

.NET Code schützen. Projekt.NET. Version 1.0 .NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll

Mehr

Speicher in der Cloud

Speicher in der Cloud Speicher in der Cloud Kostenbremse, Sicherheitsrisiko oder Basis für die unternehmensweite Kollaboration? von Cornelius Höchel-Winter 2013 ComConsult Research GmbH, Aachen 3 SYNCHRONISATION TEUFELSZEUG

Mehr

Klassendefinitionen verstehen

Klassendefinitionen verstehen Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen

Mehr

Softwaretechnik (Allgemeine Informatik) Überblick

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

Mehr

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Was sind Berechtigungen? Unter Berechtigungen werden ganz allgemein die Zugriffsrechte auf Dateien und Verzeichnisse (Ordner) verstanden.

Mehr

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Java Enterprise Architekturen Willkommen in der Realität

Java Enterprise Architekturen Willkommen in der Realität Java Enterprise Architekturen Willkommen in der Realität Ralf Degner (Ralf.Degner@tk-online.de), Dr. Frank Griffel (Dr.Frank.Griffel@tk-online.de) Techniker Krankenkasse Häufig werden Mehrschichtarchitekturen

Mehr

Übung: Verwendung von Java-Threads

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

Mehr

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de EJB Beispiel JEE Vorlesung 10 Ralf Gitzel ralf_gitzel@hotmail.de 1 Stundenkonzept Gemeinsame Übung Stoff der letzten Stunde wird gemeinsam in einem Beispiel umgesetzt Details werden nochmals erklärt bzw.

Mehr

3. Stored Procedures und PL/SQL

3. Stored Procedures und PL/SQL 3. Stored Procedures und PL/SQL Wenn eine Anwendung auf einer Client-Maschine läuft, wird normalerweise jede SQL-Anweisung einzeln vom Client an den Server gesandt, und jedes Ergebnistupel wird einzeln

Mehr

Software-Refactoring. 27. Mai 2015

Software-Refactoring. 27. Mai 2015 Software-Refactoring 27. Mai 2015 Überblick Was ist Refactoring und wozu dient es? Welche Refactorings gibt es? Refactoring-Katalog: www.refactoring.com Wann, wo und wie führt man Refactorings durch? Wie

Mehr

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

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

Mehr

Objektorientierte Analyse und Design

Objektorientierte Analyse und Design Hochschule Darmstadt Fachbereich Informatik Objektorientierte Analyse und Design Tipps zum Einsatz von Innovator auf einem privaten Rechner Prof. Dr. Ralf Hahn, Prof. Dr. Wolfgang Weber, SS2011, h_da,

Mehr

Autorisierung. Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente

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

Mehr

Agiles Design. Dr.-Ing. Uwe Doetzkies Gesellschaft für Informatik mail: gi@uwe.doetzkies.de

Agiles Design. Dr.-Ing. Uwe Doetzkies Gesellschaft für Informatik mail: gi@uwe.doetzkies.de Agiles Design Dr.-Ing. Uwe Doetzkies Dr.-Ing. Uwe Doetzkies Gesellschaft für Informatik mail: gi@uwe.doetzkies.de startupcamp berlin 15.3.2013 Regionalgruppe Berlin/Brandenburg Arbeitskreis Freiberufler

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

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

Regeln für das Qualitäts-Siegel

Regeln für das Qualitäts-Siegel Regeln für das Qualitäts-Siegel 1 Inhalt: Die Qualitäts-Regeln vom Netzwerk Leichte Sprache 3 Die Übersetzung in Leichte Sprache 5 Die Prüfung auf Leichte Sprache 6 Wir beantworten jede Anfrage 7 Wir schreiben

Mehr