I-PROGR3-HOME

  1. Plan der Vorlesung

  2. OO-Programmieren mit C++

  3. Organisatorisches

  4. Werkzeuge

  5. Zusammenfassung wichtiger Eigenschaften von C++ aus Programmieren2

  6. Übungen


I-PROGR3 WS03 - PROGRAMMIEREN3 - Vorlesung mit Übung
VL1: Plan der Vorlesung; Wiederholung Programmieren2

 Achtung : Skript gibt den mündlichen Vortrag nicht vollständig wieder !!!
                         

AUTHOR: Gerd Döben-Henisch
DATE OF FIRST GENERATION: Sept-14, 2003
DATE OF LAST CHANGE: Oct-6, 2003
EMAIL: Gerd Döben-Henisch



1. Plan der Vorlesung

Ausgangspunkt ist die Vorlesungsankündigung.

Zentral geht es also um eine Verknüpfung von objektorientierten Konzepten mit der konkreten Sprache C++ im Kontext eines grösseren Projektes.


START



2. OO-Programmieren mit C++

Für den konkreten Plan der Vorlesung wird ein Rahmen angenommen, der sich an Konzepten des Softwareengineerings orientiert, ohne allerdings schon auf alle theoretischen oder technischen Details einzugehen. Diese sind der späteren Vorlesung Softwareengineering vorbehalten.

Das Rahmenkonzept für das Softwareengineering ist im folgenden vereinfachenden Schaubild wiedergegeben:

I-PROGR3-SECYCLE

Eine konkrete Programmieraufgabe ist nomalerweise Teil eines grösseren Prozesses, der von der Problemerfassung (Aufgabenkatalog, use case) über Erstellung eines abstrakten Modells (Analyse-Modell) und Implementierung und Testen zum endgültigen Einsatz führt. Nicht selten führt der Einsatz zu weiteren Verbesserungen oder Erweiterungen, die dann im Prinzip wieder alle Stufen des Prozesses durchlaufen (zyklisch, evolutionär).

In der Vorlesung Programmieren3 soll nun versucht werden, das Erstellen von Software in genau diesen Etappen nachzuvollziehen. Es wird (siehe auch Tabelle unten) zunächst ein möglichst einfaches Problem (Version 1) gestellt werden, dessen Anforderungen in einem kommentierten Anwendungsfall (use case) zu präzisieren sind. Dann wird dazu ein abstraktes Analyse-Modell in Form von UML-Diagrammen erstellt. Dazu kommt das Werkzeug 'umbrello' zum Einsatz. Anschliessend wird mit Hilfe von umbrello erster C++-Code automatisch generiert. Diese Code-Fragmente werden dann zu lauffähigem Quelltext ausgearbeitet. Diese Programme werden minimalen Tests unterzogen. In allen Phasen wird auch die Frage der Dokumentierung eine wichtige Rolle spielen.

Nach einem ersten Durchlauf dieses Zyklus wird das Problem erweiter bzw. präzisiert (Version 2, Version 3, ...). Die Anforderungen des Anwendungsfalles werden entsprechend präzisiert; das Analyse-Modell wird erweitert, ebenso der Quelltext und die Tests. Besonderes Augenmerk wird darauf liegen, welche Anforderungen für das Programmieren aus den geforderten Änderungen erwachsen.


PROBLEM

ANFORDERUNGEN/

USE-CASE

ANALYSE-MODELL

IMPLEMENTIERUNG

TEST/ EINSATZ

Version 1

(umbrello)

(umbrello)

(umbrello, make, g++, flex, bison,...)


....





Version n






START



3. Organisatorisches

  1. Inhalte der Vorlesung als PreView im Netz; Diskussion in Vorlesung; Formulierung der Aufgabenstellungen für die Übungen.


  2. Erarbeiten der Übungaufgaben


  3. Präsentation der Übungsaufgaben in den Übungsstunden: Formate, Ablauf, Bewertungen, Übernahme auf die WebSeite (freiwillig).



START



4. Werkzeuge

Siehe die Vorlesungsankündigung. Kurze Kommentierung.


START



5. Zusammenfassung wichtiger Eigenschaften von C++ aus Programmieren2

Hier eine Liste wichtiger Eigenschaften der Programmiersprache2 aus Vorlesung Programmieren2. Für Details sei auf die durch die Links gegebenen Textpassagen verwiesen.

  1. Von UML nach C++

  2. class

    Von UML nach C++



    class2

    Verteilung des Codes auf verschiedene Dateien



  3. 1-dimensionaler Array versus Vektor-Template

  4. C-String versus String-Klasse

  5. Referenzen statt Zeiger

  6. Dynamisches Speichermanagement mit new

  7. Initialisierung von C++-Objekten

  8. Default Constructor, Deconstructor, CopyConstructor und CopyAssignment Operator

    1. Constructor

    2. Deconstructor

    3. Copyconstructor

    4. Copy Assigment Operator

  9. Flache und tiefe Implementierung

  10. Definition neuer Operatoren

  11. Stream-Klassen und Objekte

    1. Allgemeine Eigenschaften

    2. Spezielle Eigenschaften für File I/O

  12. Standard-Ein-/Ausgabefunktionen

  13. Manipulatoren

  14. Stream-Zustände

  15. Formate

  16. Dateien

  17. Vererbung - Inheritance

  18. Das Ideal und die Praxis

  19. Klasse Bruch/Friend-Funktionen/ globale Funktionen

  20. Implementierung von Bruch/ Überladung von Input-Output

  21. Abgeleitete Klasse

  22. Ein einfaches Template

  23. Spezialisierung von Templates

  24. Defaultwerte für Templates

  25. Konstanten als Parameter

  26. Schlüsselwort 'typename' für Subtypes

  27. Dynamische vs. Statische Polymorphie

    1. Gebundene dynamische Polymorphie

    2. Ungebundene statische Polymorphie

  28. Templates in der Praxis

  29. Schlüsselworte 'try', 'catch', 'throw'

  30. Standardfehlerklassen

  31. Stapel Rückabwicklung ('stack unwinding')

  32. Eigene Fehlerklassen

Das Thema Entwurfsmuster (Pattern), das zum Ende der Programmieren2-Vorlesung kurz besprochen wurde, wird in Programmieren3 zunächst nicht weiter behandelt werden. Eine ausführlichere Darstellung soll der Vorlesung Softwareengineering vorbehalten bleiben.


START



6. Übungen

Vertraut machen mit den in der Vorlesung genannten Werkzeugen.

In der nächsten Übung wird explizit das Werkzeug umbrello vorgestellt. Dieses wird dann während des gesamten Semesters benutzt werden


START