Ich bin ein Universitätsstudent und habe gerade angefangen, über Designmuster zu lernen und zu kämpfen, um den Zweck von ihnen zu verstehen. Ich habe versucht, sie zu recherchieren, aber alle Ressourcen, die ich gefunden habe, scheinen auf akademische und nicht auf professionelle Weise über sie zu sprechen.
Was ist ihr Zweck und sind sie wichtig zu lernen?
java
design-patterns
Roy James Schumacher
quelle
quelle
Antworten:
Entwurfsmuster eignen sich hervorragend, um Ihre Absicht sehr schnell mitzuteilen - jeder weiß, was eine Fabrik ist.
Was wirklich, wirklich, wirklich schlecht ist, ist zu versuchen, Ihren Code an Muster anzupassen oder Verantwortlichkeiten nach Mustern zu trennen, oder so ähnlich. Es ist eine Sache zu sagen "Dieses Objekt ist eine Fabrik" und eine andere zu sagen "Dieses Objekt sollte ausschließlich eine Fabrik sein".
quelle
Aus dem Wikipedia-Artikel über Entwurfsmuster :
Wir hatten lange Zeit ein ernstes Problem in der Softwareentwicklung: Sie stellen einen Neuling in ein Projekt ein, und egal, wie gut er die Programmiersprache beherrscht, es dauert Monate, bis er über die Abläufe in Ihrem Projekt auf dem Laufenden ist Projekt, bevor sie produktiv sein können. In der Hardware-Entwicklung haben sie dieses Problem vor langer Zeit gelöst: Sie haben eine gemeinsame Terminologie namens "schematische Diagramme". Sie beauftragen einen Hardwaretechniker, geben ihm morgens die Pläne Ihres Hardwareprojekts, lassen es studieren und am Abend, bevor es an der Zeit ist, können sie die Lötpistole in die Hand nehmen und produktiv werden. Wir haben versucht, Wege zu finden, um dies zu verbessern. Standardisierung von Programmiersprachen war eine Möglichkeit; Standardbibliotheken (heutzutage Klassenbibliotheken) waren ein anderer Weg; Aber einer der wichtigsten Wege waren vielleicht Entwurfsmuster. Sind sie also wichtig? Wetten Sie?
quelle
Es gibt zwei wesentliche Gründe für die Existenz von Mustern.
Das erste wurde bereits ziemlich gut erklärt: Die Verwendung von Mustern fördert die Kommunikation zwischen Entwicklern. Wenn Sie und ich verstehen, dass ich mit 'Observer' von einer sehr spezifischen Codestruktur spreche, kann ich sehr schnell beschreiben, wie ein Teil des Codes, der dieses Muster verwendet, funktioniert. Die Alternative besteht darin, die zeitaufwändige und fehleranfällige Lösung vollständig zu beschreiben. ("Nun, ich habe diese reine virtuelle Klasse erstellt, die Konsumentenobjekte beschreibt und Schnittstellen für sie bereitstellt, und dann habe ich eine Klasse erstellt, die eine Liste der aktiven Konsumenten verwaltet, die ...")
Der zweite Vorteil von Mustern ist, dass es sich um Standard-Lösungsformen für gängige Problemformen handelt. Wenn Sie Ihre Muster kennen und beispielsweise auf ein Problem stoßen, bei dem Sie einen guten Weg finden müssen, um Informationen von (möglicherweise mehreren) Erzeugerobjekten zu mehreren Verbraucherobjekten zu erhalten, ohne unnötige Kopplung zwischen Klassen einzuführen, werden Sie dies erkennen ist ein Job für einen Beobachter! " und Sie werden sofort wissen, wie Sie Ihr Problem lösen können.
Diese Vorteile verstärken sich auch gegenseitig. Sie ermöglichen es Ihnen, bestimmte gängige Problemklassen schnell zu lösen, und wenn Sie fertig sind, können Sie sehr schnell kommunizieren, wie Sie das Problem gelöst haben.
Vergleichen Sie dies mit einer Welt, in der Muster "nicht existieren". Sie stoßen auf eine dieser Problemklassen, die im Allgemeinen keine trivialen Designprobleme sind, und Sie verbringen eine ganze Weile damit, eine gute Lösung zu finden (die im Übrigen sehr wahrscheinlich dem entsprechenden Muster ähnelt). Dann kommt Ihr Mitarbeiter und möchte wissen, wie Sie es gelöst haben, und Sie verbringen eine Stunde damit, das Wie und Warum zu besprechen.
Dies alles ist mit einer Einschränkung verbunden, die ziemlich offensichtlich erscheinen sollte: Versuchen Sie nicht, Probleme in Muster zu zwingen, die nicht passen. Wenn das Muster nicht zum Problem passt, wird die Lösung verwickelt und Sie verlieren den Vorteil der Aufwandsreduzierung von Mustern. Da Ihre Arbeit nicht mehr mit dem Verständnis Ihrer Mitarbeiter für die Bedeutung des Musters übereinstimmt, verlieren Sie außerdem die Kosten für den Kommunikationsnutzen. In der Tat werden Sie wahrscheinlich die Kommunikationskosten über die No-Pattern-Kosten hinaus erhöhen, da der Missbrauch des Musters Ihren Mitarbeitern ein falsches Verständnis der Lösung vermittelt, was schlimmer ist als gar kein Verständnis.
quelle
Bei Mustern geht es um die Wiederverwendung von Ideen und Konzepten und um die Schaffung einer gemeinsamen / konsistenten Plattform für die Kommunikation derselben.
Wir sind uns alle einig (!), Dass die Wiederverwendung von Code in der Theorie eine gute Sache ist - aber es stellt sich als schwieriger heraus, als wir es in der Praxis gerne tun würden (in mancher Hinsicht ändert sich dies, aber es wird immer eine Herausforderung sein ). In Wirklichkeit wollen wir jedoch vieles wiederverwenden, indem wir eine Art Vorlage verwenden, um eine Lösung für ein bestimmtes Problem zu finden - das sind Muster. Sie kommen also zu einem Fall, in dem Sie sagen, dass ein guter Ansatz zur Lösung von Problem X darin besteht, Muster Y zu verwenden, und wir wissen, dass die Elemente von Muster Y a, b und c sind, und los geht's. Da die Muster weitgehend verstanden werden, müssen Sie nicht detailliert erläutern, welche Vorteile die Kommunikation hat.
Das Unterhaltsame an Mustern ist, dass sich Sprachen und Frameworks weiterentwickeln, um gängige Muster besser zu unterstützen, mit dem Nettoeffekt, dass wir mehr und mehr Code wiederverwenden (mehr und bessere Legobausteine!), Weil wir Anwendungen erstellen (indem wir Muster implementieren) ) erleichtert die Wiederverwendung.
quelle
Entwurfsmuster sind nur bekannte Bausteine, auf denen jede Softwarelösung aufbaut. Sie sind aus folgenden Gründen wichtig:
Sie sind sprachunabhängig. Sobald Sie wissen, welches Entwurfsmuster für ein gegebenes Problem / eine gegebene Architektur / Aufgabe geeignet ist, können Sie es in einer beliebigen Multi-Paradigmen-Sprache implementieren - sei es C #, Java oder Python - die Lösung ist in den meisten Fällen dieselbe, die Sie gerade haben um die Syntax anzupassen. Dies bedeutet, dass Sie Ihre Erfahrungen aus dem Programmieren in einer Sprache auf andere Sprachen übertragen können, solange Sie innerhalb derselben Problemdomäne (und möglicherweise sogar domänenübergreifend) bleiben.
Trotz der Tatsache, dass Entwurfsmuster tatsächlich an das Programmierparadigma gebunden sind , bedeutet dies, dass Entwurfsmuster für die objektorientierte Programmierung (die bekanntesten, auch als "Gang of Four" -Muster bezeichnet ). Mithilfe von Mustern können Sie verstehen, wofür das Paradigma am besten geeignet ist, und über die reine Syntax hinausgehen.Ich habe zum Beispiel viele Implementierungen in C # und Java gesehen, bei denen die Leute einfach so programmiert haben, wie sie es in Basic oder Fortran getan haben - sie haben einen perfekten, zwingenden Verstand, um Probleme zu lösen, und sie verwenden OOP nur, um diese Lösung zu rendern - keine Vererbung , kein Polymorphismus, alle Methoden sind öffentlich usw. Designmuster helfen Ihnen, hinter diese Konzepte zu schauen und zu sehen, wie sie im wirklichen Leben funktionieren. Gleiches gilt für Designmuster in anderen Paradigmen wie der funktionalen Programmierung.
Muster sind im Allgemeinen eine praktische Möglichkeit, Ideen darzustellen, und kamen aus der Architektur in die Informatik. Sobald Sie die Idee hinter einem bestimmten "Muster" verstanden haben, können Sie dieses Muster in einem anderen Problem leicht erkennen und mithilfe dieses Musters lösen (wahrscheinlich leicht modifiziert, um Ihr Problem besser anzugehen). Es gibt unzählige verschiedene Muster: bei der Integration von Unternehmenssoftware , beim Testen von Quellcode usw. Suchen Sie in Büchern für Informatik nach Mustern.
Neben dem Erlernen bewährter Methoden durch Lernen von Mustern können Sie leicht lernen, wie Sie dumme Fehler in Ihrem Code vermeiden, indem Sie Anti-Muster studieren . Es gibt viele Bücher mit allgemeinen Fehlern in verschiedenen Bereichen in Form von Anti-Mustern, die sehr unterhaltsam und gleichzeitig lehrreich sind. Ich liebe die Namen dieser Anti-Patterns übrigens!
quelle
Sie können sich ein Muster als einen bewährten Weg vorstellen, um ein Problem zu lösen, das Sie und andere Entwickler verstehen. Beispielsweise besteht das Problem darin, eine sortierte Liste von Daten zu erstellen. Anschließend können Sie eine verknüpfte Liste verwenden oder Daten in einen Vektor einfügen und sortieren. Wahrscheinlich verstehen Sie diese beiden Optionen, da Sie das Muster der verknüpften Liste oder das Muster des Lade- und Sortiervektors möglicherweise bereits kennen. Möglicherweise kennen Sie die Vor- und Nachteile der einzelnen Komponenten und müssen die Implementierung nicht sehen, um zu verstehen, was vor sich geht.
quelle
Ich denke, Sie sind ein Anfänger in der Programmierung. Ich schlage nicht vor, dass Sie das Designmuster früh erlernen. Das Erlernen und Verstehen von Entwurfsmustern muss auf den Erfahrungen der Softwareentwicklung basieren. Sie sollten mehr Übung darin haben, Code zu schreiben und herauszufinden, welcher Codestil schlecht ist, und dann Designmuster lernen, um das Design zu verbessern.
quelle
Die Nützlichkeit eines Entwurfsmusters hängt von der ausgewählten Sprache ab. Je mächtiger die von Ihnen gewählte Sprache ist, desto weniger müssen Sie Designmuster verstehen und implementieren. Ein Entwurfsmuster kann ein Signal sein , das Ihre Sprache
saugteine integrierte Funktion fehlt.Joe Gregorio hielt einen großartigen Vortrag über das Fehlen von Designmustern in Python
quelle
Entwurfsmuster sind Lösungen für häufig auftretende Probleme bei der Softwareentwicklung. Für einige Probleme gibt es immer mehr als eine Lösung, und Entwurfsmuster helfen Ihnen bei der Entscheidung, welche Lösung die beste ist, indem sie Ihnen eine Reihe guter Lösungen für diese allgemeinen Probleme bieten.
quelle