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

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



On 14.08.06 10:24:36, Christian Frommeyer wrote:
> Am Montag 14 August 2006 00:46 schrieb Bjoern Schliessmann:
> > 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.

Und genau das ist der Unterschied, der zentrale Unterschied: Java kennt
Werte und Referenzen auf Objekte. Python nur letzteres. 

> > aber bei Objekten
> >
> > Integer a = new Integer(5);
> 
> einer Referenzvariable kann man nur Referenzen zuweisen. Das ist völlig 
> Analog zu C++.

Jaein, in C++ kannst du nicht

string& a = new string("foo");

machen. IIRC kann man Referenzen in C++ nur ueber die Uebergabe an
Funktionen/Methoden bekommen (bin grad zu faul ins Buch/Web zu schauen).

> > 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.
 
Nunja, von der Bedeutung her sind C++ Pointer und Java Referenzen schon
vergleichbar.

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

Nein ist es nicht. Du hast selbst festgestellt dass int ein Wert ist und
nicht mittels new erzeugt werden kann. Objekte hingegen koennen nicht
einfach als Werte erzeugt werden. Java muesste also nur pruefen ob der
Typ einer Variablen ein Werttyp oder eine Klasse ist. 

Ich gebe dir aber Recht das es durch new einfacher ist zu sehen wann
eine Referenz und wann ein Wert erzeugt wird.

> > 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 

Letztere gibts in Python ja nicht, Problem geloest ;-)

> und dynamische Bindung mit sich bringt.

Python ruft die passende Methode der 1. Klasse auf, falls eine Methode
in mehreren Klassen existiert. Die anderen Methoden muss man dann
explizit aufrufen wenn man sie benoetigt.

> > 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.

Wie schon gesagt gilt das ja nur fuer public Klassen. Ansonsten kann man
ueber sowas vortrefflich streiten. IMHO ist es aber grade bei sehr
kurzen/trivialen Klassen eher hinderlich.

> > 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.

Dafuer hat man bis 1.5 gebraucht um statische Typsicherheit in
Containern zu gewaehrleisten ;-)

> > 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.

Wenn man vernuenftigen C++ Code schreibt kann man auch den gut lesen.
Was die anderen Dinge angeht: C++ ist auch objektorientiert und es gibt
auch fuer C++ eine standadisierte Klassenbibliothek (natuerlich nicht so
umfangreich wie die von Java).

Andreas

-- 
You will be reincarnated as a toad; and you will be much happier.



Reply to: