{"id":872,"date":"2016-02-16T16:15:33","date_gmt":"2016-02-16T14:15:33","guid":{"rendered":"http:\/\/invidit.de\/blog\/?p=872"},"modified":"2016-02-16T15:57:27","modified_gmt":"2016-02-16T13:57:27","slug":"warum-so-gemustert","status":"publish","type":"post","link":"https:\/\/invidit.de\/blog\/warum-so-gemustert\/","title":{"rendered":"Warum so gemustert?"},"content":{"rendered":"<p>Hallo Spa\u00df-Coder.<\/p>\n<p>Wir haben in unseren Artikeln immer mal wieder von Mustern geschrieben. Zum Beispiel im Zusammenhang mit Refaktorisierungen, wie etwa beim Artikel <a href=\"http:\/\/invidit.de\/blog\/eine-ganze-fabrik-nur-zum-testen\/\" target=\"_blank\">Eine ganze Fabrik &#8211; nur zum Testen<\/a>. Wo in der Softwareentwicklung gibt es noch n\u00fctzliche Muster und was ist an Mustern eigentlich grunds\u00e4tzlich n\u00fctzlich? Mit diesen Fragen wollen wir uns in diesem und den n\u00e4chsten Artikel auseinander setzen.<\/p>\n<p>&nbsp;<\/p>\n<h1>Wer sind denn die?<\/h1>\n<p>Was sind \u00fcberhaupt Muster und wo tauchen sie in unserem Leben \u00fcberall auf &#8211; au\u00dfer auf der Tapete an der Wohnzimmerwand oder Oma&#8217;s Tischdecke? Greifen wir an dieser Stelle auf das allwissende Wikipedia zur\u00fcck, sind Muster &#8222;[&#8230;] eine gleichbleibende Struktur, die einer sich wiederholenden Sache zugrunde liegt, eine zur gleichf\u00f6rmigen Wiederholung (Reproduktion) bestimmte Denk-, Gestaltungs- oder Verhaltensweise bzw. einen entsprechenden Handlungsablauf.&#8220;.<\/p>\n<p>Soso &#8211; eine gleichbleibende Struktur also. So neu ist das vermutlich nicht. Wenn wir unseren Alltag gedanklich durchgehen, dann fallen uns vermutlich ganz viele verschiedene Muster auf, die wir &#8211; nach einer gewissen Lernphase &#8211; automatisch nutzen. Z.B. morgens aufstehen, Z\u00e4hne putzen, Duschen. Schauen wir noch einmal auf die Definition oben: gleichf\u00f6rmige Verhaltensweise einer sich wiederholenden Sache &#8211; passt.<\/p>\n<p>Neben den Verhaltensmustern k\u00f6nnen Muster auch als Vorlage und Orientierung genutzt werden, so zum Beispiel bei Strickmustern oder Baupl\u00e4nen von H\u00e4usern oder Elektronikteilen. Das Muster zeigt dabei die gleichbleibende Struktur bei der Herstellung (sich wiederholenden Sache).<\/p>\n<p>Gut und sch\u00f6n, aber was hat dies alles mit Softwareentwicklung zu tun? Bevor wir auf diese Frage eingehen, schauen wir uns noch an, warum Muster so n\u00fctzlich sind.<\/p>\n<p>&nbsp;<\/p>\n<h1>Muster-Nutzen<\/h1>\n<p>Christiane Stenger beschreibt in ihrem Buch unter anderem, wie das menschliche Gehirn bezogen auf Verhaltensmuster arbeitet. Wer hat schon einmal am eigenen Leib erlebt, wie schwer es ist, die eigenen Verhaltensmuster umzustellen. Sei es sich bestimmte Dinge abzugew\u00f6hnen oder in bestimmten Situationen nun anders als fr\u00fcher zu reagieren? Gar nicht einfach. Denn diese Muster sind in unserem Gehirn &#8222;einprogrammiert&#8220; und laufen nach dem Start durch verschiedene Ausl\u00f6ser automatisch ab. Diese zu beeinflussen bzw. zu \u00e4ndern bedarf eines Verlernens und Neulernens.<\/p>\n<p>Warum macht unser Gehirn das? Solche Muster speichern und nahezu automatisch (unbewusst) abspielen? Wie immer dreht sich alles um Ressourcen. Unser Gehirn m\u00f6chte effizient arbeiten, da es aus der Vergangenheit mit den S\u00e4belzahntigern gelernt hat, dass die zum Arbeiten ben\u00f6tigten Ressourcen (in Form von Glukose) rar sind. Da kann es geschickt sein, &#8222;eine sich wiederholende Sache&#8220; so abzuspeichern und zu organisieren, dass diese m\u00f6glichst wenig Brennstoff verbraucht. Ganz sch\u00f6n schlau!<\/p>\n<p>Beim Lernen &#8211; insbesondere durch Wiederholung &#8211; passiert also genau dass, unser Gehirn legt dazu ein Muster (Programm) an. Wie beispielsweise beim Autofahren f\u00e4llt es uns zun\u00e4chst noch schwer alles im Griff zu haben: schalten, lenken, in den Spiegel schauen, kuppeln, bremsen, blinken&#8230; so viele Dinge auf einmal. Wer mehr als zehn Jahre regelm\u00e4\u00dfig mit dem Auto f\u00e4hrt bekommt kaum noch mit, welche Handlungsabl\u00e4ufe alle nahezu automatisch erledigt werden. Da bleibt noch Zeit aus dem Fenster zu schauen oder dem Moderator im Radio zu lauschen.<\/p>\n<p>Ja ja ja, aber jetzt noch einmal zu der Frage &#8211; was hat das mit Softwareentwicklung zu tun?<\/p>\n<p>&nbsp;<\/p>\n<h1>Muster in der Softwarentwicklung<\/h1>\n<p>So unterschiedlich die Anforderungen und Herausforderungen in der Softwareentwicklung auch sein m\u00f6gen, auch hier gibt es in den Fragestellungen der Umsetzung &#8222;gleichbleibende Strukturen&#8220;. H\u00e4ufig werden in Softwareanwendungen Daten verarbeitet, Algorithmen ausgef\u00fchrt und auf Benutzereingaben reagiert. Um diese Anforderung mit einer guten Struktur abzubilden, haben sich Architekturmuster wie MVC entwickelt und durchgesetzt.<\/p>\n<p>Aber was bedeutet hier &#8222;eine <strong>gute<\/strong> Struktur&#8220;? In diesem Fall ist das Ziel des Muster, eine hohe Wiederverwendbarkeit sowie leichte \u00c4nder- und Erweiterbarkeit im Programmcode zu erzielen.<\/p>\n<p>Eine weitere Kategorie von Mustern in der Softwareentwicklung sind Entwurfsmuster. Insbesondere die &#8222;Gang of four&#8220; hat dazu beigetragen, dass Entwurfsmuster bekannt werden und als L\u00f6sungsschablone f\u00fcr bestimmte Anforderungen genutzt werden k\u00f6nnen. Damit sind auch diese Entwurfsmuster eine &#8222;gleichbleibende Struktur&#8220; f\u00fcr &#8222;eine sich wiederholende Sache&#8220;. Immer, wenn ich eine ganz bestimmte Fragestellung zu l\u00f6sen habe, muss ich das Rad nicht neu erfinden, sondern kann ein dazu passendes Muster anwenden.<\/p>\n<p>Aus diesem Grund sind Muster in der Softwareentwicklung als effiziente L\u00f6sungsstrategien f\u00fcr wiederkehrende Probleme sinnvoll einsetzbar. Dar\u00fcber hinaus hat die Anwendung von Mustern den Vorteil, dass sich mehrere Personen sehr effizient \u00fcber m\u00f6gliche L\u00f6sungen unterhalten k\u00f6nnen, da sie das Muster beim Namen nennen k\u00f6nnen, ohne es jedes mal auf&#8217;s Neue aufwendig und detailliert beschreiben zu m\u00fcssen.<\/p>\n<p>Wie sieht es mit der Orientierung aus? Auf unseren Stra\u00dfen finden wir uns gut zurecht (trotz Schilderwald), da hier gelernte Muster Anwendung finden &#8211; es gibt verschiedene Fahrbahnmarkierungen und Schilder. Wie sieht es nun aus, wenn in einem uns fremden Programmcode bekannte Muster implementiert wurden? Dann finden wir uns ebenfalls deutlich schneller zurecht, als wenn wir das Konzept, die Idee der jeweiligen L\u00f6sung, erst m\u00fchsam verstehen und &#8222;erlernen&#8220; m\u00fcssen.<\/p>\n<p>Daher sind allgemein bekannte Muster hilfreich daf\u00fcr, effizient Software zu entwickeln.<\/p>\n<p>&nbsp;<\/p>\n<h1>Zusammenfassung<\/h1>\n<p>In diesem Artikel haben wir uns angeschaut, was Muster grunds\u00e4tzlich sind, was der gr\u00f6\u00dfte Nutzen davon ist und wo wir in der Softwareentwicklung davon profitieren k\u00f6nnen. Dieser Artikel dient als Einleitung zu einer Serie von Artikeln \u00fcber Entwurfsmuster, die wir in den n\u00e4chsten Wochen vorstellen werden.<\/p>\n<p>Grunds\u00e4tzlich geht es nicht darum, m\u00f6glichst viele Muster in der Softwareentwicklung anzuwenden, jedoch sollten ebensowenig neue L\u00f6sungen f\u00fcr bekannte Problemstellungen geschaffen werden.<\/p>\n<p>Auf welches euch bekannte Muster w\u00fcrdet ihr ungerne verzichten?<\/p>\n<p>&nbsp;<\/p>\n<p>Eure Spa\u00df-Coder<\/p>\n<p>Dieser Artikel basiert neben unseren Erfahrungen auf den Ausf\u00fchrungen aus:<\/p>\n<ul>\n<li class=\"gs_citr\" tabindex=\"0\"><a href=\"https:\/\/de.wikipedia.org\/wiki\/Muster\">https:\/\/de.wikipedia.org\/wiki\/Muster<\/a><\/li>\n<li class=\"gs_citr\" tabindex=\"0\">Stenger, Christiane. <i>Lassen Sie Ihr Hirn nicht unbeaufsichtigt!: Gebrauchsanweisung f\u00fcr Ihren Kopf<\/i>. Campus Verlag, 2014.<\/li>\n<li id=\"gs_cit0\" class=\"gs_citr\" tabindex=\"0\"><a href=\"https:\/\/de.wikipedia.org\/wiki\/Entwurfsmuster\" target=\"_blank\">https:\/\/de.wikipedia.org\/wiki\/Entwurfsmuster<\/a><\/li>\n<li class=\"gs_citr\" tabindex=\"0\"><a href=\"https:\/\/de.wikipedia.org\/wiki\/Model_View_Controller\">https:\/\/de.wikipedia.org\/wiki\/Model_View_Controller<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Hallo Spa\u00df-Coder. Wir haben in unseren Artikeln immer mal wieder von Mustern geschrieben. Zum Beispiel im Zusammenhang mit Refaktorisierungen, wie etwa beim Artikel Eine ganze Fabrik &#8211; nur zum Testen. Wo in der Softwareentwicklung gibt es noch n\u00fctzliche Muster und was ist an Mustern eigentlich grunds\u00e4tzlich n\u00fctzlich? Mit diesen Fragen wollen wir uns in diesem [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":883,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[90],"tags":[130,129],"_links":{"self":[{"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/posts\/872"}],"collection":[{"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/comments?post=872"}],"version-history":[{"count":9,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/posts\/872\/revisions"}],"predecessor-version":[{"id":916,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/posts\/872\/revisions\/916"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/media\/883"}],"wp:attachment":[{"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/media?parent=872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/categories?post=872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/tags?post=872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}