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

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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

Beitragvon BlackVivi » Donnerstag 26. März 2009, 17:21

...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?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 26. März 2009, 17:51

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Donnerstag 26. März 2009, 17:58

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.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Donnerstag 26. März 2009, 19:03

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
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 26. März 2009, 19:16

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Donnerstag 26. März 2009, 19:19

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.
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 26. März 2009, 19:31

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Donnerstag 26. März 2009, 19:34

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 =/
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 26. März 2009, 19:55

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.
Das Leben ist wie ein Tennisball.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Freitag 27. März 2009, 14:14

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
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Freitag 27. März 2009, 15:12

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.
Das Leben ist wie ein Tennisball.
BlackJack

Beitragvon BlackJack » Freitag 27. März 2009, 21:55

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.
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Beitragvon Panke » Montag 30. März 2009, 15:06

Thema bitte in 'Die anonymen Javaianer' umbennen.

Ich bin übrigens Panke - und ich hab ein Problem mit Java.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Montag 30. März 2009, 15:43

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:
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Montag 30. März 2009, 15:59

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!

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder