Clean Code #7 - Datenstrukturen oder Objekte? - podcast episode cover

Clean Code #7 - Datenstrukturen oder Objekte?

Jun 06, 202443 min
--:--
--:--
Download Metacast podcast app
Listen to this episode in Metacast mobile app
Don't just listen to podcasts. Learn from them with transcripts, summaries, and chapters for every episode. Skim, search, and bookmark insights. Learn more

Episode description

Willkommen bei den Coding Buddies! In der nächsten Folge unserer Clean Code Reihe behandeln wir das Thema "Datenstrukturen und Objekte". Wo liegen die Unterschiede? Und wann nimmt man welche Form? Hat dir die Folge gefallen? Wir freuen uns natürlich auch über eine kleine Spende unter: https://streamlabs.com/thecodingbuddies/tip Dies ermöglicht uns unseren Content weiter zu verbessern. Vielen Dank! Folge uns doch zusätzlich auf unseren anderen Plattformen oder schau auf unserer Website vorbei: Discord: https://discord.gg/C2Zntw6Sq4 Instagram: https://www.instagram.com/the_coding_buddies Youtube: https://www.youtube.com/@thecodingbuddies Twitch: https://www.twitch.tv/thecodingbuddies TikTok: https://www.tiktok.com/@thecodingbuddies Du hast Feedback für uns? Kontaktiere uns doch per Mail: [email protected]

Transcript

Bedeutet, kann ich zwar, ich sag mal. Relativ schnell neue Funktionen hinzufügen, ne, also sowas wie Checkmops im Bereich ist, oder? Ja, jetzt fällt mir kein anderes Beispiel ein. Check mal, ob es nicht im Bereich ist. Ist jetzt blöd Coating Boys dein Podcast wohnt im Softwareentwicklung und aktueller Technews. Herzlich Willkommen.

Herzlich Willkommen zur neuen Folge vom Coding Buddies Podcast. Die Gastgeber sind wieder am Start, das bin natürlich ich und Tino ist auch dabei und den heiße ich jetzt herzlich willkommen. Halli Hallo, das war ne schöne Einleitung, die hat mir gut gefallen. Ich hoffe dir liebe zuhören Liberty aber auch. Hi. Fabi Hi Tino, Grüße dich. Wie geht es? Wie steht es ja alles gut soweit, alles gut es.

Ist alles. Im Lotto alles im Lot genau das ist genau die richtige Redewendung, die ich gesucht habe. Es ist alles im Lot mir. Geht's super, ich hab Bock sehr gut, ich freu mich aufs Thema heute, du hast es ja schon mal im kleinen Vorgespräch angeteasert. Wird cool heute, das wird spannend. Sagen wir es mal so, das ist für mich auch ein sehr spannendes Thema. Bevor wir aufs Thema kommen, wollte ich noch mal einmal ganz kurz im Vorfeld uns mich in unserem Namen bedanken.

Bei allen Zuhörerinnen und Zuhörern, die uns so liebe Worte auch. Zukommen lassen. Und zwar liebe Worte zu unserem Podcast. Wir haben schon gerne mal das ein oder andere Lob in letzter Zeit bekommen und da wollte ich mich einfach nochmal in unserem Namen an allen. Wird jetzt zuhören und zuhören, bedanken. Das freut uns. Vielen Dank vielen, vielen Dank. Man kann es nicht sehen, aber ich versuch hier gerade hier so mit den Fingern so ein Herz zu machen. Weil Tino sieht zum.

Beispiel die ja, kann ich gar nicht, geht gar nicht. Also Respekt an Leuten, die das so aus dem Stand so Zack Herz, kennst du das so so ein perfektes Herz mit den Fingern so aus dem Licht. Das ist Crazy. Und manchmal auch mit ganz komischen Konstellationen an Fingern. Irgendwie so mit einem Ringfinger und weiß ich, was da alles schon das ist wild manchmal. Da sind wir zu alt für. Nicht nur, weil wir auch uns fehlt die Gelenkigkeit in den Fingern. Ich wollte schon sagen, die

Arthrose kickt da rein. Aber nein, nein, nein. Aber was mich zum Beispiel sehr berührt hat, war das jemand. In der Twitch Session in den Chat geschrieben hat. Da sind ja endlich die Gesichter zu meinem Lieblingspodcast und sowas ist natürlich. Der Hammer. Und total toll. Also nochmal vielen Dank dafür und genau. Jetzt würde ich sagen, starten wir ins Thema rein und das Thema ist dieses Mal ja n bisschen ja. Also es geht wieder um Cleancode.

Und es geht um intensiveres Thema, eventuell also vielleicht auch so n bisschen für sag ich jetzt mal fortgeschrittenere, eventuell aber natürlich auch für eigentlich ist es für alle was, weil damit setzt man sich auf jeden Fall irgendwann auseinander, also. Nehme ich.

Alles zurück sollte man auch. Und es geht eigentlich im Endeffekt. Das Thema geht darum, Datenstrukturen und Objekte, also das sind ja ich Spoiler, mal ein bisschen schon was unterschiedliches, und wir wollen jetzt in dieser Folge mal ein bisschen die Frage klären, was ist der Unterschied und wann nimmt man was von beidem. Ja, das ist auch ein sehr spannendes Thema.

Als du das Thema vorgeschlagen hast, dachte ich mir so, ja, cool klingt cool, oh mein Gott, ja dann bin ich erstmal so selbst ins Struggeln gekommen, weil ich mir so dachte. Ja, okay ist doch ganz logisch, Datenstrukturen, Objekte, aber wenn man da mal tiefgründiger drüber nachdenkt und sich mal wirklich. Dieses Thema einlässt, muss ich sagen, ging es jedenfalls mir so, dass man da echt so n bisschen Probleme kriegt, das klar auseinander zu halten.

Also wirklich sich mal zu überlegen, was definiert eine Datenstruktur, was ist ein Objekt in dem Sinne und wie, wann setzt man was ein und das ganze aber auf einer Metaebene, die jetzt sprachenunabhängig ist, das ist noch mal eine kleine Anmerkung dazu und die auch sehr wichtig ist. Wir reden jetzt nicht davon, dass wir jetzt sagen, okay, wir haben jetzt zum Beispiel in unserem Grundlagenkurs Java gehabt, und wie macht man das jetzt in Java oder die.

Andere Sprachen grundlagenkurs Python, weil da geht es ja schon los. Das wäre in beiden Sprachen schon unterschiedlich und deswegen würde ich das Ganze gerne auf eine Art Metaebene heben, wo es auch hingehört, meiner Meinung nach, dass man sich ganz allgemein sprachenunabhängig überlegt, wie möchte ich meine Software oder mein System noch allgemeiner, nee sagen wir mal und meine

Software die seien. Und verwende ich dann für gewisse Funktionalitäten, die ich brauche oder Features, die ich jetzt zum Beispiel umsetzen möchte? Da überleg ich mir n Plan, wie ich das Coden möchte und nehm ich jetzt beispielsweise Datenstrukturen oder setz ich das ganze lieber mit Objektorientiert um, zum Beispiel? Ja. Also auf diese Ebene würde ich das sehr gerne heben und. Deswegen auch anfangs mal mit dir diskutieren, worin da so die Unterschiede liegen können. Auch hinsichtlich.

Es ist ja die cleancode Reihe immer natürlich hinsichtlich einer Clean Entwicklung, was so nach dem cleancode Lehrbuch. Quasi angedacht ist dabei, und dabei weiß nicht, möchtest du mal anfangen, zum Beispiel mal aus deiner Sicht zu erklären, was eine einfache Datenstruktur ist. Was versteht man unter einer Datenstruktur ja? Genau also wie du ja schon meintest. Also wenn wir jetzt noch mal ganz kurz auch nochmal.

Java beispielsweise hat ja ausschließlich Klassenobjekte, wie auch immer, aber darum geht es jetzt nicht, sondern wirklich wie du schon meintest, noch mal ganz explizit. Metaebene. Also wenn du jetzt zum Beispiel eine Datenstruktur ist, im Endeffekt eine, sagen wir mal, eine Ansammlung von Daten. Die, wobei diese Daten die. In dieser Datenstruktur hängen sozusagen offen liegen, das heißt, du hast im Endeffekt keine Logik, also ne, die

irgendwie sag ich jetzt mal. Daten irgendwie verarbeitet, die da drin sind, sondern wirklich du hast Daten in deiner Datenstruktur und kannst plain genau auf diese Daten zugreifen. Der Vorteil von dieser Datenstruktur ist, es hält natürlich semantisch Daten zusammen, die auch semantisch irgendwie zusammengehören. Ne, das ist halt erstmal wichtig. Also es bildet sozusagen Verbund. Sozusagen genau.

Und wenn du jetzt, wenn du jetzt das ganze nimmst und sagst, okay, aber das klingt ja irgendwie eigentlich schon auch wie ein Objekt, es ist doch irgendwie das gleiche. Da muss man dann halt sagen, naja, okay vielleicht.

Erstmal ist es ein Ansatz, aber der Hauptpunkt ist, dass so ein Objekt halt eben Daten hält, aber diese Daten sind mehr oder weniger versteckt, das heißt du kannst von außen auf diese Daten, auf diese Pläne. Datenpunkte nenne ich es jetzt einfach mal, die du irgendwie da drin hast, kannst du nicht zugreifen, sondern du kannst über Funktionen drauf zugreifen beziehungsweise du hast Funktionen die schon diese Daten halt auch eben vielleicht semantisch verarbeiten.

Ne. Das ist so n bisschen. Der Hauptunterschied und jetzt kann man sich vielleicht hinstellen und sagen, OK, klingt ja alles ziemlich vage, lass uns doch vielleicht einfach mal n paar Beispiele nehmen und sagen okay, was ist jetzt wirklich mal konkret ein Beispiel für eine Datenstruktur und was wäre denn zum Beispiel mal ein konkretes Beispiel für ein Objekt? Ja. Ja, das ist eine gute Idee. Am Beispiel kann man sowas denn wahrscheinlich auch besser verstehen.

Nehmen wir, fangen wir mit Datenstrukturen an. Angenommen, ich möchte jetzt die Daten einer Entität abbilden. Beispielsweise einer Person, finde ich. Ist ein ganz gutes Beispiel, also wirklich eine ganz einfache Repräsentation einer Person. Hinsichtlich zum Beispiel als User in auf irgendeiner Website, wo man sich anmelden kann. Mal so als Beispiel. Und ja, was was hat denn so n

User? Du hast n Name eventuell Vorname Nachname, du hast n vielleicht n Alter noch ne E-Mail-Adresse, das wären so klassische Daten. Die halt in dieser Datenstruktur gehalten werden und die dann quasi verwendet werden können. Das heißt, die liegen offen, da man weiß genau zum Beispiel. Das Alter ist ein integer, weil es gibt keinen. Ich bin Achtzehneinhalb in dem Sinne, sondern es wird mit

ganzen Zahlen gearbeitet. Die E-Mail wird ein String sein, beispielsweise und so weiter das heißt, ich weiß ganz genau, wie die Daten aussehen und kann mit dieser Datenstruktur arbeiten. Ein anderes vielleicht eher für die Mathematik Fans unter uns.

Ein ganz klassisches Beispiel wären geometrische Form oder noch besser zum Beispiel ein Punkt im Koordinatensystem, dass ich sage okay dieser Punkt hat eine x und y Koordinate und bildet da oder repräsentiert damit einen Punkt im zweidimensionalen Koordinatensystem. Ja, das Beispiel. Finde ich richtig gut. Also dann habe ich beispielsweise 2 Zahlenwerte da

drin und es ist ganz klar was. X ist und was Y ist, dann würde ich zum Beispiel auch sehen können, sind es ganz zahlen, ist es integer zum Beispiel oder sind es eher Gleitkommazahlen, die x und y Koordinaten? Also das ist quasi klar ersichtlich und ich kann damit arbeiten. Diese Repräsentation ist offengelegt, wie du so schön gesagt hast, weil das ist ein wichtiger Punkt dabei. Objekte. Sind also der Anwendungsfall

davon. Ist ja wie du so schön gesagt hast, wenn man auf diesen Objekten arbeitet, das heißt diese interne Datenrepräsentation ist versteckt und nicht nach außen getragen, das heißt, ich weiß zum Beispiel nicht, welche Datentypen für diese einzelnen Attribute verwendet werden, das interessiert mich aber auch nicht, weil ich kriege Funktion bereitgestellt, mit denen ich auf diesen Werten arbeiten kann und da finde ich, ist so ein

klassisches Beispiel, was man auch oft in Lehrbüchern sieht, ist zum Beispiel ein Bankkonto. Weil, daran kann man das

eigentlich ganz gut verstehen. Ich lege mir ein Bankkonto an, das heißt, ich erzeuge sozusagen ein Objekt und sag okay ich habe eine Kontonummer und ein initialen Kontostand 0 oder keine Ahnung, ich stelle das Konto direkt mit einer Einzahlung kann man sagen okay, dann hat es halt einen gewissen wert x. So, und die Daten, die da drin gehalten werden, ist dann zum Beispiel die Kontonummer und der Kontostand. Mhm, und jetzt hast du. Allerdings der Unterschied genau.

Na gut, dann los. Ich hab grad n bisschen noch darüber nachgedacht, weil du das gesagt hast, dass man zum Beispiel nicht unbedingt auf die, auch nicht auf die Datenstruktur oder Repräsentation von zum Beispiel dem Kontostand eigentlich, darüber weiß man nichts.

Das heißt, wenn du aber so eine Art Funktion hast, die dir sagt, Get Balance, das heißt, du möchtest irgendwie diesen Wert der Balance bekommen, dann könnte es ja durchaus sein, dass zum Beispiel die Balance in, sag ich mal in Cent dargestellt ist, mal als Beispiel, und du aber als sozusagen über diese Get Balance Funktion am Ende ein. Sag ich mal einen Euro wert. Bekommst also zum Beispiel keine Ahnung.

Sagen wir mal 2500,35€ oder so, dass du dann wirklich quasi vielleicht einfach eine Gleitkommazahl bekommst. Aber eigentlich ist die interne Datenrepräsentation unter Umständen. Sagen wir mal integer in Sense oder so ne mal als Beispiel. Ja, und das ist nämlich n gutes Beispiel, weil von außen gesehen interessiert dich ja nicht, wie intern die Daten gehalten werden, sondern für dich zählt nur das Gate Balance dir n ne gleitkommazahl zurückgibt.

Und sagt, du kriegst jetzt n Euro wert sozusagen, also dann halt die. Was hast du gesagt zweitausendfünfhundert Komma ja ich hab sorry 3335 natürlich 35.

Genau das ist nämlich der entscheidende Unterschied, dass du halt eine Logik in diesem Objekt hast, mit der auf diesen Daten gearbeitet wird, weil es macht ja keinen Sinn zu sagen, ich hab jetzt ne Datenstruktur, das ist ne ne ne Kontonummer und ne Balance und da könnt ihr jetzt drauf zugreifen und wenn du sagst beispielsweise du zahlst was ein, dann änder bitte die Balancebetrag, weil der ist ja sozusagen öffentlich, dann musst du den jetzt selbst da ändern.

Die Kontonummer Ach weißt du was?

Wenn du möchtest, kannst du auf die Kontonummer ändern, das Macht natürlich keinen Sinn unter diesem Anwendungsfall, so dass es sinnvoller ist zu sagen okay, ich gehe diesen Objekte weg und habe zum Beispiel eine Einzahlungsmethode oder eine Abhebung Methode, womit ich meinen Kontostand dann intern manipuliere und die Kontonummer ändern macht sowieso keinen Sinn in dem Sinne, also da würde ich sowieso dann wahrscheinlich wer weiß wo es später mal geht in unserem kleinen Beispiel gar

nicht halt irgendwie sagen, dass man die ändern kann. Das ist halt genau der Unterschied. Und. Ja, doch, das sind eigentlich gute Beispiele. Ich würd da oder hast du noch noch 1? Nee, ich find das gut, also da, da kann man sich ja eigentlich schon n bisschen was drunter vorstellen, dass man das auch noch mal n bisschen differenziert, was also was beides eigentlich ist, was damit gemeint ist. Und die Frage ist natürlich

jetzt okay es gibt diese beiden. Es gibt jetzt Datenstrukturen, es gibt Objekte, dann kann man sich natürlich sagen okay, ich hab den Unterschied verstanden, es gibt beide Sachen, das eine ist das, das andere ist, das haben wir gerade noch mal ein bisschen dargelegt, und dann ist natürlich die nächste Frage, jedenfalls würde sie mir aufkommen, wenn ich jetzt da noch nicht ganz involviert bin, so okay wann nimmt man denn

eigentlich was? Und man kann ja jetzt erst mal vorweggreifen, dass natürlich erst mal natürlich abhängig von der Programmiersprache ist, weil es gibt ja zum Beispiel Programmiersprachen, die gar nicht objektorientiert arbeiten, mal als Beispiel, also witzigerweise, letztens erst gelernt, go ist wohl wurde. Uns ja gesagt, nicht objektorientiert. Wusste ich gar nicht. Ich bin nicht so n Jo Cocoder. Weiß ich nicht. Unsere Sprache tatsächlich. Ja, fand ich.

Aber spannend, dass es so ist. Aber mal angenommen ne, wenn man jetzt davon ausgeht, es gibt. Bist jetzt in der in der Möglichkeit zu sagen, ob jetzt sozusagen objektorientierung in der Sprache möglich ist oder nicht. Sagen wir mal beides geht ne, dann wäre ja die Frage, wann

nimmt man was. Ja. Eine sehr gute Frage. Und da liegt auch die Schwierigkeit drin und deswegen die Anmerkung auch nochmal an mich selbst, weil das ist mir jetzt im Zuge der Folge wird mir das auch immer klarer, dass man sich da wirklich hinsetzen sollte und sich das gedanklich mal durchspielen sollte, um da einfach eine gute Entscheidung zu treffen. Weil. Man ja so instinktiv.

Ich weiß nicht, wie es dir geht, aber über die Jahre, die man entwickelt, fängt man halt an. Du hast ne Problemstellung, du fängst an Loszukurden und irgendwie so instinktiv entscheidest du. Ja, das mache ich jetzt hier als Datenstruktur. Oh nee, hier werde ich mir mal ne klasse schreiben, womit ich denn Objekte erzeugen kann, weil ich brauch da noch Logik mit drin und so weiter aber sich gezielt Gedanken vorher zu machen ist das gerade der

richtige Weg oder ist das nur meine persönliche Practice, weil ich das oft so mache? Das finde ich eigentlich ganz spannend. Wie siehst du das? Also ich habe auch auf jeden Fall schon.

Öfter jetzt. Dieses also bin ich oder nicht öfter, ich bin da auch öfter mal doch schon öfter auch in der Vergangenheit, sagen wir mal so, an den Punkt gekommen, wo ich erstmal dachte okay, ich erstelle mir jetzt eine Datenstruktur, so wie wir es gerade besprochen haben und bin dann irgendwann an den Punkt gekommen, dass ich mir dachte, okay, irgendwie bräuchte ich jetzt zum Beispiel eine Funktion, die mir innerhalb dieser Datenstruktur bestimmt, ob sie, weiß ich nicht zum Beispiel.

Gib mir mal ein Beispiel, aber die etwas Bestimmtes herauskristallisiert. Wenn du zum Beispiel sagst. Du hast vielleicht NNNN Punkt ne, wenn wir wir waren jetzt beim Punkt und du willst jetzt überlegen OK ist dieser.in einem bestimmten Bereich ne so keine Ahnung sagen wir mal in dem grünen Bereich oder einem roten Bereich ne also jetzt im Sinne von ist OK der Bereich oder nicht.

Dann fängst du das an und sagst OK, ich hab n Punkt, ich hab ne Datenstruktur, die erstelle ich mir und jetzt komm ich dazu, dass ich sage von außen ich hab jetzt diese Koordinaten und überprüfe von außen. Ist dieser Punkt im Grünen oder im roten Bereich? Ne, also in einem erlaubten

Bereich oder nicht so? Und dann ist ja die Frage, wenn du das einmal machst, okay ist nicht so schlimm, lass es als Datenstruktur da, jetzt kommst du aber irgendwann an den Punkt wo du dir denkst, es muss sich an der Stelle im Code machen, an der zweiten, an der Dritten, an der vierten oder fünften Stelle im Code. Jetzt habe ich eine Menge Code duplikationen wieso nehme ich mir nicht einfach genau diese Funktion, pack sie in ich sag mal die Datenstruktur Beziehung

beziehungsweise Wandel diese Datenstruktur in eine in ein Objekt um, weil dann könnte dieses Objekt nämlich einfach eine Funktion haben. Sozusagen, sagt Okay du willst mit diesem Punkt an eine Stelle gehen, aber kann ich das überhaupt? Und deswegen hast du eine Funktion, die du aufrufst und sagst, Disposition valid oder so

weißt. Du. Und da ist dann natürlich offensichtlich die Überlegung im Vorfeld nicht gut genug gewesen, weil das hätte man schon kommen sehen können, weißte und solche ähnliche Situationen hatte ich schon öfter mal gehabt, deswegen ist es gut, wie du meintest, wirklich im Vorfeld darüber nachzudenken und um deine Frage zu beantworten, hatte ich auf jeden Fall schon, dass man sich denkt okay, ich mache das einfach manchmal so einfach.

Weil ich es immer so gemacht habe, aber eigentlich nicht wirklich darüber nachgedacht habe. Was brauche ich jetzt eigentlich wirklich oder was ist perspektivisch ne auch wirklich sinnvoll? Also es ist ja auch nicht fatal zu sagen, OK, ich refecte das noch mal. Das gehört zur Softwareentwicklung einfach dazu. Da haben wir schon oft drüber gesprochen.

Aber das ist ein gutes Beispiel. Ich kann ja auch genau das Gegenbeispiel bringen, wo ich dachte, ich brauche unbedingt ein Objekt. Es reicht keine einfache Datenstruktur aus. Bin aber zudem ich weiß nicht mehr genau was es war. Also ich kann jetzt kein exaktes Beispiel geben, aber am Ende war es so, dass ich im Prinzip. Diese klassischen Getter und Setter hatte für die Attribute innerhalb der Klasse, also für die Zuhörer und Zuhörer, die jetzt nicht wissen, was ich damit meine.

Im Prinzip habe ich Funktion geschrieben, dass man die Werte auslesen kann, also nach außen zur Verfügung stellt und setter, dass man sie auch von außen verändern kann und dann kommt man genau an den Punkt, dass man sich denkt okay, ich habe jetzt ein Objekt, die intern Daten möchten. Nicht zur Verfügung stellen. Aber ich habe Getter und netter hat in der Regel ja denn n Rückgabewert mit Datentyp, das

heißt von außen. Stell ich ja doch sichtbar klar, wie die interne Datenrepräsentation aussieht und ich hab sogar noch setter, dass ich sie auch verändern kann und dann bist du ganz klar an dem Punkt, dass man sagen kann, OK, mach ne Datenstruktur, weil was bringt dir denn jetzt dieses Objekt im Endeffekt meine Proxy? Funktion oder also?

Das ist so ne, das ist ne. Genau das ist so ne pseudo abstrakte Abstraktion sage ich mal ne, also dass du sag ich mal so ne so ne so einen abstrakten Grad einbaust, der aber überhaupt nicht abstrakt ist, weil am Ende. Kannst du komplett sehen, was darunter liegt und das ist halt so das Gegenbeispiel, dass man sich denkt okay Objekt, warum wolltest du jetzt unbedingt ein Objekt nehmen, das ist eigentlich eine ganz klare Datenstruktur in deiner Software gerade. Ja, das stimmt.

Ist ein gutes Beispiel auf jeden Fall und ich kenne das auch. Das ist auch gerade so. Ich hatte auch zum Beispiel schon mal so Momente, wo du genau solche Objekte hattest, wie du meintest. Dann hast du eigentlich im Endeffekt nur Getter und Setter. Und dann hatte ich sogar noch den den Punkt, dass ich eigentlich NNN Objekt irgendwie übertragen musste. Über n Interface ne, also wenn du es dir vorstellen möchtest, zum Beispiel Front and back end Kommunikation über Rest ne. Ja.

Also zwischen 2 Systemen meiner allgemeinen. Kommunikation zwischen 2 Systemen dann wurde dann Objekt übertragen und im Endeffekt hast du oder hatte ich dann den den Fall, dass ich quasi so n Objekt hatte, aber so n Objekt ist es immer n bisschen. Komplizierter unter Umständen sowas zu übertragen, oder? Eigentlich willst du halt nur ganz plane Datenstrukturen übertragen über solche Interface ne. Du willst ja auch nicht. Funktionen drin haben oder sonst was.

So, und da gibt es zum Beispiel auch sogenannte DTOS, ne Data. Du hast es in deinem Satz ja schon verwendet, das Wort Datenstruktur, weil das n ganz klares Beispiel ist für verwende Datenstrukturen. Genau die t os das Stichwort sorry ich wollte dich nicht unterbrechen. Und im Endeffekt habe ich dann quasi dieses Objekt in dieses Dto umgewandelt, um es dann sozusagen zu übertragen. Und dann dachte ich mir auch, so, was ist hier eigentlich los?

Also macht an manchen Stellen natürlich Sinn, wenn du wirklich ein Objekt brauchst und willst dann gewisse Daten davon übertragen, dass du dir denn dafür ein Dto anlegst, weil wie gesagt, das ist ja ein Best Practice, diese dt. Os zu verwenden, weil du einfach eine definierte Schnittstelle denn hast zwischen den Systemen. Das heißt du weißt genau, was du senden sollst und das andere System weiß genau, was zu empfangen ist. Und diese dt.

Os, die du so sagst sind halt sehr flache Datenstrukturen. Wirklich nur Daten und das ist halt komplett ersichtlich was da gesendet wird. Genau also. Von der Repräsentation her gemeint, jetzt ja find ich cool. DTOS sind ein fantastisches Beispiel für Datenstrukturen. Auf jeden Fall. Genau, aber jetzt lass uns noch mal vielleicht n bisschen gucken, dass wir sagen, OK, wann ist denn zum Beispiel was wirklich sinnvoll?

Ne, also man kann sich ja hinstellen und sagen, ja gut, du hast vielleicht manchmal Datenstrukturen, du brauchst vielleicht. Objekte aber was ist denn jetzt zum Beispiel, also wie stehen die zum Beispiel so im Gegensatz zueinander und wieso sollte man zum Beispiel das eine so verwenden und das andere so weißt du was ich meine? Ja oder brauchst du? Input für diese Frage. Vielleicht waren sie sehr allgemein. Ich muss aber wirklich mal kurz drüber nachdenken.

Also was einem oft begegnet ist. So diese also, dass es oft so antisemitisch genannt wird, was auch? Sinn macht also ich find das ist n bisschen schwierig zu greifen, aber es macht am Ende wirklich Sinn, dass du sagst, eigentlich, wenn man das mal ganz nüchtern betrachtet, sind sie komplett gegensätzlich. Haben wir ja auch schon gesagt.

Datenstrukturen haben ne Offenlegung der internen Daten und keine Funktionalität, sind halt reine Datenrepräsentation, ein Objekt hingegen legt nicht die Daten offen, bietet aber Funktionalitäten an, also es besitzt zum Beispiel eine gewisse Businesslogik, wie du mit diesen Daten arbeiten kannst. Das ist ja schon mal komplett gegensätzlich. Die Frage ist, wie das jetzt sich auf so eine gesamte Software auswirken kann, weil das ist ja auch ein entscheidender Punkt.

Sage ich mal. Zu entscheiden, was brauche ich jetzt oder was verwende ich, wenn man sich das bei Objekten zum Beispiel anguckt, dann sind die natürlich hinsichtlich der Implementierung in der gesamten Software ziemlich robust. Das heißt, sie bilden eine Art Gekapselte Einheit. Wobei der restlichen Software dann egal ist, wie die interne Implementierung aussieht. Es gibt halt den funktioniert.

Wenn die bereitgestellt werden, und diese sind entscheidend, was diese Funktion machen und die restliche Software arbeitet auf diesen Funktionen. Das heißt du hast halt ne ne sehr lose kapselung, also du hast keine hohen Abhängigkeiten dazwischen im Best Case. Das ist natürlich. Nen Vorteil bedeutet aber wiederum, dass du halt auch nicht genau das definieren musst, wie zum Beispiel diese Funktion aussieht. Das ist dann wieder.

Die die Schwierigkeit dabei, du musst halt genau sagen, OK pass auf, der Rest der Welt ist egal wie meine interne Verwaltung der Daten aussieht, aber ich gewährleiste euch, dass die Funktion XY euch Werte in diesen. Datentyp in dieser Formatierung gibt zum Beispiel das Bankkonto noch mal, dass sie in Euro wert als Gleitkommazahl kriegt und nicht auf einmal Cent Beträge und die das restliche System denkt sich verdammt. Wir sind reich.

Nein. Aber weißt du also, das ist halt wichtig an der Stelle, aber ansonsten kannst du intern dann machen, was du willst. Ist halt n Vorteil bei den Objekten. Ja, aber wie siehst du das? Ja, aber was ist denn jetzt zum Beispiel?

Ich fand, ich fand ja dieses dieses eine Beispiel, wo wir auch drüber gesprochen hatten mit diesem sag ich mal mit Formen und dem Flächeninhalt, du hast ja zum Beispiel irgendwie ein Quadraten, Rechtecken, Dreiecken, Kreis, hast ja unterschiedliche Berechnungsformeln dafür und du kannst natürlich sagen okay, ich hab weiß ich nicht. Länge ne Höhe oder Volumen Flächen was auch immer ne was du

da nehmen möchtest. Du kannst ja wie ich ja auch zum Beispiel schon mit diesem Punktbeispiel meinte ne wenn man das ist ja im Endeffekt alles das gleiche in Grün. Du kannst von außen bestimmte Sachen berechnen und checken, ob

irgendwie was. Irgendwie funktioniert also du kannst ja bei dem bei den Punkten kannst du sagen, bin ich im richtigen Bereich, du hast nur die Koordinaten und kannst das von außen sozusagen checken, das heißt du nimmst dir deine Datenstruktur und arbeitest mit den Werten und Berechnest daraus sozusagen irgendwas, was du dann mit dem du weiter arbeitest.

Genauso kannst du ja. Bei einem Rechteck sagen oder bei einem Quadrat oder was auch immer okay ich habe meine bestimmten Attribute, zum Beispiel ich habe Länge, Breite oder radius, wenn es ein Kreis ist. Und damit kann ich halt eben mit diesen Attributen außerhalb bestimmte. Berechnungen anstellen, was auch immer. Du kannst natürlich auch sagen okay warte mal. Ich habe jetzt aber 5 verschiedene, also 5 verschiedene Formen und möchte

aber für jede Form irgendwie. Sag ich jetzt mal nen dieses diese Fläche berechnen ne dann könnte man ja sagen OK lass uns doch da vielleicht n Objekt draus machen ne um zu sagen ja ich hab ein Objekt x und gib mir mal von Objekt x das Volumen die Fläche fragt mich nicht so. Da ist natürlich die. Frage OK, was macht Sinn oder beziehungsweise.

Warum macht? Irgendwas mehr Sinn als das andere weißt du, weil du könntest dich natürlich hinstellen und sagen, Na gut, OK, ne, was, was ist denn wenn du jetzt sagst ich möchte jetzt ne neue Form hinzufügen, ne was bietet sich dann zum Beispiel an an der Stelle?

Ja. Also um dieses geometrische Beispiel mal aufzugreifen, wenn du sagst, OK, wir haben einfach, wir wollen einfach verschiedene geometrische Formen abbilden, dann bist du ganz klar auf der Datenstrukturseite, weil wie gesagt, das sind einfach Daten. Punkt hat XY. Ein Quadrat hat halt ja einen Punkt und dann eine Seitenlänge, das reicht ja schon aus, um das Quadrat aufzuspannen und so weiter das heißt du kannst dann über Datenstrukturen deine

geometrische Form abbilden. Wenn du jetzt aber dein Beispiel was du meintest, wo du dann gemerkt hast, Hey Moment mal, mit dieser Datenstruktur komme ich nicht weiter, das ist ja wirklich ein gutes Beispiel gewesen, an dem Punkt kommst, dass du sagst, Hey, ich möchte jetzt aber für sämtliche geometrische Formen. Berechnen, ob Sie innerhalb eines Bereiches im Koordinatensystem liegen.

Dann kannst du natürlich sagen, ich schreib jetzt sonder von außen so ne Check Funktion und prüfe bist du n Punkt. Wenn ja dann muss XY drin sein bist du n Quadrat da muss ich gucken ob dein Startpunkt drin ist und die Seitenlängen nicht herausragend aus diesem Bereich also das heißt da merkst du ja schon ich habe jetzt verschiedene Implementierungen für diesen Check um sagen zu können ja du bist im Bereich

oder nicht und. Da wird es dann, sag ich mal schon tricky, dass man sich sagen kann, Moment mal, vielleicht machen wir jetzt hier Objekte draus und. Geben diesen geometrischen Formen Funktion, die das übernehmen, weil dann kannst du ja sagen, jede geometrische Form implementiert selbst diesen Check für sich, passend zu der internen Datenrepräsentation. Das das ist halt so der Punkt denn dabei. Weil wenn ich das nicht mache bedeutet, kann ich zwar, ich sag mal.

Relativ. Schnell neue Funktionen hinzufügen, ne, also sowas wie Checkmops im Bereich ist, oder? Ja, jetzt fällt mir kein anderes Beispiel ein. Check mal, ob es nicht im Bereich ist.

Ist jetzt blöd. Ob zum Beispiel ne gewisse der Flächeninhalt, nehmen wir doch mal den Flächeninhalt so ne, dass du sagst OK oder berechne mal den Flächeninhalt, dann kann ich natürlich schnell diese Funktion, wenn ich jetzt auf Datenstrukturen arbeite hinzufügen und sagen okay pass auf, ich mache jetzt eine Funktion Flächeninhalt beim Punkt okay geschenkt, beim Quadrat berechne ich das, beim Dreieck berechne ich das mit den entsprechenden Formeln ok, aber

wenn sich die Datenstruktur ändern. Wird tricky, weil. Du dann sämtliche Funktionen anrühren musst. Ja genau das ist. Ja, im Endeffekt genau dieser Trade off. Weil andersrum, und das ist wieder das ist dieses asymmetrische dabei, wenn ich es mit Objekten mache, hat jedes Objekt ja für sich selbst die Implementierung vom Flächeninhalt und dann tangiert es zum Beispiel den Kreis nicht, wenn sich am Rechteck was ändert.

Ja, ja, ist. Auf jeden Fall noch mal gut, es war jetzt n. Bisschen mathematisch. Ich hoffe man konnt das verstehen, aber das ist im Prinzip ja auch genau der Trade, auf den du hast, ja. Genau das sind. Halt genau die Punkte, wo man natürlich wie du meintest. Man kann.

Im Nachfolgenden kann man immer noch refect, dann ist ja kein Problem, nur wenn man im Vorfeld schon merkt oder bestimmte sag ich mal Anwendungsmöglichkeiten oder erahnt, dann sollte man dann hat man halt auch theoretisch einfach schon die Möglichkeit von Grund auf schon mal in die richtige Richtung zu entwickeln oder in die sagen wir mal in die passende Richtung für das entsprechende. Entsprechende Anwendungsfall.

Ich finde man kann da ja auch. So ein bisschen eine kleine Faustformel, wie man so schön sagt. Ansetzen oder verwenden? Wenn ich mir überlege, was möchte ich abbilden? Und merke, dass. Das Verhalten im Vordergrund steht also schon. Ich weiß eigentlich schon, es geht eigentlich um die

Funktionalität dahinter. Ja. Und. Diese Funktionalität kann sich auch zum Beispiel häufig ändern, sich weiterentwickeln, dass ich dann eher auf objektseite bin, dass ich das halt wirklich für mich Kapsel und mit festen Schnittstellen arbeite und der Außenwelt ist dann egal, wie diese Datenrepräsentation da drin außen sieht, drin aussieht, man hat dann einfach quasi feste Schnittstellen. Du hast zum Beispiel jetzt

wieder das den. Bank Account, wo du nicht weißt, ob du nächstes Jahr die gleichen Zinsen hast wie dieses Jahr. Und das kannst du halt super in dieses Objekt reinkapseln und. Von außen wollen trotzdem. Die Leute weiter einzahlen und Geld abheben. Exakt. Und bei Datenstrukturen kann man sagen, OK, wenn ich zum Beispiel auf gleichen Daten, also wenn diese Datenrepräsentation sich nicht ändert, ich aber viele Operationen darauf ausführen

möchte, dass dann halt die also. Für diese Datenrepräsentation eine Datenstruktur wohl die bessere Wahl ist, weil jetzt halt keine eigene Logik dahinter gibt, sondern man einfach nur mit diesen Daten arbeitet. Ja deswegen. Zum Beispiel bei Schnittstellen zwischen System die tos, weil es wird immer dieser Austausch sein und wenn da eine Anpassung gemacht wird, dann geht das Halt relativ.

Simpel an der Stelle. Klar kann sich das ein bisschen durchs System, das ist dann wieder Designsache am Ende, aber ich weiß, ich hab ne Datenstruktur, die wird übertragen und da sind folgende Daten drin und die Gegenseite empfängt die ja. Ja, find ich gut. Das merken wir also jetzt. Funktion ja, dann Datenstruktur. Nee. Und so weiter. Aber pass auf. Folgender Vorschlag, Das hatten wir ja so am Anfang n bisschen bequatscht und damit würd ich

gern die Folge beenden. Lass uns doch n ganz kleines Quiz machen. Für alle Zuhörerinnen und Zuhörer. Das so als Lernkontrolle klingt übertrieben, aber es ist halt mal spannend, wie jeder für sich entscheiden würde und vor allem, falls ihr euch gleich anders entscheidet als der jeweilige, der die Frage gestellt bekommen hat, dann lasst uns das gerne per Mail oder auf den Plattformen zukommen, weil das würde uns gerne interessieren, weil das ist natürlich diskussionspotenzial hoch 10

jetzt. Wir stellen uns jetzt gegenseitig. Mal so ein 2 Fragen und dann gucken wir mal und. Ihr könnt auf jeden Fall auch mitraten. Okay hast du hast. Du hast du denn eine Frage? Ich habe eine ich. Habe mir schon was überlegt und zwar wenn du dir jetzt sagst okay pass auf, du entwickelst jetzt irgendwie eine Anwendung. Sagen wir mal auf einer ganz hohen Metaebene im Uni Bereich und Du möchtest zum Beispiel Daten von Studenten speichern oder Studentinnen beides. Mhm.

Was? Würdest du für ne Datenstruktur an dieser Stelle nehmen? Ne? Also wenn du jetzt so bestimmte ne zum Beispiel Name, matrikelnummer, ne. Welche Kurse da. Gesucht werden. Was würdest du da? Nee, würdest du da eher eine Datenstruktur nehmen oder würdest du eher ein Objekt nehmen? Also. Deiner Erklärung, das ist ähnlich wie das Personenbeispiel, was ich vorhin genannt habe, würde ich erstmal zu einer Datenstruktur neigen, weil es klingt so, dass ich einfach.

Eine Repräsentation eines Studenten einer Studentenperson, weil ich denke mal so Geschlecht oder so wird ja dann vielleicht auch darin abgebildet. Sein, das ist eine reine Repräsentation, ist erst mal um diese Entität abbilden zu können, und da wäre ich jetzt gerade bei einer Datenstruktur, ja. Es sei denn. Diese Personen können denn aktiv irgendeine Logik noch

beinhalten, dann wird es dann. Shiften wir ja vielleicht wieder zum Objekt rüber, aber aktuell würde ich sagen, ist das ne Datenstruktur, ja. Also würde ich auch erstmal soweit mitgehen und sagen ne, wenn wir jetzt wirklich diese Daten speichern. Macht das als Datenstruktur auf jeden Fall Sinn mit? Dem. Kleinen Anmerksel, dass man vielleicht sagen könnte, OK, wenn man jetzt aber sagt, ne zum Beispiel sowas hat wie. Sind denn quasi. So und so viel.

Also ne irgendwie keine Ahnung, ist der Kursplan komplett ne, weil zum Beispiel die Kurse noch drin stehen und du hast dann sowas wie ja oder nein. Du kannst zum Beispiel darüber dann gucken, ob n Student sozusagen oder ne Studentin wirklich alles richtig also eingetragen hat, die entsprechenden Kurse und so weiter richtig belegt hat und so weiter dann wäre es natürlich wieder funktional. Aber ja. Okay ja, Cooles.

Beispiel? Ich würde dir jetzt noch ne Frage stellen und zwar würde ich das Bankthema mal erweitern. Jetzt geht es los. Stell dir vor, du programmierst jetzt dazugehörig eine Banking Anwendung, ne Banking App zum Beispiel. Und. Sollst jetzt implementieren, dass du für Konten feststellst, ob Transaktionen korrekt ausgeführt werden, ob der Zugriff auf kontoinformationen valide ist, also so Sicherheitschecks und das ganze Validieren. Wie würdest du das jetzt machen? Also für mich ist das.

Auf jeden Fall eine sehr hohe funktionale Sache, also würde ich da wahrscheinlich auf jeden Fall irgendwie eine Art von Objekt nutzen, weil du kriegst ja bestimmte Daten rein ne und musst dann validieren anhand des entsprechenden Kontos vielleicht, ob zum Beispiel die Daten, die du dann bekommst für dieses Konto sage ich jetzt mal auch wirklich valide sind, ob das funktioniert oder nicht, und dann kriegst du ja sozusagen Daten rein, dann hast du Funktionen, die sagen, das

passt, das passt nicht, das ist gut, das ist schlecht. Und würde ich sagen, das sollte man vielleicht dann eher mit einem Objekt, gehe ich auf jeden. Fall mit. Ich merke, ich habe das Beispiel ziemlich umfangreich gemacht, aber wenn wir jetzt mal nur einen Punkt davon nehmen zum Beispiel. Eine Validierung zu machen von Kontoinformationen oder so. Wenn wir jetzt sagen okay, wir haben jetzt so ein Validata. Dann ist das halt wirklich ein Objekt, weil es dir von außen

eigentlich. Egal ist, wie das validiert wird, auf welchen Daten das validiert wird, wie überhaupt das passiert. Für dich ist wichtig die Funktion dahinter du möchtest wissen, war dieser Zugriff valide oder nicht und diese Funktion möchtest du von außen haben und das spricht halt ganz klar für einen Objekt sozusagen. Ich finde das auch immer. Schön, wenn man zum Beispiel so überlegt, dass man irgendwie eine irgendein Objekt hat. Wo sage ich jetzt mal so eine Art Passwort hinter ist.

Und du willst ja zum Beispiel dieses Passwort, willst du ja gar nicht nach außen hin zugänglich machen, das ist da drin gespeichert, du musst vielleicht sagen okay stimmt dieses Passwort überein oder nicht, sozusagen habe ich diesen Zugriff, ja nein, aber du willst ja zum Beispiel nicht sagen, was ist denn das Passwort oder ich setze mir mal eben mal schnell ein neues Passwort sowas. Ja, cool. Dann habe ich noch eine zweite Frage. Ok. Genau und alle wieder mitraten.

Stell dir mal vor, du entwickelst ne Wetter App ne und du möchtest zum Beispiel täglich für eine Analyse vielleicht später möchtest du dir jetzt irgendwie höchst und Tiefsttemperaturen speichern. Ne die zum Beispiel weiß ich nicht über. Immer eine Woche oder egal wie lange ne. Was würdest du da an der Stelle dann zum Beispiel nehmen? Würdest du eher ne Datenstruktur nehmen oder ein Objekt? Ich bin mir nicht sicher. Ob ich das Beispiel richtig verstanden habe?

Also geht es darum einfach. Hoch und Tiefstwert zu speichern. Genau. Das wäre jetzt für mich. Ne Datenstruktur, wenn es darum geht, aber irgendwie auf den Wetterdaten nachher max und min und alles zu berechnen, dann gehen wir halt eher in die Richtung Objekt. Deswegen Weih ich mir jetzt nicht sicher, ob ich es richtig verstanden hab, deswegen hab ich da gesagt. Im Anschluss kann man ja dann noch gucken, sozusagen. Aber erstmal hast du ja erstmal.

Hast du nur die Speicherung von diesen Werten und. Da glaube ich, sind wir uns einig. Das ist auf jeden Fall ein gutes Beispiel für den Datenschutz zu verwenden. Pass auf. Dann. Auch noch ein Beispiel für ein Beispiel, eine Frage für dich. Dann haben wir 4, das ist, glaube ich, ein ganz Gutes, eine gute Anzahl an Quizfragen. Stell dir folgendes Szenario vor. Du arbeitest an einem E Commerce System und sollst jetzt. Eine Funktionalität ergänzen. Dass wenn der User Artikel zu

einem Warenkorb hinzufügt. Dass geprüft wird, ob überhaupt der Lagerbestand ausreichend ist. Oder ZB. Ob ein gültiger Rabattcode verwendet wird und dementsprechend der Preis angepasst werden muss. Was, was würdest du machen? Instinktiv. Instinktiv. Würde ich einfach. Mal sagen. Ich würde da. Nicht ne Datentruppe. Ich würd ein Objekt nehmen. Da das Objekt.

Ja. Also. Wär ich auch bei dir, weil das klingt jetzt einfach schon nach nach Logik. Halt ne, also allein schon deswegen hab ich jetzt das mit der Rabattberechnung auch noch mal gesagt, weil das klingt ganz klar nach Logik, Lagerbestand wäre vielleicht noch so ein Diskussionspotenzial, wenn jetzt die Datenstruktur beinhaltet, wie viele davon drin sind, da kann man ja auch wieder drüber streiten, aber angenommen die Datenstruktur beinhaltet den Typ und die Anzahl kann man ja auch

sagen ja okay. Rechnest du halt -1 da drauf. Blöd gesagt, aber wenn du halt wirklich anfängst da komplexe Logik einzubauen, dann sollte man das ganze Objekt in einem Objekt Kapseln, ja. O. K cool. Würde ich sagen, haben wir das doch ausführlich besprochen. Es hat mir wieder mal sehr viel Spaß gemacht. Danke dafür, fabi, ich mag unsere cleancode Reihe, weil es einfach selbst einen auch immer noch mal trägert darüber nachzudenken, ja, das hilft.

Und. Deshalb, liebe zuhören, liebe Zuhörer, falls du Anmerkungen zu der Folge hast oder Feedback oder auch zu unseren Quizfragen am Ende deshalb noch mal der Aufruf, melde dich gerne bei uns gerne über die Podcast Mail oder über unseren anderen Plattformen, die links und auch die Mail findest du wie immer in den Shownotes. Ansonsten würden wir uns. Freuen, wenn du natürlich so ein 234 x Personen diesen Podcast weiter empfiehlst. Falls er dir gefällt. Das würde uns sehr helfen und

uns auch sehr freuen ansonsten. Würde ich sagen, ja, hören wir uns alle beim nächsten Mal wieder und bis dahin noch einen schönen Tag deine Coding Boys gemeinsam. Besser.

Transcript source: Provided by creator in RSS feed: download file
For the best experience, listen in Metacast app for iOS or Android
Open in Metacast