BIN201: Weiterführende Programmentwicklung

Lernpfad: Software-Entwicklung

BIN201: Weiterführende Programmentwicklung

Kurzporträt BIN201: Weiterführende Programmentwicklung
Worum geht es? Das Modul vertieft die Programmierung über einfache Einstiegsaufgaben hinaus. Die Studierenden entwerfen und implementieren nichttriviale Anwendungen in einer kompilierten, streng typisierten Sprache und arbeiten dabei mit Klassen, Objekten, Speicher- und Ressourcenverwaltung, Bibliotheken, Entwurfsmustern und Tests. Ein besonderer Schwerpunkt liegt darauf, Anforderungen nachvollziehbar in robuste Software zu überführen.
Wofür braucht man es? Die Kompetenzen werden in nahezu allen späteren Entwicklungsmodulen benötigt, besonders bei größeren Softwareprojekten, Web- und Backend-Systemen, DevOps-Prozessen und Software Engineering. Wer Software nicht nur schreiben, sondern auch strukturieren, testen, erweitern und erklären kann, kann belastbare Beiträge in Teamprojekten leisten. Das Modul stärkt damit die Grundlage für professionelle Softwareentwicklung.
Wieso ist es interessant? Viele Programmieraufgaben werden spannend, sobald Lösungen größer werden und über einzelne Funktionen hinausgehen. Dann entscheiden Entwurf, Typisierung, Speicherverhalten, Tests und Wartbarkeit darüber, ob Software verständlich und verlässlich bleibt. Das Modul zeigt, wie aus Programmierkenntnissen systematische Entwicklungskompetenz wird.
Modulverantwortung

Prof. Dr. Michael Gref

Lehrperson(en)

Prof. Dr. Michael Gref

Verwendbarkeit

Bachelor Informatik

Fächergruppe

Informatik

Modultyp
Pflicht
Sprache

Deutsch

Angebot

Sommersemester

Dauer

1 Semester

Credits

5 ECTS

Benotung

Deutsche Notenskala 1-5

SWS

2 V | 1 Ü | 1 P | - S

Workload
Präsenzstudium: 45 Std. Selbststudium: 90 Std.
Engl. Titel

Advanced Program Development

Empfohlene Voraussetzungen
  • BIN004: Einführung in die Programmierung: strukturierte Programmierung, Funktionen, elementare Datenstrukturen, Klassen, Versionsverwaltung.
  • BIN006: Systemhardware: Speicherorganisation, Zeiger.
Lernergebnisse / Kompetenzen
WAS

Mit erfolgreichem Abschluss des Moduls sind die Studierenden in der Lage, aus gegebenen, auch unvollständigen Problemstellungen nichttriviale Anwendungen in einer kompilierten und streng typisierten Programmiersprache qualitätsorientiert zu entwerfen, zu realisieren, zu testen und begründet weiterzuentwickeln.

WOMIT

Die Studierenden erreichen dieses Lernergebnis, indem sie

  • funktionale und technische Anforderungen in umsetzbare Teilschritte und geeignete Klassen-, Objekt- und Schnittstellenstrukturen mit UML überführen,
  • objektorientierte Konzepte wie Kapselung, Konstruktion und Zerstörung von Objekten, Klassenbeziehungen, Vererbung und Polymorphie problemangemessen anwenden,
  • Datenstrukturen, generische Konzepte sowie Bibliothekskomponenten wie Container und Algorithmen auswählen und effizient einsetzen,
  • Wert-, Referenz- und Zeigersemantik, Objektlebensdauer sowie Ressourcenverwaltung sicher handhaben und Ein- und Ausgaben, Fehler- und Ausnahmesituationen, Datenvalidierung und defensive Programmierung angemessen gestalten,
  • Entwurfsmuster für wiederkehrende Entwurfsprobleme auswählen und begründen sowie eigene, gegebene oder automatisiert erzeugte Codeartefakte analysieren, testen, korrigieren und erweitern,
  • Unit-Tests entwickeln, Qualitätsindikatoren auswerten, automatisierte Build- und Testabläufe nutzen und wesentliche Annahmen dokumentieren.
WOZU

Die Studierenden nutzen diese Kompetenzen, um in nachfolgenden Entwicklungsmodulen und in Softwareprojekten nachvollziehbare, qualitätsgesicherte und langfristig weiterentwickelbare Softwarebeiträge leisten zu können. Das Modul bildet damit eine Grundlage für DevOps, Web-Engineering, Software Engineering und größere teamorientierte Entwicklungsaufgaben.

Inhalte
  • Anforderungen, Annahmen, Abgrenzungen und technische Entwurfsentscheidungen aus Problembeschreibungen ableiten
  • Kompilierte, streng typisierte Programmiersprachen: Übersetzungsprozess, Typsystem, Namensräume sowie Wert- und Referenzsemantik
  • Objektorientierte Programmierung mit Klassen und Objekten, Kapselung, Konstruktion und Zerstörung, Klassenbeziehungen, Delegation, Vererbung, Polymorphie und UML-Klassendiagrammen
  • Ressourcen- und Speicherverwaltung, Objektlebensdauer, Ownership-Konzepte und sprachliche Abstraktionen
  • Datei- und Konsolenein- und -ausgabe sowie Fehler-, Ausnahme- und defensive Behandlung von Eingaben und typischen Fehlerquellen
  • Generische Programmierung und Bibliothekskomponenten, insbesondere Container, Iteratoren und Algorithmen
  • Ausgewählte Entwurfsmuster aus den Kategorien Erzeugung, Struktur und Verhalten
  • Testen, Testfallgestaltung, Testabdeckung und Qualitätsindikatoren; Lesen, Bewerten, Refactoring und Erweiterung von Code sowie automatisierte Build- und Testabläufe
Prüfungsvorleistung

Erfolgreiche Bearbeitung semesterbegleitender Übungs- und Praktikumsaufgaben. Die Prüfungsvorleistung kann Programmierabgaben, Tests, kurze Dokumentationen, Code-Walkthroughs oder die Erläuterung eigener beziehungsweise gegebener Lösungen beinhalten.

Prüfungsleistung

Computergestützte Klausurarbeit (120 Minuten). Das Prüfungskonzept umfasst Aufgaben zur Analyse, Fehlersuche, Bewertung, Erweiterung und Implementierung von Programmen.

Literatur
  • Stroustrup, B.: A Tour of C++. 3. Auflage, Addison-Wesley, 2022.
  • Lippman, S. B.; Lajoie, J.; Moo, B. E.: C++ Primer. 5. Auflage, Addison-Wesley, 2012.
  • Meyers, S.: Effective Modern C++. O’Reilly, 2014.
  • Gamma, E.; Helm, R.; Johnson, R.; Vlissides, J.: Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994.
  • Fowler, M.: Refactoring: Improving the Design of Existing Code. 2. Auflage, Addison-Wesley, 2018.
  • C++ Core Guidelines: C++ Core Guidelines. https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.
Lernpfad

Software-Entwicklung