Ich lerne gerade für eine Design Patterns-Prüfung (die morgen stattfinden wird ...). In einer der "Testprüfungen" fand ich folgende Frage:
Jim Coplien sagte während des eingeladenen Vortrags, dass es nicht einmal einen gibt Entwurfsmuster im GoF Buch. Was ist deine Meinung dazu?
Weil ich nicht in diesem speziellen Vortrag war (es war letztes Semester;) Ich habe keine Ahnung, was er gemeint haben könnte. Und ich habe keine Beweise dafür, dass Jim Coplien das gesagt hat, aber ich denke, das ist egal.
Was denkst du könnte er mit dieser Aussage gemeint haben?
(Ich bin nicht sicher, ob die Frage für dieses Forum geeignet ist, aber ich wollte fragen.)
Die GoF behauptet, ihre Muster Inspiration von Christopher Alexander (wie sie in der Front des Buches sagen), die den Begriff im weiteren Bereich des Designs popularisiert. Für Alexander ein Muster: ist immer ein Element der Mustersprache; trägt zum tiefen menschlichen Gefühl bei; und ist immer geometrisch. Zumindest einige der GoF-Muster schlagen bei mindestens einem dieser Punkte fehl, und bei einigen von diesen scheitern einige. Obwohl "pattern" ein neutrales Wort in englischer Sprache ist, lassen die kulturellen und historischen Wurzeln der GoF-Arbeit, verbunden mit ihrer Berufung auf die alexandrinische Inspiration, sie den grundlegenden Kriterien ihres Vorgängers unterzuordnen, und es mangelt an ihnen. Obwohl sie wissen und ausdrücken, dass sie wissen, dass sie etwas von Alexander unterscheiden, verwenden sie immer noch einen Begriff, den er entwickelt, recherchiert und popularisiert hat, und ich halte sie dafür zur Rechenschaft. (Das sind alles geschätzte Bekannte; ich war John Vlissides nahe, den wir vor einigen Jahren verloren haben, und hatten einen großen Dialog mit Richard Helm und Eric Gamma über die tieferen Probleme. Meine Gespräche mit Ralph waren weniger interessant wie sie auf der Engineering-Ebene stoppen.)
Worte bedeuten Dinge. Der alexandrische Sinn des Begriffs "Muster" wurde von der GoF (oder der Software-Gemeinschaft insgesamt) nicht gut verstanden, als sie das Buch schrieben, aber sie bauten auf der vulgären Wahrnehmung der Zeit auf, die auf drei Quellen beruhte: 1. Erich Gammas Doktorarbeit; 2. Ralph Johnsons Framework-Arbeit und 3. das C ++ - Idiombuch (Sie finden dieses in der eigenen Erklärung des GoF-Buchs zu seinen Quellen in Abschnitt 6.3). (Oh, Knuth war auch ein Einfluss.) Ich fuhr fort, die Autoren darüber herauszufordern, aber die Leute mochten es, und sie mochten, dass die Leute es mochten, so dass das Momentum weiterging.
Einige Jahre später (2. Dezember 2004) schrieb mir einer der GoF, um seine "Aha" -Erfahrung zu beschreiben, endlich zu verstehen, was Alexander vermitteln wollte. Es war ein bisschen anders als das, was dem Inhalt des GoF-Buches zugrunde liegt:
Endlich groked "generative Muster" und stückweise Wachstum durch eine lange gewundene Route .... Vor allem durch einige interessante universelle Eigenschaften der Software (skalenfrei und Kleinwichtigkeit)
Ein bisschen langsam bin ich manchmal ... aber am Ende angekommen ...
Dass die Leute sie so nützlich finden, ist leider eine Anklage gegen moderne Programmiersprachen. Die Sprachen haben nicht die richtigen Konstrukte, um die gebrochene Symmetrie auszudrücken, die Alexander für Muster hält und die einem komplexen Design innewohnt (Nature of Order, S. 187: " ... im Allgemeinen, a Die große Symmetrie des vereinfachten neoklassizistischen Typs trägt selten zum Leben eines Dinges bei, weil in jedem komplexen Ganzen auf der Welt fast immer komplexe, asymmetrische Kräfte am Werk sind - Dinge von Ort, Kontext und Funktion -, die diese Symmetrie erfordern gebrochen werden "; op. cit., S. 63-4:" Auch die Natur schafft schöne Strukturen, die durch wiederholte Anwendung von strukturerhaltenden Transformationen bestimmt sind. In diesem Zusammenhang halte ich das für nützlich zu bemerken, dass das, was ich strukturerhaltende Transformationen nenne, sehr eng mit dem zusammenhängt, was in der Physik als "Symmetriebrechung" bekannt wurde. "). Java ist besonders schlecht darüber, aber auch sein Vorfahr Smalltalk. C ++ ist reich an Funktionen, um lokale Symmetriebrechung zu beschreiben, aber die meisten Leute wissen nicht, wie man sie benutzt. Richard Gabriel - der auch eng mit Alexander zusammengearbeitet hat und Sprachen wie CLOS und Scheme zu seinen Gunsten hat - sagt, dass er die GoF-Muster einfach nicht versteht, weil eine richtig entworfene Sprache (wie CLOS oder Scheme) sie nicht braucht . Ich bin größtenteils im selben Lager.
Hinter der Designbewegung (Thackara ("Design nach der Moderne", 1989), Naur, Alexander, Cross ("Entwicklungen in der Designmethodik", 1984) und anderen Autoren in der 80er Jahre). Es hat mich schon immer erstaunt, wie wenig Programmierer von dieser Literatur wissen und wie verkehrt viel CS-Denken angesichts der offensichtlichen Ergebnisse der Arbeit der Designbewegung in dieser Zeit ist. Diejenigen von uns, die 1993 die Musterdisziplin (die ursprüngliche 7 der Hillside Group) gründeten, waren mit den Hauptthemen dieser Literatur vertraut. Die PLoP-Konferenzen entwickelten eine Literatur, die radikal von diesen Grundlagen abging und sich mehr auf das arkane Wissen konzentrierte als auf die "Qualität ohne Namen", die Alexander suchte.
Der Grund, warum ich Idiome für C ++ - Programmierer eingeführt habe, war, ihnen zu erlauben, objektorientierte Programmierung zu machen, wenn die Sprache ihnen im Weg steht. Jetzt haben wir stärkere Ansätze wie DCI, die die Notwendigkeit von Idiomen stark reduzieren. Patterns gelten immer noch auf der Domain-Ebene - was im Einklang mit Alexanders Vision steht. Es wurden ein paar gute Mustersprachen geschrieben; z. B. von Hanmer (Patterns for Fault-Tolerant Software, 2007); von Eloranta et al. (Designing Distributed Control Systems, 2014), und die Organisationsmuster, die Alexander selbst anmerkte, erfüllten die notwendigen Kriterien (Coplien und Harrison, 2004).
Alexander und ich (und Richard Gabriel - lesen seine "Patterns of Software" - und auch andere) teilen die Enttäuschung über diese frühe Neuausrichtung eines Begriffs, der im Design gut etabliert war, bevor er von GoF neu definiert wurde. Ja, weil sie Design Patterns nennen, sind sie Design Patterns - im Kontext jeder Diskussion über das Design Patterns Buch der Gang of Four. Im weiteren Schema der Designtheorie und Architektur sind sie nicht: sie sind nur Idiome. Wie die Autoren selbst sagen, haben sie so angefangen.
Es gibt mehrere Anstrengungen, um Alexanders Vision in der Software-Community wiederherzustellen. Die ScrumPLoP®-Community ( Ссылка ) nimmt alle alexandrinischen Grundmuster sehr ernst. Ein alter alexandrinischer Kollege, Greg Bryant, der das IT-Zeug für CES gemacht hat, hat mich erreicht und mir von seiner Arbeit erzählt, um Alexanders Vision wieder in Software zu verwandeln, und wir sind dabei, Notizen zu tauschen. Ich bin mir sicher, dass Dick Gabriel immer etwas im Sinn hat, obwohl er und ich seit einiger Zeit nicht mehr miteinander gesprochen haben. In der Zwischenzeit arbeite ich direkt mit Alexanders Kollegen Hiroshi Nakano zusammen, der Alexanders Ideen (die er direkt in Bezug auf das Tao te Ching in Timeless ausdrückt) direkt mit ihren Parallelen in der japanischen Kultur verbindet. Es passt viel besser als es zu versuchen, es in die westliche Kultur zu schüren. Das erklärt wahrscheinlich etwas von der Frustration, meinen Anspruch verstehen zu können - obwohl es keine Entschuldigung für einen Fachmann ist, der im Wissensgeschäft arbeitet.
Natürlich ist all dieses Gründen eine Frage der veröffentlichten Dialektik und Forschung und steht jedem zur Verfügung, der sich die Zeit nehmen möchte, um es zu erforschen. Es ist nicht so beiläufig, wie man es schnell wieder abtun könnte. Ich habe 20 Jahre gebraucht - und ich hatte direkten Zugang zu den Quellen. Ich kann nachvollziehen, dass es für einen durchschnittlichen Programmierer schwierig ist, sich mit diesen Dingen zu beschäftigen, aber ich würde vorschlagen, ein bisschen mehr zu recherchieren, bevor ich eine gut recherchierte Position aus der Hand breche, bevor ich meine Hausaufgaben mache. Es ist eine StackOverflow-Sache.
Nach der eigenen Definition der GoF ist es voller Designmuster. Daraus folgt, dass Coplien eine andere Definition eines Entwurfsmusters hat oder dass Coplien die GoF-Definition missverstanden oder missverstanden hat, oder er behauptet, dass die GoF-Definition nicht mit den GoF-Mustern übereinstimmt.
Die Frage fordert Sie auf, die Unterschiede zwischen den beiden Definitionen zu beschreiben und Ihre Meinung zu der von Ihnen bevorzugten Definition abzugeben. Wahrscheinlich Ihre begründete Meinung, denn in der Wissenschaft sind Ihre Gründe für Ihre Meinung (Methodik) viel wichtiger als die Meinungen selbst.
Tags und Links design-patterns