Wie sollten Sie Design Patterns Personen außerhalb von Software World erklären?


10

Ich möchte meiner Nichte Designmuster erklären, habe aber immer Schwierigkeiten damit. Dies ist hauptsächlich auf mein mangelndes klares Verständnis der Entwurfsmuster zurückzuführen. Wie schlagen Sie vor, Muster wie MVC, Singleton, Factory, Repository usw. so einfach zu erklären, dass selbst Kinder im Alter von 10 Jahren sie verstehen können?

Ich suche nach Beispielen, die das Verständnis von Mustern erleichtern. Beispiele mit Spielzeug, Filmen, Musik etc.


2
Entwurfsmuster sind für die Softwareentwicklung das, was Kategorietheorie für die Mathematik ist. . . Zumindest würde ich es so einem Mathematiker erklären.
Eric Wilson

Es ist wie das Lesen der Antwortabschnitte von Puzzle-Büchern. Sie werden die Antwort auf jedes Rätsel nicht kennen, aber für die meisten wissen Sie, wo Sie mit einem Rätsel beginnen sollen, für das Sie die Antwort nicht gesehen haben.
StuperUser

Antworten:


7

Ich denke, der Anfang des Wikipedia-Artikels ist wahrscheinlich ein guter Anfang:

A design pattern is a general reusable solution to a commonly occurring problem.

Oder möchten Sie die Besonderheiten dieser bestimmten Muster erklären?


auf der Suche nach
Einzelheiten


2
@gizgok: "Besonderheiten"? Das ist lächerlich. Geben Sie im Detail an, was Sie sich mehr wünschen könnten. "Besonderheiten" zu wollen ist vage.
S.Lott

5

Es kommt darauf an, warum Sie es erklären wollen. Wenn Sie nur die Idee von Mustern erklären möchten, würde ich auf Beispiele aus der Architektur in einer Mustersprache zurückgreifen. Diese Forscher fanden heraus, dass bestimmte Aspekte eines Gebäudes oder eines Raums dazu führten, dass Menschen gerne in diesem Gebäude oder Raum lebten oder arbeiteten - auf der ganzen Welt in verschiedenen Kulturen, mit verschiedenen Baumaterialien und in verschiedenen Arten von Stadtteilen. Wie zum Beispiel "Light on Two Sides". Räume mit Fenstern an zwei Wänden sind einfach viel schöner als Räume mit nur einem (oder keinem). Auch in der Software gibt es solche Muster - selbst wenn verschiedene Programmiersprachen verwendet werden, wiederholen sich einige Muster. Und selbst in einer ganz anderen Software - einem Spiel, etwas für finanzielle Berechnungen, der Engine in Facebook und so weiter.

Wenn Sie dann über ein bestimmtes Muster sprechen möchten (nicht sicher, warum, für einen Zehnjährigen), können Sie zunächst Beispiele geben, wo es verwendet wird, bevor Sie versuchen, zu erklären, wie es funktioniert. Mit Composite können Sie eine explizite Rekursion vermeiden, wenn Sie das Gewicht eines Koffers ermitteln, indem Sie das Gewicht des Containers und die Summe aller darin enthaltenen Container und losen Gegenstände addieren. Sie können jedoch auch die Gehaltsbelastung in einem Unternehmen berechnen oder Kapazität in einem Fertigungskomplex. Wenn das für den Zehnjährigen sogar ein wenig interessant ist, könnten Sie versuchen zu erklären, wie es funktioniert.


1
Coz 10 Jahre alt will Hacker werden
Gizgok

2

Entwurfsmuster existieren, weil einige Leute erkannten, dass es Möglichkeiten gibt, Software-Teile gut zusammenzubringen, und ihre Erkenntnisse teilen wollten.

Sie können sich Designmuster genauso vorstellen wie Gruppen von Menschen. Zum Beispiel haben wir manchmal eine Person, die alle unsere Besprechungen leitet. Das ist wie ein Controller-Muster, das die Interaktion zwischen Objekten erleichtert.

Oder stellen Sie sich ein Publikum vor, bei dem jemand vorne im Raum nach Personen sucht, die ihre Hände hochlegen, und dann die Frage wiederholt, damit alle anderen sie hören können, oder vielleicht reagiert, indem er sie beantwortet. Das wäre ähnlich wie bei einem Subjekt / Beobachter-Muster.

Es gibt Muster, die sich wie Übersetzer (das Adaptermuster), wie Sicherheitspersonal (der Proxy), wie Experten auf einem Gebiet (Singletons) oder wie Personen verhalten, die überprüfen, ob Ihr Auto funktioniert (Validatoren).

Der Unterschied zwischen Objekten und Personen besteht darin, dass wir so viele Objekte erstellen können, wie wir möchten, und mehrere verschiedene Kopien davon haben. Daher ist es wichtig zu verstehen, welche Verantwortlichkeiten Objekte haben sollten, ihre Verantwortlichkeiten klein zu halten und nicht zu duplizieren, was sie tun, damit die Software nicht zu kompliziert wird. Die Experten haben viel Erfahrung damit und haben uns diese Muster für die effektive Interaktion von Software gegeben, damit wir entscheiden können, welche Art von Rolle die beste Metapher für den Job ist, den wir versuchen, und die bekommen Software-Teile, um auf die am besten geeignete Weise zusammenzuarbeiten.


1

Sagen Sie ihr, dass sie verwendet werden, um einzelne Komponenten eines Systems aufzubauen, wie Kochtechniken, um eine Mahlzeit / ein Gericht aufzubauen. Stellen Sie sich vor, Sie machen Abendessen mit Kartoffeln, Fleisch und Gemüse. Sie möchten, dass die Kartoffeln gekocht und püriert, das Fleisch gegrillt und das Gemüse gedämpft werden. Sie verwenden Ihr Grillmuster, um das Fleisch zu kochen, zu kochen und zu pürieren für die Kartoffeln und das Dampfmuster für das Gemüse.


1

Die meisten dieser Entwurfsmuster sind Teil des objektorientierten Entwurfs. Sie können sie nicht wirklich jemandem erklären, der kein Verständnis für OOD hat. Sie könnten das Ziel beschreiben, das Sie mit einem bestimmten Muster erreichen, aber nicht, wie es funktioniert oder warum Sie es brauchen. Es sei denn natürlich, Sie erklären die gesamte OOD.


1
Die meisten Entwurfsmuster sind Anweisungen zur Verwendung geeigneter Abstraktionen zur Lösung eines bestimmten Problems. Sie sind nicht wirklich Teil des objektorientierten Designs.
Pemdas

@Pemdas: Nehmen Sie zum Beispiel Factory. Welchen Sinn hat es außerhalb von OOP?
Vartec

In OOP wird am meisten über Muster gesprochen, aber in anderen Sprachen gibt es eigene Mustersätze. Zum Beispiel sind Monaden (oft in funktionalen Sprachen zu finden, manchmal in OOP) ein Muster für sich und ermöglichen andere Muster. Darüber hinaus kamen, wie hier erwähnt, Entwurfsmuster aus der Architektur zur Programmierung.
Charlie

Entwurfsmuster haben nichts mit OOP zu tun. Bei Entwurfsmustern geht es um Probleme, die immer wieder auftreten, und um Strategien, die entwickelt wurden, um die Probleme zu lösen. Wenn eine Strategie wiederholt entwickelt wird, haben Sie ein Muster. Wenn eine Strategie wiederholt funktioniert, nennen Sie sie ein Entwurfsmuster. Wenn sie wiederholt fehlschlägt, nennen Sie sie ein Anti-Muster. Das Erlernen von Entwurfsmustern bedeutet, Strategien zu lernen, die in der Vergangenheit wiederholt funktioniert haben. Sehen Sie, wie ich das Programmieren überhaupt nicht erwähnt habe, geschweige denn OOP?
Gnasher729

0

Entwurfsmuster wurden zuerst für Architektur beschrieben. Dinge wie die Lage des Platzes, Gebäude und andere allgemein wiederholte Layouts. Sie könnten dort anfangen. Dinge wie der Haupteingang zeigen zur Straße, die Tür zur Ecke des Raumes und alles andere, was Sie sich vorstellen können. Die Muster des ursprünglichen Autors waren nicht weit verbreitet. Es wird berichtet, dass er jetzt feststellt, dass Muster selbst nicht ausreichen.

Besprechen Sie, wie sich Dinge im Raum bewegen. Stellen Sie einen Stuhl vor die Tür. Wäre es sinnvoll, die Fenster oder Türen woanders hin zu bewegen? Warum oder warum nicht?

Versuchen Sie etwas wie einen Platz am Tisch zu setzen. Versuchen Sie, Dinge nach Größe zu ordnen, die von Ihnen abweichen. Nicht das normale Muster und schwer zu bearbeiten. Richten Sie es normal ein. Ist dies ein geeignetes Layout für ein schnelles Glas Saft? Muster sind nicht immer angemessen.

Wir leben die ganze Zeit mit Mustern. Nehmen Sie drei oder vier Bücher und blättern Sie sie durch. Das Layout weist ein offensichtliches Muster auf. Titelseite, Inhaltsverzeichnis, Inhalt und Index. Nicht alle Komponenten sind erforderlich, aber es wäre verwirrend, wenn sie nicht am richtigen Ort wären.


0

Entwurfsmuster sind für die Softwareentwicklung das, was Vorrichtungen für die Holzbearbeitung sind. Es ist ein Werkzeug, mit dem Sie bekannte "Schnitte" für größere Projekte erstellen können.

Beachten Sie, dass Sie die Schablone nicht benötigen , um den Schnitt auszuführen. Unter bestimmten Umständen ist dies nur einfacher.


0

Ich bin der Meinung, dass meine andere Antwort für den allgemeinen Fall steht, aber das OP hat kommentiert und nach Einzelheiten gefragt (daher hatte ich das Gefühl, dass es eine separate Antwort verdient). Leider bin ich mit dem Repository-Muster nicht vertraut, aber ich werde die anderen stechen. In der Regel denke ich, dass der beste Weg, dies zu erklären, darin besteht, welches Problem Sie lösen möchten, warum Sie es lösen möchten und wie das Problem es erreicht.

Singleton

Dieses Muster wird verwendet, wenn wir garantieren möchten, dass es nur eines von etwas gibt. Das Muster wird erreicht, indem verhindert wird, dass andere unser Objekt erstellen.

Wikipedia

MVC

Dieses Muster wird verwendet, um die Dinge modular zu halten und alle damit verbundenen Vorteile zu nutzen. Die Ansicht ist die "Benutzeroberfläche", das Modell sind die Daten (einschließlich der Geschäftslogik) und der Controller gibt an, wie die Benutzeraktionen das Modell manipulieren. Mit dieser Modularität hindert mich nichts daran, mehrere Ansichten / Controller zu haben, um mit demselben Modell zu arbeiten. Für ein stark vereinfachtes Beispiel kann ich mit meiner E-Mail ("Modell") über eine Website, eine Desktop-Anwendung und mein iPhone ("Ansichten + Controller") interagieren. Wenn ich ein freigegebenes Gruppenpostfach habe, kann ich einen Controller erstellen, der keine E-Mails sendet, und dieselbe Anwendungsansicht und E-Mail wiederverwenden. (ja zu simpel, aber hoffentlich verständlich :))

Darüber hinaus erfordern Änderungen in einem (idealerweise) bei dieser genau definierten Trennung von Bedenken keine Änderungen in einem anderen. Konkretes Beispiel: Wenn ich das Lesen / Schreiben in eine MySQL-Datenbank anstelle einer Oracle-Datenbank unterstützen möchte, muss ich nur mein Modell ändern, und meine Ansicht / mein Controller ändert sich nicht.

Wikipedia

Fabrik

Seien Sie hier vorsichtig, da es viele ähnliche Muster gibt, die Factory genannt werden ... Ich werde über die abstrakte Factory sprechen , aber Sie sollten wissen, dass es auch ein Factory-Methodenmuster gibt .

Grundsätzlich würde ich eine abstrakte Fabrik verwenden, wenn ich weiß, welche Schritte ich ausführen möchte, aber die Schritte zum Ausführen dieser einzelnen Schritte können variieren. Zum Beispiel könnte ich eine Anwendung erstellen, in der ich ein Dialogfeld mit einer Schaltfläche erstellen muss. Wenn mein Code eine hypothetische UI-Factory verwendet und ich meinen Code unter Mac oder Linux anstelle von Windows benötige, stelle ich nur eine andere Factory bereit, und der Rest meines Codes ändert sich nicht. Für ein möglicherweise wilderes Beispiel könnte ich eine Web Factory haben und plötzlich versorgt der größte Teil des Codes, der meine Desktop-Anwendung unterstützt, jetzt auch eine umfangreiche Website :) (ok aus anderen Gründen unpraktisch, aber theoretisch :))


0

Zu einem 10-Jährigen, der Hacker werden will - würde ich sagen.

Stellen Sie sich vor, Sie könnten einige der besten Hacker der Welt neben sich haben, wenn Sie weghacken ... und ab und zu würden sie sagen ... "Sie wissen, ob Sie es so machen ... [Muster einfügen] ... dann wird Ihr Code [schneller / sicherer / wartbarer / etc] sein "wie cool wäre das?

Jetzt, da ich davon ausgehe, dass sie an der Idee interessiert ist, würde ich nicht meine Zeit damit verschwenden, jedes Muster zu erklären. Ich würde ihre "Hacking-Aufgabe" festlegen. Dann poste ein Designmuster und erkläre den Wert. Dann zeige ich sie einfach auf einige gute Ressourcen und sehen, wohin es geht.

Aber meistens muss sie sie durch Mentoring lernen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.