# Java Mächtigkeit verlierend?



## Feeder (14. Sep 2014)

Hey, ich persönlich kann ja nur Java und sie ist sozugagen meine Mutterprache im programmieren. Jedoch beginne ich nun komplexere Programme zu schreiben und habe das Gefühl das Java mittlerweile weniger kann als sie sollte. 
Es spielgelt sich in der Swing wieder. Ich kann zwar mit:


```
implements ButtonModell  extends JComponent
```
 
einen Button der rund ist  machen, aber ganz erhrlich das ist doch nicht das.

Wieso macht man nicht eine AbstarctJComponet und sowas.
Zudem bei den Threads:

th.stop() Depcrated
stattdessen th.interrupt was den Thread nur indirekt schließt.

Kann das sein, das Java schwächer ist als sie in dieser Zeit sein sollte....


----------



## JavaMeister (14. Sep 2014)

Also ich kann schon mal sagen, dass deine Threads auch weniger können, als sie sollten. 

Denn erstens zeigt dein Thread, dass Du deine Muttersprache nicht beherrscht, zweitens bevor du überhaupt zu solchen Aussagen kommst, viel mehr "komplexere" Programme schreiben solltest.

1. Siehe: Component (Java Platform SE 7 )

Ist genau das, was ich von deiner "AbstractJComponent" erwarten würde. Ob das stimmt, kann ich natürlich nicht sagen, da ich deine Anforderungen nicht kenne, noch den Sinn, der sich hinter dieser Forderung besteht. Aber das steht ja in meinem Eingangssatz.

2. Wie indirekt schließt? - Wobei ich weiß was du meinst, aber wieso sollte das nachteilig oder "schlecht" sein?

Wenn dein Thread gerade in auf der Platte schreibt, du der Meinung bist: JETZT IST SCHLUSS. Was dann? - Deswegen soll man Threads in den Selbstmord treiben. 

Wenn diese naütlrich schlecht implementiert sind, werden sie auf jenes Interrupt nicht hören.

Aber wie gesagt: Noch viel zu lernen du musst.


----------



## Gucky (14. Sep 2014)

Das Java weniger mächtig ist, als z.B. C++ ist klar. Java ist da sehr "abgespeckt", was Java allerdings auch stark vereinfacht.

Mit Java kannst du alles programmieren, was du dir vorstellen kannst, bis auf native Dinge, wie direkte Hardwarezugriffe. Java ist also bei weitem mächtig genug.
interrupt ist, wie mein Vorredner schon sagte wesentlich besser, da du den Thread nicht beendest, egal was er grade tut, sondern du ihm sagst, er solle sich doch bitte beenden, wenn er mit seiner aktuellen Aufgabe fertig ist.


Wenn dir Swing nicht gefällt, gibt es noch AWT, JavaFX, Qt und sicher auch noch mehr. Du hast also die freie Wahl.


----------



## JavaMeister (14. Sep 2014)

> Das Java weniger mächtig ist, als z.B. C++ ist klar. Java ist da sehr "abgespeckt", was Java allerdings auch stark vereinfacht.



Die Quelle hierfür würde mich interessieren.


----------



## Gucky (14. Sep 2014)

C++ lernen und professionell anwenden, 3. Auflage.
Darin wird ausführlich beschrieben, wie man in C++ programmiert. Vergleicht man das mit Java, so erkennt man, dass Java viele Konzepte von C++ übernommen hat. Viele allerdings auch nicht. So sind Zeigerarithmetik, und direkter Hardwarezugriff nur zwei Beispiele dafür. Das Java dadurch schlechter ist, sage ich nicht. Aber Java kann weniger als C++, was ich mit geringerer Macht gleichsetze.



PS: nur weil etwas depracated ist, heißt das nicht, dass du es nicht benutzen kannst. Die Warnung kannst du abschalten und dann ist stop() eine ganz normale Methode, wie alle Anderen auch. Das ist mehr ein Hinweis denn einem Gesetz.


----------



## JavaMeister (14. Sep 2014)

> C++ lernen und professionell anwenden, 3. Auflage.
> Darin wird ausführlich beschrieben, wie man in C++ programmiert. Vergleicht man das mit Java, so erkennt man, dass Java viele Konzepte von C++ übernommen hat. Viele allerdings auch nicht. So sind Zeigerarithmetik, und direkter Hardwarezugriff nur zwei Beispiele dafür. Das Java dadurch schlechter ist, sage ich nicht. Aber Java kann weniger als C++, was ich mit geringerer Macht gleichsetze.



Also das ist keine Quelle, sondern deine Meinung. Sollte man ein wenig differenzieren.


----------



## Gucky (14. Sep 2014)

Da halte ich Differenzierung für überflüssig. Javas Funktionsumfang ist geringer und sie trägt das Korsett des JRE -> weniger Macht.

Oder zeig mir doch begründet eine gegenteilige Meinung, wenn du schon meinst, man solle differenzieren.


----------



## JavaMeister (15. Sep 2014)

Eine Quelle würde explizit die von dir genachte aussage beinhalten. Und dann ggf. Schlüssig herleiten. Denn weniger Funktionen würde erstmal nicht weniger mächtig sein. 

Die von dir angesprochene zeigerarithmetik ist in Java nicht vorhanden. Die Frage ist, ob das die Mächtigkeit der Sprache einschränkt. Ich programmiere auf meinen raspberry sehr wohl Hardware nah und es gibt entsprechende vms die das auch für die Automobil brache ermöglichen. 

Daher hat es mich interessiert, ob es zu deiner persönlichen Meinung auch eine fundierte wissenschaftliche Quelle gibt.   Wie du mehrfach betont hast, kennst du dich ja noch nicht so gut aus. Die Differenzierung, die hier gemacht werden muss und das sage ich ständig ist aussagen zu treffen, weil das die eigene Meinung ist, oder eben entsprechende Aussagen der Fachliteratur. 

Du sagst etwas und der Javaanfänger nimmt es für bare münze. Und ich habe "du" geschrieben meine aber viele andere User auch. 

Auch der to hat eine Meinung. Hat eine These aufgestellt. Leider total willkürlich und nicht durchdacht. Das ist ein Problem von vielen.


----------



## Gucky (15. Sep 2014)

Fakt ist aber das Java weniger Funktionen hat, als C++, da z.B. die Zeigerarithmetik fehlt. Zeigerarithmetik ist extrem schnell aber genau das fehlt in Java.

Meiner Meinung nach sorgt das dafür, dass Java weniger mächtig ist, als C++.

So gut?


----------



## JavaMeister (15. Sep 2014)

Ich habe die Aussage nicht bestritten. Noch gesagt, dass ich damit nicht einverstanden bin. 

Es muss klar sein, und das ist es nach deinem vorherigen Post, das es sich hier um deine Meinung handelt und du dir das selber ausgedacht hast und dies erstmal nicht mit der Fachliteratur belegt werden kann. 

Ob die Aussage stimmt oder nicht weiß ich nicht. Möchte ich auch nicht wissen. Und schon gar nicht darüber Stammtischdiskussionen führen )


----------



## Joose (15. Sep 2014)

Gucky hat gesagt.:


> Zeigerarithmetik ist extrem schnell aber genau das fehlt in Java.



Aber genau das macht es einfacher Java zu lernen. Außerdem muss man sich in C++ selbst um das Freigeben von Speicher kümmern.

Und ob eine Sprache nun weniger oder mehr Funtkionen hat als eine andere sagt noch nichts über die "Mächtigkeit" aus.

Jede der Sprachen hat ihre Vor- und Nachteile.


----------



## Gucky (15. Sep 2014)

Woran würdest du denn sonst die Mächtigkeit eines Sprache festmachen, wenn nicht an Funktiosumfang?

Ich weiß, dass Java dadurch einfacher ist. Etwas dagegen habe ich auch nie gesagt. Ich sage nur, dass C++ sich eine höhere Mächtigkeit mit größerer Kompliziertheit erkauft.


----------



## Joose (15. Sep 2014)

Gucky hat gesagt.:


> Woran würdest du denn sonst die Mächtigkeit eines Sprache festmachen, wenn nicht an Funktiosumfang



Daran welche Sprache für welches Problem geeigneter ist. (da auch hier jeder seine eigene Vorlieben hat sei mal dahin gestellt)

Für eine Kundenverwaltung werde ich nicht auf C++ setzen, der Performance Unterschied nur minimal spürbar wäre (wenn überhaupt) und sich dabei keiner mit der Speicherverwaltung rumschlagen will.

Bei hoch komplexen Berechnungen wobei auch Performance gefragt ist wird man eher auf C++ setzen als auf Sprachen wie Java, C#, ...


----------



## Gucky (15. Sep 2014)

Aber es ist dennoch möglich mit C++. Und so schwer ist die Speicherverwaltung gar nicht. 

Ich bin der Meinung, C++ sei mächtiger, ihr seid der Meinung es stimme nicht und wir können uns gegenseitig nicht vom Gegenteil überzeugen.


----------



## turtle (15. Sep 2014)

Ich hoffe es handelte sich um Ironie.



> Und so schwer ist die Speicherverwaltung gar nicht.


:applaus::noe:

Na, DAS ist ja mal eine gewagte Aussage. 

Die Mühe Fehlern in der Speicherverwaltung auf die Schliche zu kommen, war mein Hauptgrund auf Java zu wechseln


----------



## Joose (15. Sep 2014)

Klar kann ich die Kundenverwaltung in jeder x beliebigen Sprache schreiben. 
Und dass die Speicherverwaltung "schwer" ist habe ich auch nirgends behauptet.

Es ging mir nur darum: Der Funktionsumfang alleine reicht nicht um zu sagen das eine Sprache mächtig ist. Bzw. ist nirgends definiert was eine Sprache mächtig macht.


----------



## Gucky (15. Sep 2014)

Sie ist schon schwerer als der Garbage Collector aber an vielen Stellen lese ich immer wieder, wie unsagbar schwer die manuelle Speicherverwaltung doch ist und es sei unmöglich sich da nicht zu vertun.

Aber ja. Ein bisschen Ironie war in der Aussage schon drin.


----------



## Feeder (15. Sep 2014)

Wer hat den gesagt das ich sie beherrsche  Ich sagte relativ behersche das heißt den Grundsyntax... Wenn wir in die Bibliotheken gehen ist schnell schluß


----------



## Ruzmanz (15. Sep 2014)

Gucky hat gesagt.:


> Fakt ist aber das Java weniger Funktionen hat, als C++, da z.B. die Zeigerarithmetik fehlt. Zeigerarithmetik ist extrem schnell aber genau das fehlt in Java.
> 
> Meiner Meinung nach sorgt das dafür, dass Java weniger mächtig ist, als C++.
> 
> So gut?



Kannst dich ja mit sun.misc.Unsafe auseinandersetzen.


----------



## lord239123 (15. Sep 2014)

Meiner Meinung nach kann man die beiden Sprachen nicht wirklich miteinander vergleichen.
C++ besitzt zwar einige Funktionen mehr, wie etwa Zeiger, aber Java ist dafür leichter zu erlernen.
Dazu machen z.B. Sachen wie der GarbageCollector oder etwa die Plattformunabhängigkeit Java zu einem mächtigen Werkzeug.
Auch einfache Anwendung gehört zumindest meiner Meinung nach zur Mächtigkeit einer Sprache dazu.

Der größte Vorteil an C++ gegenüber Java ist allerdings unbestritten die hardwarenahe Programmierung!
Dies lässt sich in Java nur über Schnittstellen zu anderen Sprachen realisieren, womit die Plattformunabhängigkeit verloren geht.


----------



## kaoZ (15. Sep 2014)

> Mit Java kannst du alles programmieren, was du dir vorstellen kannst, bis auf native Dinge, wie direkte Hardwarezugriffe



JNA, JNI wäre hier die qual der wahl wenn mich nicht alles täuscht 

Nichts ist unmöglich ...... Da wo die Vielseitigkeit aufhört fangen die API's an ;P


----------



## Gucky (15. Sep 2014)

...für die man dann allerdings nativen Code benötigt. 
Meine Aussage bezog sich direkt auf Java.


----------



## turtle (16. Sep 2014)

Wenn man nur einen Hammer hat, denkt man, dass jedes Problem ein Nagel ist.


----------

