Software Engineering II Refactoring, Style, Software Metriken
|
|
|
- Rolf Peter Geier
- vor 9 Jahren
- Abrufe
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 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
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
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
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
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
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
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
Software-Metriken. Dipl.-Ing.(BA) Henning Sievert <[email protected]> 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
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?
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:
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
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
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.
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
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
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
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
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
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
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
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
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,
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
Refactoring von Legacy Systemen. Jochen Winzen [email protected] 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
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
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
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
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
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
Ü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
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
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
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
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
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
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,
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
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;
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
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
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
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
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.
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
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
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
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
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
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
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]
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
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,
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
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.
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
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,
! 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;
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
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
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)
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
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
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
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
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
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
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 +
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
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
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)
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
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
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
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
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
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
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)
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
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
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...............................
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
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
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,
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,
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
