[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Anfangsbuchstaben in Großbuchstaben ändern [OT]



Am Montag 14 August 2006 00:46 schrieb Bjoern Schliessmann:
> Funktionen sind aber in Java beispielsweise keine Objekte.

Es gibt in Java auch gar keine Funktionen. Die Dinger heißen in Java 
Methoden und gehören untrennbar zur Klasse.

> Ja, in Java kann man es sich so einfach machen, da dort nur
> Klasseninstanzen Objekte sind ... ;)

Das ist eigentlich wenn man Corba und ähnliches was noch pre OOP ist 
ausklammert die gängige Definition von Objekt im Zusammenhang mit 
Programmiersprachen.

> Hast du dich nie gefragt, warum man in Java schreiben muss
>
> int a = 5;

int genießt Wertesemantik. Einem int kann man keinen Zeiger zuweisen.

> aber bei Objekten
>
> Integer a = new Integer(5);

einer Referenzvariable kann man nur Referenzen zuweisen. Das ist völlig 
Analog zu C++.

> In C++ geht beides, und man kann sich aussuchen wo und wie man das
> Objekt haben möchte.
>
> int a1 = 5;
> int& a2 = new int(5);

Da vergleichst Du Äpfel mit Birnen. Die erster Version ist analog zu 
Java. Ein gewöhnlicher int. Das zweite geht so nicht (wie Andreas ja 
schon angemerkt hat) da müsste eine Pointervariable stehen. Pointer 
gibt es in Java aber nicht, ergo geht das auch nicht.

> string b1("Honk");
> string& b2 = new string("Honk");

Hier sieht das genau anders herum aus. Die erste Variante erzeugt eine 
Objektvariable in Wertesemantik. Das geht in Java nicht. Das zweite 
einen Pointer auf ein Objekt (In Java eine Referenz). Aus 
Analogiegründen verwendet man in Java dann dieselbe Syntax wie in C++.

> In Java ist das "new" IMHO völlig überflüssig und macht die Sprache
> uneinheitlich.

Das ist offensichtlich falsch.

> Was sind denn die Stärken der Sprache Java? Dass Operatorüberladung
> und Mehrfachvererbung verboten sind?

Ob Mehrfachvererbung (von Klassen) ein Feature ist ist sehr umstritten. 
Sicher ist, das Mehrfachvererbung einen ganzen Batzen von 
Konsistenzproblemen , Schwierigkeiten für die statische Typsicherheit 
und dynamische Bindung mit sich bringt.

> Dass jede Klasse zwangsweise in eine eigene Datei muss?

Das ist für mich durchaus ein Feature. So finde ich eine Klasse auch in 
einem Projekt, das ich nicht selbst geschrieben habe schnell und 
zuverlässig.

> Dass jeder Anfänger auf die CLASSPATH-Geschichte reinfällt? :)

Welche CLASSPATH-Geschichte? Wenn Du die Tatsache meinst, das die VM 
gerne wissen mag wo die Klassen liegen... das ist gut dokumentiert. 
Welche Umgebungsvariablen jetzt für welchen Compile, Link und Execute 
Schritt wirklich nötig sind habe ich noch nicht verstanden und auch 
leider noch nicht in der Doku gefunden, also setzte ich halt alle...

> Für mich ist Java ein kastriertes C++.

In Java hat man den prozeduralen Teil abgeschnitten, der die 
Abwärtskompatibilität zu C darstellt und Dinge wie Pointerarithmetik 
und Mehrfachvererbung, die z.B die statische Typsicherheit gefährden, 
weggelassen.

> Vielleicht sehe ich auch nur die verborgenen Vorteile dieser Sprache
> nicht, also wenn jemandem welche einfallen, nur her damit.

Java ist gut zu überschauen. Insbesondere durch die Einschränkungen ist 
der Code IMHO wesentlich besser zu lesen als C++. Das Konzept ist 
tatsächlich Objektorientiert und es gibt eine Standardisierte 
Klassenbibliothek. Und es gibt sicher noch mehr. (Klar es gibt auch 
schwächen, sonst würde ich für meine Diplomarbeit wohl auch lieber auf 
Java zurückgreifen...)

> Vorteil von Java als Plattform ist sicher die Portabilität und die
> Möglichkeit der Benutzung auf WWW-Seiten. Das hat aber mit der
> Sprache selbst nichts zu tun.

Das stimmt so nicht. Pointerarithmetik z.B. kann auf unterschiedlichen 
Plattformen durchaus zu unterschiedlichen Ergebnissen führen. Ein Grund 
warum M$ in .net managed Code verbietet Pointerarithmetik zu betreiben.

Gruß Chris

-- 
A: because it distrupts the normal process of thought
Q: why is top posting frowned upon



Reply to: