Am Ende wird beim Dependency Inversion Principle Beispiel eine List verwendet. Sollte hier nicht eher ein IList stehen? Oder wird das Prinzip nur dann angewendet, wenn die Objekte in die Klasse eingefügt werden (z.B. über Konstruktor, Setter...) und nicht standardmäßig vorhanden sind?
@congtutorials10402 жыл бұрын
Da hast du recht. Theoretisch so wenig konkretes wie möglich, aber soviel wie nötig. Oftmals reichen auch sogar nur ICollection oder IEnumarable aus. Und man sollte das nach dem OCP noch ReadOnly machen, wenn man Dependency Injection nutzt.
@suchtendolp6442 жыл бұрын
@@congtutorials1040 Aber wie weit geht Abstraktion wirklich? Ich mache das so bei externen Libraries, Datenbankzugriffen oder plattformabhängigen Services. Bei in .NET integrierten Sachen wie List oder sonstigen plattformunabhängigem integriertem Stuff verwende ich es direkt so.
@congtutorials10402 жыл бұрын
@@suchtendolp644 Frage: Wenn du gegen eine ICollection programmierst, welchen Nachteil hast du dadurch? Wenn du gerne eine List programmierst, welchen Nachteil hast du dann? Wenn du wirklich eine List brauchst, dann verwende sie auch, ansonsten nehm etwas abstraktes. Meine Meinung. Was machst du, wenn du auf einmal ein Dictionary statt einer List willst bspw.? Dann hättest du mit der konkreten List ein Problem.
@suchtendolp6442 жыл бұрын
@@congtutorials1040 Ja, ich verwende als Kompilierzeittyp auch die Abstraktionen, hole mir aber nicht diese Typen durch IoC. Ich mache es so: IList items = new List
@silas248744 жыл бұрын
Frage: Verstoßen wir den mit dem Open Close Prinzip nicht gegen das Single-responsibility principle, also zumindest in diesem Beispiel? Wir lagern die Berechnung wieder in die ursprügliche Klasse aus? D.h. die Klasse erfüllt wieder mehrere Zwecke?
@Nishikku_3 жыл бұрын
Das Habe ich mir auch beim Beispiel vom O gedacht. Schließlich haben nun alle Shape Klasse auch plötzlich die Aufgabe die Area zu berechnen.
@Nishikku_3 жыл бұрын
Ich glaube es geht bei den Prinzipien nicht um die Hundertprozentige Einhaltung. Mein Gefühl sagt mir das man selben mit den Prinzipien prüfen sollte was verbesserbar ist und was im bezug auf dem Projekt sinnvoll ist.
@tomhuebner614 Жыл бұрын
Sehe ich auch so. Da liegt auch meiner Meinung nach ein großer Widerspruch zwischen S und O, zumindest was das gewählte Beispiel angeht.
@lno7504 Жыл бұрын
Würde ich nicht sagen. Das SRP besagt ja nur, dass eine Klasse nur eine Verantwortung hat. Ein Rechteck gibt über sich selbst Auskunft, gibt hier seine Höhe und Breite preis. Mit dem Berechnen der Fläche, gibt es zusätzlich noch seine Fläche preis. Ich sehe da keinen Verstoß.
@energy15694 жыл бұрын
sehr gut erklärt du bist maschine
@codehan4 жыл бұрын
Super erklärt, vielen Dank. ..aber eines solltest du austauschen: Frontend-Developer: JavaScript, Backend-Developer: Java 😂
@anlongdus3 жыл бұрын
Man könnte ein Java Applet (gibts das noch?) als FE nutzen und mit NodeJS das Backend schreiben... wäre aber sehr unüblich ☺️
@halux88629 ай бұрын
ich glaube das war eher so gedacht, dass der Frontend-Developer die Backend-Developer-Aufgaben mittels der jeweiligen Methode erledigen kann 🤔
@dekeks64813 ай бұрын
nach diesem kommentar hab ich sofort gesucht als ich es gesehen hab xDDD
@florianb.93672 жыл бұрын
Sehr sehr geil. vielen dank für das video!! 💪💪
@herecomesthepain42293 жыл бұрын
@ProgrammierenStarten3 жыл бұрын
Vielen Dank für dein Lob :)
@barkeeper78874 жыл бұрын
Bitte ein Kurs zu Algorithmen und Datenstrukturen!!
@ProgrammierenStarten4 жыл бұрын
Danke für das Feedback!
@fflecker3 жыл бұрын
Ich sehe da gerade einen Lehrfilm und dachte immer, dass Methoden-Namen und Attribute klein geschrieben werden. Da habe ich wieder was gelernt.
@nasserabbassi73034 жыл бұрын
sehr gut, danke , hoffentlich bald machen sie einige Videos über Design Patterns .
@ProgrammierenStarten4 жыл бұрын
Vielen Dank! :)
@loldumm70544 жыл бұрын
Danke ihr habt mir sehr gut geholfen und ich bin dabei mein eigenes Spiel zu programmieren
@ProgrammierenStarten4 жыл бұрын
Yeah das freut uns mega :) Weiterhin viel Erfolg!
@loldumm70544 жыл бұрын
Danke
@spacemeter30014 жыл бұрын
Perfekt erklärt, danke!
@michaelauer77194 жыл бұрын
@programmieren-starten finde eure Videos super👍macht ihr in Zukunft auch Tutorials zu C oder C++?
@ProgrammierenStarten4 жыл бұрын
Vielen Dank! Aktuell nicht geplant, kann aber noch kommen :) Einer der nächsten Schwerpunkte wird Python werden :)
@MrGold-174 жыл бұрын
Programmieren Starten Ja!!! Endlich Python 🐍😁 C++ mag ich aber auch also auch ein bisschen schade.
@cyberpanda88134 жыл бұрын
@@ProgrammierenStarten schade bin durch mit Python (hab genug Erfahrung darin) ,bei mir ist auch beruflich bedingt gerade Golang angesagt.. aber Python ist und bleibt mein Liebling. C# und Java mag und mach ich schon ewig nicht mehr😁
@triko034 жыл бұрын
Was ist eigentlich besser für Anfänger Java oder c# ich habe mir den Java Masterkurs gekauft auf Empfehlung von einem Freund und jetzt habe ich Video von einem amerikanischen KZbinr der sagt das Java nicht so gut sei für Anfänger. Ist das wahr? Ps Du hast die einzigen Tutorials die man verstehen.
@cyberpanda88134 жыл бұрын
Ich würde generell auf eine hybride Sprache wie Java wenn du macOs und Linux nutzt setzen wenn es ums einstigen in die Sprachen geht, oder falls du Windows hast dann doch direkt mit C# weil du einfach von deinem Betriebssystem den besseren Support erhölst. Ich finde optimal ist es C/C++ zum Einsteigen, dann kannst du nämlich alle, denn die andere basieren quasi darauf. Falls du nicht so viel Hintergrundwissen willst und einfach schnell Ergebnisse sehen magst, kann ich dir Python sehr ans Herz legen. Optional dazu, einfach nur Theorie Datenstrukturen und Algorithmen ganz ohne eine Sprache schadet nie😊
@ProgrammierenStarten4 жыл бұрын
Ich würde an deiner Stelle (wenn du bereits mit Java angefangen hast) einfach Java lernen. Java und C# sind ohnehin wahnsinnig ähnlich. Das heißt wenn du eine gelernt hast, musst du nur noch ein paar Unterschiede lernen und kannst auch die andere. Also einfach mit Java starten und los gehts :) Nichts zu viel nachdenken, sondern direkt starten und üben :)
@groovebird8123 жыл бұрын
Was heißt denn "Management von Daten" genau? Dazu zählt doch das Speichern. Die Persistence Klasse kann ja auch nur ein Buch speichern, das steht zumindest im Parameter. Wenn man damit was anderes speichert hat man doch auch wieder verschiedene Zuständigkeiten. Also so richtig gut komme ich mit der Erklärung nicht zurecht
@barkeeper78874 жыл бұрын
Danke für dieses Video, sehr hilfreich!
@ProgrammierenStarten4 жыл бұрын
Sehr gerne :)
@enginx3d4 жыл бұрын
Thanks, very clear explanation!
@davidsalzgeber47924 жыл бұрын
Ich will mir Gamemaker Studio 2 zulegen. Ich weiß aber nicht, welche Option ich auswählen muss, wenn ich fürs Handy (Apple und Android) und Windows programmieren will. Kannst du mit bitte helfen? Meine Testversion läuft in drei Tagen ab.
@LeRoi81 Жыл бұрын
Man könnte doch auch Square als Oberklasse setzen mit nur einer Variable als Kantenlänge und Rechteck deren Unterklasse erweitert um eine weitere Variable als zweite Kantenlänge.
@silvansommer46894 жыл бұрын
Hallo @Programmieren-Starten Ich bin gerade am Java lernen, und wollte eigentlich mit dem WindowBuilder anfangen. Ich habe in einem Buch, mit Videos und im Internet nach einer möglichkeit gesucht ihn herunter zu laden, aber es klappt nicht. Es kommen immer Fehlermeldungen wenn ich ihn, in Eclipse aufrufen möchte. Kannst du mir da weiterhelfen? Ich wäre sehr Dankbar. Ps. Habe auch dein Java Masterkurs gekauft. (Sorry wegen Schreibfehler) Danke für deine Antwort.
@congtutorials10402 жыл бұрын
Das LSP stimmt zwar so wie du es erklärt hast, aber man Sicht nicht direkt wozu man das LSP eig nutzt, also Polymorphe Aufrufe. Das wird im Englischen ersichtlicher da man dort nicht vom LSP spricht, sondern von behavioral subtyping. Hier nutzt man die IsA um Objekte von der Oberklasse durch Objekte von der Unterklasse zu ersetzen. Das ist nämlich einer der Hauptaspekte was dann am Ende auch Objektorientierten Code von nicht objektorientierten Code unterscheidet. Die Polymorphie und dynamic binding. (neben Vererbung und Kapslung)
@wickedsmith59972 жыл бұрын
Besser wäre es doch die Klassen in Daten und Logik aufzuteilen. So würde die Klasse Buch nur die Properties beinhalten und eine Klasse BuchManager beinhaltet die Logik. Den Sinn des OpenClose Principle wird in diesem Beispiel schwer deutlich ? Die Berechnung eines Shapes in eine separate Klasse zu legen, erscheint nicht sehr sinnvoll ? Auch hier würde es mehr Sinn machen die Datenhaltung und die Logik in 2 Klassen aufzuteilen. Die Berechnung eines Shapes würde somit in den ShapeManager ausgelagert. Der Rest ist gut erklärt.
@davidbrand25574 жыл бұрын
Ich fände es echt gut wenn du noch zusammenfassungen zu den tutorial-reihen hinzufügen könntest
@AniProGuy4 жыл бұрын
Hey, danke für das tolle Video! Spricht deiner Meinung nach eigentlich etwas dagegen, Variablen mit einen _ zu schreiben? Also z.B. myVar einfach so zu schreiben: my_var?
@ProgrammierenStarten4 жыл бұрын
Nein da spricht nichts dagegen! :) Man sollte sich aber für einen Stil entscheiden und den dann auch nutzen! :)
@AniProGuy4 жыл бұрын
@@ProgrammierenStarten Genau das denke ich ^^ Gefühlt verwenden aber alle, die ich kenne, die erste Variante. Außer unsere Profs, die benutzen meist den Unterstrich.
@Supergeckos10004 жыл бұрын
@@AniProGuy Je nach Programmiersprache gibt es Konventionen (die man natürlich nicht einhalten *muss*) C(++), Rust, Python sind snake_case C# und Javascript sind camelCase und PascalCase. HTML/CSS Klassen sind z.B. kebab-case.
@cyberpanda88134 жыл бұрын
@@ProgrammierenStarten @AniProGuy Naja ok, hast du Recht aber, der Stil sollte dann schon der Sprache entsprechend geeignet sein, oder so wie es deine Firma später will. Also PEP 8 anstelle für Python bei Go Code zu verwenden wäre etwas sinnlos alleine schon wegen dem blank identifier _ ginge dann die ganze Integrität flöten 😂 allgemein sag ich aber auch wie viele andere. Schreibe für heute, designe für Morgen. So dass es in Zukunft gut lesbar ist. Kann ja vorkommen daß man länger nicht am Code war.
@campercat53424 жыл бұрын
Später in einem Entwickler Team entscheidet ihr euch für conventions. Wir nutzten ganz normal camelcase und keine _
@loldumm70544 жыл бұрын
Ich werde euch meinem IT Lehrer vorschlagen für den Unterricht
@ProgrammierenStarten4 жыл бұрын
Freut uns sehr :)
@themalicraft9794 жыл бұрын
Beim 1. Punkt: Man könnte schon sagen, dass das Speichern eines Buches zum Buch-Management gehört.
@matthias24474 жыл бұрын
Ja. Daher sind die Prinzipien nur Empfehlungen, keine Vorgaben. Theorie und Praxis liegen im Kontext von Clean Code teilweise weit auseinander. Insbesondere das SRP erlaubt sehr viel Interpretation-Spielraum...
@ghize83474 жыл бұрын
Ich habe hier auch keinen "Fehler" gesehen und konnte das Beispiel auch nicht nachvollziehen.
@yosialin25834 жыл бұрын
Lieber Janek, Ich habe dir eine Mail und eine Nachricht per Facebook mit meinen Fragen geschickt. Ist Sie bei euch angekommen? Würde mich über eine Antwort sehr freuen und kaufe auch die Kurse
@ProgrammierenStarten4 жыл бұрын
Haben auf Facebook geantwortet :D
@denizesen80 Жыл бұрын
LOL, beim Dependency Inversion Principle hast du den Term Backend und Frontend wohl vertauscht :P Frontend ist doch meistens in JavaScript und Backend in Java bzw C# :) aber egal das Video ist trotzdem einsame Spitze
@Knittely4 жыл бұрын
Prinzip 1 und 2 widersprechen sich doch schon bei deinen Beispielen? Nehmen wir an du willst nicht Bücher sondern Kreis und Rechteck in einer Datei speichern: Dann soll laut Prinzip 1 saveToFile() nicht Teil von Kreis oder Rechteck sein, aber laut Prinzip 2 sollen saveToFile nicht in Persistence gelöst werden, weil ansonsten muss ich jedes Mal beim einfügen einer neuen Form Persistence ebenfalls anpassen.
@semanticparser28773 жыл бұрын
Ich denke, man könnte das Vermeiden von "saveToFile" auf das Handling von Schreibprozessen und Dateisystem beziehen. Das reine Serialisieren des Objekts könnte man doch als Teil des Objekts betrachten, oder? So hätte man die "serialize()"-Funktion in der Klasse, aber die "writeFile"-Aufgabe in einer Extraklasse.
@derSeega3 жыл бұрын
Das ist die wichtigste Lektion bei Clean Code "Du wirst es nicht allen Recht machen" und nach nem halben Jahr ließt du deinen clean code und denkst dir "das hätte man auch anders machen können" Ist halt nur eine Richtlinie. Man muss die vorgaben für sich selbst Gewichten.
@tomhuebner614 Жыл бұрын
@@derSeega Aber sorgt das nicht letztendlich wieder für eine uneinheitliche Vorgehensweise? Das widerspricht der Zielsetzung der SOLID-Prinzipien doch. Oder hab ich da was nicht richtig verstanden? Bin mir nicht sicher.
@MarkusBurrer3 жыл бұрын
Man merkt aber deutlich daß diese SOLID Design Prinzipien vor allem für OOP gebraucht werden. In der funktionalen Programmierung hat man die Probleme erst gar nicht
@derSeega3 жыл бұрын
Wenn man keine Klassen hat bringt SOLID natürlich nichts :) Dafür neigt funktionale Programmierung noch viel mehr zu unendlichkomplizierten pipes/lambdas/anonyme funktionen. Dort spielt dann erfahrungsgemäß "Don't repeat yourself" eine größere Rolle
@MNFire-b3i4 жыл бұрын
Auf deinem Thumbnail steht "Desgin" xD
@ProgrammierenStarten4 жыл бұрын
Haha ups! Danke für den Hinweis, habs geändert! 😂
@heda43414 жыл бұрын
danke dafür
@ProgrammierenStarten4 жыл бұрын
gerne :)
@lukass16044 жыл бұрын
Zusammengefasst: *BENUTZT INTERFACES*
@Mikecodes-kr8uo4 жыл бұрын
lol, das sind dann die Leute die 500 zeilen Code und 50 Files erzeugen was einderer in 20 Zeilen und 1 File schreibt. Wer nicht grad am nächsten Windows arbeitet sollte in erster Linie darauf achten dass der nächste Entwickler sich schnell zurecht findet. Die meisteen Entwickler übertreiben es einfach...
@dietergrawe11874 жыл бұрын
Beim Code für das Interface Segregatin Priciple wird sofort ein CleanCode Prinzip verletzt : sinnvolle VariablenNamen ! Ich habe eine ganze Weile gebraucht, bis ich gemerkt habe, dass ICharacter nichts mit der Manipulation von char´s zu tun hat. Für Spiele-Entwickler mag das ja ersichtlich sein, aber nur für diesen Kreis.
Zum Thema liskov: Kann man sagen, das liskov Prinzip ist verletzt wenn die “is-a” Bedingung nicht auf beiden Seiten erfüllt ist? Rectangle is a square Aber Square is not a rectangle -> liskov verletzt Reptil is- a Schildkröte Schildkröte is-a Reptil -> liskov erfüllt ?