11. Refactoring Advanced Programming Techniques. Wintersemester 2009/2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik
|
|
- Liese Hausler
- vor 8 Jahren
- Abrufe
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) Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt,
Mehr9. 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
Mehr1. 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
MehrObjektorientierte 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/
MehrJava 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
MehrClient-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
MehrKlassenentwurf. 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
MehrObjektorientierte Programmierung OOP
Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel WS2012/13 08. Oktober 2013 Objektorientierte Programmierung OOP Objektorientierte Programmierung Objektorientierte
MehrJava: 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
MehrVerhindert, 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:
MehrObjektorientierte 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
MehrPrinzipien 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
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
MehrEinfü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
Mehr5. 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:
MehrObjektorientierte 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
MehrInnere 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
MehrJava 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
MehrTesten 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
Mehr5. 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,
MehrSEP 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
MehrXcode/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,
MehrJavadoc. 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
MehrVorkurs 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:
MehrProgrammieren 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
MehrSoftware-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
MehrEntwicklungswerkzeuge
Entwicklungswerkzeuge Werner Struckmann & Tim Winkelmann 10. Oktober 2012 Gliederung Anforderungen Projekte Debugging Versionsverwaltung Frameworks Pattern Integrated development environment (IDE) Werner
MehrSoftware 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
MehrNachklausur 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
MehrEinfü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
MehrGroß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,
MehrTypumwandlungen 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
MehrArbeiten 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
MehrAlbert 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.
MehrFortgeschrittenes 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
MehrWintersemester 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
MehrDaniel 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
MehrJavakurs 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
MehrVermeiden 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
MehrVorkurs 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
MehrClient-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
MehrSession 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
MehrDie 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,
MehrProgrammieren 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,
MehrEinfü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
MehrWorkshop 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
MehrCode 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
MehrGrundlagen 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
MehrFactory 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
MehrSelbstbestimmtes 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:
MehrWas 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
MehrAgile 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
MehrEinfü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
Mehr2015-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
MehrFachgebiet 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
MehrKapitel 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
MehrProfessionelle 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
MehrSoftware 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
MehrOO 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
MehrUmfrage 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
MehrProbeklausur. 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
MehrFolge 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
MehrDiplomarbeit. 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
MehrII. 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
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
Mehrmysql - 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
MehrBusiness-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.
MehrKlausur 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-
MehrObjektorientierte 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)
MehrFolgende 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
MehrEinfü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
Mehrcrm-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
MehrKonsolidierung 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
MehrSoftware-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
MehrKapitel 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
MehrEinfü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
MehrReengineering 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?
MehrSoftwaretests 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
MehrEinfÅ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
Mehr09.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)
MehrVorlesung 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 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
MehrSpeicher 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
MehrKlassendefinitionen verstehen
Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen
MehrSoftwaretechnik (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
MehrOrdner 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.
MehrMusterlö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
MehrComputeranwendung 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
MehrJava 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 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
MehrEJB 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.
Mehr3. 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
MehrSoftware-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
MehrKlausur 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
MehrObjektorientierte 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,
MehrAutorisierung. 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
MehrAgiles 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
MehrAssoziation 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
MehrInternet 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
MehrRegeln 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