2. anfängerfragen



  • Hallo.
    Mal zwei generelle Fragen bzgl. der Sprache Java:

    1. Kann man mit Java alles realisieren, was man mit c++ machen könnte? Oder gibts da irgendwo Grenzen?

    2. Leider ist im Java Forum kein FAQ-Sticky vorhanden. Gibt es gute Einsteigertutorials (explizit für java, Kontrollstrukturen etc. sind mir aus anderen Sprachen bekannt).

    3. Ich weiß, ob eine Sprache zukunftsorintiert ist oder nicht kann man nie beantworten und wird hier auch nicht gerne gesehen aber wird Java oft benutzt? Oder ist das so eine Sprache, die fast keiner mehr gebraucht. (wie z.b. assembler)



  • Zu 1.) Jein. Programmtechnisch ja. Das Problem sind da Betriebssystemrufe oder ähnliches wo du keine Native Java Bibliothek hast. Da musst du per JNI was bauen, was auf C bzw C++ hinaus läuft.

    2.) Da kann ich die Insel empfehlen
    http://openbook.galileocomputing.de/javainsel8/

    3.) Für Handyprogrammierung auf jedenfall. Ansonsten wirds wohl des öfteren dort verwendet wo schnelle Ergebnisse mit GUI erwartet werden und eine Plattformunabhängigkeit erforderlich ist. Aber sowas kommt ganz auf die Firmen an die solche Programme schreiben.
    Aber mal zu der Aussage "Oder ist das so eine Sprache, die fast keiner mehr gebraucht. (wie z.b. assembler)"

    Es gibt nur sehr wenige Sprachen die kaum einer mehr gebraucht. Es gibt maximal Nieschensprachen, die nur für bestimmte Zwecke eingesetzt werden. Auch der Assembler wird noch sehr oft benutzt. Nur werden keine GUI Lastigen Programme damit programmiert. Genauso ist es mit Java, C#, C++, C es kommt immer drauf an, was du machen will. Und selbst wenn du jetzt Java lernst wirst du übermorgen anforderungen finden, wo du mit deinen Wissen vorerst nicht weiterkommst weil ggf andere Bibliotheken eingesetzt werden als du kennst. In diesen Zusammenhang hilft nur, sich immer weiterbilden.



    1. was mich total nervt: es gibt kein Pointer 😃 Aber für "normale" Alltagsprogramme dürfte es egal sein.

    2. dünn: http://www.amazon.de/Grundkurs-Programmieren-Einstieg-Programmierung-Objektorientierung/dp/3446404937
      dick: http://www.amazon.de/Handbuch-Java-Programmierung-Standard-Version-DVD-ROM/dp/3827328748/ref=sr_1_1?ie=UTF8&s=books&qid=1276367268&sr=1-1

    3. schon, aber du solltest dir über die Anwendungszecke bewusst sein. Java hat ordentlich was drauf wenn's um Web geht. (siehe Java-Applets)
      Wenn du beispielsweise ein Betriebssystem programmieren willst, dann vergiss es! (und übrigens: da wird auch noch Assembler benutzt ;))
      Was in Java super ist sind die Fehlermeldungen... Durch die JVM sind die eigentlich immer gut lesbar (ich vergleiche das jetzt mit C++ wo man des öfteren einfach nur "Segmentation Fault" hat)

    Sprich: überleg dir was du coden willst und wähle dann die Programmiersprache 🙂



  • javanewbe schrieb:

    1. Kann man mit Java alles realisieren, was man mit c++ machen könnte?

    Nein, kann man nicht.
    Java ist AFAIK z.b. nicht Echtzeitfähig.

    Oder gibts da irgendwo Grenzen?

    Ja, im medizinischen Bereich ist es Verboten. Die JVM darf für so einen Einsatzeck nicht verwendet werden.
    Gleiches gilt für die Ansteuerung von Atomkraftwerken und dergleichen.
    C++ würde man in solchen Fällen IMO aber auch nicht wirklich einsetzen, dann schon eher Ada oder gleich Assembler.



  • javanewbe schrieb:

    1. Kann man mit Java alles realisieren, was man mit c++ machen könnte? Oder gibts da irgendwo Grenzen?

    Ja, es gibt Grenzen. Du hast generell weniger Möglichkeiten, auf tiefer Abstraktionsebene zu programmieren oder spezifisch zu optimieren (z.B. durch manuelle Speicherverwaltung). Sprachfeatures, die in Java fehlen, wären: Const-Correctness auf Objekt-Ebene, deterministische Destruktoren (und damit Idiome wie RAII), Mehrfachvererbung, Präprozessor, Zeigerarithmetik, Referenzen (im C++-Sinne), globale Funktionen und Variablen, unsigned -Typen, friend , Defaultparameter, Funktionszeiger. Dir stehen weniger Abstraktionsmechanismen zur Verfügung (kein Typedef, keine Operatorüberladung, keine Templates, kein ADL).

    Dafür hast du in Java Reflection, wodurch sich neue Türen zur Laufzeit öffnen. Die Sprache besitzt Garbage Collection und eine grössere Standardbibliothek (unter anderem mit GUI, Multimedia und Threads). Statt mit Wertsemantik arbeitest du meist mit Referenzsemantik. Du benutzt in Java ein anderes Modulsystem (keine Aufteilung in Implementierungs- und Headerdatei). Im Weiteren unterstützt Java Checked Exceptions, Generics (ähnlich wie Templates, allerdings weniger mächtig), Foreach-Schleifen, anonyme Klassen, umfangreiche Enums, synchronized , die Unterscheidung von class und interface , Annotations, Static Initializers, paketweite Sichtbarkeit.

    Die Philosophie beider Sprachen ist grundsätzlich verschieden. Während einem C++ sehr viele Freiheiten lässt und weitgehend das Prinzip des "zero abstraction overhead" durchzieht, werden potentiell gefährliche Operationen in Java eingedämmt und Abstraktionen gehen oft auf Kosten der Performance. Dafür hat man alle möglichen Laufzeitchecks und prinzipiell weniger Fehlerquellen. C++ erlaubt einem verschiedenste Programmierparadigmen (prozedural, objektorientiert, generisch, mit C++0x auch zunehmend funktional), während sich Java auf objektorientierte Programmierung fokussiert.


Log in to reply