Bad Code Smells. 20. Mai 2015
|
|
- Linda Weiner
- vor 6 Jahren
- Abrufe
Transkript
1 Bad Code Smells 20. Mai 2015
2 Überblick Was sind Bad Code Smells? Welche Arten von Bad Code Smells gibt es? klasseninterne klassenübergreifende Welche Werkzeuge zur Analyse von Bad Code Smells gibt es? Taentzer Softwarequalität
3 Was sind Bad Code Smells? Anrüchige (verdächtige) Code-Stellen Hier lohnt es sich, genauer hinzuschauen. Sollten eventuell durch Refactoring-Maßnahmen restrukturiert werden. Kondensierung von Erfahrungswissen Syntaktische Prüfung von Programmcode hinsichtlich bestimmter Muster Analytische Qualitätssicherungsmaßnahme für bessere Wartbarkeit bessere Erweiterbarkeit geringere Fehleranfälligkeit Überblick über Bad Code Smells in [Fowler]. Taentzer Softwarequalität
4 Klasseninterne Bad Smells doppelter Code lange Methoden lange Parameterlisten viele Änderungen einer Klasse temporäre Felder sich wiederholende Switch-Anweisungen Kommentare Taentzer Softwarequalität
5 Doppelter Code einer der häufigsten Bad Code Smells gleicher oder sehr ähnlicher Code, der mehrfach auftritt Hauptgrund: Copy-and-Paste-Programmierung schnelle Wiederverwendung von Code Beispiele: derselbe Codeblock in zwei Methoden derselben Klasse oder in zwei Unterklassen einer gem. Oberklasse oder in zwei komplett verschiedenen Klassen Taentzer Softwarequalität
6 Beispiel: Doppelter Code void printinformation() { printtitle(); //print details System.out.println ("name: " + name); System.out.println ( address: " + getaddress()); } void printaddressbook() { for(int i = 1; i <= book.length; i++) { //print address System.out.println ("name: " + book[i].name); System.out.println ( address: " + book[i].getaddress()); } } Taentzer Softwarequalität
7 Lange Methoden Vermeidung von Spaghetti-Code Je länger eine Methode, desto fehleranfälliger Wiederverwendung von Codefragmenten wird nicht ermöglicht. Statt Kommentierung von Codeblöcken, besser den Block als Methode rausziehen Prinzipielles Vorgehen: Codeblöcke identifizieren nötige Parameter und temporäre Variablen identifizieren komplexe Bedingungen zerschlagen Taentzer Softwarequalität
8 Lange Methode Originalmethode mit vielen Codezeilen // Codeblöcke identifizieren, die in einzelne Methoden ausgelagert werden // // Taentzer Softwarequalität
9 Lange Parameterlisten Lange Parameterlisten erschweren das Verständnis von Methodenaufrufen. Sind Parameter besser als globale Variablen? Einsparen von Parametern: Verwendung von Objektanfragen Verwendung von Parameterobjekten Beispiel: Calendar insertappointment(start: Time, end: Time) showappointments(start: Time, end: Time) cancelappointments(start: Time, end: Time) Wann könnten lange Parameterlisten gewollt sein? Taentzer Softwarequalität
10 Viele Änderungen einer Klasse Verschiedene Änderungswünsche führen zu Änderungen derselben Klasse. Beispiel für verschiedene Änderungen einer Klasse: Änderung einer Datenzugriffsklasse, falls sich die Datenbank ändert Codeänderungen, wenn sich Geschäftsregeln ändern Einfügen neuer Aspekte (Z.B. wird ein Logging- Mechanismus eingeführt.) Beispiel: eine Klasse, die zu viele verschiedenartige Felder hat Person name: String birthday: Date position: PositionType phone: int fax : int street: String zip: int city: String Taentzer Softwarequalität
11 Temporäre Felder Felder einer Klasse beschreiben die Zustände ihrer Objekte. Manchmal sind Felder nur zeitweise gesetzt. Zur Vermeidung von langen Parameterlisten werden Felder erzeugt. Beispiel: PhoneBook searchresult: int searchnumber() 1 * Phone number: int Taentzer Softwarequalität
12 Kommentare und sich wiederholende Switch-Anweisungen Kommentare: Kommentare sind an sich nichts Schlechtes. Im Gegenteil: Sie sind gut! Manchmal weisen Kommentare auf schlechten Code hin. Kruder Code soll durch Kommentare verständlicher werden. Switch-Anweisungen: Häufig ähnliche Switch- Anweisungen an mehreren Stellen im Code Besser eine Switch- Anweisung in eine eigene Methode extrahieren Taentzer Softwarequalität
13 Beispiel: Sich wiederholende Switch-Anweisungen class Article { private int category; public static int getprize() { switch(category){ case `Shoes : case `Underwear : }} public static int getname() { switch(category){ case `Shoes : case `Underwear : }} Taentzer Softwarequalität
14 Klassenübergreifende Bad Smells große Klassen Änderungen in vielen verschiedenen Klassen aufgrund von einem Änderungswunsch Methoden, die zuviel auf andere zugreifen Datenhaufen faule Klassen Nachrichtenketten verweigertes Erbe auf Verdacht allgemein gehaltener Code Taentzer Softwarequalität
15 Große Klassen meist zu viele Felder Redundanzen innerhalb der Klasse vermeiden Turn five 100 line methods into five 10 line methods with another ten 2 line methods extracted from the original. Szenarien: Manche Felder lassen sich gut in neuen Objektklassen zusammenfassen. Bei zu viel Code: Methoden herausziehen, durch Verkürzung der Methoden redundanten Code finden Herausziehen von Schnittstellen kann aufzeigen, wie eine Klasse in mehrere Klassen zerlegt werden kann. Konvertierung von Konstanten in Aufzählungstypen Taentzer Softwarequalität
16 Beispiel: Große Klassen vorher Taentzer Softwarequalität
17 Beispiel: Große Klassen nachher Taentzer Softwarequalität
18 Änderung viele Klassen betreffend Ein Änderungswunsch, der viele Klassen betrifft. Änderungsstellen sind schwer zu finden, es kann schnell eine vergessen werden. Klassenstruktur semantisch nicht passend Manchmal ist die Änderung vieler Klassen bei einem Änderungswunsch auch gewollt. Wann? Copy-and-Paste- Programmierung: schnelle Wiederverwendung Wenn der Code anschließend stark modifiziert wird, ist Copyand-Paste adäquat. Boredom-Is-A-Smell: dieselben Einträge bei vielen Klassen Taentzer Softwarequalität
19 Methoden, die zuviel auf Daten anderer Klassen zugreifen Der Fokus einer Klasse sind ihre Daten. verdächtig: eine Methode, die mehr auf Daten anderer Klassen zugreift Eine Methode sollte zu der Klasse gehören, deren Daten sie überwiegend verwendet. class Room { Lecture[] lectures; } class Lecture { int id; boolean roomused(room r) { for(int i= 0; i < r.lectures.length; i++) { if (r.lectures[i].id == id) return(true); } return(false); } }... if (l.isinroom(r))... Taentzer Softwarequalität
20 Datenhaufen und faule Klassen Datenhaufen: Oft hängen mehrere Daten zusammen. Wenn Daten immer gemeinsam auftreten neue Datenklassen Welche Vor- und Nachteile bringen neue Datenklassen? Datenklassen müssen noch mit Funktionalität angereichert werden. Faule Klassen: Klassen mit zu wenig Funktionalität mögliche Gründe: zu ausgeprägte Klassenhierarchie reine Datenklassen Taentzer Softwarequalität
21 Beispiel 1: Bad Code Smells vorher Taentzer Softwarequalität
22 Beispiel 1: Bad Code Smells nachher Taentzer Softwarequalität
23 Beispiel 2: Bad Code Smells vorher Taentzer Softwarequalität
24 Beispiel 2: Bad Code Smells nachher Taentzer Softwarequalität
25 Beispiel 3: Bad Code Smells vorher Taentzer Softwarequalität
26 Beispiel 3: Bad Code Smells nachher Taentzer Softwarequalität
27 Nachrichtenketten Kaskaden von Methodenaufrufen sind verdächtig. Einkapselung geht häufig mit Delegation einher. Wenn eine Klasse die meisten seiner Methodenaufrufe an eine andere Klasse delegiert, kann sie eliminiert werden. Zwei Klassen, die zu stark miteinander kommunizieren, sind verdächtig. Beispiel: getperson(i).getaddress(). getstreet().gethousenumber(). print(); Street Person getaddress() Address getstreet() getcity() City Taentzer Softwarequalität
28 Verweigertes Erbe Subklassen, die zu wenige Methoden und Felder von ihren Elternklassen verwenden Schnittstellen sollten immer wiederverwendet werden. Methodenrümpfe müssen nicht wiederverwendet werden. Verdächtig: Eintrag ist nur für eine Schwesterklasse interessant. Bei Verdacht: Vererbung durch Delegation ersetzen Beispiele: Student List Person matrikelnr: int Dozent Stack Taentzer Softwarequalität
29 Auf Verdacht allgemein gehaltener Code Code für alle Eventualitäten abstrakte Klassen, die nicht viel Funktionalität enthalten Parameter, die nicht gebraucht werden Code, der nur in Testklassen verwendet wird Beispiele: Methodenname reicht nicht, um den Inhalt zu verstehen Eine Methode wird immer mit dem gleichen Wert aufgerufen. Abstrakte Klasse mit nur einer Unterklasse Template, das mit nur einem Argumenttyp sinnvoll ist Taentzer Softwarequalität
30 Code Smell Metriken Umfangsmetriken Methoden mit mehr als 20 Code-Zeilen, mehr als 3 Parameter oder mehr als 2 Ebenen tief Klassen mit mehr als 10 öffentlichen Methoden und einigen wenigen privaten Methoden Namensgebung schlechte Namen für Klassen, Methoden oder Variablen doppelte Code-Fragmente nicht durch Tests abgedeckte Code-Fragmente Taentzer Softwarequalität
31 Werkzeuge Werkzeuge, mit denen man Bad Code Smells entdecken kann: CodePro AnalytiX Eclipse Plugin Metrics Eclipse Plugin Checkstyle Eclipse Plugin PMD... Da Code Smells projektspezifisch eingestellt werden sollten, erlauben diese Werkzeuge auch die Spezifikation der aktiven Smells. Taentzer Softwarequalität
32 Empirische Studien zu Bad Code Smells Klassen mit Bad Smells werden öfter geändert als andere und können die Weiterentwicklung behindern. [KPG09] Verbesserungen am Sourcecode sollten auf der Basis von Code Smells und persönlichen Einschätzungen vorgenommen werden. [ML06] Gottklassen sind Klassen, die viel Intelligenz des Systems enthalten, eine hohe Komplexität haben und viele Daten anderer Klassen nutzen. Gottklassen werden öfter als andere geändert. Werden sie aber bzgl. ihrer Größe normalisiert, tritt eher ein gegenteiliger Effekt auf. [OCS10] Ein Smell ist noch kein Problem, aber mehrere. [AKG+11] Automatische Smell-Erkennung hilft beim Code-Review. [SZS+10] Taentzer Softwarequalität
33 Zusammenfassung Qualitätssicherungsmaßnahme für Besser Lesbarkeit des Codes bessere Wartbarkeit geringere Fehleranfälligkeit Ziel der Analyse durch Bad Code Smell: Vermeidung von Coderedundanzen: Once and only once bessere Strukturierung des Codes Auffinden von ungenutzten Codeanteilen Zwei Arten des Code Review: pragmatisch: Code Smells werden von Fall zu Fall angesehen und eventuell eliminiert. puristisch: Alle Code Smells werden eliminiert. Werkzeuge können automatisch verdächtige Code- Stellen finden. Taentzer Softwarequalität
34 Literatur [Fowler] M. Fowler: Refactoring: Improving the Design of Existing Code, Addison-Wesley, 1999 [KPG09] Khomh, Foutse, Massimiliano Di Penta, and Y. Gueheneuc. "An exploratory study of the impact of code smells on software changeproneness." Reverse Engineering, WCRE'09. 16th Working Conference on. IEEE, [ML06] Mäntylä, Mika V., and Casper Lassenius. "Subjective evaluation of software evolvability using code smells: An empirical study." Empirical Software Engineering 11.3 (2006): [OCS10] Olbrich, Steffen M., Daniela S. Cruzes, and Dag IK Sjoberg. "Are all code smells harmful? A study of God Classes and Brain Classes in the evolution of three open source systems." Software Maintenance (ICSM), 2010 IEEE Int. Conference on. IEEE, CameraReady.pdf Taentzer Softwarequalität
35 Literatur [AKG+11] Abbes, Marwen, et al. "An empirical study of the impact of two antipatterns, blob and spaghetti code, on program comprehension." /Software Maintenance and Reengineering (CSMR), th European Conference on/. IEEE, p=rep1&type=pdf [SZS+10] Schumacher, Jan, et al. "Building empirical support for automated code smell detection." /Proceedings of the 2010 ACM-IEEE International Symposium on Empirical Software Engineering and Measurement/. ACM, young/cs-classes/oldfiles/csse575/resources/a8-schumacher.pdf Interessante Links: Code Smell Katalog: The Catalog of Refactoring - Code Smell Taentzer Softwarequalität
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
MehrSoftware-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
MehrRefactoring Transformationen. Martin Freund Januar 2003 Seminar Refactoring in extreme Programming AG Kastens Universität Paderborn
Refactoring Transformationen Martin Freund bbl@upb.de Januar 2003 Seminar Refactoring in extreme Programming AG Kastens Universität Paderborn Gliederung 1. Transformationen-Übersicht 2. Beispiel: Methode
MehrRefactoring. Uschi Beck
Refactoring Uschi Beck uschibeck@web.de Gliederung Was ist Refactoring Definition, Einordnung in das Seminar Motivation Testen Code-Smells Katalog von Refactorings Aufbau, Beispiele Design Patterns als
MehrRefactoring. Vortrag im Rahmen des Softwareprojekts: Übersetzerbau. Referenten: Vivienne Severa Alpin Mete Sahin Florian Mercks. Datum:
Refactoring Vortrag im Rahmen des Softwareprojekts: Übersetzerbau Referenten: Vivienne Severa Alpin Mete Sahin Florian Mercks Datum: 20.06.2013 Überblick Einführung Refactoring im Einsatz Werkzeugunterstützung
MehrRefactoring I. Nach Martin Fowler - Refactoring
Refactoring I Nach Martin Fowler - Refactoring Kapitel 6 : Methoden zusammenstellen Kapitel 9 : Bedingte Ausdrücke vereinfachen Kapitel 10: Methodenaufrufe vereinfachen - Mario Boley - Methoden zusammenstellen
MehrDesign Patterns. 3. Juni 2015
Design Patterns 3. Juni 2015 Überblick Was sind Design Patterns? Welche Design Patterns gibt es? Wann sollte man Design Patterns einsetzen? Taentzer Softwarequalität 2015 138 Was sind Design Patterns?
MehrProgrammverstehen 3: Detailliertes Verständnis. Dr. Thorsten Arendt Marburg, 10. Dezember 2015
Programmverstehen 3: Detailliertes Verständnis Dr. Thorsten Arendt Marburg, 10. Dezember 2015 Re-Engineering Patterns [Demeyer et al.] 2 Software-Evolution WS 2015/2016 Überblick Probleme Auch wenn das
MehrInstitut 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
MehrObjektorientierte 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
MehrVerhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
MehrSystematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015
Systematisches Testen der Funktionalität von Softwaresystemen 17. Juni 2015 Überblick Semantische Qualität von Software Teststrategien und prinzipien Testgetriebene Softwareentwicklung Welche Arten von
MehrMethoden 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)
MehrVorlesung Software-Reengineering
Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2007/08 Überblick I 1 Refactoring Refactorings
MehrSeminar: CASE-Tools WS 06/ Refactoring. Thomas Löffler
Seminar: CASE-Tools WS 06/07 31.01.2007 Refactoring Thomas Löffler Überblick 1. Einführung: Refactoring Was ist das? Warum Refactoring? Ziele 2. Vorgehen Wo wird refactorisiert? Beispiele 3. Refactoringtools
MehrAlgorithmen 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
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 13: Interfaces Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme 1. Teil: Interfaces Motivation Eigenschaften Besonderheiten Anonyme Klassen Lambda-Ausdrücke Praxis:
MehrProgrammieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik
Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Grundidee abstrakter Klassen:
MehrJava Einführung Vererbung und Polymorphie. Kapitel 13
Java Einführung Vererbung und Polymorphie Kapitel 13 Inhalt Klassifikation (UML) Implementierung von Vererbungshierarchien Überschreiben von Methoden Polymorphismus: Up-Casting und Dynamisches Binden Schlüsselwort
MehrÜbungen zu Programmieren - Code-Formatierung -
- Code-Formatierung - Tutoren: Sven Groppe Florian Frischat David Gregorczyk Dana Linnepe Sven-Erik Pfeiffer Markus Weigel Simon Werner groppe@ifis.uni-luebeck.de prog2@ifis.uni-luebeck.de prog6@ifis.uni-luebeck.de
MehrSoftware-Restrukturierung
0/24 Software-Restrukturierung Andreas Zeller Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken Restrukturierung 1/24 Restrukturierung ist nach dem Reverse Engineering (Programmverstehen)
MehrSoftwaremetriken. 15. Mai 2013
Softwaremetriken 15. Mai 2013 Was sind Softwaremetriken? Softwaremetriken messen Qualität. besser: Softwaremetriken definieren, wie Kenngrößen der Software oder des Softwareentwicklungsprozesses gemessen
MehrJava Vererbung. Inhalt
Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter
MehrOlaf Seng Thomas Genßler Benedikt Schulz. Forschungszentrum Informatik, Karlsruhe
Olaf Seng Thomas Genßler Benedikt Schulz Einführung Grundlagen Vorgehensweise Beispiel Zusammenfassung Übersicht 2 Einführung Szenario & Probleme Hinzufügen einer neuen Funktion zu einer Komponente Erfordert
MehrObjektorientierte Programmierung OOP
Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel Alina Stürck WS2016/17 11. Oktober 2016 Objektorientierte Programmierung OOP 1 Was ist das? 2 Wie geht das? 3 Warum
MehrEinführung in die Informatik
Einführung in die Informatik Jochen Hoenicke Software Engineering Albert-Ludwigs-University Freiburg Sommersemester 2014 Jochen Hoenicke (Software Engineering) Einführung in die Informatik Sommersemester
MehrProgrammiertechnik Objektorientierung
Programmiertechnik Objektorientierung Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Was ist Objekt-Orientierung? Objekt-Orientierung (OO) ist nicht völlig scharf definiert, d.h. es gibt unterschiedliche
MehrProgrammieren I + II Regeln der Code-Formatierung
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden
MehrProf. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung
Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Objektorientierung Was ist Objektorientierung Es einige Grundprinzipien, die (fast) allen Definitionen des Begriffs Objektorientierung
MehrProgrammieren I + II Regeln der Code-Formatierung
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2012/2013, SS 2013 Programmieren I + II Regeln der Code-Formatierung Die hier vorgestellten
MehrSchöner Programmieren
Schöner Programmieren Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 30.05.07 G. Bohlender (IANM UNI Karlsruhe) Schöner Programmieren 30.05.07
MehrGrundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen
Grundlagen der Programmierung Prof. H. Mössenböck 10. Klassen Motivation Wie würde man ein Datum speichern (z.b. 13. November 2004)? 3 Variablen int da; String month; int ear; Unbequem, wenn man mehrere
MehrThemen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen
Themen der Übung 1 Organisatorisches Methoden und Wrapperklassen 2 Methoden 3 Wrapper-Klassen CoMa-Übung IV TU Berlin 07.11.2012 Organisatorisches: Im Pool nur auf die Abgabeliste setzen, wenn ihr wirklich
MehrVererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz
Einführung in C++ Vererbung I Durch Vererbung können aus bereits bestehenden Klassen neue Klassen konstruiert werden. Die neue abgeleitete Klasse erbt dabei die Daten und Methoden der sog. Basisklasse.
MehrProgrammieren 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
MehrKonzepte 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
MehrTU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.
TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Übung zur Vorlesung Einführung in die Informatik 2 für Ingenieure (MSE) Alexander van Renen (renen@in.tum.de)
MehrAlgorithmen und Programmierung II
Algorithmen und Programmierung II Vererbung Prof. Dr. Margarita Esponda SS 2012 1 Imperative Grundbestandteile Parameterübergabe String-Klasse Array-Klasse Konzepte objektorientierter Programmierung Vererbung
MehrProperty 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.
MehrAnweisungen 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
MehrIterative Softwareentwicklung. Ullrich Köthe 19. April 2001
Iterative Softwareentwicklung Ullrich Köthe 19. April 2001 2 Traditionelles Entwicklungsmodell von Geräteentwicklung inspiriert: je später eine Änderung notwendig wird, desto teurer 12000 10000 8000 6000
MehrSoftwaremetriken. 29. April 2015
Softwaremetriken 29. April 2015 Was sind Softwaremetriken? [FP] Softwaremetriken messen Qualität. besser: Softwaremetriken definieren, wie Kenngrößen der Software oder des Softwareentwicklungsprozesses
Mehr1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)
1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.3. Anweisungen und Kontrollstrukturen - 1 - Anweisung Anweisung Zuweisung Methodenaufruf
MehrVererbung und Polymorphie
page1 Vererbung und Polymorphie Florian Adamsky, B Sc florianadamsky@iemthmde http://florianadamskyit/ cbd So wareentwicklung im SS 2014 page2 Outline 1 Ein ührung 2 Vererbung Formen der Vererbung 3 Polymorphie
MehrObjektorientierte 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
MehrKlausur Grundlagen der Programmierung
Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel
MehrRefactoring. PG Reclipse Seminar: Refactoring Jan-Christopher Bals (1/30)
Refactoring PG Reclipse Seminar: Refactoring Jan-Christopher Bals (1/30) Gliederung des Vortrags Definition Hintergrund und Motivation Refactoring am Beispiel Refactoring-Katalog Unterstützung durch Tools
MehrDAP2-Programmierpraktikum Einführung in C++ (Teil 2)
DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und
MehrSoftwarequalität. SS 2008 Gabriele Taentzer Philipps-Universität Marburg
Softwarequalität SS 2008 Gabriele Taentzer Philipps-Universität Marburg Organisation der LV Umfang: 4 SWS, 6 ECTS Punkte Veranstalter: Gabriele Taentzer, Stefan Jurack Kontakt: taentzer@mathematik.uni-marburg.de,
MehrProgrammieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik
Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Prinzip der Vererbung: Aus
MehrProgrammieren in Java
Programmieren in Java Einführung in die objektorientierte Programmierung Teil 2 2 Übersicht der heutigen Inhalte Vererbung Abstrakte Klassen Erweitern von Klassen Überladen von Methoden Überschreiben von
Mehr2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article
2.13 Vererbung Klassen modellieren Objekte der realen Welt. Diese sind oft hierarchisch gegliedert. Beispiel: Ein Verlag bietet Bücher und CDs an. Beide Medien sind Artikel des Verlages. Book author: String
Mehr1 Programmierfehler und ihre Behebung
1 Programmierfehler und ihre Behebung (kleiner lebenspraktischer Ratgeber) Grundsätze: Jeder Mensch macht Fehler... insbesondere beim Programmieren. Läuft ein Programm, sitzt der Fehler tiefer. Programmierfehler
MehrVererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus
Vererbung Generalisierung und Spezialisierung Vererbung und Polymorphismus Wir wollen in unserem Aquarium verschiedene Arten von Fischen schwimmen lassen. In einem ersten Ansatz definieren wir nicht nur
MehrProgrammieren 2 C++ Überblick
Programmieren 2 C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 5. Behälter und Iteratoren 6. Templates
Mehr4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:
4. Vererbung Grundlagen der Vererbung 4. Vererbung 4. Vererbung Grundlagen der Vererbung Idee der Vererbung Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende
MehrVorlesung Programmieren
Vorlesung Programmieren 3. Kontrollstrukturen 04.11.2015 Prof. Dr. Ralf H. Reussner Version 1.1 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD),
MehrGrundzüge der Programmierung. Wiederverwendung VERERBUNG
Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse
MehrDesign Patterns. 5. Juni 2013
Design Patterns 5. Juni 2013 Überblick Was sind Design Patterns? Welche Design Patterns gibt es? Wann sollte man Design Patterns einsetzen? Refactoring und Design Patterns: Welchen Zusammenhang gibt es
MehrProgrammierkonventionen - 1 -
Die wichtigsten Bestandteile der Programmierkonventionen für Java werden hier erläutert. Dies sind: Schreibweise von Bezeichnern Einrückkonventionen Kommentare Programmierkonventionen - 1 - Einleitung
MehrTimo Wagner & Sebastian Kühn Entwurf einer Multi-Tier Anwendung in ASP.NET
Timo Wagner & Sebastian Kühn Entwurf einer Multi-Tier Anwendung in ASP.NET Überblick 1.Einfürung in die Multi-Tier Architektur 2.Ausgangspunkt und Probleme 3.Rundgang durch die Architektur 4.Architektur
MehrName: Klausur Informatik III WS 2003/04
1 : Methodenimplementierung ca. 42 Punkte Gegeben ist die Klasse Mitarbeiter. Listing 1: (./Code1/Mitarbeiter.h) using namespace std; // globale Variable fuer Ausgabedatei // kann entsprechend
MehrKonzepte objektorientierter Programmierung
Konzepte objektorientierter Programmierung Objekte Klassen Nachrichten Kapselung Einführung Vererbung heute! Konzepte objektorientierter Programmierung Was ist ein Objekt? Was ist eine Klasse? Was sind
MehrVerschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
MehrVererbung & Schnittstellen in C#
Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung
MehrObjektorientierte Programmierung Studiengang Medieninformatik
Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 1 15.03.2017 Objektorientierte Programmierung (Studiengang Medieninformatik) Form: Prüfung:
MehrObjektorientierung (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
Mehr3. Klassen Statische Komponenten einer Klasse. Klassenvariablen
Klassenvariablen Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit aller Studentenobjekte.
MehrObjektorientierte Programmierung OOP
Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel WS2012/13 08. Oktober 2013 Objektorientierte Programmierung OOP Objektorientierte Programmierung Objektorientierte
MehrVorlesung Programmieren
Vorlesung Programmieren 3. Kontrollstrukturen 09.11.2016 Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND
MehrErsetzbarkeit und Verhalten
Ersetzbarkeit und Verhalten U ist Untertyp von T, wenn eine Instanz von U überall verwendbar ist, wo eine Instanz von T erwartet wird Struktur der Typen für Ersetzbarkeit nicht ausreichend Beispiel: void
Mehr1 Klassen und Objekte
1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente
MehrClient-Server-Beziehungen
Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server
MehrJAVA - Methoden - Rekursion
Übungen Informatik I JAVA - Methoden - Rekursion http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 1 Methoden Methoden sind eine Zusammenfassung von Deklarationen und Anweisungen
MehrTag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)
Tag 5 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Methoden Deklaration
Mehr1 Klassen anlegen und Objekte erzeugen
Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a
MehrJava für Bauingenieure
1 JAVA für Bauingenieure Alexander Karakas SS 2008 Objektorientierte Programmierung 30.04.2008, CIP Pool Objektorientierte Programmierung Übersicht 2 Klasse und Objekt Polymorphismus und Vererbung Klassen
Mehr1 Abstrakte Klassen, finale Klassen und Interfaces
1 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,
Mehr5.5.8 Öffentliche und private Eigenschaften
5.5.8 Öffentliche und private Eigenschaften Schnittstellen vs. Implementierungen: Schnittstelle einer Klasse beschreibt, was eine Klasse leistet und wie sie benutzt werden kann, ohne dass ihre Implementierung
MehrSchlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:
Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -
MehrDie 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:
MehrKlassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete
2 Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, und Pakete Martin Wirsing Ziele Den Begriff der einfachen und mehrfachen Vererbung verstehen Verstehen, wann Vererbung eingesetzt wird deklarationen
Mehr7. 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
MehrObjects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0
Objects First With Java A Practical Introduction Using BlueJ Mehr über Vererbung Exploring polymorphism 1.0 Zentrale Konzepte dieses Kapitels Methoden-Polymorphie statischer und dynamischer Typ Überschreiben
MehrBeispiele 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]
MehrVorlesung Software-Reengineering
Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke 1 1 Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2005/06 Überblick I 1 Refactoring 1 Refactoring
MehrKapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen
Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18
MehrEinstieg 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
MehrMusterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9
Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung
MehrPraktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben
Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 017/18 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand Übungsblatt 11 Besprechung: 15. 19.01.018 (KW 3) Vorbereitende
MehrC++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11
C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen
MehrStatische Code-Analyse: Software-Metriken Fernstudium Master Wirtschaftsinformatik Formale Methoden
Statische Code-Analyse: Software-Metriken Fernstudium Master Wirtschaftsinformatik Formale Methoden Isabell Füll Grömmsche Koppel 15 24111 Kiel isabell.fuell@googlemail.com Amselweg 3 24222 Schwentinental
MehrVererbung, 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
MehrVererbung. 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
MehrRefactoring eine Einführung
Universität Paderborn, AG Kastens Programmiersprachen und Übersetzer, Fakultät für Elektrotechnik, Informatik und Mathematik Eine Ausarbeitung im Rahmen des Seminars Refactoring in extreme Programming
MehrSoftware-Qualität Ausgewählte Kapitel. Messung und Prognose von interner Software-Qualität"
Institut für Informatik! Martin Glinz Software-Qualität Ausgewählte Kapitel Kapitel 11 Messung und Prognose von interner Software-Qualität" 2011 Martin Glinz. Alle Rechte vorbehalten. Speicherung und Wiedergabe
Mehr1 Klassen anlegen und Objekte erzeugen
Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a
MehrObjektorientierte Programmierung Studiengang Medieninformatik
Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 2 22.03.2017 Was bisher geschah... Klassen und Objekte Attribute und Methoden Klasse Bruch
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 10: Mehr zur Vererbung und abstrakte Klassen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Mehr zur Vererbung Methoden vererben und überschreiben
Mehr