Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]

2006-08-15 Diskussionsfäden Jochen Schulz
Mario 'BitKoenig' Holbe:
 Bjoern Schliessmann [EMAIL PROTECTED] wrote:

  Rein objektorientiert finde ich aber eigentlich nur Lisp. Nicht,
 
 Lisp ist funktional. Objektorientiert ist SmallTalk.

Im Prinzip ja[tm].

Du kannst Dir aber mit Lisp eine bessere OO-Simulation bauen, als mit
den meisten prozeduralen Sprachen. Siehe CLOS:
http://www.lisp.org/table/objects.htm

Schließlich sind in Lisp alle vordefinierten Datentypen first class
objects.

J.
-- 
I want to keep my skin looking good but I believe all computers do the
same job.
[Agree]   [Disagree]
 http://www.slowlydownward.com/NODATA/data_enter2.html


signature.asc
Description: Digital signature


Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]

2006-08-14 Diskussionsfäden Andreas Pakulat
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.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]

2006-08-14 Diskussionsfäden Andreas Pakulat
On 14.08.06 15:22:44, Christian Frommeyer wrote:
 Am Montag 14 August 2006 14:39 schrieb Bjoern Schliessmann:
   Das ist eigentlich wenn man Corba und ähnliches was noch pre OOP
   ist ausklammert die gängige Definition von Objekt im Zusammenhang
   mit Programmiersprachen.
 
  In der Informatik ist es IIRC weiter gefasst.
 
 Je nach Zusammenhang ja. In der OOP nein.

Das kommt dann doch stark auf die Programmiersprache an.

   int genießt Wertesemantik. Einem int kann man keinen Zeiger
   zuweisen.
 
  Warum nicht? In Python geht's.
 
 Weil ein int ein int ist und eben kein Zeiger.

Ein int soll ja auch kein Zeiger sein, ein int soll einfach nur ein
Objekt sein und kein Wert.

 Das sowas in Script-Sprachen oft geht ist ein Performance hack,

Wohl kaum, es duerfte deutlich einfacher sein einen int als Wert zu
implementieren als als Objekt.

 der zugunsten von Lesbarkeit und Programmierkomfort auf Eindeutigkeit
 und statische Typsicherheit verzichtet.

Irgendwie ist das Bloedsinn. Objekte vom Typ Integer sind doch auch
sicher. int, bool, byte und Co in Java sind einfach nur Convenience
Typen, damit die faulen Entwickler nicht immer 

Integer i = new Integer(5);

Schreiben muessen. Mehr Sinn gibts da IMHO nicht.

  In den hunderten Dateien. Naja, ich gruppiere meine Klassen lieber,
  damit finde ich sie besser.
 
 Dafür gibt es in Java Packages.

Und was machst du wenn du 100 Klassen hast die in ein Package gehoeren?
;-)

Andreas

-- 
Never reveal your best argument.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]

2006-08-14 Diskussionsfäden Jochen Schulz
Bjoern Schliessmann:
 Christian Frommeyer wrote:
 
  Es gibt in Java auch gar keine Funktionen. Die Dinger heißen in
  Java Methoden und gehören untrennbar zur Klasse.
 
 Definitionssache, IMHO sind Methoden Funktionen.

Naja, das kommt halt darauf an, woher man kommt. Blöcke herumreichen
zu können ist auf jeden Fall eine super Sache, egal wie man sie nennt.
Den Ansatz von Ruby finde ich auch ganz schick. Da ist es normal, Blöcke
literal als Parameter hinzuschreiben (so sind Schleifen und Bedingungen
implementiert, ganz eng an Smalltalk).

  int genießt Wertesemantik. Einem int kann man keinen Zeiger
  zuweisen.
 
 Warum nicht? In Python geht's.

Irrtum Deinerseits. Einem int kannst Du in Python gar nichts zuweisen.
Du kannst nur Objekte an Namen binden. Objekte haben einen Typ, Namen
nicht. Das ist ja gerade der Unterschied zu Java. 

  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.
 
 In den hunderten Dateien. Naja, ich gruppiere meine Klassen lieber,
 damit finde ich sie besser.

Das ist IMHO auch eine Frage, die sich nicht allgemein für alle Sprachen
beantworten läßt. In Java stört mich das nicht allzusehr, da Klassen
tendenziell sowieso länger sind und viel stärker und strenger zur
Strukturierung eingesetzt werden. Da reicht mir hier und da eine
klassenlokale Klasse. In Python wäre das ein echter Klotz am Bein.

J.
-- 
When standing at the top of beachy head I find the rocks below very
attractive.
[Agree]   [Disagree]
 http://www.slowlydownward.com/NODATA/data_enter2.html


signature.asc
Description: Digital signature


Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]

2006-08-14 Diskussionsfäden Andreas Pakulat
On 14.08.06 15:34:51, Christian Frommeyer wrote:
 Am Montag 14 August 2006 15:14 schrieb Andreas Pakulat:
  On 14.08.06 10:24:36, Christian Frommeyer wrote:
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.
 
 Mit dem gleichen Argument kann man das in C++ auch behaupten.

Jaein, in C++ hat new eine spezielle Aufgabe, naemlich ein neues Objekt
auf dem Heap zu erzeugen. In Java werden Objekte sowieso _immer_ auf dem
Heap erzeugt und demzufolge faellt diese Aufgabe von new flach. Es ist
einfach nur syntaktischer Zucker um moeglichst aehnlich zu C++ zu sein.

  Dafuer hat man bis 1.5 gebraucht um statische Typsicherheit in
  Containern zu gewaehrleisten ;-)
 
 Wenn man Typsicherheit bei expliziten Casts fordert (und das tut man, 
 wenn man behauptet die alten Container wären nicht Typsicher) dann ist 
 Java auch mit 1.5 nicht Typsicher, denn auch da kann man sich mit 
 expliziten Casts ins Bein schießen. 

?? Du hast das wesentliche weggeschnitten, ich bezog mich auf statische
Typsicherheit der Containerklassen. Die gabs nicht bis 1.5.

Was mir bei Containern noch einfaellt: Wieso schmeisst man die ganzen
Werttypen nicht weg? Man kann diese in keiner Weise erweitern und ihr
einziger Zweck ist es C++ Programmieren etwas bekanntes zu
praesentieren. Dies passiert aber auf Kosten der Objektorientiertheit
und Konsistenz. Viele Funktionen in Java arbeiten mit diesen Wertetypen,
stanstatt mit Objekten, andererseits kann man Werte aber nicht in
Container tun hier muss immer erst umkonvertiert werden in ein Objekt.
Irgendwie finde ich das halbherzig umgesetzt, dann lieber ganz auf
Wertetypen verzichten (womit dann auch new verschwinden koennte ;-)

Andreas

-- 
Don't let your mind wander -- it's too little to be let out alone.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]

2006-08-14 Diskussionsfäden Jochen Schulz
Christian Frommeyer:
 Am Montag 14 August 2006 15:14 schrieb Andreas Pakulat:
 
  Dafuer hat man bis 1.5 gebraucht um statische Typsicherheit in
  Containern zu gewaehrleisten ;-)
 
 Wenn man Typsicherheit bei expliziten Casts fordert (und das tut man, 
 wenn man behauptet die alten Container wären nicht Typsicher) dann ist 
 Java auch mit 1.5 nicht Typsicher, denn auch da kann man sich mit 
 expliziten Casts ins Bein schießen. 

Soweit ich das verstanden habe, ist das mit den Generics sowieso nur
Hokuspokus. Stichwort type erasure. Das Ganze funktioniert nur, weil
der Compiler die nötigen Casts für den Programmierer macht und die
Typparameter aus dem Code löscht. Sonst ginge auch sowas:

class CT {
T var;
C(T var) {
super();
this.var = var;
}

String foo() {
// hier knallts, auch wenn ich nichts vom dem 
// Typ fordere, was nicht auch Object leisten kann
T myT = T();
return T.toString();
}
}


J.
-- 
Television advertisements are the apothesis of twentieth century culture.
[Agree]   [Disagree]
 http://www.slowlydownward.com/NODATA/data_enter2.html


signature.asc
Description: Digital signature


Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]

2006-08-14 Diskussionsfäden Andreas Pakulat
On 14.08.06 16:21:46, Christian Frommeyer wrote:
 Am Montag 14 August 2006 16:06 schrieb Andreas Pakulat:
  ?? Du hast das wesentliche weggeschnitten, ich bezog mich auf
  statische Typsicherheit der Containerklassen. Die gabs nicht bis 1.5.
 
 In die fertigen Container konnte man bis Java 1.5 nur Objekte von Typ 
 Object tun und hat auch nur solche Objekte zurückbekommen. Soweit war 
 das statisch Typsicher, denn jedes Java-Objekt /ist ein/ Object. Die 
 Tatsache, das man sich dann an der Stelle mit einem expliziten Cast ins 
 Bein schießen kann hat mit der Typsicherheit nichts zu tun.

Doch, Typsicherheit soll helfen sich an diesen Stellen nicht ins Bein zu
schiessen. Bei konsequenter Anwendung der Generics kann man sich nicht
mehr ins Bein schiessen weil der Compiler das abfangen kann (Leider geht
das z.B. noch nicht in JSP's, weil die Server noch nicht soweit sind). 

  Was mir bei Containern noch einfaellt: Wieso schmeisst man die ganzen
  Werttypen nicht weg? Man kann diese in keiner Weise erweitern und ihr
  einziger Zweck ist es C++ Programmieren etwas bekanntes zu
  praesentieren.
 
 AFAIR ist das wesentliche Argument für die Werttypen der schnellere 
 Zugriff, da ja eine Indirektion wegfällt.

Stimmt allerdings.

Andreas

-- 
You will feel hungry again in another hour.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]

2006-08-14 Diskussionsfäden Bjoern Schliessmann
Jochen Schulz wrote:
 Bjoern Schliessmann:
 Christian Frommeyer wrote:

 int genießt Wertesemantik. Einem int kann man keinen Zeiger
 zuweisen.
 
 Warum nicht? In Python geht's.
 
 Irrtum Deinerseits. Einem int kannst Du in Python gar nichts
 zuweisen. Du kannst nur Objekte an Namen binden. Objekte haben
 einen Typ, Namen nicht. Das ist ja gerade der Unterschied zu Java.

Missverständnis. Ich dachte daran, dass bei einer Python-Zuweisung
wie

a = 1

das a ein Zeiger auf ein int-Objekt mit dem Wert 1 ist.

Grüße,


Björn

-- 
BOFH excuse #73:

Daemons did it


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]

2006-08-13 Diskussionsfäden Andreas Pakulat
On 13.08.06 09:39:12, Andreas Juch wrote:
 Bjoern Schliessmann wrote:
  Wie wär's damit:
  
  def wortanfangGrossmachen(text):
  woerter = text.split()
  woerterMitGrossbuchstaben = []
  for wort in woerter:
  woerterMitGrossbuchstaben.append(wort.capitalize())
  return  .join(woerterMitGrossbuchstaben)
 
 Python, oder?

Jupp ist es.

  Java, würg.
 
 Bis auf die Klammern, Semikola und die fehlende Capitalize Funktion in
 java.lang.String sehen die Programme aber ziemlich ähnlich aus ;-)

Das kann man aendern :-)

def doIt(text):
return  .join([wort.capitalize() for wort in text.split()])

Mit

import sys
for line in sys.stdin.readlines:
  print  .join([wort.capitalize() for wort in line.split()])

Ist das ganze dann direkt nutzbar. Liest von stdin und schreibt auf
stdout.

Andreas

-- 
Be free and open and breezy!  Enjoy!  Things won't get any better so
get used to it.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)