zurück zum Artikel

Ein erster Überblick: Design Patterns und Architekturmuster mit C++

Rainer Grimm

Meine letzte Umfrage hat gezeigt, dass sich viele meiner Leser wünschen, dass ich über "Design und Architekturmuster mit C++" schreibe.

Hinweis: Dieser Blogbeitrag erscheint aufgrund technischer Probleme im Backend zwei Tage verspätet.

Meine letzte Umfrage "Which mentoring program should I implement next? [1]" ergab für mich das überraschende Ergebnis, dass sich viele meiner Leser wünschen, dass ich über "Design Patterns und Architekturmuster mit C++" schreibe. Heute möchte ich meinen Plan für die zukünftigen Beiträge vorstellen.

Obwohl ich diesen Einführungsartikel "Design Patterns und Architekturmuster mit C++" nenne, ist der Fokus dieser Artikelserie viel breiter angelegt. Ich schreibe auch über grundlegende Terminologie, Idiome und Pattern zu Concurrency. Darüber hinaus verwende ich abhängig vom Kontext die äquivalenten Begriffe Pattern und Muster.

Die Grafik verfolgt zwei Zwecke.

Ich verfeinere meinen Plan nach und nach. Hier ist meine erste Verfeinerung.

Der Begriff Design Pattern geht auf Christoph Alexander zurück, der über Architektur und Stadtplanung schrieb: "Each pattern is a three part rule, which expresses a relation between a certain context, a problem, and a solution." Der Klassiker "Design Patterns: Elements of Reusable Object-Oriented Software [2]" von Eric Gamma, Richard Helm, Ralph Johnson und John Vlissides (kurz GOF) hat diesen Begriff für die Softwareentwicklung geprägt.

Vereinfachend gesagt, gibt es drei Arten von Mustern: Architekturmuster, Entwurfsmuster und Idiome.

Architekturmuster beschreiben die grundlegende Struktur eines Softwaresystems und setzen gerne Entwurfsmuster ein. Ein Idiom ist eine Implementierung einer Architektur oder eines Entwurfsmusters in einer konkreten Programmiersprache. Diese Klassifizierung von Mustern geht auf den zweiten Klassiker zurück, der ebenfalls ein Muss ist: "Pattern-Oriented Software Architecture: A System of Patterns [3]" Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad und Michael Stal (kurz POSA).

Wir sprechen von Patterns und Anti-Patterns. Anti-Patterns sind eine bewährte Methode, um sich selbst in den Fuß zu schießen.

Das sind nur die wichtigsten Aspekte der Terminologie zu Pattern. Ich werde aber auch weitere Eigenschaften wie ihre Vor- und Nachteile, ihre Geschichte und ihren Aufbau vorstellen.

Ich mache es kurz. Das revolutionäre, bahnbrechende Buch "Design Patterns: Elements of Reusable Object-Oriented Software" enthält 23 Muster. Sie werden auf zwei Arten klassifiziert:

Die Klassifizierung von Klassenmustern und Objektmustern ist im Wesentlichen eine Klassifizierung in Vererbung versus Komposition als Mittel zum Aufbau von Abstraktionen aus bestehenden Abstraktionen. Nicht alle der 23 Muster sind noch von großer Bedeutung. Deshalb gebe ich einen kurzen Überblick und Codebeispiele in modernem C++ zu den folgenden fettgedruckten Mustern:

Okay, die beiden Klassiker GOF (1994) und POSA (1996) sind ein wenig in die Jahre gekommen. Was bedeutet das für modernes C++? Genau mit dieser Frage beschäftige ich mich in dem nächsten Kapitel.

Ein Idiom ist eine Implementierung eines Architekturmusters oder eines Design Patterns in einer konkreten Programmiersprache. In C++ gibt es viele Idiome wie

Dies ist wahrscheinlich der Teil meiner Tour durch die Pattern, bei dem ich am meisten von Kommentaren profitieren kann. Daher freue ich mich über Rückmeldungen, welche anderen Idiome in C++ ihr kennt?

Architekturmuster beschreiben die grundlegende Struktur eines Softwaresystems und setzen oft Entwurfsmustern ein. Ich werde zumindest die folgenden Muster vorstellen:

Eine notwendige Voraussetzung für ein Data Race ist ein gemeinsamer, veränderbarer Zustand. Folgerichtig befassen sich die Synchronisationsmuster mit beiden Problemen. Hier sind die Synchronisationsmuster, über die ich schreiben möchte:

Außerdem müssen wir über eine concurrent Architektur nachdenken.

In meinem nächsten Artikel beginne ich meine Reise durch die "Design Patterns und Architekturmuster mit C++". Zuerst werde ich über die Ursprünge und die Geschichte der Entwurfsmuster schreiben. ( [4])


URL dieses Artikels:
https://www.heise.de/-7147402

Links in diesem Artikel:
[1] https://www.modernescpp.com/index.php/my-next-mentoring-program
[2] https://en.wikipedia.org/wiki/Design_Patterns
[3] https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture
[4] mailto:rainer@grimm-jaud.de