Gibt es irgendwelche “Entwurfsmuster” in C? [closed]
Lesezeit: 5 Minuten
Ich weiß, dass Entwurfsmuster im Allgemeinen etwas mit der OO-Programmierung zu tun haben, aber haben Sie ein Muster, das Sie oft verwenden, wenn Sie C programmieren?
Ich interessiere mich nicht für einfache Übersetzungen der klassischen OO-Muster und erwähne bitte nicht Duffs Gerät. 😉
coolaj86
Mein Favorit ist die „Patterns in C“-Reihe von Adam Tornhill:
Außerdem: Ich denke immer an goto als tolles Werkzeug des armen Mannes für das Dekorateurmuster.
Aktualisieren: Ich würde die Verwendung sehr empfehlen Rost (rust-lang.org) anstelle von C, es sei denn, Sie müssen c verwenden. Rust hat alle Vorteile von c, einschließlich Geschwindigkeit und Binärbibliothekskompatibilität mit c, aber der Compiler übernimmt einen Großteil der Komplexität, um sicherzustellen, dass der Code speichersicher ist und keine Datenrennen enthält. Es ist auch portabel, verfügt über eine Standardbibliothek für allgemeine Aufgaben und ist viel einfacher für verschiedene Designmuster zu programmieren.
Könnten Sie näher erläutern, was goto hat mit Dekorateuren zu tun?
– Gui Pra
14. August 2015 um 16:48 Uhr
Dies ist eine großartige kleine Serie von Adam Tornhill (ehemals Petersen). Seine komplettes Buch ist verfügbar. Dieser kleine Satz von Mustern wird Sie in C weit bringen.
– Clint Pachl
31. Oktober 2017 um 10:56 Uhr
Design Patterns könnten als fehlende Sprachmerkmale angesehen werden. Die Einführung von Entwurfsmustern: Elemente wiederverwendbarer objektorientierter Software besagt:
Die Wahl der Programmiersprache ist wichtig, weil sie die eigene Sichtweise beeinflusst. Unsere Muster setzen Sprachfunktionen auf Smalltalk/C++-Ebene voraus, und diese Wahl bestimmt, was einfach implementiert werden kann und was nicht. Wenn wir von prozeduralen Sprachen ausgegangen wären, hätten wir möglicherweise Entwurfsmuster namens „Vererbung“, „Kapselung“ und „Polymorphismus“ aufgenommen. Ebenso werden einige unserer Muster direkt von den weniger verbreiteten objektorientierten Sprachen unterstützt. CLOS verfügt beispielsweise über mehrere Methoden, die die Notwendigkeit eines Musters wie Visitor verringern. (Kursiv von mir)
Der Satz in Kursivschrift ist die Antwort auf Ihre Frage.
Polymorphismus über Callbacks, zB die der Standardbibliothek qsort Funktion. Alles, was es braucht, ist eine Möglichkeit, zwei Elemente zu vergleichen, und es kann ein Array davon sortieren.
Sie können viel ausgefeilter sein, indem Sie Sätze von Funktionen (vtables) verwenden, um die relevanten Eigenschaften eines Typs darzustellen, damit eine generische Routine ihn sinnvoll verarbeiten kann. Beispielsweise rufen die Lese-, Schreib- usw. Aufrufe eine offene Datei oder einen Netzwerkport auf.
Ich mag die Verwendung von Rückrufen. Sie können eine allgemeine Funktion zum Durchlaufen von Datenstrukturen erstellen, die eine Callback-Funktion für jedes Element ausführt.
Ja, das sind sie wahrscheinlich, aber wie würden Sie normalerweise eines dieser Muster in C implementieren?
– eine Masse
6. November 2010 um 14:14 Uhr
Der bessere Punkt ist, dass Sie sollte nicht Implementieren Sie schlechte Entwurfsmuster (wie Singletons, auch bekannt als globale Variablen) in C oder einer anderen Sprache.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
6. November 2010 um 16:00 Uhr
@R.: Ich glaube wirklich nicht, dass Singleton per se ein schlechtes Muster ist. Es kann in bestimmten Fällen nützlich und produktiv sein, kann in bestimmten Fällen schädlich für die Codequalität sein. Sondern der Entwickler muss die Vor- und Nachteile der Designmuster kennen und sie mit Bedacht einsetzen.
– Vlad
6. November 2010 um 16:29 Uhr
Peter g.
Design Patterns modellieren oft Dinge, die nur eine Ebene von dem entfernt sind, was eine vorhandene Umgebung bietet. Wenn Sie C mit seiner Standardbibliothek als Umgebung nehmen, ist die Objektorientierung ein hervorragendes Entwurfsmuster.
Ja, das sind sie wahrscheinlich, aber wie würden Sie normalerweise eines dieser Muster in C implementieren?
– eine Masse
6. November 2010 um 14:14 Uhr
Der bessere Punkt ist, dass Sie sollte nicht Implementieren Sie schlechte Entwurfsmuster (wie Singletons, auch bekannt als globale Variablen) in C oder einer anderen Sprache.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
6. November 2010 um 16:00 Uhr
@R.: Ich glaube wirklich nicht, dass Singleton per se ein schlechtes Muster ist. Es kann in bestimmten Fällen nützlich und produktiv sein, kann in bestimmten Fällen schädlich für die Codequalität sein. Sondern der Entwickler muss die Vor- und Nachteile der Designmuster kennen und sie mit Bedacht einsetzen.
– Vlad
6. November 2010 um 16:29 Uhr
nhahtdh
Das virtuelle Dateisystem ist ein perfektes Beispiel für das Erlernen des Entwurfsmusters.
14208700cookie-checkGibt es irgendwelche “Entwurfsmuster” in C? [closed]yes