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

Slides:



Advertisements
Ähnliche Präsentationen
Dr. Andreas Winter Sommersemester 2007 Einführung in die Software-Entwicklung © Institut für Informatik Programmier-Richtlinien vgl. auch
Advertisements

Java: Dynamische Datentypen
Informatik 1 Übung 4.
Clean Code Software-Entwicklung als Handwerkskunst Thomas Nagel, November 2011.
Der Foliensatz ist unter einer Creative Commons-Lizenz lizenziert:
Problemlösen am Beispiel des Rückwärtsarbeitens
Stichwortverzeichnis
Umweltbezogene Entscheidungen - multidimensionale Bewertungsverfahren -
Elektro-Skateboards Teil I Grundlagen
Stichwortverzeichnis
Kapitel 4 Traveling Salesman Problem (TSP)
Lieber Leser, liebe Leserin,
Inhaltsverzeichnis In der vorliegenden Präsentation finden Sie unter anderem Antworten auf folgende Fragen… warum ist eine Gesetzesinitiative zum Betriebliches.
Einführung in Web- und Data-Science
MasterBAV© Die neue Generation BAV
PSG II Neuer Pflegebedürftigkeitsbegriff und dessen Begutachtung (NBA)
Medientechnische Infrastrukturen für virtuelle und lokale Lernräume
Wissensmanagement im Zeitalter von Digitaler Transformation
Mathematik 10.
Vorlesung Wasserwirtschaft & Hydrologie I
Frauen- Männerriegen KONFERENZ
Aktuelle Aspekte des Europäischen Zivilprozessrechts
Non-Standard-Datenbanken
Amand Fäßler 3. Januar 2017; RC Bregenz
Non-Standard-Datenbanken
Sortieren auf Multiprozessorrechnern
Standorte, Verflechtungen und regionale Disparitäten VO 5
„Status cw-linac“ Motivation Timeline and status Testing of components
Produktionsfaktoren 1 Ökonomische Handlungsprinzipen
Algorithmen und Datenstrukturen
Slađana Dmitrović 8. Klasse
traduzione in italiano
LOGICON Caries Detector Software Beispielanalysen
Vorlesungseinheit 6 – Prüfung von Zusammenschlüssen auf ihre Vereinbarkeit mit dem Gemeinsamen Markt (Art. 2 FKVO)
WOOD VETIA.
Morphonologie der Verben 2 Präteritum
Kaufe einen Hund !!!.
TU Chemnitz. WS 2006/2007 Philosophische Fakultät
Vorlesung Wasserwirtschaft & Hydrologie I
Vorlesung Eigenspannungen in Bauteilen und Werkstoffen
2. Dynamik Zur vollständigen Beschreibung und Erklärung von Bewegungen müssen die Ursachen für diese Bewegungen (Kräfte, Drehmomente) und die Eigenschaften.
Industrie 4.0 für Auszubildende
Den Elementarteilchen auf der Spur
Projekt 01: LCR-Meter Jonas Krieger und Armin Zörkler SS 2017
Algorithmen und Datenstrukturen
Forschungsmethoden in der Teilchenphysik
Evaluation & Forschungsstrategien
Vorlesung Eigenspannungen in Bauteilen und Werkstoffen
Preprocessing Ein wenig Theorie der astronomischen Bildvorverarbeitung. „Es gibt nichts Praktischeres als eine gute Theorie.“ (D.Hilbert, I.Kant, K. Lewin)
Komplexe Wechselstromrechnung
Das Standardmodell der Teilchenphysik im Schulunterricht
Winkel B A U S T E L L E Die einzelnen Bausteine entstehen nach einander und sind noch nicht sinnvoll geordnet!
Varianzfortpflanzung
Abiturprüfung Mathematik 2017 Baden-Württemberg Allgemeinbildende Gymnasien Pflichtteil Lösungen
Algorithmen und Datenstrukturen
Philipp Lindenau, Claudia Behnke Dillingen | 04. –
Grundlagen der computergestützten Produktion und Logistik W1332
Allgemein- und Viszeralchirurgie Theresienkrankenhaus und St
Algorithmen und Datenstrukturen
Vorläufige Ergebnisse der Testentwicklung
<angestrebtes Amt> - <Name> (1)
Kapitel 4 Entwicklungsunterschiede und internationaler Handel
Herzlich willkommen! St. Johann, Juli 2017
Lernentwicklungsgespräch
Integrierte Projekte 2017/2018
Jazz- und Bluesharmonielehre für «Praktiker» «Nicht-Notenleser», «Nicht-Tonartsichere» «Keyboarder» aber auch andere Instrumentalisten Weitere Unterlagen:
Der Personalrat … … Personalratsvorsitzende/r und Stellvertretung
GTI – ÜBUNG 11 Friedrich-Alexander Universität Erlangen-Nürnberg Jan Spieck AUTOMATEN.
Sylvia Melzer, Ralf God, Thorsten Kiehl, Ralf Möller, Michael Wessel
 Präsentation transkript:

FhFh 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, )

"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: 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.

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:

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;

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); }

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