was ist der vorteil vom Builder-design pattern?

Und noch eine Frage - ich möchte einen einfachen webbrowser programmieren. Ich bin momentan so weit, dass ich eine URI parse und in protokoll (http/s), authority, port und path zerlege. welche library für einen http/s request sollte ich verwenden? es gibt z.B. verschiedene Möglichkeiten für einen http request.
 
warum genau ist es vorteilhaft, das festlegen von den attributen eines objektes (also die erzeugung) von der repräsentation (also ein instanziiertes objekt?) zu trennen?
Das ist nicht der Vorteil sondern der Weg es zu tun.

Das Ziel eines Builder Patterns ist es einen hinreichend komplexen Sachverhalt z.B. ein Haus mit 4 Wänden, Fenstern, Dach, Tür, so zu abstrahieren, dass es "einfacher" wird das Haus zusammen zu bauen.
In der Regel müssen dafür mehrere komplexe Objekte in der richtigen Reihenfolge zusammengefügt werden.

Damit ich nun nicht jedes einzelne Objekt mit allen Abhänigkeiten zusammenbauen muss, nutze ich einen Builder. Der Builder stellt Methoden bereit, die es erlauben das Haus zusammen zu bauen, ohne Kentniss der verwendeten Klassen und der Beziehungen untereinander zu haben.

Richtig spannend wird das, wenn einzelene Komponenten in Abhängigkeit der aktuellen Implementierung variieren können. (Siehe Spring Boot Security).

Edit: Im übrigen ist das Thema auch gut beschrieben: https://www.google.com/search?client=firefox-b-d&q=Example+Builder+pattern

Vielleicht kann man da sich einlesen und dann eine präzisere Frage stellen.

Und noch eine Frage - ich möchte einen einfachen webbrowser programmieren. Ich bin momentan so weit, dass ich eine URI parse und in protokoll (http/s), authority, port und path zerlege. welche library für einen http/s request sollte ich verwenden? es gibt z.B. verschiedene Möglichkeiten für einen http request.
(Offtopic: Es wäre durchaus ratsam hierfür ein weiteres Thema zu eröffnen, da dies mit der Ursprungsfrage scheinbar gar nichts gemein hat)

Uff... Das ist aber ein herber Sprung von "ich möchte verstehen wie ein Builder Pattern funktioniert" zu: Ich baue einen Browser mit Java nach.

Fraglich ist, wieso du die URL überhaupt zerlegen möchtest.? Was möchtest du damit erreichen?

Ich schlage vor eine entsprechende Wissensbasis aufzubauen. Und die Zusammenhänge ein wenig besser zu verstehen. Wenn ich mir URLConnection ansehe, dann übergebe ich da eine vollständige URL unabhängig davon, wie diese aufgebaut ist.

Denke hier liegt auch nicht die herausforderung. Die Herausforderung wird sein die HTML Inhalte zu visualisieren. Hier wird man auf bereits vorhandene Implementierungen zugreifen, um JavaScript, HTML und CSS vernünftig überein zu bekommen. Und dann bleibt für die eigene Leistung nur noch die Sachen zusammen zufügen...
 
Ich habe mir gerade das oberste Ergebnis durchgelesen https://refactoring.guru/design-patterns/builder und es ist recht gut erklärt, Danke!.
Naja, es ist schon etwas Zeit vergangen seitdem ich Softwaretechnik hatte und ich habe kaum mit Design Patterns gearbeitet.
Fraglich ist, wieso du die URL überhaupt zerlegen möchtest.? Was möchtest du damit erreichen?
Ich wollte die Klasse Socket nutzen, um eine http(s) verbindung aufzubauen. Im Nachhinein habe ich gemerkt, dass es recht low level ist und einfacher geht, da wollte ich wissen, welche Klasse(n) ich verwenden sollte.

Genau, ich werde wahrscheinlich einfach fertige Implementierungen benutzen und größtenteils nur den Austausch an Schnittstellen programmieren. Ich denke aber es ist trotzdem sehr hilfreich um 1. mit Java zu arbeiten 2. um zu verstehen wie ein browser funktioniert wenn auch nicht im Detail.
 
Okay, habt ihr denn einen Vorschlag welches Software System, das oft benutzt wird, ich in Java implementieren kann um es zu verstehen und zu üben? es stehen noch zur Auswahl: Interpreter mit VM, Compiler, OS, Datenbank und dafür wollte ich andere Sprachen benutzen.

Und kann ich nicht einfach auf hardware nähere Libraries zugreifen, um den browser zu schreiben und ein bisschen mehr selber zu machen?

https://browser.engineering/ hat ca. 3000 LOC ich finde das ist ein gutes Projekt für den Anfang.
 
Warum nicht mit etwas kleinerem Anfangen? z.B. ein simples Memory Spiel (wenn es GUI sein soll). Oder einen simplen Chat der über TCP/IP kommunziert?
 
Es ist schon eine Weile her, aber ich habe mal einen Chat TCP/IP Chat mit Datenbank über eine Kommandozeile geschrieben.
Ich traue mir etwas größere Projekte zu und denke mit dem Begleitmaterial das ich habe sollte es klappen.
 
Also generell sollte fast alles möglich sein. Betriebssystem wird etwas problematischer, aber selbst da könnte man - mit gewissen Abstrichen - einiges machen / überlegen.

Und kann ich nicht einfach auf hardware nähere Libraries zugreifen, um den browser zu schreiben und ein bisschen mehr selber zu machen?
Natürlich kannst Du da auch einiges machen. JNI, JNA wären da so zwei Stichworte.

Ansonsten kannst Du selbst den Aufbau ansehen. Java ist mit dem Open JDK Open Source. JavaFX ist mit openjfx Open Source. Damit stehen Dir die Sourcen zur Verfügung. Du kannst also schauen, was die WebView macht, wie da die diversen Aufgaben unterteilt sind u.s.w.

Zu den meisten Punkten gibt es Open Source Projekte, die zeigen, wie es gehen könnte. Interpreter gibt es diverse auch in Java. Datenbanken gibt es diverse in Java. Compiler habe ich gerade kein Projekt im Hinterkopf, aber der Java Compiler wäre da ggf. ein Beispiel.

Aber ich frage. mich derzeit, was der Sinn hinter diesem Thread ist. Denn wenn Du so eine Aufgabe hast, dann solltest Du da strukturiert heran gehen. Ein erster Ansatz wäre, einfach einmal mit zu jeder Option eine Grobplanung zu versuchen. Also einfach mal paar Minuten nachdenken, was hinter der Aufgabe steckt, was man da entwickeln könnte. Dann hast Du eine erste Idee. Und dann kannst Du die Aufgabe, die Dich interessiert, im Detail planen.

Und wenn es der WebBrowser sein soll: Dann solltest Du die grobe Planung doch bereits haben! Und dann sollte die Aufgabe auch im Detail bekannt sein: Was ist denn die genaue Aufgabe? Was soll da entstehen? Ein kompletter (moderner) Webbrowser ist aus meiner Sicht schlicht zu komplex für eine Studienaufgabe. Und ich weiss nicht, was da denn der Anspruch ist. Der Webbrowser umfasst aus meiner Sicht einiges:
a) Die Kommunikation - hier ist also http und https wichtig. Hier auf eine fertige Library setzen: Denkbar, aber ist das sinnvoll? Das muss man im Detail bedenken.
b) Das was man zurück bekommt, muss man auswerten. Das fängt beim Status an und geht dann über diverse Encoding u.s.w.
c) Darstellung - da muss man sich überlegen, wie das angezeigt werden soll. Grafische Darstellung ist recht komplex und erfordert recht viele Berechnungen. Das kann jedes Studienprojekt sprengen fürchte ich.
d) JavaScript hast Du erwähnt - Das wäre dann bereits eine eigenständige Aufgabe....

Also wird schnell deutlich: Gewisse Dinge nimmt man als Library oder man lässt es weg. WebBrowser könnte also ein reiner Textbasierter Browser sein. Dann läge der Schwerpunkt auf http, TLS/SSL würde man fertige Lösungen nehmen. Inhalte wären auszuwerten (um ggf. mehr nachzuladen).
Und dann wird am Ende einfach alles auf Textbasis ausgegeben.

Ggf. baut man den Inhalt auch als XML auf (also repariert sozusagen das HTML) um dann ein Transform zu haben das dann verwendet werden kann. Wäre evtl. auch eine Idee.

Aber hier ist halt wichtig:
  • Die Planung und die Überlegungen müssen von Dir kommen. Die Dozenten / Professoren sind doch nicht blöd und dieses Forum wird auch von Google und Co indiziert.
  • Wir kennen die genauen Anforderungen nicht - das was wir "meinen" kann also von den Anforderungen abweichen.
  • Egal was Du machst: Du musst auch eine Recherche durchführen zu diversen Punkten. Da ist der Umgang mit Suchmaschinen wichtig. Alleine schon, damit Du die entsprechenden Themen auch vertiefst. Du nutzt eine Library für http/https und hast dann einen Webbrowser geschrieben ohne etwas zu den Protokollen zu sagen? Wird vermutlich nicht die Anforderungen erfüllen.
 

Zurück
Oben