Software Engineering II Refactoring, Style, Software Metriken

Größe: px
Ab Seite anzeigen:

Download "Software Engineering II Refactoring, Style, Software Metriken"

Transkript

1 Software Engineering II Refactoring, Style, Software Metriken Prof. Dr. Axel Böttcher 16. Dezember 2012

2 Wiederholung Technische Schulden geek & poke, (Creative Commons Attribution 3.0 Unported License)

3 Wiederholung Technische Schulden geek & poke, (Creative Commons Attribution 3.0 Unported License)

4 Wiederholung Technische Schulden geek & poke, (Creative Commons Attribution 3.0 Unported License)

5 Refactoring

6 Was ist hier faul?

7 Definition Refactoring ist ein Vorgang, der die Struktur von Software verändert, ohne das externe Verhalten (Funktion) zu ändern.

8 Definition Refactoring ist ein Vorgang, der die Struktur von Software verändert, ohne das externe Verhalten (Funktion) zu ändern. Mühevolle Detailarbeit (minimalinvasiv).

9 Definition Refactoring ist ein Vorgang, der die Struktur von Software verändert, ohne das externe Verhalten (Funktion) zu ändern. Mühevolle Detailarbeit (minimalinvasiv). Grundlage sind Unit Tests, mit denen kontinuierlich die Funkion überprüft werden kann.

10 Definition Refactoring ist ein Vorgang, der die Struktur von Software verändert, ohne das externe Verhalten (Funktion) zu ändern. Mühevolle Detailarbeit (minimalinvasiv). Grundlage sind Unit Tests, mit denen kontinuierlich die Funkion überprüft werden kann. Ausgangspunkt sind üble Gerüche (smells), für die eine gewisse Sensibilität erforderlich ist.

11 Definition Refactoring ist ein Vorgang, der die Struktur von Software verändert, ohne das externe Verhalten (Funktion) zu ändern. Mühevolle Detailarbeit (minimalinvasiv). Grundlage sind Unit Tests, mit denen kontinuierlich die Funkion überprüft werden kann. Ausgangspunkt sind üble Gerüche (smells), für die eine gewisse Sensibilität erforderlich ist. Es gibt Standard-Techniken, die teilweise von IDEs unterstützt werden. Eine gute Übersicht steht unter

12 Extremfall Wie refaktorisiert man solche Software:

13 Ausgabe

14 Code Smells Eine Übersicht Code-Duplizierung Lange Methode Große Klasse Klasse zu umfangreich Faule Klasse Klasse leistet zu wenig Lange Parameterliste mehr Parameter übergeben als nötig Nichtssagender Name Kommentare Wo notwendig, ist häufig der Code schlecht... Eine umfangreiche Liste weiterer Smells:

15 Duplicated Code Der absolute Klassiker! Abhilfe: Methode extrahieren Klasse extrahieren Methode nach oben (d.h. in Basisklasse) verschieben Template-Methode bilden

16 Duplicated Code: Extract Method

17 Schlechte, nichtssagende Namen Abhilfe: Umbenennen (Rename) Gute Namen sind sehr wichtig Mit fortschreitender Arbeit ändern sich Namen und werden angepasst Umbenennung kann gut automatisiert werden; ist ein syntax-sensitiver Vorgang Automatisierung klappt auch Klassenübergreifend

18 Kommentare geek & poke, (Creative Commons Attribution 3.0 Unported License)

19 Kommentare geek & poke, (Creative Commons Attribution 3.0 Unported License)

20 Kommentare geek & poke, (Creative Commons Attribution 3.0 Unported License)

21 Code Smells Kommentare (I) 1 private int a = 0; // a wird mit 0 i n i t i a l i s i e r t Der Kommentar beschreibt exakt, was auch im Code steht Es benötigt mehr Zeit, den Kommentar zu lesen als den Code Redundanter Kommentar entfernt 1 private int a = 0;

22 Code Smells Kommentare (II) 1 private int i ; // Enthaelt den Fehlercode Hier erklärt der Kommentar die Bedeutung der Variablen i Doppelter Code Smell: Nichtssagender Name + unötiger Kommentar Aussagekräftige Variable verwendet 1 private int errorcode ;

23 Beispiel Beispiel aus java.lang. Integer. tostring (): 1 // I use the i n v a r i a n t d i v i s i o n by m u l t i p l i c a t i o n t r i c k to 2 // a c c e l e rate Integer. tostring. In p a r t i c u l a r we want to 3 // avoid d i v i s i o n by // 5 // The t r i c k has roughly the same performance c h a r a c t e r i s t i 6 // as the c l a s s i c Integer. tostring code on a non JIT VM. 7 // The t r i c k avoids. rem and. div c a l l s but has a longer code 8 // path and i s thus dominated by dispatch overhead. In the 9 // JIT case the dispatch overhead doesn t e x i s t and the 10 // t r i c k i s considerably f a s t e r than the c l a s s i c code. 11 // 12 // TODO FIXME : convert ( x 52429) into the equiv s h ift add 13 // sequence. 14 // 15 // RE: Division by I n varia nt Integers using M u l t i p l i c a t i o n 16 // T Gralund, P Montgomery 17 // ACM PLDI //

24 Lange Methode Nachteile langer Methoden: lassen sich schwer testen erledigen häufig verschiedene Dinge es lassen sich schwer spezialisierte Subklassen bilden sind potenzielle Quellen für Fehler, da wenig transparent

25 Code Smell Lange Methode 1 (I) 1 public void debit ( fl o at amount ) { 2 // deduct amount from balance 3 balance = amount ; 4 5 // record transaction 6 transactions. add (new Transaction ( true, amount ) ) ; 7 8 // update l a s t debit date 9 Calendar calendar = Calendar. getinstance ( ) ; lastdebitdate = calendar. get ( Calendar.DATE) + / + 12 calendar. get ( Calendar.MONTH) + / + 13 calendar. get ( Calendar.YEAR ) ; 14 } Extract Method dreifach 1 Code smell of the week,

26 Code Smell Lange Methode (II) 1 public void debit ( fl o at amount ) { 2 deductamountfrombalance ( amount ) ; 3 recordtransaction (amount, true ) ; 4 updatelastdebitdate ( ) ; 5 } 6 7 private void deductamountfrombalance ( f loat amount ) { 8 balance = amount ; 9 } private void recordtransaction ( f loat amount, boolean isdebit ) { 12 transactions. add (new Transaction ( isdebit, amount ) ) ; 13 } private void updatelastdebitdate () { 16 Calendar calendar = Calendar. getinstance ( ) ; lastdebitdate = calendar. get ( Calendar.DATE) + / + 19 calendar. get ( Calendar.MONTH) + / + 20 calendar. get ( Calendar.YEAR ) ; 21 }

27 Magic Numbers 1 mins = t o t a l /60; 2 secs = t o t a l 60 mins ; 3 4 hours = mins /60; 5 mins = mins 60 hours ; 6 7 days = hours /24; 8 hours = hours 24 days ; Abhilfe: durch static final Konstante ersetzen (Extract constant):

28 Änderungen am API Änderungen an öffentlichen Methoden eines API sind dann gefährlich, wenn bereits Kunden dieses API verwenden. Besser: deprecaten.

29 Änderungen am API Änderungen an öffentlichen Methoden eines API sind dann gefährlich, wenn bereits Kunden dieses API verwenden. Besser: deprecaten. Ansonsten: Kein Problem ein API zu verbessern.

30 Weitere Smells Smell: Datenklassen (mangelnde Kapselung) Feld Kapseln: Public Felder mit Getter und setter kapseln (diese können beispielsweis ein Eclipse eutomatisch erzeugt werden)

31 Siehe 1 public int hightemp ( int Temp1, i nt Temp2, int Temp3, int Temp4, 2 i nt Temp5) { 3 int HighTemp = 0; 4 i f ((Temp1 >= Temp2) && (Temp1 >= Temp3) && (Temp1 >= Temp4) && (Temp1 >= Temp5)) 5 HighTemp = Temp1; 6 else i f ((Temp2 >= Temp1) && (Temp2 >= Temp3) && (Temp2 >= Temp4) && (Temp2 >= Temp5 7 HighTemp = Temp2; 8 else i f ((Temp3 >= Temp1) && (Temp3 >= Temp2) && (Temp3 >= Temp4) && (Temp3 >= Temp5 9 HighTemp = Temp3; 10 else i f ((Temp4 >= Temp1) && (Temp4 >= Temp3) && (Temp4 >= Temp2) && (Temp4 >= Temp5 11 HighTemp = Temp4; 12 else i f ((Temp5 >= Temp1) && (Temp5 >= Temp3) && (Temp5 >= Temp4) && (Temp5 >= Temp2 13 HighTemp = Temp5; 14 return HighTemp ; 15 }

32 Frage Welcher der folgenden Begriffe beschreibt keinen Code Smell? 1. Code-Duplizierung 2. Rename 3. Lange Methode 4. Magic Number

33 Smell Detection: Programmierstil Code Guarding Wartbarkeit

34 Wartbarkeit ist ein nicht-funktionales Qualitätsmerkmal der Software(-Architektur). Dieser Abschnitt beschäftigt sich damit, welche Hilfsmittel es gibt, Smells automatisiert zu entdecken Smells schon beim Entwickeln zu vermeiden verstehbaren Code zu schreiben wartbaren Code zu schreiben

35 Stil-Richtlinien Stell dir vor es gibt Programmierrichtlinien und keiner hält sich dran. Viele Firmen nutzen interne Richtlinien für den Programmierstil. Bekanntester (wahrscheinlich) Style Guide:

36 Vorteile Vermindert die Fehleranfälligkeit. Verbessert die Lesbarkeit. Erleichtert das Verständnis fremden Codes. Beispiel: Was stimmt an folgendem C-Programm nicht? void calc(int *i, int*j) { *i = *i/*j; }

37 IDE-Integration Es gibt Eclipse-Plugins, um den Programmierstil zu überprüfen, z.b.: (Checkstyle) Das Tool ist weitgehend konfigurierbar:

38 Fehlermuster Neben Entwurfsmustern (Design Patterns) gibt es typische Fehlermuster (Bug Patterns). Echtes Beispiel aus dem Eclipse Code der Verion 3.0 (siehe findbugs.sf.net): 1 i f ( in == null ) 2 try { 3 in. close ( ) ; 4 } Alleine das Verständnis der Bug Patterns bringt großen Erkenntnisgewinn. Teilweise nahe Verwandtschaft zwischen Bug Patterns und Style Rules.

39 Fehlerkategorien Korrektheit auch im Hinblick auf Multithreading. Z.B. String- oder Objektvergleich durch == und!=. Angreifbarkeit durch Schadprogramme. Z.B. durch Rückgabe von Referenzen auf interne Arrays. Effizienz und Design.

40 Weitere Beispiele if(name!= null name.length > 0) log(x.y()); if(x == null) throw new XyzException("x is null"); public Object execute(handler h, Node n){ return execute(h, n); }

41 boolean equals(object o){ Frame f = (Frame)o; return f.getx() == this.x; } C d; if(d instanceof D)...

42 if ( (str.charat(i)>57 str.charat(i)<48) &&!(str.charat(i)==. ) )

43 Eclipse Findbugs Plugin Integriert sich nahtlos in den Mechanismus zum Anzeigen von Fehlern: Je entdecktem potenziellem Bug wird eine Warnung angezeigt:

44 Software Metriken

45 Software Metriken warum und wozu Wer misst, misst Mist Grundsätzliche Schwierigkeit, die Komplexität eines Stück Programms durch eine Zahl (oder mehrere Zahlen) zu messen. Das klassische Maß ist Lines of Code (LOC); dieses ist allerdings wenig aussagekräftig.

46 Cyclomatic Complexity, kurz CC Thomas McCabe, 1976 Sprach- und formatunabhängiges Ist ein Maß für die voneinander unabhängigen Pfade durch ein Programmmodul. Ausgangspunkt: Der Kontrollfluss eines Programms kann durch einen gerichteten Graphen dargestellt werden. Zur Erinnerung: Ein gerichteter Graph besteht aus Knoten (node) und gerichteten Kanten (edge, arc). dabei: Cyclomatic complexity (CC) = E N + 2 E: Anzahl der Kanten des Graphen N: Anzahl der Knoten des Graphen

47 Beispiel für CC=2 1 public Singleton getinstance (){ 2 i f ( theinstance == null ) 3 theinstance = new Singleton ( ) ; 4 return theinstance ; 5 }

48 Beispiel für CC=4 1 public void execcommand( int cmd){ 2 switch (cmd) 3 { 4 case 0: sendcommand (LEFTREV) ; break ; 5 case 1: sendcommand (LEFTSTOP) ; break ; 6 c a se 2: sendcommand (LEFTFWD) ; break ; 7 default : sendcommand (EMERGENCYSTOP) ; br 8 } 9 return ; 10 }

49 Programme mit niedriger zyklomatischer Komplexität sind leichter zu lesen, zu warten und zu testen. Studien belegen einen Zusammenhang zwischen zyklomatischer Komplexität und der Fehleranfälligkeit von Code.: Cyclomatic Complexity Risiko 1-10 einfaches Programm, kaum Risiko etwas komplexer, moderates Risiko komplexes Programm mit hohem Risiko > 50 nicht mehr testbar: Sehr hohes Risiko

50 Tools zur Bestimmung der CC

51 Stabilität Abstractness (Generality) A eines Pakets p: A = Anzahl abstrakter Klassen im Paket Gesamtzahl Klassen im Paket Wertebereich 0 (vollständig konkretes Paket) bis 1 (vollständig abstraktes Paket).

52 Stabilität Abstractness (Generality) A eines Pakets p: A = Anzahl abstrakter Klassen im Paket Gesamtzahl Klassen im Paket Wertebereich 0 (vollständig konkretes Paket) bis 1 (vollständig abstraktes Paket). Afferent Couplings C a eines Pakets p: Die Anzahl an Paketen außerhalb des Pakets p, die von Klassen innerhalb des Pakets abhängen (Vererbung, Assoziation). Efferent Couplings C e eines Pakets p: Die Anzahl an Klassen außerhalb des Pakets, von denen Klassen innerhalb des Pakets p abhängen.

53 Stabilität Abstractness (Generality) A eines Pakets p: A = Anzahl abstrakter Klassen im Paket Gesamtzahl Klassen im Paket Wertebereich 0 (vollständig konkretes Paket) bis 1 (vollständig abstraktes Paket). Afferent Couplings C a eines Pakets p: Die Anzahl an Paketen außerhalb des Pakets p, die von Klassen innerhalb des Pakets abhängen (Vererbung, Assoziation). Efferent Couplings C e eines Pakets p: Die Anzahl an Klassen außerhalb des Pakets, von denen Klassen innerhalb des Pakets p abhängen. Instability I: I = C a + C e Wertebereich Paket mit I = 0 ist maximal stabil und mit I = 1 maximal unstabil. C e

54 ) > I J H =? J A I I 1 I J = > E E J O K J I A H * A H A E? D 0 = K F J E E A I? D A H D = B J A H * A H A E? D

55 Frage Folgende Informationen liegen Ihnen zur Stabilität Ihres Codes vor: C e = 3, C a = 0, Ihr Paket besteht aus 100 Klassen, davon 30 abstrakt. Welcher Punkt im Diagramm beschreibt am besten die Stabilität Ihres Codes?

56 Frage Folgender Kontrollfluss eines Programms ist gegeben. Wie hoch ist das Risiko für die Fehleranfälligkeit des Codes? 1. Kaum Risiko 2. Moderates Risiko 3. Hohes Risiko 4. Sehr hohes Risiko

SE2-6. Übung Johannes Bürdek

SE2-6. Übung Johannes Bürdek SE2-6. Übung 11.12.2014 Johannes Bürdek [email protected] Fragen und Support: [email protected] oder ins Forum: https://moodle.tu-darmstadt.de/mod/forum/view.php?id=56674 ES Real-Time

Mehr

Software-Refactoring. 29. Mai 2013

Software-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

Mehr

4. Vererbung Die Klasse Object. Die Klasse Object

4. Vererbung Die Klasse Object. Die Klasse Object 4. Vererbung Die Klasse Object Die Klasse Object Alle Klassen ohne explizit deklarierte Superklasse haben die Klasse Object als Superklasse. Object gehört zum Paket java.lang. Object verfügt über einige

Mehr

Software-Refactoring. 27. Mai 2015

Software-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

Mehr

Software Engineering. 13. Automatische Code Analyse. Franz-Josef Elmer, Universität Basel, WS 2005/06

Software Engineering. 13. Automatische Code Analyse. Franz-Josef Elmer, Universität Basel, WS 2005/06 Software Engineering 13. Automatische Code Analyse Franz-Josef Elmer, Universität Basel, WS 2005/06 Software Engineering: 13. Automatische Code Analyse 2 Code Analyse: Manuell versus Automatisch Manuelle

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 02: Methoden Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 17 Inhalt Scanner

Mehr

Info B VL 11: Innere Klassen/Collections

Info 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

Mehr

Software-Metriken. Dipl.-Ing.(BA) Henning Sievert <[email protected]> Seminar Software-Entwurf WS 2004/05

Software-Metriken. Dipl.-Ing.(BA) Henning Sievert <email@henningsievert.de> Seminar Software-Entwurf WS 2004/05 Software-Metriken Dipl.-Ing.(BA) Henning Sievert Seminar Software-Entwurf WS 2004/05 Gliederung Einordnung in den Seminar-Kontext Grundlegende Definitionen Klassifikation von

Mehr

Kapitel 3 Software Quality III

Kapitel 3 Software Quality III Kapitel 3 Software Quality III Software Architecture, Quality, and Testing FS 2015 Prof. Dr. Jana Köhler [email protected] Agenda Heute Von Bad Smells zu Refactorings Wie wird Refactoring durchgeführt?

Mehr

Die Klasse java.lang.object. Thorsten Treffer

Die Klasse java.lang.object. Thorsten Treffer Die Klasse java.lang.object Thorsten Treffer 6. Dezember 2003 1 java.lang.object Die Klassenhierarchie von Java kann als Baum aufgezeichnet werden, dessen Wurzel die Klasse Object ist. Mit anderen Worten:

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs 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

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Graphalgorithmen. Graphen

Graphalgorithmen. Graphen (Folie 270, Seite 67 im Skript) Graphen (Folie 271, Seite 67 im Skript) Graphen Definition Ein ungerichteter Graph ist ein Paar (V, E), wobei V die Menge der Knoten und E ( V 2) die Menge der Kanten ist.

Mehr

3. Übungsbesprechung Programmkonstruktion

3. Übungsbesprechung Programmkonstruktion 3. Übungsbesprechung Programmkonstruktion Karl Gmeiner [email protected] November 16, 2011 K Gmeiner ([email protected]) 3. Übungsbesprechung PK November 16, 2011 1 / 22 Rückblick und

Mehr

Refactoring. Uschi Beck

Refactoring. Uschi Beck Refactoring Uschi Beck [email protected] Gliederung Was ist Refactoring Definition, Einordnung in das Seminar Motivation Testen Code-Smells Katalog von Refactorings Aufbau, Beispiele Design Patterns als

Mehr

Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken

Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken Dennis Hardt 21.06.2006 Gliederung Statische Analyse Definition, Arbeitsweise, Werkzeuge Angewandt auf ein Projekt Statische Analyse selbst

Mehr

Softwaremetriken verstehen und nutzen

Softwaremetriken verstehen und nutzen Softwaremetriken verstehen und nutzen Kore Nordmann , Manuel Pichler 17. November 2009 Über uns Kore Nordmann Langzeit PHP Entwickler Speaker auf diversen

Mehr

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung I 2.0 Einfache Java Programme Thomas R. Gross Department Informatik ETH Zürich Uebersicht 2.0 Einfache Java Programme Struktur Namen Output 2 Graphische Darstellung

Mehr

Programmiermethodik 3. Klausur Lösung

Programmiermethodik 3. Klausur Lösung Programmiermethodik 3. Klausur Lösung 9. 1. 2014 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 20 2 16 3 45 4 19 5 20 Gesamt 120 1 Seite 2 von 10 Aufgabe 1) Objekt-Orientierung und Vererbung

Mehr

Programmieren 2 Java Überblick

Programmieren 2 Java Überblick Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 4 Innere Klassen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10

Mehr

Qualitätsmanagement im Projekt

Qualitätsmanagement im Projekt Software-Engineering Qualitätsmanagement im Projekt Vorlesung im Wintersemester 2008/2009 Fakultät Wirtschaftsinformatik Klaus Mairon, M.Sc. Inhalte Messen und Bewerten: Metriken in der Qualitätssicherung

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren

Mehr

Refactoring von Legacy Systemen. Jochen Winzen [email protected] andrena objects ag

Refactoring von Legacy Systemen. Jochen Winzen jochen.winzen@andrena.de andrena objects ag Refactoring von Legacy Systemen Jochen Winzen [email protected] andrena objects ag Was ist ein Legacy System Ein Legacy System hat folgenden Eigenschaften: + Besitzt die geforderte Funktionalität

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert

Mehr

Codequalitätskontrolle mit SonarQube

Codequalitätskontrolle mit SonarQube Codequalitätskontrolle mit SonarQube Wer ist das? Josha von Gizycki Goslarer Seit 2008 bei der Java, Oracle, Webentwicklung, Hacker, Zocker, Rocker Codequalitätskontrolle mit SonarQube - 2 Warum der? Codequalitätskontrolle

Mehr

Javakurs 2013 Objektorientierung

Javakurs 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

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. 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

Mehr

Algorithmen und Datenstrukturen

Algorithmen 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

Mehr

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1 Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten

Mehr

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

Erzeugungsmuster. Kapselung der Objekt-Erzeugung Erzeugungsmuster Kapselung der Objekt-Erzeugung Definition Erzeugungsmuster dienen für die Lose Koppelung, bei der erst zur Laufzeit der Typ des zu erzeugenden Objekts festgelegt wird. Abstract Factory

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Lauftagebuch Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 21 Erstellen einer

Mehr

Anweisungen zur Ablaufsteuerung

Anweisungen zur Ablaufsteuerung Anweisungen zur Ablaufsteuerung if-else switch while do-while for Ausdrücke Ein Ausdruck ist eine Folge von Variablen, Operatoren und Methodenaufrufen, der zu einem einzelnen Wert ausgewertet wird. Operanden

Mehr

Programmieren I. Kapitel 8. Vererbung

Programmieren I. Kapitel 8. Vererbung Programmieren I Kapitel 8. Vererbung Kapitel 8: Vererbung Ziel: Wesentliches objektorientiertes Konzept kennenlernen Subtypen Idee Probleme und Varianten Vererbung in Java dynamische Bindung abstrakte

Mehr

Softwaremetriken verstehen und nutzen

Softwaremetriken verstehen und nutzen Softwaremetriken verstehen und nutzen Manuel Pichler http://manuel-pichler.de PHP Unconference Hamburg 12. September 2009 Über mich Manuel Pichler Total stolzer Papa Jahrgang 1978 Diplom Informatiker Softwarearchitekt

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 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,

Mehr

II.4.2 Abstrakte Klassen und Interfaces - 1 -

II.4.2 Abstrakte Klassen und Interfaces - 1 - 1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.2 Abstrakte Klassen und Interfaces - 1

Mehr

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer Java Kurs Objektorientierung II & die Java Klassenbibliothek Kristian Bergmann und Arthur Lochstampfer Vergleich class Apfel { String farbe; int gewicht; String geerntetin; class Erdbeere { String farbe;

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5. Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1

Mehr

Web-Anwendungen mit Arquillian testen

Web-Anwendungen mit Arquillian testen Michael Kotten open knowledge @michaelkotten @_openknowledge Wozu denn testen? Ich mach doch keine Fehler! Wozu denn testen? > Notwendig bei komplexen Systemen > Sicherung von > Qualität > Funktionalität

Mehr

Konzepte der Programmiersprachen

Konzepte 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

Mehr

Property Based Testing

Property Based Testing Property Based Testing Nicolai Mainiero sidion Testen ist schwer Testen ist schwer Warum? Alle Pfade durch den Code aufzuzählen ist aufwendig. Selbst vermeintlich einfache Systeme können komplex sein.

Mehr

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit

Mehr

Vererbung, Polymorphie

Vererbung, Polymorphie Vererbung, Polymorphie Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 21.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung, Polymorphie 21.1.08

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java 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

Mehr

AuD-Tafelübung T-B5b

AuD-Tafelübung T-B5b 6. Übung Sichtbarkeiten, Rekursion, Javadoc Di, 29.11.2011 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit 3 Stack und Heap Stack Heap 4 Blatt 6 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit

Mehr

Interfaces und Generics

Interfaces und Generics Algorithmen und Datenstrukturen Wintersemester 2012/13 21. Vorlesung Interfaces und Generics Jan-Henrik Haunert Lehrstuhl für Informatik I Übersicht Liste und InsertionSort für Punkte für Objekte beliebiger

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Beispiele 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]

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte 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

Mehr

Programmieren I. Kapitel 5. Kontrollfluss

Programmieren I. Kapitel 5. Kontrollfluss Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

Interface. So werden Interfaces gemacht

Interface. So werden Interfaces gemacht Design Ein Interface (=Schnittstelle / Definition) beschreibt, welche Funktionalität eine Implementation nach Aussen anzubieten hat. Die dahinter liegende Algorithmik wird aber der Implementation überlassen.

Mehr

Informatik II Prüfungsvorbereitungskurs

Informatik II Prüfungsvorbereitungskurs Informatik II Prüfungsvorbereitungskurs Tag 4, 23.6.2016 Giuseppe Accaputo [email protected] 1 Programm für heute Repetition Datenstrukturen Unter anderem Fragen von gestern Point-in-Polygon Algorithmus Shortest

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 [email protected] http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 - ! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete II.4.2 Abstrakte Klassen und Interfaces - 1 - Ähnliche Programmteile public class Bruchelement { Bruch wert;

Mehr

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Generic Programming without Generics from JAVA5 Motivation Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Ein Bespiel: sie haben bereits eine Klasse zur Multiplikation von Matrizen

Mehr

Bean-Mapping mit MapStruct

Bean-Mapping mit MapStruct Machst Du noch Reflection oder annotierst Du schon? Bean-Mapping mit MapStruct Thomas Much [email protected] www.muchsoft.com 1 20 Jahre Java, 18 Jahre Beans JavaBeans JAXBEntities 2015 2006 2005 2000

Mehr

Tag 4 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java) Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie 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

Mehr

Objektorientierung (OO)

Objektorientierung (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

Mehr

7. Metriken. Idee von Maßsystemen Halstead live Variables Variablenspanne McCabe-Zahl LCOM*

7. Metriken. Idee von Maßsystemen Halstead live Variables Variablenspanne McCabe-Zahl LCOM* 7. Metriken Idee von Maßsystemen Halstead live Variables Variablenspanne McCabe-Zahl LCOM* Stephan Kleuker 301 Nutzung von Maßsystemen bisherigen Prüfverfahren sind aufwändig, besteht Wunsch, schneller

Mehr

Algorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte

Algorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte Algorithmen und Datenstrukturen Wintersemester 2012/13 21. Vorlesung Übersicht Liste und InsertionSort für e für Objekte beliebiger Klassen für Objekte von Klassen, die ein(e) Nutzer(in) festlegen kann

Mehr

ALP II Dynamische Datenmengen Datenabstraktion

ALP II Dynamische Datenmengen Datenabstraktion ALP II Dynamische Datenmengen Datenabstraktion O1 O2 O3 O4 SS 2012 Prof Dr Margarita Esponda M Esponda-Argüero 1 Dynamische Datenmengen Dynamische Datenmengen können durch verschiedene Datenstrukturen

Mehr

Wie entwerfe ich ein Programm?

Wie entwerfe ich ein Programm? Wie entwerfe ich ein Programm? Welche Objekte brauche ich? Flussdiagramme für Programmablauf Vorcode Testcode Hauptcode Wir spielen Lotto! Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 5 +

Mehr

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1 Fachhochschule Stralsund Fachbereich Maschinenbau Lehrgebiet Informatik Prof. Dr.-Ing. Ch.Wahmkow Arbeitsblätter für die Lehrveranstaltung OOP I. Aufbau eines Java-Programmes JAVA 1 Escape-Sequenzen zur

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 06: Das Visitor Pattern Prof. Dr. Peter Thiemann (vertreten durch Luminous Fennell) Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg)

Mehr

Refactoring. Programmiermethodik. Eva Zangerle Universität Innsbruck

Refactoring. 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

Mehr

II.4.4 Exceptions - 1 -

II.4.4 Exceptions - 1 - n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen

Mehr

Girls Day 2017 Programmierung

Girls Day 2017 Programmierung Girls Day 2017 Programmierung Anke Brocker Quality Management Würselen, 27. April 2017 www.lancom-systems.de Programmierung 27.04.2017 - Übersicht Programmieren mit der Arduino IDE Die Arduino IDE Der

Mehr

Datenstrukturen / Container in Java

Datenstrukturen / Container in Java Datenstrukturen / Container in Java Mathematik / Algebraischer Datentyp / Containerklassen Enum-Klassen Arrays (Felder) = elementare Container Algorithmen mit Arrays Prof. Dr. E. Ehses, 2014 1 Mathematik

Mehr

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen Schwerpunkte 10. Felder (Arrays) Teil 1 Java-Beispiele: Echo.java Primzahlen.java Monate.java Klassifikation von Typen in Programmiersprachen Array: einziger strukturierter Typ in Java Deklaration, Erzeugung

Mehr

Softwaretechnik WS 16/17. Übungsblatt 01

Softwaretechnik 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

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

Modularisierung in Java: Pakete Software Entwicklung 1

Modularisierung in Java: Pakete Software Entwicklung 1 Modularisierung in Java: Pakete Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Um zusammengehörende Klassen, Interfaces, etc. gemeinsam zu verwalten, Sichtbarkeiten einzugrenzen und

Mehr

Softwaretechnik (Allgemeine Informatik) Überblick

Softwaretechnik (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

Mehr

Projekt AGB-10 Fremdprojektanalyse

Projekt AGB-10 Fremdprojektanalyse Projekt AGB-10 Fremdprojektanalyse 17. Mai 2010 1 Inhaltsverzeichnis 1 Allgemeines 3 2 Produktübersicht 3 3 Grundsätzliche Struktur und Entwurfsprinzipien für das Gesamtsystem 3 3.1 Die Prefuse Library...............................

Mehr

Programmieren lernen mit Groovy Objektorientierung Typen

Programmieren lernen mit Groovy Objektorientierung Typen Programmieren lernen mit Groovy Objektorientierung Typen Seite 1 Objektorientierung Objekt-Orientierung vom Funktionalen zum objektorientierten Programmierstil Funktionaler / Prozeduraler Stil Daten und

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: 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,

Mehr

Java - Programmierung - Prozedurale Programmierung 1

Java - Programmierung - Prozedurale Programmierung 1 Java - Programmierung - Prozedurale Programmierung 1 // elementare Datentypen public class el_dt public static void main(string args []) byte b = 127; short s = 32767; int i = 2147483647; long l = 9223372036854775807L,

Mehr

Javakurs für Anfänger

Javakurs 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

Mehr