Clean Code C++
Entwicklungsprinzipien für „Clean Code“ bei C++
„Clean Code“ ist eine Frage der richtigen Einstellung des ganzen Teams. Modernes C++ ab Version 11 bietet noch mehr Möglichkeiten, lesbaren und wartbaren Code zu erschaffen oder dahin zu überführen. Den Entwicklern stehen dafür bewährte Ansätze für Refactorings sowie Werkzeuge, die eine bessere Modularisierung und gute Codequalität ermöglichen, zur Seite. Damit kann das eigene und fremde Vertrauen in den Quellcode erhöht werden. Aber auch Fehler in der Entwicklung können so aufgedeckt werden und letztendlich in einer verbesserten Fehleranalyse münden.
Ziel und Motivation
Um den Stoff nachhaltig vermitteln und motivieren zu können wechseln sich Theorie und Praxis untereinander ständig ab. Auch die Theorievorträge beziehen die Teilnehmer aktiv mit ein und beantworten Fragen aus dem Alltag eines Softwareentwicklers. In den Praxisabschnitten werden realitätsnahe Szenarien diskutiert und umgesetzt. Die Inhalte sind so ausgelegt, dass sowohl Einsteiger als auch erfahrene C++-Entwickler viel mitnehmen können. Neuen Ansätze, Patterns und Denkweisen schaffen die pragmatische Grundlage dafür, den Code „clean“ zu halten.
Übersicht und Einführung
- Motivation, Ideen, Ziele und Umsetzungen
- Grundprinzipien und Konzepte von Clean Code
- Praktische Einführung in Session Workflow
- Praxisteil
- Beispielcode zum Laufen bekommen
- Tests durchführen
- einfache Refactorings durchführen
Umgang mit Legacy Code
- Bewusstsein für Probleme schaffen
- Strategien für Umgang mit Legacy Code
Riskominimierung durch Unit Tests
- Zielstellungen für gute Tests
- Herausforderungen in C++
- Architekturen für gute Testbarkeit
- Praxisteil
- Realistischer Legacy Code ohne Unit Tests
- Refactoring, um Unit Tests zu ermöglichen
- Erstellung der Unit Tests
- testgetriebene Entwicklung neuer Leistungsmerkmale
Modularisierung und Dependency Injection in C++
- Problembewusstsein und Motivation
- Ziele und Ideen sowie Refactoring-Strategien
- Praxisteil
- Realistische Qt GUI-Anwendung
- Refactoring mit Dependency Injection
- testgetriebene Entwicklung neuer Leistungsmerkmale
Modularisierte Gesamtarchitektur
- Architektur in großen Projekten
- Nutzung von Interfaces und stabilen APIs
- Praxisteil
- Leistungsmerkmale in modularer Architektur am Beispiel einer GUI-Anwendung
- testgetriebene Entwicklung neuer Leistungsmerkmale
Vererbung in C++ richtig nutzen
- Vorstellung objektorientiertes Design (OOD)
- Alternativen zur Vererbung
- Vererbung ist ein Implementierungsdetail
- Wann ist was angebracht
- Praxisteil A
- Kapselung von Vererbung mithilfe von Function Templates
- Bezug dieser Methode auf die vorherigen Schulungsinhalte
- testgetriebene Entwicklung neuer Leistungsmerkmale
- Praxisteil B
- Ideen für zukünftige Verbesserungen der selbstentwickelten Beispiele
- Diskussion von Ansätzen zur Verbesserung der Codebasis von Teilnehmern