Latest / Coding Buddies | Tech & Dev-Mindset / #129 Design Patterns 5 – Klonen statt Coden: Das Prototype Pattern
Transcript
- 0:00Scharf 1 habe ich jetzt irgendwie ein Halstuch verfasst.
- 0:03Gala ich denke mir jetzt gerade irgendwas aus und scharf 2 hat
- 0:07auf einmal auch ein Halstuch um was ist da los?
- 0:09Beides schon nach scharf. Coding Buddies Dein Podcast rund
- 0:13um Softwareentwicklung und aktueller Tech News.
- 0:16Herzlich Willkommen einen wunderschönen guten Tag
- 0:31und herzlich willkommen. Schön, dass du wieder
- 0:34eingeschaltet hast. Zur neuen Folge vom Coding
- 0:36Buddies Podcast. Und zwar mit mir, mit fabi und
- 0:39mit Tino. Er sitzt mir hier virtuell
- 0:42wieder gegenüber, er nickt schon, er grinst schon, er hat
- 0:45Bock, hoff ich zumindest. Wie geht's dir?
- 0:51Was geht ab? Fabi?
- 0:52Ja ich hab mega Bock, ich hab richtig Bock ja das ist richtig
- 0:55gute Laune, das wird richtig wird unangenehm heute für dich.
- 0:59Super. Ja, das das trifft sich gut.
- 1:02Ich hab richtig, richtig schlechte Laune.
- 1:05Ja, das ich gleich das aus. Oh nee, das wär aber weißt du,
- 1:09das ist halt auch so n Ding, muss ich ganz ehrlich sagen das
- 1:11das das ich weiß hat man wahrscheinlich irgendwie auf dem
- 1:14Schirm, aber wenn du so n Podcast machst ne dann gibt es
- 1:17ja auch mal Tage wo man sich so denkt so oh weißt du heute ist n
- 1:21Podcast aufnehmen dran aber heute hab ich irgendwie fühl ich
- 1:25mich nicht so ne. So, und dann die.
- 1:27Abstimmung. Ja, genau so.
- 1:28Aber dann muss man halt irgendwie umschalten und
- 1:30trotzdem mal sagen so ne doch ich hab jetzt gute Laune,
- 1:33hinterher kannst du ja wieder schlechte Laune haben, ne ja.
- 1:38Das Gute ist, dass ich, selbst wenn ich das Gefühl hab, oh,
- 1:42jetzt n keine Ahnung, Zeitdruck oder so, jetzt noch n Podcast
- 1:45aufnehmen, wenn diese Gedanken aufkommen, wird dann aber
- 1:48anfangen, also auch wie jetzt zum Beispiel gut, heute hab ich
- 1:51nie Bock gehabt, ja, aber dass man sich dann denkt, so ah nee
- 1:54doch ist geil macht Spaß Podcast aufnehmen macht Spaß also ich
- 1:58rede ja sehr gerne mit dir über diese Themen und allein das
- 2:02Feedback so aus der Community motiviert mich extrem muss ich
- 2:05sagen. Da denn halt auch immer wieder
- 2:08on Point zu sein sozusagen. Ja, das ist ja auch nicht so,
- 2:10dass ich mir denke, so, ich hab meistens keinen Bock auf Podcast
- 2:14sozusagen aufzunehmen, sondern es ist halt eher so, dass ich
- 2:16mir dann so denke, so irgendwie ist es viel an dem Tag, ne,
- 2:19irgendwie ist sowieso irgendwie, man hat den Kopf voll oder so
- 2:21und dann ist man irgendwie vielleicht nicht so in Stimmung,
- 2:23so ne, also was kann ja vorkommen, finde ich nur also.
- 2:28Ich weiß nicht, also mir ist das letztens erstmal so bewusst
- 2:30geworden, so ne, aber eigentlich wie du sagst ne man fängt an
- 2:33Podcast irgendwie aufzunehmen und dann hat man so denk mal so
- 2:36ja komm ist irgendwie geil hab ich habt ihr auch immer macht
- 2:38ihr auch immer Spaß mit dir zu zu quatschen Tino und das ist
- 2:42gut. Das ist ne gute Voraussetzung
- 2:44für diesen Podcast. Ja, auf jeden Fall ne.
- 2:48Aber bevor also wir wollen ja jetzt mal wirklich anfangen ne
- 2:52und auch wirklich jetzt mal starten in die Folge rein.
- 2:56Ganz kurz noch, weil das ist ja unsere klassische Erinnerung, ne
- 3:00Liebe zu lieber zu, wenn du sagst, geiler Podcast, da will
- 3:04ich nichts verpassen. Ja, vielleicht hast du den auch
- 3:06gerade erst entdeckt, dann abonnier den Podcast auf jeden
- 3:09Fall und vielleicht, falls du es noch nicht gemacht hast, mach
- 3:12das Glöckchen an, weil dann verpasst du auch keine Folge
- 3:14mehr. Es gibt gerne ne Bewertung da
- 3:17das hilft uns enorm, das muss man einfach sagen.
- 3:20Es ist halt unglaublich wichtig für einen Podcast auf dem
- 3:23Plattform auch ne Bewertung zu bekommen.
- 3:26Ja, das stimmt. Gut, dass du es sagst, Tino,
- 3:30heute geht es ja mal wieder um eine bestimmte Reihe, die wir
- 3:33ins Leben gerufen haben, die auch schon sehr wichtig ist
- 3:38insgesamt für die Softwareentwicklung, und zwar
- 3:42geht es um die Design Pattern Folge und heute ist ja mal die
- 3:47ist. Ja, auch mittlerweile schon gut
- 3:48fortgeschritten. Ne, also wir haben schon so n
- 3:49paar Meter gemacht, cool. Haben wir auch gutes Feedback
- 3:53dazu bekommen und ich muss sagen ich find es halt auch immer echt
- 3:56cool jedes Pattern noch mal so n bisschen, also nicht jedes alle
- 3:59werden wir nicht schaffen. Es gibt aber viel zu viele, ja,
- 4:01aber die wir so rauspicken noch mal durchzuarbeiten find ich
- 4:03schon ziemlich cool muss ich sagen.
- 4:05Man kann auch immer selber noch was lernen, weil manchmal ist
- 4:08man ja auch so eingefahren und denkt sich so.
- 4:10Ja, zum Beispiel wie beim Factory Pattern beispielsweise,
- 4:12da dacht ich mir auch so, ah OK, cool, ja ich hab zum Beispiel
- 4:16noch nie so krass über n. Was war das?
- 4:19Dieses, dieses, dieses krasse Endgame, Factory Pattern,
- 4:24nachgedacht, Endgame. Factory.
- 4:26Die Abstract. Factory, dass es halt einfach 3
- 4:28Stufen gibt davon ja. Ja, richtig.
- 4:31Also so als Beispiel ne man man lernt selber auch noch was und
- 4:33ich hoffe Liebe zu Liebe zu du lernst auch was davon, ansonsten
- 4:37hast du vielleicht auch einfach nur Bock den Podcast zu hören,
- 4:40dann ist es natürlich auch super.
- 4:42Fakt ist aber Tino, worum geht es denn, welches Pattern ist
- 4:44denn heute dran? Ja, also heute geht es um
- 4:47Pattern, da muss ich gleich mal vorwegnehmen, das hab ich selbst
- 4:51sehr selten verwendet, umso cooler finde ich es, dass wir es
- 4:55heute mal besprechen, weil durch sag ich mal so die Vorbereitung
- 4:58auf die Folge hab ich mich oder wir uns zusammen ja noch mal mit
- 5:01dem Pattern auseinandergesetzt und schon Anwendungsfälle
- 5:04gefunden dafür auch für uns, was wir vielleicht demnächst mal auf
- 5:09Twitch wirklich mal bei einem Projekt verwenden können oder wo
- 5:12es Sinn macht dieses Pattern zu verwenden und zwar geht es
- 5:15heute. Um das prototype pattern.
- 5:20Ja, also wir wären heute quasi ne Art Clone Wars führen, nerve
- 5:23alle Star Wars Fans hier. Es geht nämlich heute darum, es
- 5:28klingt erstmal nerdig, aber es geht im Prinzip darum, dass wir
- 5:31heute mal so copy Paste 2.0 etablieren und zeigen warum es
- 5:36sinnvoll ist, manchmal komplexe Objekte nicht immer neu zu
- 5:40erstellen, sondern sie wirklich einfach zu klonen.
- 5:43Weil das steckt halt hinter den Prototype Pattern und das würde
- 5:47ich sehr gerne heute mit dir mal so n bisschen besprechen vor und
- 5:50Nachteile nennen und vor allem Fabi und da freu ich mich drauf
- 5:54wieder schöne Analogien finden dazu.
- 5:56Es soll doch Analogien hageln. Weißt du was, zino ich, ich
- 6:00möcht mal spoilern, dass das dieses Mal ja gar nicht so viel
- 6:03um Essen geht, ne ich, ich glaube in den.
- 6:07In unserer generell in unseren Podcasts, wenn es um Analogien
- 6:10geht, geht es oft um Essen. Gerade glaub ich jetzt auch in
- 6:13der in der Pattern Reihe hier, aber wir wollen heute mal
- 6:15vielleicht warum sagst. Du das jetzt schalt ich 90%
- 6:18schalten jetzt ab, wenn es nicht um essen.
- 6:21Geht es geht um unseren. Ja, unsere Essensanalogien sind
- 6:25doch mittlerweile legendär. Welche Leute erwarten das doch,
- 6:28fabi, aber du hast recht, das ist bei dem Pattern wirklich
- 6:31schwierig mit Essensanalogien. Ja, aber das genau.
- 6:36Du meintest ja, es geht um dieses Pattern.
- 6:39Wir haben das selber auch noch nicht so häufig verwendet und
- 6:42das wird auf jeden Fall Analogien geben, definitiv was
- 6:45ich n bisschen ich sag mal missleading finde, ist der der
- 6:50Name so Prototype, also so weiß nicht als ich auch das erste Mal
- 6:54dieses Pattern gehört hab, dachte ich mir auch so
- 6:57Prototypen also wofür soll das jetzt im Endeffekt sein?
- 7:01Weißt du weil es ist ja. Es steckt jetzt nicht wirklich
- 7:04dahinter, dass du irgendwie n Prototyp von etwas erschaffst,
- 7:07sondern wie du schon meintest, es geht ja viel ums Klonen und
- 7:11da würde ich auch gerne schon mal vielleicht ne kleine
- 7:14Analogie geben, damit man sich das im groben erstmal schon mal
- 7:16so n bisschen vorstellen kann und zwar also angenommen du hast
- 7:21jetzt irgendwas, was vielleicht n bisschen komplexer ist.
- 7:25Ne, nimm vielleicht jetzt mal irgendwie so n so n so n.
- 7:29Wenn so n Formular ne und ne Menge drin steht, da musst du
- 7:32ganz viele Sachen reinschreiben ne und ich sag jetzt zum
- 7:35Beispiel Tino, du musst ja noch mal n Formular ausfüllen, das
- 7:37ist jetzt wichtig für unseren Podcast hier ne und dann musst
- 7:41du da reinschreiben OK Name alter Beruf und ne es gibt ja
- 7:46Formulare keine und nimm n Formular vom Finanzamt oder so
- 7:48ne dann ist sowieso Feierabend ne und du.
- 7:52Und du hast jetzt irgendwie so n so n so n Blatt Papier ne oder
- 7:55mehrere Zettel, die ich dir dann gebe und das musst du alles
- 7:58ausfüllen und jetzt kommt zum Beispiel noch jemand anders und
- 8:00der muss das auch machen. Ja dann wär es ja eigentlich
- 8:04viel sinnvoller ja zum Beispiel zu sagen, OK du nimmst diesen
- 8:08dieses. Blatt Papier.
- 8:10Diese dieses. Formular ja, wo halt alles
- 8:13schon, sag ich jetzt mal. Drin steht wie zum Beispiel
- 8:16keine Ahnung. Ne, also alles die ganzen
- 8:19Attribute sind schon hingeschrieben.
- 8:21Du musst jetzt nicht noch mal hingehen und sagen ich nehm
- 8:23jetzt n Blatt Papier und schreib jetzt noch mal diesen ganzen
- 8:25Vordruck da auf und dann geb ich das erst weiter so und du kannst
- 8:28einfach n Kopierer jagen, kannst den Vordruck sozusagen einmal
- 8:31durchkopieren und dann gibt es halt weiter ne also das ist so
- 8:34im groben und ganzen, du hast etwas ja und musst es aber nicht
- 8:39noch mal komplett von der Pike auf neu machen, sondern kannst
- 8:41bestimmte Dinge die du halt schon hast halt eben kopieren
- 8:45und wiederverwenden so ne. Ja, das ist n ganz gutes
- 8:50Beispiel, so aus der Realität. Was glaub ich jeder sich
- 8:53vorstellen kann oder schon mal die Erfahrung gemacht hat etwas
- 8:57zu kopieren, gerade so Blätter ist ja genau der Sinn, dass du
- 9:00es nicht jedes Mal neu schreiben möchtest, sondern halt einfach
- 9:04ne exakte Kopie davon erstellen möchtest.
- 9:06Ja im Prinzip und dann trotzdem Eigenschaften dieses Blattes,
- 9:13weil du meintest Attribute, also die Felder die du ausfüllen
- 9:15kannst. Unterschiedlich ausfüllen kannst
- 9:18dann auch noch, das ist n ganz wichtiger Punkt dabei, du
- 9:21kopierst quasi sozusagen diesen Rohling und das ist der Prototyp
- 9:25dahinter. Ja, also du hast n Prototyp von
- 9:27diesem Vordruck, den kannst du kopieren und du kannst aber die
- 9:31Eigenschaften die Echten des Objektes also auf dem Blatt
- 9:35natürlich noch variieren, das heißt da steht dann nicht immer
- 9:38der gleiche Name schon eingetragen drauf, sondern du
- 9:40kannst halt bei dir schreibst du den Fabi rauf und ich schreib da
- 9:43Tino rauf, zum Beispiel ne. Dann hab ich ne Kopie erzeugt,
- 9:46aber ich kann es das Blatt unterschiedlich ausfüllen.
- 9:48Du kannst theoretisch. Aber auch wenn du es jetzt noch
- 9:51n bisschen weiter spinnst, auch sagen, OK, wenn du das jetzt am
- 9:53heutigen Tag machst und das ist immer für den heutigen Tag,
- 9:56kannst du theoretisch trotzdem aber auch n Attribut schon
- 9:58eintragen, ne und mit kopieren wie zum Beispiel das Datum ne,
- 10:01dass halt solche Sachen halt auch eben schon voreingetragen
- 10:05hast, ne? Genau.
- 10:06Also das ist dann halt im Prinzip, denn sag ich mal
- 10:09Implementierungssache am Ende, wie man das machen möchte.
- 10:12Du kannst ja auch sag ich mal die Werte übernehmen und.
- 10:15Und sie aber trotzdem im Nachhinein noch ändern können.
- 10:18Das werden wir gleich im technischen Teil mal so n
- 10:20bisschen erläutern, was man dafür braucht um sowas zu
- 10:23ermöglichen. Ich hab auch noch ne andere
- 10:25Analogie gefunden bei der Recherche und die fand ich halt
- 10:28extrem witzig und zwar sollte man sich da eine Schaffarm
- 10:31vorstellen oder das fand ich halt extrem cool, weil ich mir
- 10:35sofort dachte, OK ich bin jetzt so auf einer Farm und das sind
- 10:37so ganz ganz viele Schafe. Und da war halt geschrieben, ich
- 10:41glaube, das war ein Medium Artikel, also kann man auch
- 10:44gerne mal recherchieren, der war ganz cool.
- 10:47Stell dir vor, du hast so ein perfektes Schaf, ne und ein
- 10:49Schaf hat ja Eigenschaften, das hat eine gewisse Größe,
- 10:52vielleicht so eine gewisse Flauschigkeit ja, aber vor allem
- 10:55auch Namen so und das Name ist ja schon sehr unique, sag ich
- 11:00mal. Das heißt, das ist zum Beispiel
- 11:01so ein Attribut, was du nicht übernehmen möchtest, sondern
- 11:04abändern möchtest. Und jetzt stell dir vor, du hast
- 11:06so ein Prototyp scharf, so scharf.
- 11:09Ali Sheep nennen wir das jetzt mal, und das hat so ganz, ganz
- 11:12viele Eigenschaften. Ja, und die sind gut, also es
- 11:15ist n gutes Schaf, es ist n super Prototypen und davon
- 11:17möchtest du jetzt einfach mehrere Schafe ableiten.
- 11:22Und warum möchtest du denn jetzt quasi jedes Mal wieder n neues
- 11:25Schaf sozusagen erstellen, wenn du doch dieses Schaf, diesen
- 11:29Prototypen einfach mehrfach haben möchtest?
- 11:31Ja, und dann klonst du das ich mein so scharfe Klonen OK, in
- 11:35den letzten Jahren war oft n Thema, aber wir wir machen das
- 11:39jetzt mal ganz abstrakt, ja. Und dann hat das Halt n anderen
- 11:42Namen. Ja, dann hast du halt keine
- 11:44Ahnung noch Toby allen und weiß ich wie sie alle heißen dann da
- 11:47hast du so ganz viele Schafe, die quasi voneinander geklont
- 11:51sind, aber doch ihre eigenen Eigenschaften noch haben.
- 11:54Am Ende zum Beispiel den Namen und das kannst du natürlich mit
- 11:58allen Schafen machen ne, also du hast n großes Schaf was du
- 12:01klonst. Du hast n graues Schaf, du hast
- 12:04n Vampirschaf keine Ahnung was es auch immer für Schafe gibt,
- 12:09ja. Und du kannst ja dann im Prinzip
- 12:13von jedem Schaf Klone erzeugen, wenn du das möchtest.
- 12:17Oder jetzt mal allgemeiner von der Analogie weg.
- 12:19Du hast Formulare gesagt, Formulare ist n gutes Beispiel,
- 12:23gehen wir. Noch mal in die Richtung UI,
- 12:27wenn du Komponenten hast, kannst du auch Klone erzeugen, wenn du
- 12:30sagst ich hab ne richtig coole UI Komponente und ich möchte die
- 12:32genauso wieder haben und ich möchte nicht die grundlegend
- 12:36noch mal neu aufbauen, dann kann ich das auch verwenden.
- 12:38Das Pattern das ist n super Beispiel dafür oder?
- 12:43N anderes Beispiel, wo es bei mir auch so Klick gemacht hat im
- 12:46Sinne von weil ich meinte das werden wir in Twitch vielleicht
- 12:48mal gebrauchen, weil wir entwickeln ja für unsere
- 12:51Programmierwettbewerbe immer kleine Spiele.
- 12:53Ja, also unsere Programmierwettbewerbe basieren
- 12:55ja meistens auf Spiele, dass man n bot dafür schreibt und dieses
- 13:00Pattern macht halt total Sinn, wenn du zum Beispiel n Spiel
- 13:03hast, wo es ganz ganz viele Gegner gibt.
- 13:05Du hast so Gegnertypen, ja, das ist so der Prototyp und davon
- 13:10möchte ich aber jetzt ganz ganz viele erzeugen.
- 13:13Da muss ich ja nicht jedes Mal neu definieren, wie genau dieser
- 13:15Gegner aussieht. Ich mein, da muss man also ich
- 13:18denk da zum Beispiel sofort so an Tower Defence Spiele.
- 13:21Ja. Ist bestimmt n Begriff bei dem
- 13:22ein oder anderen. Da hast du ja da kommen ja
- 13:25irgendwann. Massen an Gegnern vom gleichen
- 13:28Typ auf dich zu und da würde es Sinn machen, dass du sagst, komm
- 13:31erzeug n Klon noch n Klon noch n Klon, noch n Klon und so weiter
- 13:34und dann kommen halt die 5 Gegnertypen da von dem einen Typ
- 13:37allein angerannt sag ich mal ja. Ich muss da also das.
- 13:40Sind so Beispiele wo ich. Muss da mal relativ schnell
- 13:43irgendwie oder was mir als erstes bei Gaming und dem
- 13:46Prototype Pattern eingefallen ist.
- 13:48Ich weiß nicht ob du das kennst. Bestimmt, wenn du jetzt
- 13:50irgendwie so Gegnertypen hast und du machst jetzt zum Beispiel
- 13:53ein Blatt davon. Ja, und manchmal gibt es ja so
- 13:55in so spielen so Gegner, die sich dann so aufteilen.
- 13:57Ne, also du machst quasi einen Gegner platt und dann kommt der
- 14:00irgendwie, also der ist dann hinüber und dann kommen
- 14:04sozusagen spawnen auf einmal aus diesem Gegner, den du platt
- 14:07gemacht hast. Noch mal 3 von diesen Gegnern,
- 14:09aber kleiner ne so und dann hast du ja im Endeffekt auch so ne
- 14:13Art nutz könntest du ja hier an der Stelle auch so ne Art
- 14:15prototypepad da benutzen, weil du sagst du der eine Gegner der
- 14:20verschwindet sozusagen aber du. Klonst quasi noch mal 3 davon,
- 14:25aber mit zum Beispiel dem Attribut.
- 14:28Die Größe ist nur 0,5 davon und der Angriff von dem Gegner ist
- 14:33aber jetzt auch nur noch n Drittel davon ne oder was auch
- 14:36immer und so weiter dass du halt genau diesen Gegner noch mal
- 14:41nimmst. Aber halt eben also du klonst
- 14:43die Attribute. Nimmst das noch mal und
- 14:46veränderst vielleicht n bisschen ne, also dass vielleicht die
- 14:48Lebenspunkte sind n bisschen weniger.
- 14:49Der Angriff ist n bisschen weniger und die Größe ist n
- 14:52bisschen weniger, aber prinzipiell ist es immer noch
- 14:54sozusagen n ursprungsklon ne von also oder n Klon von dem
- 14:58ursprungsgegner sag ich genau. Du hast halt im Prinzip die
- 15:01gleiche Ausgangsbasis, ne wie gesagt, also egal wieviel
- 15:04Attribute das am Ende sind, die man da noch verändern kann oder
- 15:08personalisieren kann, nenn ich es mal ja.
- 15:10Wie zum Beispiel den Namen auch. Einfach jetzt bei dem
- 15:13Schafbeispiel ne, das ist halt n ganz essentieller Punkt, dass du
- 15:16diese Möglichkeit hast. Und ich find es gut, wenn wir
- 15:19bei dem Thema sind, dann lass uns doch mal so technisch da
- 15:23drauf gucken. Also ich glaube man kann sich
- 15:26jetzt ganz gut vorstellen, was dieses Pattern bezweckt und was
- 15:29der Vorteil dabei ist. Aber wie kann man das denn jetzt
- 15:31als Designpattern, wie sieht das Designpattern dahinter aus, wie
- 15:34kann man das technisch umsetzen? Und wieso?
- 15:38Oft sind wir da wieder in der Objektorientierung unterwegs,
- 15:41wie bei den bisherigen Pattern auch und im Prinzip startet
- 15:45alles wieder damit, dass du sagst, OK, ich erzeuge mir
- 15:48erstmal ein Interface Mhm oder eine Basisklasse, aber gehen wir
- 15:52mal von dem Interface aus und dieses Interface muss im Prinzip
- 15:57eine clone Methode beinhalten. Ja.
- 16:01Ja, also du kannst auch natürlich noch mehr reinpacken,
- 16:04wenn du jetzt zum Beispiel sagst, nee, aber über das
- 16:06Interface möchte ich auch definieren, dass ich Attribute
- 16:09ändern kann zum Beispiel, oder also, dass du das Fest
- 16:12vorschreiben möchtest. Wie auch immer, das ist halt
- 16:15nachher die die Implementierungsfreiheit was
- 16:18will ich genau alles festschreiben, aber fangen wir
- 16:21ganz simpel an und sagen, es gibt ne clone Methode, die muss
- 16:24implementiert werden, wenn ich beispielsweise meine Klasse
- 16:28scharf klonen möchte, dann. Muss ich sagen, diese klasse
- 16:33Schaf implementiert dieses Interface und muss damit ja ne
- 16:38clone Methode bereitstellen. Mhm, das ist ja der Sinn erstmal
- 16:42dahinter, weil dann zwingst du quasi den Entwickler drüber sich
- 16:46darüber Gedanken zu machen, wie muss denn ne clone Methode
- 16:49aussehen um ein exakte Kopie des Schafes zu erstellen sozusagen?
- 16:54Also du kannst ja rein theoretisch, kannst ja auch,
- 16:56also jetzt muss ja nicht clone heißen, ne, aber es macht in dem
- 16:59Fall natürlich Sinn. Ist so, dass es Clone heißt,
- 17:02aber kann es natürlich auch anders benennen.
- 17:03Ne, so wie du wie du es willst rein.
- 17:05Theoretisch so n bisschen Best Practice, sag ich mal genau oder
- 17:07so so standardmäßig vom Design Pattern.
- 17:10Ja, aber prinzipiell ist es halt eigentlich nichts weiter als n
- 17:13ganz normales Interface. Also wir hatten ja Interface
- 17:15auch schon mal in einer Pattern Folge besprochen, was genau n
- 17:18Interface ist. Im Endeffekt ist es jetzt nichts
- 17:20anderes ne, also es ist sozusagen einfach n Konstrukt
- 17:23wie man es baut, also so n Design pattern ne, aber du
- 17:26kannst ja überall im Endeffekt wieder, also in vielen auch
- 17:30Infekten. Repattern wird ja zum Beispiel
- 17:31auch ein Interface verwendet und dann ist es halt im Endeffekt
- 17:34nur die Frage, so wie genau implementierst du das, was sind
- 17:37Best practices, dass es sozusagen diesen Prototype
- 17:40Pattern von der Idee her matcht, ne, aber wenn du dir das so
- 17:44vorstellst, hast du ja im Interface auch eigentlich nur am
- 17:48Ende, wenn das Interface, ich nenn es jetzt mal Fahrzeug ist,
- 17:51dann kann ja alles Mögliche rauskommen, also ein Fahrzeug
- 17:54kann ja alles Mögliche sein, aber dieses Clone selber gibt am
- 17:57Ende ja nur ein Fahrzeug zurück, beispielsweise was ja?
- 18:00Dann am Ende in der konkreten Implementierung ja wiederum
- 18:04wirklich NN Auto oder Motorrad oder sowas sein.
- 18:06Kann ne mal als Beispiel. Das hat halt den Sinn und da ist
- 18:09vielleicht jetzt der Punkt, wo man, gerade wenn man sich am,
- 18:12also am Anfang befindet und sich mit solchen Pattern
- 18:14auseinandersetzt, wo? Gerade bei mir auch früher sag
- 18:17ich mal im Studium so n bisschen so n Knoten im Kopf entstanden
- 18:19ist. Wichtig hierbei ist, warum macht
- 18:22man das, weil es klingt jetzt vielleicht komisch, wir haben
- 18:24gesagt, OK jetzt jetzt hab ich zum Beispiel geh ich ich nehm
- 18:27noch mal das schafbeispiel ne ich hab jetzt n Schaf und das
- 18:29implementiert jetzt mein Interface sozusagen dieses
- 18:32Prototypen Interface ne sheep also einfach n sheep dann so ne
- 18:35und ich hab jetzt mein Grey Sheep, mein graues Schaf
- 18:38sozusagen und es ist natürlich komisch dann zu sagen ich ruf
- 18:42Klon auf und Klon gibt natürlich.
- 18:45Sheep dann zurück, so wie auch der das Interface ist.
- 18:49Aber das hat den Grund, dass wenn ich es von außen verwende,
- 18:53ja zum Beispiel auf meiner Sheep Farm möchte ich eigentlich gar
- 18:57nicht wissen, was das genau für n Schaf ist.
- 19:00Das ist für mich nur n Prototyp. Also es ist halt wirklich nur
- 19:02ein Schaf was dieses Interface implementiert und mir ist zum
- 19:07Beispiel nur wichtig, dass ich es klonen kann.
- 19:09Ja, wenn man diese. Clone Funktion aufrufen kann.
- 19:12Genau. Also nehmen wir mal an, du hast
- 19:14jetzt zum Beispiel n Spiel und du bist auf einer Farm und hast
- 19:18da so Schafe und du hattest ja von von einem Vampirschaf
- 19:22geredet und wenn du jetzt zum Beispiel so als dein klassisch
- 19:25klassisch als dein Character durch die Gegend läufst, ne und
- 19:29du. Du sagst zum Beispiel, OK, du
- 19:32haust. Kannst du mich auf n Schaf
- 19:33hauen? Wie auch immer ne und so n
- 19:35Vampirschaf beispielsweise das verdoppelt sich in der Nacht
- 19:39oder keine Ahnung wird wird quasi wenn du es haust ne wenn
- 19:42du es haust. Und wenn du aber jetzt zum
- 19:44Beispiel am am Tag des Haust, dann verschwindet es, dann hast
- 19:47du es wirklich sozusagen besiegt, aber wenn du es in der
- 19:48Nacht machst verdoppelt es sich, dann willst du ja eigentlich
- 19:51rein theoretisch gar nicht programmatisch sozusagen auf
- 19:54programmierebene wissen, auf welches Schaf haust du da
- 19:58gerade, sondern wenn du da. Drauf haust.
- 20:00Dann soll es sich halt verdoppeln.
- 20:01Ne so also geklont werden sozusagen ne, also da soll
- 20:04sozusagen noch ein eine Instanz genau mit den gleichen
- 20:08Attributen von diesem Schaf erstellt werden, ne und
- 20:12demzufolge ist es halt was du meintest ne es es interessiert
- 20:16dich nicht, ich fand das früher immer so schwierig zu sagen es
- 20:21interessiert dich an der Stelle nicht was du da hast und Und
- 20:24dann habe ich mich immer gefragt.
- 20:25Ich verstehe, also weißt du so früher so im Studium, dachte ich
- 20:28immer so, wieso sollte mich das nicht interessieren, ich weiß
- 20:31doch aber eigentlich immer genau was ich habe, ne, aber wenn du
- 20:33jetzt zum Beispiel wirklich zur Laufzeit bei so einem Spiel.
- 20:36Irgendeinen Typen vor dir hast, dann weißt du das zwar als
- 20:40Spieler selber, das siehst du natürlich, aber der Algorithmus
- 20:43ja, also der der Code, der dann gerade da an dieser Stelle ist,
- 20:46der weiß es ja nicht unbedingt, der denkt sich so k.
- 20:49Ich hab hier ein Objekt und das ist irgendwie n Schaf und wenn
- 20:51das passiert, dann muss ich halt n Copy aufrufen so ne und dann
- 20:55muss das Halt funktionieren oder klonen in dem Fall sorry.
- 20:58Ja, also es ist halt genau dieses Konzept der Entkopplung.
- 21:01Ne, also dass du quasi die Aufrufe und die Logik davon
- 21:05entkoppelst von der eigentlichen Erstellung und von dem Objekt
- 21:08selbst. Und das ist am Anfang halt immer
- 21:11so. N kleiner Knoten im Kopf muss
- 21:12ich wirklich sagen, aber genau der Sinn steckt halt dahinter.
- 21:15Ne, dass du das Entkoppelst, weil es dich nicht interessieren
- 21:18muss. Ja, das ist halt wichtig.
- 21:20Es musst, du musst nicht das wissen da drüber haben, um es
- 21:24verwenden zu können. Ich fand deine Formularidee als
- 21:27Beispiel ganz cool und noch so ne weitere Analogie, die glaub
- 21:30ich auch jeder schon mal verwendet hat, so so gerade in
- 21:34der Schulzeit so wenn du mit powerpoint so Vorträge gemacht
- 21:37hast, ne und so n Slide kopieren ist am Ende, wie auch immer es
- 21:43implementiert ist, aber vom Grundgedanken dahinter, ja es
- 21:46ist auch nichts anderes, du hast so n Slide.
- 21:49Zum Beispiel mit so einem fertigen Design, ne, also so n
- 21:52keine Ahnung, so n Header n Footer sieht richtig schön aus,
- 21:55hast dir so richtig Mühe gegeben und dann kopierst du das erstmal
- 21:59und tauscht dann quasi den Content sozusagen aus und das
- 22:03ist ja im Prinzip auch wieder so n Anwendungsfall am Ende um da
- 22:07noch mal so n weiteres Beispiel zu geben, die Frage ist nur wann
- 22:14macht es Sinn? Wir haben ja gesagt, zum
- 22:16Beispiel bei dem Kopieren der Blätter.
- 22:18Absolut sinnvoll, macht gar keinen Sinn, das immer neu zu
- 22:21schreiben, ja, oder bei dem bei den Slides jetzt oder bei
- 22:25unserer Schafsfarm ja, da kann man vielleicht noch
- 22:27argumentieren, ah nee, ist vielleicht doch besser, jedes
- 22:30Schaf individuell zu machen oder so oder bei den Gegnertypen ja,
- 22:34aber wäre in Spielen halt auch n Anwendungsfall, wie könnte man
- 22:39das mal so ganz allgemein runterbrechen, was sagst du aus
- 22:43deiner Sicht? Wann ist dieses Pattern
- 22:46geeignet? Ja, also ich würde schon sagen,
- 22:51im Endeffekt, wenn du jetzt also grundprämisse würde ich sagen,
- 22:56ist wenn du ein Objekt hast, was vielleicht unglaublich viele
- 23:01Attribute hat, ne, also wenn du jetzt zum Beispiel sagst, die
- 23:05Erzeugung von so einem Objekt ist relativ komplex, ist relativ
- 23:09teuer in Anführungsstrichen. Weil im Endeffekt ist es ja so,
- 23:14dass du, ich hatte mich zum Beispiel auch mal gefragt, OK,
- 23:18du hast jetzt entweder n du machst n Copy ne beispielsweise
- 23:21und in diesem Copy passiert ja an sich eigentlich under The
- 23:25Hood auch nichts anderes, als dass du sagst, du Erzeugst mit
- 23:29einem New irgendwie n konstruktor du, du nimmst
- 23:31irgendwie dieses Objekt und machst damit irgendwas.
- 23:33Könntest du zum Beispiel tun, ne, ist ja ne Möglichkeit, aber
- 23:38was du halt. Also das wäre ja im Endeffekt
- 23:41so. Kannst ja sagen, ja OK, machst n
- 23:42Copy und n New oder du machst n New mit den Attributen und am
- 23:46Ende ist es halt irgendwie das gleiche.
- 23:47Also wie du jetzt dieses Copy ne und auf der einen Seite hatten
- 23:52wir gesagt OK wir haben halt eben diese diese Art von von
- 23:55diesem Interface was man dann halt eben ne wo man das gut
- 23:59gekapselt hat am Ende und nicht wissen muss was es ist.
- 24:02Aber und jetzt find ich das das kommt noch n top wenn du jetzt
- 24:05zum Beispiel weil ich ja auch gesagt hab teuer ne.
- 24:08Wenn du jetzt zum Beispiel n Konstruktor hast oder so ne und
- 24:11und da passieren viele Initialisierungsdinge ne, also
- 24:14sagen wir mal du willst n bestimmtes Attribut erstellen,
- 24:18musst aber erstmal n paar Berechnungen anstellen um halt
- 24:21eben wirklich den richtigen Wert für dieses Attribut zu bekommen,
- 24:26dann musst du diese ganzen Berechnungen, die du für dieses
- 24:29entsprechende Attribut brauchst, halt nicht mehr unbedingt
- 24:33berechnen, weil du zum Beispiel weißt, OK, dieses Attribut
- 24:35übernehme ich einfach von. Dem Prototypen ne, also von dem
- 24:40was ich vorher schon hatte und kann es einfach klonen dann und
- 24:43muss halt nicht extra noch diesen ganzen Overhead sozusagen
- 24:46machen. Ne und das ist dann finde ich
- 24:50meiner Meinung nach n großer Punkt der einem sagt da macht es
- 24:53irgendwie Sinn weißt. Du ja.
- 24:55Und im Umkehrschluss ist das genau, wenn genau das Gegenteil
- 24:59der Fall ist, auch schon der Grund, wann es ungeeignet ist.
- 25:02Wenn ich jetzt zum Beispiel sehr simple Objekte hab, ne mit einem
- 25:05Parameter zum Beispiel die wirklich.
- 25:07Sich kaum unterscheiden, außer auf abgesehen von einem Attribut
- 25:10zum Beispiel. Ja dann habe ich halt nicht
- 25:13wirklich einen Vorteil gegenüber der Instanziierung durch New
- 25:17beispielsweise, ja weißt. Du, das ist ein wichtig.
- 25:19Neues Objekt anlegen? Was denn?
- 25:21Ich finde es immer schwierig, dass meistens ja genau solche
- 25:25bei. Also wenn du jetzt ein Beispiel
- 25:27hast, ne und jemand erklärt das daran, dann finde ich macht es
- 25:30total Sinn das einem kleinen Beispiel zu erklären und zu
- 25:32sagen Na ja guck mal, aber so sieht es ungefähr aus.
- 25:36Und dann hast du n kleines Beispiel, was übersichtlich ist,
- 25:39woran du verstehst. Und.
- 25:42Dann kommt aber auf der anderen Seite wieder so.
- 25:44Ja, aber mach das nicht bei kleinen Sachen, mach das nicht,
- 25:47wenn der Konstruktor einfach ist und dann.
- 25:49Also für mich war das auch manchmal so früher als ich mir
- 25:51dachte, so Alter hä, warum nimmst du denn dieses Beispiel
- 25:55dafür? Ne, wenn es doch sogar nicht
- 25:57dafür geeignet ist? Ne, aber es ist halt.
- 26:00Aber da ist halt wie gesagt, das was hast du gesagt Finanzamt
- 26:02Formular n gutes Beispiel weil das willst du halt nicht jedes
- 26:05Mal neu schreiben, richtig ja aber genau das ist halt der
- 26:09Grund der wenn es ungeeignet ist wenn es halt einfach zu simpel
- 26:12ist oder es kann komplex sein aber es gibt einfach keine
- 26:16einheitliche Modellierung die dahinter steckt also.
- 26:19Es. Gibt quasi nicht keine klare
- 26:22Struktur, die ich ableiten und wiederverwenden möchte
- 26:24sozusagen. Also es macht einfach keinen
- 26:27Sinn, einen Klon zu erzeugen. Ja, also wenn ich sehr, sehr
- 26:30dynamische Objekte hab, wo keine Grundmodellierung dahinter
- 26:33steckt, wie beispielsweise wir ja gesagt haben, Gegnertypen,
- 26:37wenn ich mehrere davon haben möchte, macht das absolut Sinn
- 26:41die zu klonen. Wenn ich aber jetzt keine
- 26:43Ahnung, jeder ist total dynamisch, ja, also irgendwie.
- 26:48Weiß ich nicht. Also in den Grundeigenschaften
- 26:50völlig verschieden, dann brauch ich da nichts klonen, wenn ich
- 26:52danach eh wieder alles ummodelliere sozusagen.
- 26:55Das macht dann halt gar keinen Sinn, ja.
- 26:57Richtig. Und ja, das sind eigentlich
- 26:59wirklich die Kernpunkte, wo man entscheiden muss.
- 27:02Macht dieses Pattern für mich jetzt Sinn oder nicht genau das
- 27:06daran quasi festzumachen, eine Sache, die ich aber mit dir
- 27:10besprechen möchte, weil das ist n Stolperstein.
- 27:14Der hat es in sich und da wird jeder mal drüber stolpern.
- 27:16Weil aber auch so im Sinne von, du findest dann irgendwann den
- 27:20Fehler und denkst dir, ah ja klar, verdammt ist mir schon so
- 27:23oft passiert und zwar möchte ich über diese Copy falle über das
- 27:27Problem mit dir sprechen und zwar den Unterschied zwischen
- 27:31einem Cello und einem deep Copy Entschuldigung Copy ja also
- 27:38Cello oder deep Copy so. Ja, wir hatten ja auch bei der
- 27:42Reihe auch gesagt, dass wir ja auch immer gucken wollen, wann
- 27:45lohnt es sich und wann lohnt es sich nicht oder vielleicht auch
- 27:48was für Gemeinheiten. Gibt es da vielleicht ne oder
- 27:52was für Begrenzungen oder wo man halt drauf achten muss und das
- 27:55ist auf jeden Fall n guter n guter Punkt, was ist denn jetzt
- 27:58n? Also weil du jetzt gesagt hast
- 28:00Shadow und deep Copy ne, was ist denn das erstmal grob, dass wir
- 28:04einmal auf n ja. Also im Prinzip kann man das.
- 28:09Also ich stell mir das so vor beziehungsweise wenn ich jetzt
- 28:11Anwender bin ne. Also ich hab jetzt quasi
- 28:14beziehungsweise der Entwickler hat das Prototype Pattern
- 28:18verwendet und ich habe jetzt Prototypen die ich kopieren kann
- 28:21ne und ich rufe jetzt einfach die copy Funktion auf und ich
- 28:24denk mir so er ist ja sicher das ist ja ne copy Funktion ich
- 28:27krieg jetzt ne komplette Kopie von dem Objekt ich arbeite mit
- 28:31dem beiden Ich rufe Funktionen auf auf dem einen Mal auf dem
- 28:34anderen und hab auf einmal so komische Side Effects wo ich mir
- 28:37denke hä? Warte, warte mal, warte mal.
- 28:40Ich hab ich hab jetzt irgendwie scharf 1 hab ich jetzt irgendwie
- 28:45n Halstuch vor fascal ich denk mir jetzt gerade irgendwas aus
- 28:49und scharf zum Ei hat auf einmal auch n Halstuch um was ist da
- 28:52los? Beides schon das scharf.
- 28:54Ja, so weißt du und du denkst dir so hä, ich hab ne Änderung
- 28:57an scharf 1 gemacht. Und scharf 2 ist auch davon
- 29:01betroffen. Das will ich doch gar nicht.
- 29:02Es sind doch Kopien. Ja, es ist eine Kopie von scharf
- 29:061, aber sie sind doch danach völlig unabhängig voneinander
- 29:10und genau das ist der Knackpunkt, das zu erreichen ist
- 29:13halt nicht so trivial. Und da kommt jetzt das Problem,
- 29:16der Unterschied Cello und deep Copy und zwar wenn ich eine
- 29:21Kopie mache ja und standardmäßig ist das immer ein Cello Copy,
- 29:25das heißt ich kopiere einfach mein Objekt scharf.
- 29:29Und das Schaf hat aber Attribute, die wiederum Objekte
- 29:34sind ja, wie beispielsweise Listen, ja ja, Listen sind gute
- 29:39Beispiele. So, dann kopiere ich zwar das
- 29:44Schaf auch mit der Liste, aber nur die Referenz auf die Liste,
- 29:50das heißt unter der Haube. Da hab ich jetzt 2 Schafe, die
- 29:55auf die gleiche Liste verweisen und das ist n Stolperstein.
- 29:59Da muss man das auch von Sprache zu Sprache muss man halt gucken,
- 30:01ja wie das zu implementieren ist.
- 30:04Aber das verbirgt sich halt hinter einem Cello, also
- 30:06wirklich so n so n oberflächlicher Copy ne ganz
- 30:11gute Analogie um das mal zu verstehen, ich hab n Notizbuch.
- 30:14Ja, und ich guck mir das Notizbuch an, wenn es
- 30:17geschlossen ist. Da sind jetzt die Seiten drin
- 30:19beschrieben. Ich hab draußen quasi mein mein
- 30:23mein Umschlag, sag ich mal so, ja, und ich kopiere das, dann
- 30:28hab ich jetzt zweimal dieses Notizbuch, aber eigentlich hab
- 30:32ich es nur oberflächlich kopiert, das heißt die Seiten da
- 30:35drin sind gleich, es sind die gleichen Seiten sozusagen.
- 30:40Ja, und wenn ich jetzt auf der ersten Seite ne Zeile
- 30:42durchstreiche, verweist das zweite Notizbuch genauso auf
- 30:47diese Zeile und es wird automatisch damit
- 30:48durchgestrichen. Das sind so Zaubernotizbücher
- 30:52weißt du, ganz klar. Und das muss man sich halt so,
- 30:55so physisch dahinter vorstellen, dass ich halt die Seiten sind,
- 30:59die gleichen. Ich habe nur n Notizbuch
- 31:01erzeugt, wo quasi die gleichen Seiten drin abgebildet sind,
- 31:05aber eigentlich hab ich nur von außen ne wirkliche Kopie erzeugt
- 31:09und jetzt das ist deep Copy, ja musst du dir vorstellen, dass
- 31:14ich jetzt sage, diese Liste die ich hab da drin zum Beispiel die
- 31:17Seiten, die kopier ich jetzt wirklich, also ich erzeuge ne
- 31:22neue Liste. Die ich in meine Kopie gebe,
- 31:26gerne mit dem Inhalt der Seiten. Ich soll ja nicht leer sein, ich
- 31:28möchte ja auch den Inhalt haben. Ja, also ich nehme quasi die
- 31:31erste Liste und erzeugt daraus ne komplett neue mit dem
- 31:35gleichen Inhalt und dann habe ich wirklich 2 Notizbücher und
- 31:39wenn ich jetzt bei dem ersten was ändere ist das zweite
- 31:41Unbetroffen, weil die sich keine nicht mehr die gleichen Seiten
- 31:44teilen sozusagen. Ja, ja, wenn du das jetzt so n
- 31:49bisschen auf auch das ganze Computerspiel Gaming münzt.
- 31:53Wo wir auch meinten, dass das auch sehr sinnvoll zum Beispiel
- 31:58ist, auch als Anwendung. Und du hast jetzt beispielsweise
- 32:01NN Gegnertypen, den du kopierst und dieser Gegnertyp hat
- 32:04wiederum ne, um das jetzt noch mal n bisschen abzuwandeln, hat
- 32:08zum Beispiel n Objekt wo irgend so n Status drin ist.
- 32:11Ne wie zum Beispiel irgendwie das Leben, der Zustand, ob er
- 32:13gerade irgendwie weiß, nicht sitzt oder kämpft oder was auch
- 32:16immer und du kopierst es und du erzeugst ganz viele Gegner
- 32:20davon. Und dann haust du zum Beispiel
- 32:22einen Gegner an und dadurch, dass es ja sozusagen dieser
- 32:26Status mit dem Leben da drin beispielsweise ne nur ne flache
- 32:30Kopie, also ne Shadow Kopie ist, würden ja alle Gegner sozusagen
- 32:34leben verlieren. Ne, so als Beispiel jetzt
- 32:36gemünzt auf. Also ich find im Gaming ist das
- 32:41halt auch ganz gut. Man kann sich das so vorstellen.
- 32:43Ich hab zwar ganz ganz viele Kopien erzeugt, aber wenn es n
- 32:46Cello Copy war, dann haben die quasi alle das gleiche
- 32:49Gedächtnis, sozusagen ja also es es ist kein wirkliche, kein
- 32:53wirkliches Individuum, was sozusagen seine eigenen
- 32:56Erfahrungen, seine eigene Lebensanzeige oder irgendwas
- 32:58hat, sondern unter der Haube sind sie alle miteinander
- 33:01verbunden sozusagen. Das ist eigentlich auch n ganz
- 33:04cooles Beispiel und ich glaube jedem, der jetzt das hört und
- 33:08drüber nachdenkt, ist klar was für n Bugpotenzial das Ganze hat
- 33:11und wie versteckt das vor allem auch sein kann.
- 33:14Ja und deswegen da Leute wenn ihr sowas verwendet also das
- 33:18Prototype Pattern liebe Zuhörer liebe Zuhörer immer drauf achten
- 33:22wie diese copy Methode implementiert ist, ob es sich
- 33:24wirklich um ein ne saubere Kopie handelt oder ob ich mir da
- 33:28Probleme mit einhandel. Ja, also da kann man auf jeden
- 33:31Fall bei dem. Problem mit diesem, mit dieser
- 33:33Copyfalle was du meintest kann man ja auf jeden Fall direkt,
- 33:36wenn man dieses Pattern nutzt oder wenn sowas auftritt.
- 33:40Da muss man eigentlich direkt dran denken, Oh das ist jetzt
- 33:43zum Beispiel wirklich ne echte Kopie oder nur ne Referenz ne
- 33:45also ja das hatten wir beispielsweise auch beim beim
- 33:49Flappy Buddy ne, da hatten ja zum Beispiel Gegnertypen so ne
- 33:52bestimmte. So bestimmte Arten, wie Sie
- 33:56geflogen sind, ne zum Beispiel der Rabe hatte so ne Sinuskurve
- 33:59und am Anfang als wir es implementiert haben, war es
- 34:02beispielsweise auch erstmal so, dass die Kurve, die der Rabe
- 34:05geflogen ist, alle Raben sind synchron geflogen, ne bevor es
- 34:09dann quasi und. Und das ist ja olympisch.
- 34:12Also das ist ja nichts Neues. Ja, synchron fliegen von Raben.
- 34:15Richtig, aber das ist halt so das Ding, dass man da eigentlich
- 34:18dann noch relativ schnell drauf kommt und sagt, OK, hier muss
- 34:20ich irgendwo ne Referenz übergeben haben, ne und das war
- 34:23dann im Endeffekt die. Sag ich mal das die wie diese
- 34:28Bewegung ist. Ne und die war dann halt überall
- 34:30gleich und hat immer den gleichen Wert für alle Raben
- 34:32gesetzt und dann musste man halt da kommt man halt eigentlich
- 34:36relativ schnell drauf, dass man sagt, OK irgendwo müssen wir
- 34:39wahrscheinlich ne echte Kopie erzeugen und nicht einfach nur
- 34:41ne Referenz übergeben ne so. Genau.
- 34:45Ja, das ist eigentlich auch im Großen und Ganzen das Pattern.
- 34:48Es ist nicht so komplex, hat aber sag ich mal seine Tücken,
- 34:52wie gerade. Angesprochen und vor allem aber
- 34:56auch seine Daseinsberechtigung. Und ich denke Fabi im nächsten
- 35:02Game könnte ich mir vorstellen, dass wir sowas mal gebrauchen
- 35:04könnten. Ja, je nachdem wie das Game dann
- 35:06aussieht und dann werden wir da auch noch mal explizit drauf
- 35:08eingehen, das mal wirklich so umsetzen und mal den Mehrwert
- 35:12draus ziehen, aber Mehrwert ist n gutes Stichwort, lass uns noch
- 35:15mal jetzt als Fazit am Ende der Folge so als Take Home Message
- 35:18noch mal kurz vor und Nachteile des gesamten Patterns
- 35:22zusammenfassen. Ich fang mal an, ich hau mal so
- 35:26n erstes Ding rein was natürlich, und das ist ganz oft
- 35:30bei Pattern, das haben wir anfangs gesagt, immer n Vorteil
- 35:33ist, dass ich halt kein Wissen mehr über die konkrete Klasse
- 35:36brauche ne ich entkoppel das halt die Anwendung von der
- 35:39eigentlichen Implementierung, das heißt ich definiere nur über
- 35:43das Interface wie das ganze aussehen soll.
- 35:45Ich hab ne Klonmethode dann zum Beispiel und dann kann ich halt
- 35:48einfach von irgendeinem Objekt was das anbietet oder
- 35:51implementiert Klone erzeugen. Ja, und es interessiert mich
- 35:56nicht, wie das passiert, sondern ich will einfach nur, dass es
- 35:58passiert, sozusagen. Und das ist natürlich, Stichwort
- 36:02Wiederverwendbarkeit, ja saubere Entkopplung, das ist halt n sehr
- 36:06flexibles Konzept, was wirklich seine Vorteile mit sich bringt.
- 36:10Ja, was natürlich Nachteile sind, das hatten wir ja gerade
- 36:12schon beschrieben, das ist ja die Cellocopy und du hast
- 36:16natürlich logischerweise auch mehr.
- 36:19Ich nenn es jetzt mal boilerplate Code.
- 36:21Gerade wenn du jetzt zum Beispiel wenig komplexe Klassen
- 36:24hast, weil du ja im Endeffekt anstatt einfach nur n
- 36:27konstruktor zu haben, wo du irgendwas übergibst, hast du ja
- 36:29noch n Interface noch mit dazu. Mindestens und ja.
- 36:36Wie gesagt, es kann halt manchmal auch tricky sein, dann
- 36:39eben diese deep Copy selbst zu bauen beziehungsweise dann auch
- 36:42wirklich darauf zu achten, dass sie halt eben wirklich ne deep
- 36:45Copy ist. Wenn man dann ne deep copy
- 36:47braucht, ne. Ja.
- 36:49Also man kann sich das mal vorstellen.
- 36:51Nur mal so als Gedankenexperiment, wenn ich
- 36:53jetzt Objekte hab, ja die wiederum als member variablen
- 36:57Objekte haben die Member variablen Objekte haben wiederum
- 37:01Referenzen und so weiter das kann halt wirklich deswegen auch
- 37:03deep Copy sich richtig tief verschachteln und dann auf
- 37:07oberster Ebene ne echte Deep Copy zu erzeugen kann richtig
- 37:11richtig. Komplex wären, um es nett
- 37:14auszudrücken. Und deswegen ist das wirklich
- 37:17nachteilig. Ich find es gut, dass du es auch
- 37:19noch mal gesagt hast, weil das ist wirklich dann der Painpoint,
- 37:22der entstehen kann, ganz klar. Ja, was ich noch mit also so ein
- 37:27bisschen zusammenfassend auch noch mal sagen würdest.
- 37:30Wir hatten ja jetzt zum Beispiel auch über in in den vorherigen
- 37:33Folgen sowas wie über Bilder Pattern geredeten Factory
- 37:35Pattern, das sind ja auch alles Pattern, die man auch zum
- 37:37Beispiel super einsetzen kann, rein theoretisch auch in im im
- 37:41Gaming Bereich ne, also wenn man das jetzt noch mal nehmen und
- 37:44wenn du jetzt zum Beispiel sagst Fabian, aber jetzt mal ohne
- 37:46Scheiß, warum ist es denn zum Beispiel, warum macht man das
- 37:49Ganze denn nicht jetzt einfach mit einem Factory Pattern?
- 37:51Ne so kann man sich hinstellen und sagen ja klar du wirst es
- 37:54auch hinkriegen mit anderen Pattern ungefähr das gleiche.
- 37:59Hinzukriegen ne, du kannst theoretisch ja auch mehrere
- 38:02Pattern sag ich mal mischen und irgendwie ne Art Bilder mit in
- 38:07dieses Copy mit reinbauen, wenn man da irgendwie Bock drauf hat
- 38:10kriegt man irgendwie hin. Aber es hat natürlich alles noch
- 38:14mal um das vielleicht noch mal kurz zu differenzieren, einfach
- 38:18unterschiedliche Anwendungsfälle.
- 38:20Ne ne Factory ist im Endeffekt dafür da, dass du sagst ich weiß
- 38:23nicht genau was ich bauen muss, das entscheide ich aber dann,
- 38:26wenn es soweit ist. So nach dem Motto dafür wäre
- 38:28dann ne Factory da. Bei einem Builder ist es so, ich
- 38:32weiß zwar was ich bauen will ne, aber es ist relativ kompliziert
- 38:36und man muss es irgendwie konfigurieren.
- 38:38Und beim Prototype ist es halt eher so, dass man sagt, OK, ich
- 38:40hab schon n ziemlich gutes Beispiel davon und ich brauch es
- 38:43einfach nur kopieren, so salopp gesagt ne und an der Stelle
- 38:47würde ich einfach noch mal sagen, Liebe zürer lieber zürer,
- 38:49wenn du jetzt zum Beispiel sagst, Ey wart mal Factory
- 38:50Bildern, hab ich noch gar nicht gehört, will ich mehr drüber
- 38:53erfahren, haben wir schon 2 folgen drüber gemacht, also
- 38:56einfach mal da reinhören wenn es interessiert.
- 39:00Ist auch n guter Punkt, weil. Gerade dieses mehr, also Design
- 39:04Pattern ist ja nicht so pro pro Software Projekt.
- 39:07Ein Design Pattern, mehr nicht, sondern es ist ja wirklich
- 39:10Anwendungsfall abhängig. Ich finde es ja auch gut zu
- 39:13sagen, also dass du es gerade noch mal zusammengefasst hast,
- 39:15weil wenn du jetzt wirklich einen sehr komplexen Prototyp
- 39:18hast, warum soll da nicht ein Bilder Pattern dahinter stecken,
- 39:20dass du das aufbauen kannst? Beispielsweise und wenn du es
- 39:23aufgebaut hast, kannst du dann das Prototype Pattern verwenden
- 39:26um wieder Kopien davon zu erzeugen?
- 39:28Das ist dir ja völlig freigestellt, wichtig ist mit
- 39:31einem gesunden Verstand und. Das bringt auch irgendwann, sag
- 39:34ich mal, die Erfahrung, weil wir hatten es glaub ich schon oft
- 39:36gesagt, gerade am Anfang im Studium hast du n Pattern
- 39:39gelernt und hast es erst mal überall verwendet, weil du bist
- 39:41ja jetzt in der Lage dieses Pattern zu bauen und bist.
- 39:44Hammer, jetzt ja, du hast es drauf jetzt und deswegen ich hab
- 39:47keine Ahnung wie oft ich anfangs auch selbst singelten oder so.
- 39:50Ja wo ich das gelernt hab wie du meintest ey ich kann das global
- 39:54machen, dann nimmst du das halt erstmal und die Erfahrung muss
- 39:57man sammeln um auch die Nachteile da drin zu sehen und
- 40:00genauso wie jedes Pattern seinen Nachteil hat wird man diese dann
- 40:03auch erfahren, beispielsweise hier das Deep Kopie Problem ja
- 40:06ne. Und deswegen einfach
- 40:09ausprobieren und das ganze Mal durchspielen.
- 40:11Ja, also den Aufruf machen wir glaub ich immer am Ende der
- 40:14Folge zu sagen Codet das doch mal runter codet doch zum
- 40:17Beispiel mal die kleine Schäfchenfarm lasst sie uns
- 40:20zukommen, wir würden Sie gerne sehen, ich find das Beispiel
- 40:22ziemlich witzig ansonsten ja kann man sagen Copy Paste 2.0
- 40:28haben wir durchgesprochen heute nur das ganze Halt mit wie
- 40:31gesagt Verantwortung tragen, es gibt halt Sachen zu beachten.
- 40:37Und ansonsten interessiert uns liebe, zuhören, liebe Zuhörer,
- 40:40natürlich hast du das Pattern schon mal verwendet oder war es
- 40:43dir komplett neu? Wie sind deine Erfahrungen
- 40:45damit? Kennst du Anwendungsfälle, wo
- 40:47das einfach absolut genial ist, sodass wir das Ganze auch mal
- 40:50mit der Community teilen können? Schreib uns gerne die Mail, wie
- 40:54immer in den Shownotes wir freuen uns über jede Nachricht,
- 40:57vielen Dank dafür schon mal. Ansonsten findet ihr auch n
- 41:00kleinen Spendenling. Wenn ihr sagt, Ey Mensch Leute,
- 41:02der Podcast auch gerade die Reihe, die hat mir echt
- 41:04geholfen. Ich würde euch gerne
- 41:05unterstützen dann vielen vielen Dank für den Support der Link
- 41:09wie gesagt in den Shownotes auch zu allen anderen Plattformen und
- 41:13da bleibt mir jetzt nichts weiter zu sagen außer wir hören
- 41:15uns alle beim nächsten Mal wieder ich wünsche euch ne
- 41:17schöne Zeit bis dahin macht es gut eure Coding Buddies.
- 41:21Gemeinsam besser.