Seite 1 von 1

Bin ich der einzige... (Javatypen-Diskussion)

Verfasst: Donnerstag 26. März 2009, 17:21
von BlackVivi
...für den sich das Typensystem von Java meistens anfühlt wie'ne Kette mit'n großen Ball dran oO'? Ich erwische mich selbst immer dabei, wenn ich Java programmier, es irgendwie... dynamisch machen zu wollen. Mir fehlt soviel... Die einfachsten Sachen sind wie... ach, ich kann es ganz schwierig beschreiben.

Auf jedenfall erwisch ich mich immer selber dabei, mehr Python in Java zu programmieren als tatsächlich Java oO' Kennt ihr solche Probleme auch?

Verfasst: Donnerstag 26. März 2009, 17:51
von Leonidas
Absolut, immer wenn ich irgendwas implementiere bin ich später damit beschäftigt das Typsystem zufrieden zu bekommen. Schon allein die Möglichkeit die Typen via Type Inference herauszubekommen sind in Scala schon mal ein großer Vorteil.

Ich denke mir dann immer dass ich lieber idiomatisches Java schreiben sollte statt Python-Java (so wie einige Leute eben Java-Python schreiben) aber dann nervt mich das so sehr dass ich mir irgendwas anderes zum Spielen suchen muss, etwas das nicht gar so frustrierend ist.

Verfasst: Donnerstag 26. März 2009, 17:58
von BlackVivi
Leonidas hat geschrieben:Absolut, immer wenn ich irgendwas implementiere bin ich später damit beschäftigt das Typsystem zufrieden zu bekommen. Schon allein die Möglichkeit die Typen via Type Inference herauszubekommen sind in Scala schon mal ein großer Vorteil.
Ich meine... ich implementier 2 Klassen... beide erben von etwas. Ich pack all das Zeug unter dieser Klasse, in der ich geerbt habe, in eine Collection. Dann durchlauf ich die später und prüfe, welche Art von Objekt ich antreffe... Kann mir nicht vorstellen, dass das alzu Javalike ist oO'' Außerdem hass ich es, übertrieben OOP zu machen >___>

Ich könnt jedesmal ausrasten, wenn ich die Projekte von anderen sehe... 389247892437 Klassen... davon 20 Interfaces, in denen NICHTS... absolut GAR NICHTS außer statischen Variablen steht. WIESO??... Wenn ich mir'n Programm überlege, komm ich nicht einmal auf den Gedanken, das zu erstellen.

Verfasst: Donnerstag 26. März 2009, 19:03
von rayo
Hi

Also immer wenn ich Java programmiere fallen mir die einfachsten Dinge einfach schwer.

Z.B. Dateihandling (BufferedReader und was weis ich ineinander Verschachtelt) oder einen String und einen Integer in einen Tuple schmeissen.

Wie BlackVivi schon erwähnt hat, die vielen Klassen stören mich auch extrem. Nur für einen Callback gleich ein Interface und eine Klasse erstellen finde ich eifach doof.

Gruss

Verfasst: Donnerstag 26. März 2009, 19:16
von EyDu
BlackVivi hat geschrieben:Ich meine... ich implementier 2 Klassen... beide erben von etwas. Ich pack all das Zeug unter dieser Klasse, in der ich geerbt habe, in eine Collection. Dann durchlauf ich die später und prüfe, welche Art von Objekt ich antreffe... Kann mir nicht vorstellen, dass das alzu Javalike ist oO'' Außerdem hass ich es, übertrieben OOP zu machen >___>
Ich weiss nicht, ob ich deine Beschreibung jetzt richtig verstanden habe, aber das wäre in jeder Sprache ein schlechtes Design. Du erbst ja gerade von einer Basisklasse, damit die Objekte selber entscheiden, was sie tun, oder was mit ihnen gemacht werden soll.

Bei den seltenen Gelegenheiten in denen ich mal in Java programmieren muss, habe ich mir angewöhnt fast alles static zu machen und Klassen als Strukturen zu benutzen. Das fühlt sich dann beinahe an wie C :roll: Wobei man natürlich erwähnen sollte,dass es sich dabei nicht um Produktivcode handelt.

Verfasst: Donnerstag 26. März 2009, 19:19
von BlackVivi
EyDu hat geschrieben:
BlackVivi hat geschrieben:Ich meine... ich implementier 2 Klassen... beide erben von etwas. Ich pack all das Zeug unter dieser Klasse, in der ich geerbt habe, in eine Collection. Dann durchlauf ich die später und prüfe, welche Art von Objekt ich antreffe... Kann mir nicht vorstellen, dass das alzu Javalike ist oO'' Außerdem hass ich es, übertrieben OOP zu machen >___>
Ich weiss nicht, ob ich deine Beschreibung jetzt richtig verstanden habe, aber das wäre in jeder Sprache ein schlechtes Design. Du erbst ja gerade von einer Basisklasse, damit die Objekte selber entscheiden, was sie tun, oder was mit ihnen gemacht werden soll.
Das ganze hat aber nichts mit ihrer Struktur zu tun, was gemacht werden soll. Es soll danach was mit einer anderen Struktur passieren, abhängig davon auf was für ein Objekt ich treffe in meiner Collection.

Verfasst: Donnerstag 26. März 2009, 19:31
von EyDu
Um das zu erreichen gibst du der Basisklasse eine Methode "doSomething", welche als Parameter die Strukturen bekommt, welche von den abgeleiteten Klassen bearbeitet werden sollen. Iterierst du nun über die Collection rufst du auf deren Elementen die Methode "doSomething(some, structs, here)" auf. Jetzt entscheidet jedes Objekt, was es mit den Daten machen soll.

Verfasst: Donnerstag 26. März 2009, 19:34
von BlackVivi
EyDu hat geschrieben:Um das zu erreichen gibst du der Basisklasse eine Methode "doSomething", welche als Parameter die Strukturen bekommt, welche von den abgeleiteten Klassen bearbeitet werden sollen. Iterierst du nun über die Collection rufst du auf deren Elementen die Methode "doSomething(some, structs, here)" auf. Jetzt entscheidet jedes Objekt, was es mit den Daten machen soll.
Eigentlich hab ich mir das auch überlegt, aber ich hab keinen Einfluss auf die Klasse, von der ich erb... Also müsst ich'n interface erstellen, was nur das beinhaltet... außerdem wäre diese doSomething nahezu vollkommen unabhängig von sich selbst, sie würde nichts "von sich" wirklich brauchen. Ich wollte nur für so eine Kleinigkeit eine komplett neues Interface entwerfen und eine Methode implementieren, die im Endeffekt wenig mit den Klassen selbst zu tun hat, sondern eher mit dem Programm drumherum...

In Python könnt ich das viel einfacher lösen, da müsst ich gar nicht über die Probleme nachdenken, ich würd die viel eher abwürgen =/

Verfasst: Donnerstag 26. März 2009, 19:55
von EyDu
Du könntest als Alternative eine abstrakte Klasse A mit der "doSomething"-Methode erstellen, welche von der eigentlichen Basisklasse erbt. Deine eigenen Klassen implementieren dann A. Wenn das so ohne weiteres nicht möglich ist, dann kann es natürlich ganz gruselig werden...

Das doSomething unabhängig von sich selbst ist, ist an sich nichts schlechtes. Du musst dessen Klasse lediglich als Abastraktion eines Algorithmus sehen. Das von mir beschriebene Verfahren ist ein typisches Entwurfsmuster, dessen Namen ich natürlich vergessen habe ^^

Für Kleinigkeiten ist es natürlich recht viel Aufwand.

Verfasst: Freitag 27. März 2009, 14:14
von sma
Wenn du Rom bist, treib's wie die Römer (oder so ähnlich). Will sagen, du musst dich schon auf das duale Typsystem von Java mit primitiven Datentypen und Objekten einlassen wollen. Ansonsten nimm Scala. Interface-Klassen, die nur Konstanten enthalten, sind übrigens ein Überbleibsel aus der Zeit, als es noch keine Enum-Klassen gab und sollten heute nicht mehr benutzt werden. Statische (veränderbare) Variablen können Interface-Klassen übrigens NICHT definieren. "Übertrieben OO" zu hassen ist natürlich ein ganz persönliches Problem. Ich habe (von Smalltalk kommend) lange Zeit gehasst, etwas anders als ausschließlich OO zu machen. Da war (und ist) Java echt ärmlich. Auch hier ist Scala (viele Jahre später) besser.

Positiv bei Java und IO ist IMHO zu bemerken, dass die die notwendige Unterscheidung zwischen Bytes und Zeichen und deren Kodierungen als Byte-Folgen von Anfang an richtig gemacht haben. Streams bzw. Reader/Writer zu schachteln finde ich eigentlich recht elegant. Es fehlt nur ein Satz von statisches Hilfsfunktionen so für die üblichen Dinge wie das komplette Einlesen einer Datei. Das kommt dabei heraus, wenn man zwar total generische Klassenbibliotheken zu entwickeln weiß, diese aber nicht auch benutzt und so nicht erkennt, was die häufigen Einsatzfälle sind.

Der Tipp von EyDu, alles statisch zu machen, ist natürlich total kontraproduktiv. Eigentlich sollte man "static" aus der Sprache verbannen - wie es - erwähnte ich diese Sprache schon - Scala gemacht hat.

Ansonsten: Ja, IMHO eignet sich Java nur für größere Projekte. Für den ad-hoc-Dreizeiler bin ich mit Python schneller fertig als ich eine der (an sonsten sehr guten) Java-IDEs auch nur gestartet habe.

Stefan

Verfasst: Freitag 27. März 2009, 15:12
von EyDu
sma hat geschrieben:Der Tipp von EyDu, alles statisch zu machen, ist natürlich total kontraproduktiv. Eigentlich sollte man "static" aus der Sprache verbannen - wie es - erwähnte ich diese Sprache schon - Scala gemacht hat.
Das war jetzt kein ernst gemeinter Tipp, den man wirklich anwenden sollte. So kann man aber auch kleinen unwichtigen Aufgaben, welche kein oder nur wenig OOP benötigen, noch etwas in Java abgewinnen.

Verfasst: Freitag 27. März 2009, 21:55
von BlackJack
Für die "üblichen Sachen" finde ich für Java `org.apache.commons` nützlich. Zum Beispiel `FileUtil` und `IOUtil aus `org.apache.commons.io` mit jeweils einem ganzen Sack voller statischer Methoden.

Verfasst: Montag 30. März 2009, 15:06
von Panke
Thema bitte in 'Die anonymen Javaianer' umbennen.

Ich bin übrigens Panke - und ich hab ein Problem mit Java.

Verfasst: Montag 30. März 2009, 15:43
von derdon
Panke hat geschrieben:Thema bitte in 'Die anonymen Javaianer' umbennen.

Ich bin übrigens Panke - und ich hab ein Problem mit Java.
Ich nicht - ich nehme Python :lol:

Verfasst: Montag 30. März 2009, 15:59
von BlackVivi
BlackJack hat geschrieben:Für die "üblichen Sachen" finde ich für Java `org.apache.commons` nützlich. Zum Beispiel `FileUtil` und `IOUtil aus `org.apache.commons.io` mit jeweils einem ganzen Sack voller statischer Methoden.
O_O Danke für den Tip!