OOP Wie macht man das am besten OO?

Ocean15

Aktives Mitglied
Guten Tag liebe Java Menschen!

Ich habe ein kleines OOP Problem.
Und zwar Programmiere momentan ein eigenes Log System für mein Programm (Ich weiß es gibt schon fertige, aber ich wollts halt mal selber machen :bae:). Nun habe ich mich etwas an der Standardklasse von Sun orientiert und mir ne Klasse Logger und Formatter gemacht. Soweit funktioniert alles super. Formatter is abstract und hat "getHead", "getTail" und "format(Level, message, Millisekunden)" als Methoden. für den Log. Der Logger hat Methoden wie severe und info usw.

Soooo... soweit sollte es hoffentlich verständlich sein. Um es auf den Punkt zu bringen:
Jetzt hab ich z.B. einen speziellen Formatter für HttpRequest Responses. Da bräuchte ich "format(HttpResponse)" oder "format(Level, Message, Millisekunden, URI, RequestTyp)". An sich ja kein Ding ne neue Methode zu machen aber mich stört das irgendwie OO technisch. Der HttpRequestFormatter is ja ein spezieller Formatter nur kann der Logger ja auf einmal nicht mehr wissen, dass er ne andere format Methode nutzen soll. Und die alte format Methode muss ja implementiert werden (is ja abstract) obwohl sie total Sinn frei ist.

Ich find es einfach irgendwie unschön so aber ich weiß nicht wie ich das OO schön lösen kann. Jemand irgendwelche Ideen?

LG
Ocean15

PS.: Hoffe man kann es einigermaßen verstehen :oops:
 
Zuletzt bearbeitet:

Bananabert

Bekanntes Mitglied
Deinen zweiten Block solltest du eventuell nochmal verständlicher schreiben.

Das was ich verstanden habe ist, du willst keine weiteren Methoden erstellen für deine Formate ?
 

Ocean15

Aktives Mitglied
Naja es ist ja so:

Ich habe eine Klasse Formatter (abstract). Diese wird vom Logger genutzt (z.B. die format Methode). Der Logger kennt halt die Standardmethoden des Formatters. Jetzt habe ich aber eine Unterklasse von Formatter (HttpResponseFormatter) die ja rein logisch ein Formatter ist (Also extends Formatter). Nun brauch ich aber bei dem besonderen Formatter andere Parameter in der format Methode. Wie mach ich das OO am sinnvollsten? Ich meine es is ja immer noch ein Formatter. Ein besonderer. Nur kann ich den Standard Formatter nicht wirklich drauf anwenden.
Klar.. Programmiertechnisch einfach ne neue Klasse die nicht erbt. Ist ja ganz einfach, aber das erscheint mit OO irgendwie total schlecht.
 

Harry Kane

Top Contributor
Für mich enthält dein Post zu wenig greifbare Informationen, um einen Ratschlag geben zu können.
Was ich an Informationen nützlich fände:
1. Liste aller Methode deiner Formatter-Klasse inkl. korrekter Angabe der Parametertypen. Deine fühere Angabe "format(Level, message, Millisekunden)" ist mir zu ungenau. Von welchem Typ ist "message"? Ein String oder was komplexeres?
2. Liste der Methoden deiner Logger-Klasse.
3. Einen konkreten Fall, wie du deine Kombination aus Logger und Formatter verwendest.

Wenn du einen Log-Eintrag zu einem HttpResponse erzeugen möchtest, musst du dazu ja irgendeine Methode von vermutlich deinem Logger aufrufen, der dann wiederum eine Methode vom Formatter aufruft. Entweder du extrahierst vor diesem Methodenaufruf alle relevanten Informationen aus deinem HttpResponse, packst sie in einen String, und rufst damit den Logger auf, oder du denkst dir für dein Message-Objekt etwas komplexeres aus als ein einfacher String, z. B. eine Klasse Message mit den Unterklassen StringMessage und HttpResponseMessage, rufst damit den Logger auf, der das Message-Objekt an den Formatter weiterleitet, und prüfst dann in der format-Methode von HttpResponseFormatter, ob das übergebene Objekt vom Typ HttpResponseMessage ist, und wenn ja, holst dir die benötigten Information wie z. B. den HttpResponse daraus.
 

Ocean15

Aktives Mitglied
Okay.

Also der Formatter hat "String getHead()", "String getTail()", "String format(String message, Level Level, long millis)". (Level ist das Log Level, den auch der Standard Sun Logger nutzt.

Der Logger hat eigentlich nur die Log Methoden wie "void severe(String message)", "void info(String message)" usw.
In den Methoden passiert immer das gleich: "log = log + formatter.format(message, Level.SEVERE, System.currentTimeMillis())", wobei "log" ein einfacher String ist.

Beim Konstruktor vom Logger wird einmal "log = formatter.getHead()" aufgerufen.
Das ist auch eigentlich schon das ganze Prinzip dahinter.

Nur brauche ich dann z.B. einen besonderen Logger mit "void severe(HttpResponse)" und dazu einen entsprechenden Formatter mit "String format(HttpResponse)". Einfach einen String aus dem HttpResponse basteln geht auch nicht, da die einzelnen Werte vom HttpResponse im Formatter in verschiedene Tabellen (Die Formatter erzeugen teilweise Html Code) eingetragen werden. Da kann ich nicht einfach aus dem HttpResponse ein String mit den Infos machen, ohne das formatieren direkt zu übernehmen.

Wie gesagt an sich kann ich das natürlich ganz einfach programmieren mit 2 neuen Klassen, aber das wäre ja dann nicht wirklich OO. Aber der Ansatz mit dem Message Objekt klingt nicht schlecht. Ich denk mal drüber nach, ob sich das realisieren lässt.

PS.: Grats zum 100. Top ;)
 
Zuletzt bearbeitet:

Ruzmanz

Top Contributor
Du kannst auch ein FormatMessage mitschicken.
Java:
format(FormatMessage message) {
  if(message instanceof HttpFormatMessage) {

  }
}

-> HttpFormatMessage extends FormatMessage
-> NormalFormatmessage extends FormatMessage

Davon abgesehen, sehe ich dein Problem nicht ... Wenn jemand lediglich "format(Level, Message, Millisekunden)" aufruft, dann möchte er evtl. nur ganz normal formatieren oder du bietest eine Alternative an ...

format(Level, Message, Millisekunden) => format(Level, Message, Millisekunden, null, null) bzw. super.format(Level, Message, Millisekunden)
format(HttpResponse) => format(Level, Message, Millisekunden, URI, RequestTyp)
format(Level, Message, Millisekunden, URI, RequestTyp)
 

Ocean15

Aktives Mitglied
Habs jetz via LogMessage klasse gelöst, danke. Peinlich dass ich da nicht selbst drauf gekommen bin.
Naja Danke für die Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Jemand einen Tipp wie man ein Javafx-Hintergrund "dynamisch" macht Allgemeine Java-Themen 3
N Division macht Probleme Allgemeine Java-Themen 14
berserkerdq2 IJVM, ich tue auf meinen Stack 100 und 120 rein, danach subtrahiere ich, macht die Maschine 100-120 oder 120-100? Allgemeine Java-Themen 8
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
M 4 Gewinnt KI macht nicht, was sie soll.. Allgemeine Java-Themen 1
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
WetWer Was bedeutet/macht ein Exit-Code Allgemeine Java-Themen 1
Thallius Macht das Sinn? Allgemeine Java-Themen 30
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
X Was macht folgender Code!? Allgemeine Java-Themen 6
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
M Google App Engine macht Probleme Allgemeine Java-Themen 4
GilbertGrape Warum macht man "if(true)" Allgemeine Java-Themen 18
C Klassen Was macht diese Java-Mathe-Klasse? Allgemeine Java-Themen 2
S Erste Schritte Exception beendet Schleife nicht - Methode macht trotz throw weiter? Allgemeine Java-Themen 9
S Javadoc 3d einbinden macht probleme Allgemeine Java-Themen 10
B Unix-Timestamp > Date macht Probleme. Allgemeine Java-Themen 3
T Ausdruck mit pdfBox macht Probleme Allgemeine Java-Themen 2
B jar File macht probleme wegen einer Methode! Allgemeine Java-Themen 5
alderwaran jaxb xsd schema, min/maxoccurs macht was? Allgemeine Java-Themen 7
S AWT StringBuffer macht nicht, was ich erwarte Allgemeine Java-Themen 2
E Timer class macht einfach garnichts :/ Allgemeine Java-Themen 6
N Vokabelprogramm - Wer macht mit? Allgemeine Java-Themen 58
S Anschauen was der Compiler macht..? Allgemeine Java-Themen 5
bj99 ImageIO.write() macht Probleme Allgemeine Java-Themen 7
I Was macht static { ... } ? Allgemeine Java-Themen 8
N Für welche Art von Berechnungen macht JCUDA Sinn? Allgemeine Java-Themen 12
P JMF macht mich verrückt Allgemeine Java-Themen 3
R PDF Formular mit JPod ausfüllen macht Probleme Allgemeine Java-Themen 4
G Wie kriegt Klasse2 die Info, was Klassse1 gerade "macht Allgemeine Java-Themen 7
Escorter was macht createHorizontalGlue() Allgemeine Java-Themen 2
T Serialisierung: Wie macht RMI das so schnell? Allgemeine Java-Themen 14
J Was macht dieser Code? Allgemeine Java-Themen 13
S Was macht der Java-Verifier? Allgemeine Java-Themen 4
T Problem, warum macht der das so(finde kein titel.) Allgemeine Java-Themen 3
I Irre Website-Wie macht man sowas? Allgemeine Java-Themen 6
U if Abfrage macht etwas falsch Allgemeine Java-Themen 2
G javadoc macht probleme Allgemeine Java-Themen 2
A equals() macht nicht, was es soll Allgemeine Java-Themen 4
B Vergleichen von arrays macht Probleme Allgemeine Java-Themen 2
M JBoss macht Probleme Allgemeine Java-Themen 6
P Wie macht Sun Gewinn mit Java? Allgemeine Java-Themen 3
Maximum '.' in String ersetzen macht Schwierigkeiten Allgemeine Java-Themen 2
T Klassen samt Methoden aus Jar-Archiv laden macht Problem Allgemeine Java-Themen 9
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
ZH1896ZH Best Practice Wie erstellt man am besten einen Kalender? Allgemeine Java-Themen 3
W Updates - wie am Besten verteilten? Allgemeine Java-Themen 9
L Schlüsselworte Wie kann ich am Besten ein LocalDate zwischen Anfangs und EndDate checken Allgemeine Java-Themen 10
MiMa Wie sollte am besten ein Datum gespeichert werden? Allgemeine Java-Themen 8
B Wie kann ich meine Pläne am besten umsetzen? Allgemeine Java-Themen 2
D Best Practice Login-Daten: Wie am besten abrufen? Allgemeine Java-Themen 6
Thallius Wie verstecke ich meinen private Key am besten im Code? Allgemeine Java-Themen 10
A Datentypen Generics: Wie am besten auf Typparameter zugreifen Allgemeine Java-Themen 2
Joew0815 Best Practice Wie am besten Plugin-System erstellen? Allgemeine Java-Themen 12
M interaktive grafische Oberfläche - wie mach ich das am Besten Allgemeine Java-Themen 4
S Wie reicht man am Besten Zahlenwerte von der GUI zum Code, der damit arbeitet? Allgemeine Java-Themen 10
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
B Wie Duration am besten abbilden Allgemeine Java-Themen 2
N unzählige Werte am besten speichern(?) Allgemeine Java-Themen 2
A Wie am besten Daten auslagern um heap zu schonen Allgemeine Java-Themen 4
X JDK updaten - wie am besten vorgehen? Allgemeine Java-Themen 5
L Wie kann man dieses "Table" Problem am besten löse Allgemeine Java-Themen 8
N Wie sortiere ich String Arrays am besten Allgemeine Java-Themen 5
D wie gliedere ich dieses programm am besten? dringend! Allgemeine Java-Themen 3
E Code für Tabulator (am besten ne komplette Übersicht) Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben