f h
DESCRIPTION
F h. Fachhochschule Flensburg. Refactoring Überarbeiten von Programmcode Hans Werner Lang. Software ist Literatur. Software wird von Menschen geschrieben und von Menschen gelesen. Software. - PowerPoint PPT PresentationTRANSCRIPT
Fh Fachhochschule Flensburg
RefactoringÜberarbeiten von Programmcode
Hans Werner Lang
Software ist Literatur
Für mich ist die Literatur eine Form der Freude. Wenn wir etwas mit Mühe lesen, so ist der Autor gescheitert.
Software
Software wird von Menschen geschrieben und von Menschen gelesen.
H. W. Lang (deutscher Informatiker)Jorge Luis Borges (argentinischer Schriftsteller, 1899-1986)
"Weniger Teile"Schild im Büro eines japanischen Unternehmensgründers, der in Deutschland studiert hatte
"Make it work first before you make it work fast."
"Essentially, three: Revise, revise, revise."C.A.R. Hoare auf die Frage, ob er Tipps habe, wie man einen guten wissenschaftlichen Artikel schreibt
Einfachheit
Rapid Prototyping
Refactoring
Prinzipien der Softwarekonstruktion
"Ich bin ein Berliner." (J.F. Kennedy)
"Wir sind Papst." (Bild-Zeitung)
"Ja, wir sind ein Paar." (Anne Will)
Einfachheit
Programme sollen sein ...
einfach
knapp
lesbar
elegant
schön
korrekt
Lesbarkeit von Programmen
Benennung von Klassen, Variablen, Funktionen
Formatierung (in Python kein Thema)
Kommentare
Benennung von Klassen, Variablen, Funktionen
Klassen: Position, Placement, Client
Variablen: i, p, pos, lastmove, startfields
Funktionen:
Rückgabetyp
boolean: isValid(), hasNext(), comesDigit()
void: findMove(), setPosition()
andere:evaluationOf(), bestMove(), getPosition()
Konstanten: G, MAX_SIZE, ALPHANUMERIC
Sprache: Englisch
Benennung von Variablen
Lokale Variablen, Parameter: kurzif array_to_be_sorted[currentIndex1-1]>array_to_be_sorted[currentIndex1]: temporaryValue=array_to_be_sorted[currentIndex1-1] array_to_be_sorted[currentIndex1-1]=array_to_be_sorted[currentIndex1] array_to_be_sorted[currentIndex1]=temporaryValue
Besser so:
if a[i-1]>a[i]: t=a[i-1] a[i-1]=a[i] a[i]=t
Globale Variablen, Objektvariablen: länger
lastmove, startfields usw.
Kommentare
# prueft, ob alle vorhandenen Nachbarfelder# von Position p frei sinddef hasOnlyFreeNeighbours(self, p):
self.hand.clear() # alle Steine entfernen
vor Funktionen:
hinter Anweisungen:
i=i+1 # i um 1 erhoehen
nicht:
EinfachheitSonderfälle vermeiden
Berechnung von n!
if (n==0 || n==1) f=1;else{ f=n; for (i=n-1; i>1; i=i-1)
f=f*i;}
Besser so:
f=1;for (i=1; i<=n; i=i+1) f=f*i;
EleganzQuicksort
void quicksort (int lo, int hi){ int i=lo, j=hi, x=a[(lo+hi)/2]; while (i<=j) { while (a[i]<x) i++; while (a[j]>x) j--; if (i<=j) exchange(i++, j--); } if (lo<j) quicksort(lo, j); if (i<hi) quicksort(i, hi);}
Refactoring code
double potentialEnergy(){ return mass*9.81*height;}
static final double G=9.81;
double potentialEnergy(){ return mass*G*height;}
Introduce symbolic constant
double amountReceived(Date start, Date end){ ...}
double amountDelivered(Date start, Date end){ ...}
class DateRange{ Date start, end;}
double amountReceived(DateRange range){ ...}double amountDelivered(DateRange range){ ...}
Introduce parameter object
class Complex{ public double re, im;
}
class Complex{ private double re, im;
public getRe() { return re; }
public getRe() { return re; }
}
Encapsulate field
void printOwing(){ printBanner();
// print details System.out.println("Name: "+name); System.out.println("Amount: "+amount);}
void printOwing(){ printBanner(); printDetails();}
void printDetails(){ System.out.println("Name: "+name); System.out.println("Amount: "+amount);}
Extract method
class Order{ double getPrice() { double baseprice, secondaryprice; // long computation of price .... }}
class Order{ double getPrice() { return new PriceCalculator.compute(); }}
class PriceCalculator{ private double baseprice, secondaryprice; public double compute() { // computation of price }}
Replace method with object
class Stack extends Vector{ public void push(Object element) { insertElement(element, 0); }}
class Stack{ private Vector v;
public void push(Object element) { v.insertElement(element, 0); }}
Replace inheritance with delegation