Refactoring. PG Reclipse Seminar: Refactoring Jan-Christopher Bals (1/30)
|
|
- Kristina Schmitt
- vor 6 Jahren
- Abrufe
Transkript
1 Refactoring PG Reclipse Seminar: Refactoring Jan-Christopher Bals (1/30)
2 Gliederung des Vortrags Definition Hintergrund und Motivation Refactoring am Beispiel Refactoring-Katalog Unterstützung durch Tools Zusammenfassung PG Reclipse Seminar: Refactoring Jan-Christopher Bals (2/30)
3 Definition Refactoring: Veränderung der Struktur von Software bei Erhaltung des extern beobachtbaren Verhalten Wie lässt sich der Erhalt des Verhaltens von Software definieren? Erster Ansatz: Input / Output Real-time Systems (CPU Zeit)? Embedded Systems (Speicherressourcen)? Sicherheitskritische Systeme? Besserer Ansatz: Softwarespezifikation Wie kann sichergestellt werden, dass Refactoring das Verhalten erhält? Einhaltung der Spezifikation nach dem Refactoring Vordefinierte Testfälle identisch absolvieren PG Reclipse Seminar: Refactoring Jan-Christopher Bals (3/30)
4 Hintergrund und Motivation Änderungen an der internen Struktur von Programmen werden seit jeher vorgenommen Beispiele: Namen von Methoden ändern Doppelten Code durch Methodenaufruf ersetzen Methoden durch Änderung der Signatur erweitern Änderungen der Programmstruktur in objektorientierten Sprachen gehen darüber hinaus und werden als Refactoring bezeichnet. Erste Untersuchung und Anwendung an Smalltalk und C++ PG Reclipse Seminar: Refactoring Jan-Christopher Bals (4/30)
5 Hintergrund und Motivation Hohe Kosten der Softwareentwicklung motivierten: Wiederverwendung von Software Weiterentwicklung bestehender Software Probleme: Software muss angepasst werden Softwarekomponenten müssen identifiziert und verstanden werden Lösung: Restrukturierung der Software durch Refactoring Software ist besser zu lesen Änderungen und Erweiterungen können leichter eingebracht werden Dadurch sinkt die Fehleranfälligkeit der Programmierung Softwarewartung Idealerweise Refactorings während der Wartung durchführen PG Reclipse Seminar: Refactoring Jan-Christopher Bals (5/30)
6 Refactoring am Beispiel Abrechnungssystem eines Videoverleihs Movie +CHILDRENS : int = 2 +REGULAR : int = 0 +NEW_RELEASE : int = 1 -title : string -pricecode : int +getpricecode() : int +setpricecode() +gettitle() : string Rental -movie : Movie -daysrented : int 1 * +getdaysrented() : int * 1 +getmovie() : Movie Customer -name : string -rentals : Vector +statement() : string +addrental() +getname() : string PG Reclipse Seminar: Refactoring Jan-Christopher Bals (6/30)
7 Refactoring am Beispiel statement() public String statement(){ double totalamount = 0; int frequentrenterpoints = 0; Enumeration rentals = this.rentals.elements(); String result = "Rental Record for "+ getname() + "\n"; while (rentals.hasmoreelements()){ double thisamount = 0; Rental each = (Rental)rentals.nextElement(); //determine amounts for each line switch (each.getmovie().getpricecode()){ case Movie.REGULAR: thisamount += 2; if(each.getdaysrented() > 2) thisamount += (each.getdaysrented() - 2)*1.5; break; case Movie.NEW_RELEASE: thisamount += each.getdaysrented() * 3; break; case Movie.CHILDRENS: thisamount += 1.5; if(each.getdaysrented() > 3) thisamount += (each.getdaysrented() - 3) * 1.5; break; } } //add frequent renter points frequentrenterpoints++; //add bonus for a two day new release rental if((each.getmovie().getpricecode() == Movie.NEW_RELEASE) &&(each.getdaysrented() > 1)) frequentrenterpoints++; //show figures for this rental result += "\t" + each.getmovie().gettitle() + "\t" + String.valueOf(thisAmount) + "\n"; totalamount += thisamount; } //add footer lines result += "Amount owed is "+ String.valueOf(totalAmount) + "\n"; result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points"; return result; PG Reclipse Seminar: Refactoring Jan-Christopher Bals (7/30)
8 Refactoring am Beispiel statement(){...} public String statement(){ double totalamount = 0; int frequentrenterpoints = 0; Enumeration rentals = this.rentals.elements(); String result = "Rental Record for "+ getname() + "\n"; while (rentals.hasmoreelements()){ //determine amount for this rental //add frequent renter points } //add footer lines result += "Amount owed is "+ String.valueOf(totalAmount) + "\n"; result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points"; return result; } PG Reclipse Seminar: Refactoring Jan-Christopher Bals (8/30)
9 Refactoring am Beispiel statement(){... while{...}... } while (rentals.hasmoreelements()){ //determine amount for this rental double thisamount = 0; Rental each = (Rental)rentals.nextElement(); switch (each.getmovie().getpricecode()){ case Movie.REGULAR: thisamount += 2; if(each.getdaysrented() > 2) thisamount += (each.getdaysrented() - 2)*1.5; break; case Movie.NEW_RELEASE: thisamount += each.getdaysrented() * 3; break; case Movie.CHILDRENS: thisamount += 1.5; if(each.getdaysrented() > 3) thisamount += (each.getdaysrented() - 3) * 1.5; break;} //add frequent renter points} PG Reclipse Seminar: Refactoring Jan-Christopher Bals (9/30)
10 Refactoring am Beispiel statement(){... while{...}... }...while (rentals.hasmoreelements()){ //determine amount for this rental //add frequent renter points frequentrenterpoints++; //add bonus for a two day new release rental if((each.getmovie().getpricecode() == Movie.NEW_RELEASE)&&(each.getDaysRented() > 1)) frequentrenterpoints++; //show figures for this rental result += "\t" + each.getmovie().gettitle() + "\t" + String.valueOf(thisAmount) + "\n"; totalamount += thisamount; }... PG Reclipse Seminar: Refactoring Jan-Christopher Bals (10/30)
11 Refactoring am Beispiel c:customer r:rental m:movie statement() for all rentals getmovie() Determine amounts getpricecode getdaysrented() getmovie() Add Frequent Renter Points getpricecode getdaysrented() PG Reclipse Seminar: Refactoring Jan-Christopher Bals (11/30)
12 Refactoring am Beispiel Methoden extrahieren ( Extract Method ) class Customer public String statement(){... while (rentals.hasmoreelements()){ Rental each = (Rental)rentals.nextElement(); double thisamount = getcharge(each); frequentrenterpoints += getfrequentrenterpoints(each); }...} private int getfrequentrenterpoints(rental arental) { } if((arental.getmovie().getpricecode() == Movie.NEW_RELEASE) &&(arental.getdaysrented() > 1)) return 2; else private double getcharge(rental arental) { return 1; double thisamount = 0; } switch(arental.getmovie().getpricecode()){...} return thisamount; PG Reclipse Seminar: Refactoring Jan-Christopher Bals (12/30)
13 Refactoring am Beispiel Methoden verschieben ( Move Method ) class Customer public String statement(){... while (rentals.hasmoreelements()){ Rental each = (Rental)rentals.nextElement(); double thisamount = each.getcharge(); frequentrenterpoints += each.getfrequentrenterpoints(); }...} class Rental private int getfrequentrenterpoints() { } if((getmovie().getpricecode() == Movie.NEW_RELEASE) &&(getdaysrented() > 1)) return 2; else private double getcharge() { return 1; double thisamount = 0; } switch(getmovie().getpricecode()){...} return thisamount; PG Reclipse Seminar: Refactoring Jan-Christopher Bals (13/30)
14 Refactoring am Beispiel Bedingte Ausdrücke durch Polymorphie ersetzen ( Replace Conditonal With Polymorphism ) Movie -name : string -pricecode : Price +getcharge() : double +getfrequentrenterpoints() : int * 1 Price +getcharge() +getfrequentrenterpoints() getcharge() { return pricecode.getcharge(); } Regular Price +getcharge() Childrens Price +getcharge() New Release Price +getcharge() +getfrequentrenterpoints() getfrequentrenterpoints() { return pricecode.getfrequentrenterpoints(); } PG Reclipse Seminar: Refactoring Jan-Christopher Bals (14/30)
15 Refactoring am Beispiel public class Rental { private Movie movie; private int daysrented;... public int getfrequentrenterpoints() { return movie.getfrequentrenterpoints(daysrented)}; } public double getcharge() { return movie.getcharge(daysrented)}; public class Movie { private String title; private Price pricecode;... public double getcharge(int daysrented){ return pricecode.getcharge(daysrented)}; } public int getfrequentrenterpoints(int daysrented){ return pricecode.getfrequentrenterpoints(daysrented)}; PG Reclipse Seminar: Refactoring Jan-Christopher Bals (15/30)
16 Refactoring am Beispiel Auswirkungen auf das Design (statisch) vorher: Movie +CHILDRENS : int = 2 +REGULAR : int = 0 +NEW_RELEASE : int = 1 -title : string -pricecode : int +getpricecode() : int +setpricecode() +gettitle() : string Rental -movie : Movie -daysrented : int 1 * +getdaysrented() : int +getmovie() : Movie * 1 Customer -name : string -rentals : Vector +statement() : string +addrental() +getname() : string nachher: Movie -title : string -pricecode : Price +getcharge() : double +getpricecode() : Price +setpricecode() +gettitle() : string +getfrequentrenterpoints() : int * Regular Price 1 Price +getcharge() : double +getfrequentrenterpoints() : int Childrens Price New Release Price 1 * +getcharge() : double +getcharge() : double +getcharge() : double +getfrequentrenterpoints() : int Rental -daysrented : int +getcharge() : double +getfrequentrenterpoints() : int +getdaysrented() : int * 1 Customer -name : string +statement() : string +addrental() +getname() : string PG Reclipse Seminar: Refactoring Jan-Christopher Bals (16/30)
17 Refactoring am Beispiel Auswirkungen auf das Design (dynamisch) vorher: statement() c:customer r:rental m:movie for all rentals getmovie() Determine amounts getpricecode getdaysrented() getmovie() Add Frequent Renter Points getpricecode getdaysrented() PG Reclipse Seminar: Refactoring Jan-Christopher Bals (17/30)
18 Refactoring am Beispiel Auswirkungen auf das Design (dynamisch) nachher: c:customer r:rental m:movie p:price statement() for all rentals getcharge getcharge getcharge getfrequentrenterpoints getfrequentrenterpoints getfrequentrenterpoints PG Reclipse Seminar: Refactoring Jan-Christopher Bals (18/30)
19 Refactoring Katalog Analyse bestehender OO-Software und deren Refaktorisierung ergab grundlegende Refactorings Zusammenstellung in einem Katalog hilft bei der Anwendung Semiautomatisches Refactoring durch Toolunterstützung Einteilung des Katalogs I. Methoden einführen II. Funktionalitäten zwischen Objekten verschieben III. Daten organisieren IV. Vereinfachung bedingter Ausdrücke V. Methodenaufrufe vereinfachen VI. Vererbung PG Reclipse Seminar: Refactoring Jan-Christopher Bals (19/30)
20 Refactoring Katalog I. Methoden Einführen Zu lange Codeblöcke sind unübersichtlich und erhöhen die Fehleranfälligkeit Einteilung in passende Methodenaufrufe erhöht die Lesbarkeit Unterstützenden Refactorings: Extract Method Inline Methode Replace Temp with Query... PG Reclipse Seminar: Refactoring Jan-Christopher Bals (20/30)
21 Refactoring Katalog II. Funktionalitäten zwischen Objekten verschieben Wo soll Programmlogik platziert werden? Unterstützenden Refactorings: Move Method Move Field Extract Class Introduce Local Extension... PG Reclipse Seminar: Refactoring Jan-Christopher Bals (21/30)
22 Refactoring Katalog III. Daten organisieren Umgang mit Daten kann vereinfacht werden bsp. Einführung neuer Datentypen Unterstützende Refactorings: Replace Data Value With Object Encapsulate Field Replace Typed Code With Class / Subclass... PG Reclipse Seminar: Refactoring Jan-Christopher Bals (22/30)
23 Refactoring Katalog IV. Vereinfachung bedingter Ausdrücke Bedingte Ausdrücke oft komplex Unterstützende Refactorings: Decompose Conditional Remove Control Flag Replace Conditional With Polymorphism... PG Reclipse Seminar: Refactoring Jan-Christopher Bals (23/30)
24 Refactoring Katalog V. Methodenaufrufe vereinfachen Namen und Struktur tragen wesentlich zum Programmverständnis bei Unterstützende Refactorings: Rename Method Add / Remove A Parameter Parameterize Method Introduce Parameter Object... PG Reclipse Seminar: Refactoring Jan-Christopher Bals (24/30)
25 Refactoring Katalog VI. Vererbung Wiederverwendbare Komponenten identifizieren Unterstützende Refactorings: Pull Up Field / Method / Constructor Body Push Down Field / Method Extract Superclass / Subclass Collapse Hierarchie... PG Reclipse Seminar: Refactoring Jan-Christopher Bals (25/30)
26 Unterstützung durch Tools Vollautomatisches Refactoring nicht möglich Beobachtbares Verhalten muss erhalten bleiben Tools können in gewissem Umfang den Erhalt dieses Verhaltens garantieren Semiautomatisches Refactoring sinnvoll PG Reclipse Seminar: Refactoring Jan-Christopher Bals (26/30)
27 Unterstützung durch Tools Programme müssen folgende Eigenschaften erfüllen: (durch Tools generierte Refactorings müssen diese erhalten) Eindeutige Oberklasse Eindeutige Namensbezeichnung für Klassen in ihrem Namensraum Eindeutige Namensbezeichnung für Methoden / Variablen innerhalb der Klassen Vererbte Variablen dürfen in Unterklassen nicht neu definiert werden Kompatible Signaturen für vererbte Methoden Typsichere Zuweisungen Semantisch äquivalente Referenzen und Operationen PG Reclipse Seminar: Refactoring Jan-Christopher Bals (27/30)
28 Unterstützung durch Tools Vergleich der Funktionalitäten ausgewählter Tools Tool RefactorIt Developer IDEA Eclipse JBuilder Jrefactory Hersteller RefactorIt IntelliJ IBM,... Borland Freeware Refactoring Encapsulate Field x x x Extract Method x x x x x Inline Method x x x Add / Remove Parameter x x x Pull Down Method x x x x x Push Up Method x x x x x Move method x x x x x Rename x x x x x PG Reclipse Seminar: Refactoring Jan-Christopher Bals (28/30)
29 Zusammenfassung Definition extern beobachtbares Verhalten erhalten Beispiel - iteratives, inkrementelles Vorgehen Unterstützung durch Katalog und Tools Nachteile nicht immer anwendbar (Datenbanken, öffentliche Schnittstellen) in Firmen schwer zu verkaufen PG Reclipse Seminar: Refactoring Jan-Christopher Bals (29/30)
30 Vielen Dank fürs Zuhören!...Fragen? PG Reclipse Seminar: Refactoring Jan-Christopher Bals (30/30)
0/100. Refactoring. Andreas Zeller. Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken
0/100 Refactoring Andreas Zeller Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken Refactoring im Überblick 1/100 Refactoring (wörtl. Refaktorisieren ) bedeutet das Aufspalten von Software
MehrModularisierung. Klausur. Evaluation. Andreas Zeller. Objektorientierung C++ Sonstiges 33% 33% 33%
Modularisierung Andreas Zeller 1 Klausur Objektorientierung C++ Sonstiges 33% 33% 33% 2 Evaluation http://frweb.cs.uni-sb.de/03.studium/08.eva/ 3 Modularisierung Andreas Zeller 4 Modularisierung Änderungen
MehrKlassen sollten nicht Wissen über die ganze Hierarchie, sondern nur über Nachbarklassen haben. Dies reduziert die Kopplung!
Kapitel 11 Refactoring 11.1 Die Demeter-Regel (Lieberherr 89) Klassen sollten nicht Wissen über die ganze Hierarchie, sondern nur über Nachbarklassen haben. Dies reduziert die Kopplung! Demeter-Prinzip:
MehrAdvanced Software Engineering WS0910 Kapitel3. Dr. Dominik Haneberg
Advanced Software Engineering WS0910 Kapitel3 Dr. Dominik Haneberg REFACTORING 26.01.2010 Advanced Software Engineering 2 Inhalte dieses Kapitels Was ist Refactoring? Wozu und wann refactorn? Wie geht
MehrKlassen sollten nicht Wissen über die ganze Hierarchie, sondern nur über Nachbarklassen haben. Dies reduziert die Kopplung!
Kapitel 11 Refactoring 11.1 Die Demeter-Regel (Lieberherr 89) Klassen sollten nicht Wissen über die ganze Hierarchie, sondern nur über Nachbarklassen haben. Dies reduziert die Kopplung! Demeter-Prinzip:
Mehr86 Software Engineering, SoSe 07, WSI, D. Huson, (Original Author: A. Zeller), 2. Juli 2007
86 Software Engineering, SoSe 07, WSI, D. Huson, (Original Author: A. Zeller), 2. Juli 2007 Hinweis Die Wahlen zum AStA, dem Senat sowie zu den Fakultätsräten der Universität Tübingen finden am Mittwoch,
MehrAdvanced Software Engineering WS0910 Kapitel3. Dr. Dominik Haneberg
Advanced Software Engineering WS0910 Kapitel3 Dr. Dominik Haneberg REFACTORING 01.02.2010 Advanced Software Engineering 2 Inhalte dieses Kapitels Was ist Refactoring? Wozu und wann refactorn? Wie geht
MehrKapitel 11 Kapitel 11 Refactoring
Vorlesung Softwaretechnologie 2007/8 Dr. Günter Kniesel R O O T S Kapitel Kapitel Refactoring "Refactoring" Einstiegs-Beispiel Refactoring: Schritt für Schritt Beispiel: Extract Method Indikationen für
MehrVorlesung Softwaretechnologie. Wintersemester este 2009 R O O T S. Refactoring. Stand:
Vorlesung Softwaretechnologie Wintersemester este 2009 R O O T S Kapitel 0 Refactoring Stand: 28.02.2009 "Refactoring" Einstiegs-Beispiel Refactoring: Schritt für Schritt Beispiel: Extract Method Indikationen
MehrVorlesung Softwaretechnologie. Wintersemester este 2008 R O O T S. Refactoring. Stand: (Selbsttestfolie eingefügt)
Vorlesung Softwaretechnologie Wintersemester este 2008 R O O T S Kapitel 0 Refactoring Stand: 5.02.2009 (Selbsttestfolie eingefügt) "Refactoring" Einstiegs-Beispiel Refactoring: Schritt für Schritt Beispiel:
MehrKapitel 10 Refactoring
Vorlesung Softwaretechnologie Wintersemester 204/5 R O O T S Kapitel 0 Refactoring Stand: 30.0.205 Was ist überhaupt Refactoring? Refactoring (noun): a change made to the internal structure of software
MehrKapitel 11 Refactoring
Vorlesung Softwaretechnologie Wintersemester 203/4 R O O T S Kapitel Refactoring Stand: 22..204 "Refactoring" Einstiegs-Beispiel Refactoring: Schritt für Schritt Beispiel: Extract Method Indikationen für
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
MehrRefactoring. Dominique Steiner 1 und Monica De Donato 2. dedom1@bfh.ch
Refactoring Dominique Steiner 1 und Monica De Donato 2 1 Berner Fachhochschule Technik und Informatik, 2502 Biel, CH, steid3@bfh.ch, 2 Berner Fachhochschule Technik und Informatik, 2502 Biel, CH, dedom1@bfh.ch
MehrKapitel 11 Refactoring
Vorlesung Softwaretechnologie Wintersemester 20 R O O T S Kapitel Refactoring Stand: 25..202 "Refactoring" Einstiegs-Beispiel Refactoring: Schritt für Schritt Beispiel: Extract Method Indikationen für
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
MehrRefactoring Transformationen. Martin Freund Januar 2003 Seminar Refactoring in extreme Programming AG Kastens Universität Paderborn
Refactoring Transformationen Martin Freund bbl@upb.de Januar 2003 Seminar Refactoring in extreme Programming AG Kastens Universität Paderborn Gliederung 1. Transformationen-Übersicht 2. Beispiel: Methode
Mehr2 + 1, 50 pro Tag ab dem 3. Tag. 1, 50 plus 1, 50 pro Tag ab dem 4. Tag
Fallstudie: Videothek-Verwaltung Aufgabenstellung Abrechnung einer Videothek: 3 Arten von Videos Normalpreis Neuerscheinung Kindervideos 2 + 1, 50 pro Tag ab dem 3. Tag 3 pro Tag 1, 50 plus 1, 50 pro Tag
MehrVorlesung Software-Reengineering
Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2007/08 Überblick I 1 Refactoring Refactorings
MehrVorlesung Software-Reengineering
Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke 1 1 Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2005/06 Überblick I 1 Refactoring 1 Refactoring
MehrRefactoring. Uschi Beck
Refactoring Uschi Beck uschibeck@web.de Gliederung Was ist Refactoring Definition, Einordnung in das Seminar Motivation Testen Code-Smells Katalog von Refactorings Aufbau, Beispiele Design Patterns als
MehrMichael C. Feathers. Legacy Code. Effektives Arbeiten mit. Refactoring und Testen bestehender Software
Michael C. Feathers Effektives Arbeiten mit Legacy Code Refactoring und Testen bestehender Software Vorwort................................................... 13 Geleitwort.................................................
MehrRefactoring. Vortrag im Rahmen des Softwareprojekts: Übersetzerbau. Referenten: Vivienne Severa Alpin Mete Sahin Florian Mercks. Datum:
Refactoring Vortrag im Rahmen des Softwareprojekts: Übersetzerbau Referenten: Vivienne Severa Alpin Mete Sahin Florian Mercks Datum: 20.06.2013 Überblick Einführung Refactoring im Einsatz Werkzeugunterstützung
MehrJava Einführung Vererbung und Polymorphie. Kapitel 13
Java Einführung Vererbung und Polymorphie Kapitel 13 Inhalt Klassifikation (UML) Implementierung von Vererbungshierarchien Überschreiben von Methoden Polymorphismus: Up-Casting und Dynamisches Binden Schlüsselwort
MehrEinführung in die Objektorientierung
Rainer Schmidberger Rainer.Schmidberger@informatik.uni-stuttgart.de Objektorientiert daisy : Kunde 2. angebot Nein Prozedural Schleife über alle Projekte Noch was zu tun? Manager informieren... Ja Daten
MehrSeminar: CASE-Tools WS 06/ Refactoring. Thomas Löffler
Seminar: CASE-Tools WS 06/07 31.01.2007 Refactoring Thomas Löffler Überblick 1. Einführung: Refactoring Was ist das? Warum Refactoring? Ziele 2. Vorgehen Wo wird refactorisiert? Beispiele 3. Refactoringtools
MehrKonzepte der Programmiersprachen
Konzepte der Programmiersprachen Sommersemester 2010 4. Übungsblatt Besprechung am 9. Juli 2010 http://www.iste.uni-stuttgart.de/ps/lehre/ss2010/v_konzepte/ Aufgabe 4.1: Klassen in C ++ Das folgende C
MehrVererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz
Einführung in C++ Vererbung I Durch Vererbung können aus bereits bestehenden Klassen neue Klassen konstruiert werden. Die neue abgeleitete Klasse erbt dabei die Daten und Methoden der sog. Basisklasse.
MehrRefactoring. Programmiermethodik. Eva Zangerle Universität Innsbruck
Refactoring Programmiermethodik Eva Zangerle Universität Innsbruck Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle Themen
Mehr19. Vererbung und Polymorphie
667 19. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6
MehrObjektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)
Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester
MehrEffektives Arbeiten mit Legacy Code
Effektives Arbeiten mit Legacy Code Refactoring und Testen bestehender Software von Michael C. Feathers 1. Auflage Effektives Arbeiten mit Legacy Code Feathers schnell und portofrei erhältlich bei beck-shop.de
MehrBeispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung
Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]
MehrRefactoring I. Nach Martin Fowler - Refactoring
Refactoring I Nach Martin Fowler - Refactoring Kapitel 6 : Methoden zusammenstellen Kapitel 9 : Bedingte Ausdrücke vereinfachen Kapitel 10: Methodenaufrufe vereinfachen - Mario Boley - Methoden zusammenstellen
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte
MehrSoftwaretechnik WS 16/17. Übungsblatt 01
Softwaretechnik WS 16/17 Übungsblatt 01 Was ist eine Klasse? Definition der Object Management Group: A class describes a set of objects that share the same specifications of features, constraints, and
MehrVererbung und Polymorphie
Vererbung und Polymorphie Marc Satkowski, Sascha Peukert 29. September 2016 C# Kurs Gliederung 1. Methodenüberladung 2. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 13: Interfaces Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme 1. Teil: Interfaces Motivation Eigenschaften Besonderheiten Anonyme Klassen Lambda-Ausdrücke Praxis:
MehrKapitel 3 Software Quality II
Kapitel 3 Software Quality II Software Architecture, Quality, and Testing FS 2016 Prof. Dr. Jana Koehler jana.koehler@hslu.ch Agenda Heute Was ist Refactoring? Problem des Designverfalls Wann wird Refactoring
MehrKlausur Grundlagen der Programmierung
Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel
MehrAlgorithmen und Programmierung II
Algorithmen und Programmierung II Vererbung Prof. Dr. Margarita Esponda SS 2012 1 Imperative Grundbestandteile Parameterübergabe String-Klasse Array-Klasse Konzepte objektorientierter Programmierung Vererbung
MehrObjektorientierung (OO)
Objektorientierung (OO) Objekte haben Zustände (oder Eigenschaften, Attribute) und Verhalten Zustände: Objektvariablen (in Java auch fields) Verhalten (oder Aktionen): Methoden (methods, Funktionen) members
Mehr7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure
7. Objektorientierte Softwareentwicklung/3 Informatik II für Verkehrsingenieure Überblick FOLGENDE BEGRIFFE/PRINZIPIEN SOLLTEN BEKANNT SEIN Objekte Klasse Attribute Fähigkeiten ZIEL DER HEUTIGEN LEHRVERANSTALTUNG
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrObjektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein
Objektorientierung Klassen und Objekte Dr. Beatrice Amrhein Überblick Konzepte der Objektorientierten Programmierung Klassen und Objekte o Implementierung von Klassen o Verwendung von Objekten 2 Konzepte
MehrInfo B VL 11: Innere Klassen/Collections
Info B VL 11: Innere Klassen/Collections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 11: Innere Klassen/Collections
MehrGrundzüge der Programmierung. Wiederverwendung VERERBUNG
Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse
MehrProgrammierparadigmen
Programmierparadigmen Paradigma = Denkweise oder Art der Weltanschauung klassische Einteilung: Programmiersprache imperativ deklarativ prozedural objektorientiert funktional logisch Zusammenhänge tatsächlich
MehrTheorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
MehrInhaltsverzeichnis. Kurseinheit 1. Kurseinheit 2
iii Inhaltsverzeichnis Kurseinheit 1 1 Von der Aufgabenstellung zum Programm... 1 1.1 Motivation... 1 1.2 Softwareentwicklung... 2 1.3 EXKURS: Unified Modeling Language (UML)... 4 2 Anforderungsanalyse...
MehrEinleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens
Grundlagen von C Jonas Gresens Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität
MehrObjektorientierte Programmierung mit C++ SS 2007
Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string
MehrObjects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0
Objects First With Java A Practical Introduction Using BlueJ Mehr über Vererbung Exploring polymorphism 1.0 Zentrale Konzepte dieses Kapitels Methoden-Polymorphie statischer und dynamischer Typ Überschreiben
MehrObjektorientierte Programmierung Studiengang Medieninformatik
Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 2 22.03.2017 Was bisher geschah... Klassen und Objekte Attribute und Methoden Klasse Bruch
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 09: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes
MehrSoftware-Restrukturierung
0/24 Software-Restrukturierung Andreas Zeller Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken Restrukturierung 1/24 Restrukturierung ist nach dem Reverse Engineering (Programmverstehen)
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
MehrVorlesung Software-Reengineering
Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2009/10 Überblick I 1 Refactoring Refactorings
MehrSE2-6. Übung Johannes Bürdek
SE2-6. Übung 11.12.2014 Johannes Bürdek johannes.buerdek@es.tu-darmstadt.de Fragen und Support: se2@es.tu-darmstadt.de oder ins Forum: https://moodle.tu-darmstadt.de/mod/forum/view.php?id=56674 ES Real-Time
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 11: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes
Mehr1 Abstrakte Klassen, finale Klassen und Interfaces
1 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrSmallTalk - Eine kurze Einführung
SmallTalk - Eine kurze Einführung Andreas Lochbihler Lehrstuhl Programmierparadigmen Universität Karlsruhe 15. Juni 2009 SmallTalk Entwickelt seit Anfang der 70er bei XEROX PARC Alan Kay, Dan Ingalls,
MehrGrundlagen C und C++ Einheit 04: Weitere Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme
Grundlagen C und C++ Einheit 04: Weitere Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Teil 1: Weitere Grundlagen von C++ Das assert Statement File Input und
MehrJavakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
MehrImplementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
MehrVorlesung Software-Reengineering
Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2010/11 Überblick I Refactoring Refactorings:
MehrAnwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie
Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW,
Mehr12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell
Klassen - Technisch Eine Klasse ist eine Einheit mit einem Namen, die Daten und Funktionalität beinhaltet 12. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, Kapselung,
MehrFachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn. Testen. Tutorial im Rahmen des Software(technik)praktikums SS 2012
Testen Tutorial im Rahmen des Software(technik)praktikums SS 2012 Grundlagen (1) Software ist ein fundamentales Element in der Softwarequalitätssicherung Software wird am häufigsten eingesetzt Viele Organisationen
Mehr10. OLAPLINE-Anwendertreffen
10. OLAPLINE-Anwendertreffen 26. und 27. April 2017 Schloss Garath Düsseldorf Zwei Tage Weiterbildung und Networking integriert: Vorträge, Workshops und Erfahrungsaustausch rund um TM1 JAVA EXTENSIONS
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 10: Mehr zur Vererbung und abstrakte Klassen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Mehr zur Vererbung Methoden vererben und überschreiben
MehrEine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.
Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,
MehrPrinzipien der objektorientierten Programmierung (OOP)
Die Ziele der OOP sind: - bessere Warbarkeit - Wiederverwendbarkeit 1.) Datenkapselung Prinzipien der objektorientierten Programmierung (OOP) Komplexe Datenstrukturen (wie zb ein Stack) werden vom Anwendungsprogramm
Mehr18. Vererbung und Polymorphie
590 18. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume 591 -(3-(4-5))*(3+4*5)/6
MehrAllgemeines - Prinzipien
OOP - Prinzipien Allgemeines - Prinzipien OO modelliert die reale Welt als System interagierender Objekte Objekt = gedankliche oder reale Einheit in der Umwelt und/oder in Software Klar definierte Schnittstellen
MehrJan Schumann, G+J Manuel Pichler, Trainer & Consultant - Qafoo. Statische Codeanalyse wirklich effektiv nutzen
Jan Schumann, G+J Manuel Pichler, Trainer & Consultant - Qafoo Statische Codeanalyse wirklich effektiv nutzen Über uns Jan Schumann Jahrgang 1976 System- / Softwarearchitekt Entwickler von: PHP_Depend,
MehrEinstieg in die Informatik mit Java
1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition
MehrAlgorithmen und Programmierung III WS 05/06
Algorithmen und Programmierung III WS 05/06 Übungsblatt 4 - Abgabe vor der Vorlesung 15.11.05 Aufgabe 0 (Wiederholung) [Optional] Ausnahmen (throw, catch, finally, throws, Behandlung, Laufzeitausnahmen,
MehrGliederung der Folien
1 Gliederung der Folien 1. Einführung 1.1. Gliederung 1.2. Literatur 1.3. Einstieg in Java 1.3.1. Geschichte von Java 1.3.2. Hello World 1.3.3. Übersetzen eines Java-Programms 1.4. Die Entwicklungsumgebung
Mehr1 Klassen anlegen und Objekte erzeugen
Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a
MehrKapitel 4: Klassen und Unterklassen
Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 4: Klassen und Unterklassen Folie 54 : Unterklassen Die Bildung von Unterklassen und das Konzept der Vererbung sind
MehrProgrammieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik
Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Prinzip der Vererbung: Aus
MehrLetztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);
Letztes Mal static int ggt(int a, int b) { if (a == b) return a; else if (a > b) } return ggt(a-b,b); else if (a < b) return ggt(a,b-a); Darf hier nicht stehen! Compiler sagt: Missing return statement
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
MehrPolymorphismus 179. Function.h. #include <string>
Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function
MehrKapitel 5: Interfaces
Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 5: Interfaces Folie 82 : Einleitung Betrachtet man die Programmierleistung für ein Produkt über einen längeren Zeitraum,
MehrProgrammieren 1 09 Vererbung und Polymorphie
Programmieren 1 09 Vererbung und Polymorphie Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 I. VERERBUNG 2 2 Vererbung Von Interfaces übernehmen
MehrObjektorientierte Programmierung und Klassen
Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 16.5.07 G. Bohlender (IANM UNI Karlsruhe) OOP
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
Mehr14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch
Klassen (Java) vs. Records (Pascal) 14. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung Pascal RECORDs in Pascal sind reine
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
Mehr7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik
7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik:
MehrSpezifikation, Klassen, Schnittstellen in Java. 2.4 Datenabstraktion, Objektorientierung, Java
Spezifikation, Klassen, Schnittstellen in Java 2.4 Datenabstraktion, Objektorientierung, Java 2.4.1 Grundlegende Begriffe der Objektorientierung (s. auch Alp2) Klassen sind wie Module eine Einheit der
MehrÜberblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele
Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen
MehrObjektorientierte Programmierung (OOP)
orientierte Programmierung (OOP) 1. Motivation Die objektorientierte Sichtweise der Welt Als Motivation für die OOP sieht man sich am besten die reale Welt an: Die reale Welt besteht aus "en", z. B.: Gegenstände,
Mehr4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:
4. Vererbung Grundlagen der Vererbung 4. Vererbung 4. Vererbung Grundlagen der Vererbung Idee der Vererbung Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende
MehrJava Einführung Abstrakte Klassen und Interfaces
Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer
MehrProgrammieren in C++ Überladen von Methoden und Operatoren
Programmieren in C++ Überladen von Methoden und Operatoren Inhalt Überladen von Methoden Überladen von Operatoren Implizite und explizite Konvertierungsoperatoren 7-2 Überladen von Methoden Signatur einer
Mehr