Re: Anfangsbuchstaben in Gr oßbuchstaben ändern [OT]
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]
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]
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]
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]
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]
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]
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]
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]
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)