Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

FhFh Fachhochschule Flensburg Refactoring Überarbeiten von Programmcode Hans Werner Lang.

Ähnliche Präsentationen


Präsentation zum Thema: "FhFh Fachhochschule Flensburg Refactoring Überarbeiten von Programmcode Hans Werner Lang."—  Präsentation transkript:

1 FhFh Fachhochschule Flensburg Refactoring Überarbeiten von Programmcode Hans Werner Lang

2 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)

3 "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

4 "Ich bin ein Berliner." (J.F. Kennedy) "Wir sind Papst." (Bild-Zeitung) "Ja, wir sind ein Paar." (Anne Will) Einfachheit

5 Programme sollen sein... einfach knapp lesbar elegant schön korrekt

6 Lesbarkeit von Programmen Benennung von Klassen, Variablen, Funktionen Formatierung (in Python kein Thema) Kommentare

7 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

8 Benennung von Variablen Lokale Variablen, Parameter: kurz if 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.

9 Kommentare # prueft, ob alle vorhandenen Nachbarfelder # von Position p frei sind def hasOnlyFreeNeighbours(self, p): self.hand.clear() # alle Steine entfernen vor Funktionen: hinter Anweisungen: i=i+1 # i um 1 erhoehen nicht:

10 Einfachheit Sonderfä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;

11 Eleganz Quicksort 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); }

12

13 Refactoring code

14 double potentialEnergy() { return mass*9.81*height; } static final double G=9.81; double potentialEnergy() { return mass*G*height; } Introduce symbolic constant

15 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

16 class Complex { public double re, im; } class Complex { private double re, im; public getRe() { return re; } public getRe() { return re; } Encapsulate field

17 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

18 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

19 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


Herunterladen ppt "FhFh Fachhochschule Flensburg Refactoring Überarbeiten von Programmcode Hans Werner Lang."

Ähnliche Präsentationen


Google-Anzeigen