Inhaltsverzeichnis. Vorwort...XIII. Aufbau des Buches...



Ähnliche Dokumente
Knasmüller.book Seite vii Mittwoch, 28. März : vii. Inhaltsverzeichnis

Modulare Programmierung und Bibliotheken

Der Rational Unified Process

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik Was ist Informatik? Teilgebiete der Informatik 8

Softwareengineering. Schwerpunkt Software Engineering Ausbildung

Software- Qualitätssicherung

C++-Entwicklung mit Linux

Ulla Kirch Peter Prinz C+ + Lernen und professionell anwenden. mitp

Methodische objektorientierte Softwareentwicklung

EINFÜHRUNG IN DIE WIRTSCHAFTSINFORMATIK -ÜBUNGEN- Marina Tropmann-Frick

Objektorientierte Softwaretechnik

Einführung in Generatives Programmieren. Bastian Molkenthin

Softwareentwicklungsprozess im Praktikum. 23. April 2015

Projektmanagement. Dokument V 1.1. Oliver Lietz - Projektmanagement. Wie kommt es zu einem Projektauftrag? Ausführung

Java Einführung Packages

C-Programmierung unter TOS ATARI ST

Lehrbuch der Softwaretechnik: Basiskonzepte und Requirements Engineering

Tel Vorstellung der eigenen Person

Übungsklausur vom 7. Dez. 2007

Schulinternes Curriculum für Informatik (Q2) Stand April 2015

Curriculum des Wahlfaches Informatik für das Gymnasium Dialog

Informatik für Ingenieure

Inhaltsverzeichnis 1 Einführung und Überblick 2 Grundlagen

J.6 Programmierung eingebetteter Systeme

Software-Entwicklung mit Delphi

Einführung in das Software-Qualitätsmanagement

Programmieren I. Überblick. Institut für Angewandte Informatik

Softwaretechnik 3. Klausurnachbesprechung , Phillip Ghadir

Automotive Software Engineering

Angepasste Software Standards für DLR- Eigenentwicklungen - Die DLR Software Basisstandards -

Objektorientierte Programmierung in Java

Basiswissen Software-Projektmanagement

Schulcurriculum Informationstechnische Grundkenntnisse und Informatik Stand:

Softwaretechnik (Allgemeine Informatik) Überblick

Inhaltsverzeichnis. Fritz Jobst. Programmieren in Java ISBN: Weitere Informationen oder Bestellungen unter

VBA-Programmierung: Zusammenfassung

IT-Projekt-Management

1. Übung zu "Numerik partieller Differentialgleichungen"

Agile Softwareentwicklung

Andre Willms. Spielend C++ lernen. oder wie man Käfern Beine macht. Galileo Press

Software Engineering

Wirtschaftsingenieurwesen (Informationstechnik) Modulname. Programmierung II / Software Engineering II Modulnummer

Software Engineering Zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Objektbasierte Entwicklung

Einführung in die Softwareentwicklung am Beispiel von Java und C++ Vom Programmieren zur erfolgreichen Software-Projektarbeit

Roberto lerusalimschy. Programmieren mit Lua

Vorwort. Ulrich Breymann. Der C++-Programmierer. C++ lernen - Professionell anwenden - Lösungen nutzen ISBN:

Management von IT-Architekturen

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Modellierung und Programmierung 1

Anforderungsmanagement

Java Kurs für Anfänger Einheit 5 Methoden

Objektorientierte Programmierung OOP

Konfigurations management

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich. Softwaretechnik I

Basiswissen Software- Projektmanagement

Managementprozesse und Performance

Basiswissen Software-Projektmanagement

Angebotsmanagement für hybride IT-Produkte

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

16 Architekturentwurf Einführung und Überblick

Übersetzung objektorientierter Programmiersprachen

Praktikum Grundlagen der Programmierung. Diverse Grundlagen. Dr. Karsten Tolle

Inhaltsverzeichnis. 2.2 Grundlagen der UML Zusammenfassung... 53

Prinzipien Objektorientierter Programmierung

Einführung in die C++ Programmierung für Ingenieure

Kapitel 2: Der Software-Entwicklungsprozess

Software Engineering

jetzt lerne ich PHP 5 & MySQL 4.1 Der schnelle Einstieg in die objektorientierte

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Projektmanagement (Modelle, Methoden & Tools)

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Einführung in die Informatik Tools

Die Programmiersprache C

Lehrpläne NRW Sek.stufe 2. Lernen im Kontext

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Informationswirtschaft 2: Überblick

Abschlussklausur Geschäftsprozessmodellierung und Workflowmanagement

SQL objektorientiert

Michael Weigend. Python GE-PACKT

Verbesserung von Geschäftsprozessen mit flexiblen Workflow-Management- Systemen 2

TEIL A: GRUNDLAGEN. 1 Einleitung Ausgangslage und Problemstellung 1

RUP Analyse und Design: Überblick

Entwicklung domänenspezifischer Software

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Übung 6: Feinentwurf. Prof. Dr. Dr. h.c. Manfred Broy Dr. Herbert Ehler, Martin Feilkas 6. Juli 2006 Bernd Spanfelner, Sebastian Winter

Nino Simunic M.A. Computerlinguistik, Campus DU

Verteilte Paarprogrammierung mit Eclipse

Das Wasserfallmodell - Überblick

Vorkurs C++ Programmierung

Andy Hunt. Programmieren lernen. mit Minecraft-Plugins. dpunkt.verlag

Software- Qualitätsmanagement

2. Programmierung in C

T1 - Fundamentaler Testprozess

Vom dem was Autos und Software GEMEINSAM haben. Diskussionsbeitrag zur Software-Industralisierung. Guido Brune

Softwareentwicklung bei KMU - Ergebnisse einer Studie zum Entwicklungs-, Projekt- und Qualitätsmanagement

C#.NET mit Methode. Professionelle Software entwickeln mit C# und.net: Grundlagen, Windows, ADO.NET, ASP.NET und Remoting. vieweg.

Transkript:

Inhaltsverzeichnis Vorwort...XIII Aufbau des Buches............................................... XV 1 Von der Idee zur Software..................................... 1 1.1 Beispielanwendung... 1 1.2 Schritte zur Lösung des Problems... 2 1.3 Konkretisierung des Problems... 4 1.4 Entwicklung der Schnittstelle... 7 1.5 Tests auf Basis der Schnittstelle... 9 1.6 Entwicklung und Implementierung der Lösung... 10 1.7 Fehlersuche und Funktionserweiterung... 11 1.8 Übungen... 16 1.9 Zusammenfassung... 17 2 Funktionen und Datenstrukturen.............................. 19 2.1 Funktionale Abstraktion (Funktionen)... 19 2.1.1 Funktionen definieren und aufrufen... 21 2.1.2 Überladen von Funktionen...... 24 2.2 Funktionale Abstraktion bei der Netzplanung... 26 2.2.1 Aufspaltung in Unterfunktionen... 27 2.2.2 Übersicht über das Gesamtprogramm... 33 2.2.3 Entfernung der globalen Variablen... 34 2.2.4 Übungen... 38 2.3 Datenabstraktion: Strukturierte Datentypen... 39 2.3.1 Strukturen und Klassen... 40 2.3.2 Referenzen auf Arrays und Klassen... 42 2.3.3 Netzplanung mit Datenabstraktion... 44 2.3.4 Übungen... 46 2.4 Generische Programmierung, 1. Teil... 47 2.5 Zusammenfassung... 49 3 Organisation des Quellcodes................................... 51 3.1 Modularisierung auf Dateiebene... 51

VIII Inhaltsverzeichnis 3.1.1 Allgemeiner Aufbau einer Header-Datei... 53 3.1.2 Aufteilung der Netzplanung auf verschiedene Dateien... 54 3.2 Strukturierung jenseits von Dateigrenzen... 56 3.2.1 Namensräume und Pakete... 57 3.2.2 Netzplanung und Namensräume... 58 3.3 Bibliotheken... 59 3.4 Build-Management... 62 3.4.1 Abhängigkeiten... 63 3.4.2 Die Projektdatei... 65 3.4.3 Übungen... 67 3.5 Zusammenfassung... 67 4 Werte- und Referenzsemantik.................................. 69 4.1 Speicherverwaltung im Detail... 70 4.1.1 Die verschiedenen Speicherbereiche eines Programms... 70 4.1.2 Speicherverwaltung auf dem Programm-Stack... 71 4.1.3 Speicherverwaltung auf dem Programm-Heap... 72 4.1.4 Strukturierte Objekte auf dem C++-Programm-Stack... 75 4.1.5 Java-Standardtypen als Referenzparameter... 77 4.1.6 Java-Hüllklassen für Standardtypen... 78 4.1.7 Zusammenfassung... 79 4.1.8 Übungen... 80 4.2 Zeiger und Arrays...... 82 4.2.1 Kopieren von referenzierten Objekten... 82 4.2.2 Die Dualität zwischen C++-Zeigern und -Arrays... 86 4.3 Werte oder Referenzen, die Vor- und Nachteile... 87 4.4 Zeiger auf Funktionen... 90 4.5 Anwendungsbeispiele... 94 4.5.1 Effizienzsteigerung der Netzplanung... 94 4.5.2 Dynamische Datenstrukturen... 97 4.5.3 Ein dynamischer Vektor... 103 4.6 Zusammenfassung... 107 5 Entwurf von Algorithmen...................................... 109 5.1 Spezifikation von Algorithmen... 110 5.2 Dokumentation mit Doxygen und JavaDoc... 111 5.3 Schrittweise Verfeinerung... 112 5.3.1 Das Prinzip... 112 5.3.2 Fallstudie Nimm-Spiel... 113 5.3.3 Übungen... 122 5.4 Literate Programming... 122 5.5 Algorithmen-Muster... 128 5.5.1 Gierige Algorithmen... 130 5.5.2 Backtracking... 131 5.5.3 Divide & Conquer... 133

Inhaltsverzeichnis IX 5.5.4 Dynamische Programmierung... 135 5.6 Anwendung in der Netzplanung... 136 5.7 Zusammenfassung... 140 6 Fehlersuche und -behandlung.................................. 141 6.1 Strategien für die Fehlersuche... 141 6.1.1 Frühwarnungen durch Zusicherungen... 143 6.1.2 Unit-Tests... 144 6.1.3 Problemvereinfachung... 146 6.2 Ablaufverfolgung durch Logging... 147 6.2.1 Debugging-Support durch LogTrace und Log4J... 148 6.2.2 Eine Debugging-Sitzung in der Netzplanung... 150 6.2.3 Heap-Speicherlecksuche mit LogTrace... 154 6.3 Fehler- und Ausnahmebehandlung... 155 6.3.1 Fehler-Return-Codes und Statusvariable... 156 6.3.2 Ausnahmebehandlung Das Konzept... 157 6.3.3 Testen der verschiedenen Fehlerbehandlungsstrategien... 160 6.3.4 Netzplanung mit Ausnahmebehandlung... 162 6.3.5 Übungen... 165 6.4 Zusammenfassung... 166 7 Software-Entwicklung im Team................................ 167 7.1 Management von Software-Projekten... 167 7.1.1 Software-Projektmanagement... 168 7.1.2 Vorgehensmodelle der Software-Entwicklung... 170 7.2 Agile Software-Entwicklung... 172 7.2.1 Einleitung... 172 7.2.2 Extreme Programming (XP)... 173 7.2.3 Die Werte und Prinzipien von XP... 174 7.2.4 Die Basistechniken von XP... 175 7.2.5 XP auf die Netzplantechnik angewendet... 181 7.2.6 Projektmanagement in agilen Software-Projekten... 185 7.2.7 Übungen... 186 7.3 Design, Testen und Dokumentation unter XP... 187 7.3.1 Design und agile Software-Entwicklung... 187 7.3.2 Testen und agile Software-Entwicklung... 188 7.3.3 Dokumentation und agile Software-Entwicklung..... 188 7.4 Agile Software-Entwicklung in großen Projekten?..... 190 7.4.1 Kriterien agiler Prozesse... 190 7.4.2 Besondere Probleme größerer Software-Projekte... 191 7.5 Projektmanagement-Hilfsmittel... 193 7.5.1 Risikomanagement... 193 7.5.2 Versionskontrolle und Konfigurationsmanagement... 195 7.5.3 Fehlermanagement... 197 7.6 Vorgehensmodelle für größere Projekte... 199

X Inhaltsverzeichnis 7.6.1 Das V-Modell... 199 7.6.2 Der Rational Unified Process (RUP)... 200 7.7 Zusammenfassung... 202 8 Abstrakte Datentypen: Einheit von Daten und Funktionalität.. 205 8.1 Die Bedeutung von Schnittstellen... 205 8.1.1 Kapselung von Komplexität... 205 8.1.2 Datenkapselung: Abstrakte Datentypen..... 207 8.2 Klassen als abstrakte Datentypen... 211 8.2.1 Sichtbarkeit... 212 8.2.2 UML-Modelle der Programmstruktur... 215 8.2.3 Standardfunktionalität in der Klassen-Schnittstelle... 221 8.2.4 Klassenglobale Attribute und Methoden... 229 8.2.5 Spezifikation von abstrakten Datentypen... 231 8.2.6 Anwendung: Implementierung von LogTrace... 233 8.2.7 Übungen... 237 8.3 Generische Programmierung, 2. Teil... 239 8.3.1 Generische Datentypen... 239 8.3.2 Implementierung der generischen Datentypen... 240 8.4 Ausnahmebehandlung, 2. Teil... 242 8.4.1 Ausnahmen weiterleiten... 242 8.4.2 Verhinderung von Ressourcen-Lecks... 245 8.4.3 Ausnahmesicherer Code... 249 8.5 Zusammenfassung... 251 9 Vielgestaltigkeit (Polymorphie)................................ 253 9.1 Statische Bindung... 253 9.2 Dynamische Bindung... 255 9.2.1 Polymorphie selbst gemacht... 256 9.2.2 Automatische Polymorphie... 259 9.2.3 Polymorphie ganz konkret... 262 9.3 Vererbung... 265 9.3.1 Code in mehreren Klassen gemeinsam nutzen... 265 9.3.2 Konstruktor-Verkettung... 268 9.3.3 UML-Klassendiagramme: Vererbung und Polymorphie... 271 9.3.4 Typkompatibilität und -konvertierung... 274 9.3.5 Die Verwendung von Vererbung... 279 9.3.6 Gegenüberstellung: Templates und Polymorphie... 283 9.3.7 Übungen... 286 9.4 Zusammenfassung... 289 10 Entwurfsprinzipien für Software................................ 291 10.1 Analyse und Design an einer Beispielanwendung... 291 10.1.1 Die Analyse... 293 10.1.2 Das Analyse-Modell... 295

Inhaltsverzeichnis XI 10.1.3 Der Entwurf... 302 10.1.4 Das Design-Modell... 307 10.1.5 Zusammenfassung des Vorgehens... 310 10.1.6 Übungen... 311 10.2 Einige Designprobleme... 311 10.2.1 Problem: Eierlegende Wollmilchsau... 311 10.2.2 Fallstrick: Wechselseitige Abhängigkeiten... 313 10.2.3 Fallstrick: Vermeidung von Code-Duplikation... 315 10.3 Muster: Mentale Wiederverwendung... 316 10.3.1 Hohe Kohäsion und geringe Kopplung... 317 10.3.2 Muster zur Organisation größerer Klassenverbunde... 318 10.3.3 Muster für die Erzeugung von Objekten... 321 10.3.4 Muster zur Ablaufsteuerung... 323 10.3.5 Muster zum Aufbau von Objekten... 326 10.4 Zusammenfassung... 329 A Die Familie der C-Sprachen.................................... 331 A.1 Übersicht... 331 A.2 Die Sprache C++... 332 A.3 Die Sprache Java... 333 A.4 Gegenüberstellung der Sprachen Java und C++... 335 B Grundlagen der C++- und der Java-Programmierung........... 337 B.1 Ein kleines Beispiel... 338 B.2 Trennzeichen (White Spaces) und Kommentare... 340 B.3 Daten, Operatoren, Ausdrücke, Anweisungen... 340 B.3.1 Namen für Variablen (und für andere Sprachkonstrukte)... 340 B.3.2 Deklarationen... 341 B.3.3 Datentypen... 341 B.3.4 Symbolische Konstanten... 345 B.4 Operatoren für elementare Datentypen... 345 B.4.1 Binäre Operatoren... 345 B.4.2 Unäre Operatoren... 348 B.4.3 Postfix- und Präfix-Operatoren... 349 B.4.4 Zuweisungsoperatoren... 350 B.5 Ausdrücke... 350 B.5.1 Beispiele... 350 B.5.2 Objekte und L-Werte... 351 B.5.3 Hinweise... 351 B.6 Explizite und implizite Typkonvertierungen... 352 B.7 Prioritäten von Operatoren... 353 B.8 Arbeiten mit Zahlen... 354 B.8.1 Ausdrücke und Zuweisungen mit gemischten Zahlentypen.. 354 B.8.2 Einschränkungen gegenüber der Mathematik... 355 B.8.3 Aufzählungstypen...... 356

XII Inhaltsverzeichnis B.9 Eingabe und Ausgabe von Daten... 357 B.9.1 Ein- und Ausgabe im Standardmodus mit Standardgeräten. 357 B.9.2 Arbeiten mit Dateien... 358 B.10 Steueranweisungen... 360 B.10.1 Übersicht... 360 B.10.2 Verbundanweisung (compound-statement)... 362 B.10.3 Verzweigungen... 362 B.10.4 Wiederholungen... 365 B.10.5 Sprung-Anweisungen und markierte Anweisungen... 367 B.11 Arrays (Vektoren, Felder)... 367 B.12 Übungen... 369 Literaturverzeichnis............................................... 373 Stichwortverzeichnis.............................................. 377