Objekte und String

  • Hallo,

    ich hab hier Zwei Definitionen und die erste ist mir klar aber die zweite verstehe ich nicht??
    Wie kann denn eine Zeichenkette als Objekt bahandelt werden???


    1. Klasse ist die Menge von Objekten, die eine gemeinsame Struktur haben und ein gemeinsames Verhalten zeigen.
    Objekte sind Instanzen einer oder mehrerer Klassen; Klassen existieren üblicherweise zur Übersetzungszeit, während Objekte erst zur Laufzeit erzeugt und gelöscht werden.


    2. Die Zeichenketten werden als Objekte einer speziellen Klasse namens „String“ behandelt

    Danke :thumb:
    ciao :zwinker:

  • Naja eine Zeichenkette als Array von chars ist kein Objekt, aber die Klasse String beinhaltet so ein Array als Member-Variable. Und alle Klassen erben von der Super-Ober-Klasse "Object". Die zweite Definition ist nicht ganz richtig, denn Zeichenketten sind eigentlich keine Objekte sondern ein Array von einem primitiven Datentyp. Ok ich hab mich wiederholt, aber ich glaub du hast mich verstanden =)

    640K ought to be enough for anybody. :eek2:

  • Klassen sind "Blaupausen", von denen man Objekte erstellen kann. Zum
    Beispiel kannst du von der Klasse String ein Object instanzieren.
    Da man aber in der Regel sehr viel mit solchen Zeichenketten arbeitet,
    gibt es in vielen Programmiersprachen eine spezielle Syntax, mit der
    man Strings instanzieren kann.

    PHP
    String einString = new String();


    ist also genau das selbe wie

    PHP
    String nochEinString = "";


    was sich auch leicht nachpruefen laesst:

    PHP
    boolean beideStringsGleichenSich = einString.equals(nochEinString) // => true


    Alles klar?

    Uebrigens: Klassen sind meist selbst wieder nur Objekte, die von
    anderen Klassen instanziert wurden.

  • Zitat von a9bejo


    Uebrigens: Klassen sind uebrigens meist selbst wieder nur Objekte, die von
    anderen Klassen instanziert wurden.

    häh? Du meinst wohl eine Instanz einer Klasse ist ein Objekt.

    640K ought to be enough for anybody. :eek2:

  • Zitat von Swoncen

    häh? Du meinst wohl eine Instanz einer Klasse ist ein Objekt.

    Ich meine das Klassen selbst wieder nur Instanzen von anderen Klassen
    sind. Die Klasse java.lang.String ist zum Beispiel eine Instanz der
    Klasse java.lang.Class :

    PHP
    System.out.println(String.class.getClass().getName()); //=> java.lang.Class

    die in Java verwendete Art, Klassen zu definieren:

    PHP
    class A extends B{}

    ist also selbst nur wieder eine besondere Syntax der Instanzierung,
    damit es es der Programmierer leichter hat. Aehnlich wie das schon bei
    "" und new String() der Fall war.

  • Zitat von a9bejo

    Ich meine das Klassen selbst wieder nur Instanzen von anderen Klassen sind.

    Da du ein 534-Student bist... hast du das dem Puntigam in OOP auch so erzählt (so du OOP schon gemacht hast)? Spricht man da nicht eher von Vererbung bzw. Untertypbeziehungen?

  • Zitat von Paulchen

    Da du ein 534-Student bist... hast du das dem Puntigam in OOP auch so erzählt (so du OOP schon gemacht hast)? Spricht man da nicht eher von Vererbung bzw. Untertypbeziehungen?

    Ich habe OOP angerechnet bekommen. Ich mache aber gerade
    Fortgeschrittene OOP beim Puntigam und bin ein Fan vom "Kaiser
    Franz". :)

    In dem obenstehenden Code kommt tatsaechlich keine Vererbung, sondern
    Instanzierung zum tragen:


    Die Klasse java.lang.String ist eine Subklasse der Klasse
    java.lang.Object, aber eine Instanz der Klasse java.lang.Class!


    Zitat von Java API


    Instances of the class Class represent classes and interfaces in a running Java application.

    -- http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html

    Java ist leider nicht gerade ein Musterbeispiel fuer eine Objektorientierte Programmiersprache, weshalb diese Dinge oft nicht so offensichtlich sind wie sie es eigentlich sein sollten.

  • Zitat von Paulchen

    Spricht man da nicht eher von Vererbung bzw. Untertypbeziehungen?

    Wovon er spricht wird "Klassenobjekt" genannt. Jede Klasse an sich ist auch wieder ein Objekt. Mit dem Wort "static" definiert man in Java nichts anderes als eine Instanzmethode oder -variable des Klassenobjekts. Das ist einer der großen Unterschiede zwischen dynamischen Programmiersprachen wie Java, Smalltalk oder Objective C und statischen wie C++, welche soetwas nicht besitzen. Java versteckt das nur hinter C++-artigem Syntax, um es den Programmierern leichter zu machen.

    Ein Klassenobjekt kann genauso verwendet werden wie jedes andere Objekt, nur gibts halt genau eines davon.

    Dieses Konzept hat im übrigen zur Folge, dass es auch für Klassenobjekte normale Konstruktoren gibt, die automatisch beim Reinladen der Klasse in den RAM aufgerufen werden, was sehr praktisch ist, wenn man Dinge initialisieren muss, die für sämtliche Instanzen der Klasse wichtig sind (zB Bilder reinladen oder sowas).

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Zitat von Swoncen

    Ein weiterer Grund warum ich kein Java verwend..

    Weil es mehr kann und generell viel cooler ist als C++?

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Was heißt es kann mehr? Es macht die Arbeit für den Programmierer leichter, aber wo sind bitte die Pointer? Java ist ausserdem extrem langsam. Ich sag nicht, dass es für jeden schlecht ist, aber für die Dinge, die ich mache sind genau die Punkte wichtig. Wenn du's cool findest, dann wirst du schon deinen Grund haben, aber ich mags nicht =)

    640K ought to be enough for anybody. :eek2:

  • Zitat von Swoncen

    Was heißt es kann mehr?

    object introspection, class objects, RMI, sandbox...

    Zitat

    wo sind bitte die Pointer?

    Pointer sind schon aus rein sicherheitstechnischen Gründen nicht möglich (siehe Java-Applets, Java Webstart). Du darfst nicht Zugriff auf ein Objekt haben, das außerhalb deines Einflussbereichs steht.

    Zitat

    Java ist ausserdem extrem langsam.

    Wenn man ein Gerücht ständig wiederholt, wirds dadurch auch net wahrer...

    Zitat

    für die Dinge, die ich mache sind genau die Punkte wichtig.

    Du hast nur einen genannt (Performance).

    Zitat

    Wenn du's cool findest, dann wirst du schon deinen Grund haben, aber ich mags nicht =)

    Ich finds cool, weils eine der wenigen populären dynamischen OO-Programmiersprachen ist. Ich persönlich zieh eigentlich Objective C vor, aber das ist wohl vielen Programmierern zu wenig C++-artig.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Um so abstrakter die Programmiersprache, umso mehr kann sich der
    Programmierer auf die Problemlösung konzentrieren.

    Um so maschinennäher die Programmiersprache, umso performanter kann
    die Software laufen.

    In den meisten Anwendungen steht die Problemlösung stark im
    Vordergrund. Daher gilt im Allgemeinen: Um so abstrakter die Sprache,
    umso effizienter die Software.

    In den Fällen, in denen die gewünschte Performance mit der
    abstrakten Sprache tatsächlich nicht erreicht werden kann, zahlt sich
    OptimizeLater meist eher aus, als dass man gleich
    das gesamte Projekt in einer low level Sprache umsetzt:

  • oje, das wird jetzt wieder eine java vs. c++ vs. assembler-diskussion.
    und weil wir gerade dabei sind:

    Code
    .DATA
    HelloWorld db "Hello world.$"
    .CODE
    Start: lea dx, HelloWorld
    mov ah, 09h
    int 21h
    xor al, al
    mov ah, 4Ch
    int 21h
    END Start
  • @ hal: Du behauptest also, dass Java genauso performant ist wie C/C++? Das nehm ich mal an, sonst würdest du nicht sagen, dass es ein Gerücht ist. Aber allein, dass es eine Interpretersprache ist, isses schon langsamer. Warum sollte das ein Gerücht sein?

    640K ought to be enough for anybody. :eek2:

  • Zitat von Swoncen

    @ hal: Du behauptest also, dass Java genauso performant ist wie C/C++?

    Also das hat hal aber so nicht gesagt!

    Ich lese:

    Zitat von Swoncen


    Java ist ausserdem extrem langsam.

    Zitat von hal


    Wenn man ein Gerücht ständig wiederholt, wirds dadurch auch net wahrer...

    Von "genauso performant wie C++" hat er also nicht gesprochen. "Extrem
    langsam" interpretiere ich als "Inakzeptabel langsam fuer moderne
    Anwendungen", und das ist tatsaechlich ein Geruecht aus den 90er
    Jahren.

    Zitat von Swoncen


    Aber allein, dass es eine Interpretersprache ist, isses schon langsamer.

    Jede und keine Sprache wird interpretiert. C++ wird in den
    Maschinencode der Maschine uebersetzt, Java wird in den Maschinencode
    der (virtuellen) Maschine uebersetzt.

    Zudem wird dank JIT-Compilern ein Grossteil des Bytecodes mittlerweile
    direkt in "tatsaechlichen" Maschinencode uebersetzt.

  • Zitat von Swoncen

    @ hal: Du behauptest also, dass Java genauso performant ist wie C/C++?

    Grundsätzlich hab ich das wie schon bemerkt nicht behauptet, allerdings ist Java in pathetischen Spezialfällen tatsächlich schneller als C++ (enge Schleifen ohne I/O), weil der JIT-Compiler laufzeitdatenabhängig optimieren kann, was bei C++ nicht möglich ist.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Zitat von a9bejo

    Java ist leider nicht gerade ein Musterbeispiel fuer eine Objektorientierte Programmiersprache, weshalb diese Dinge oft nicht so offensichtlich sind wie sie es eigentlich sein sollten.


    Ach, das passt schon. Reflection ist halt eine eigene Sache. Dadurch, dass Klassen auch nur Instanzen einer "Metaklasse" sind, hat Java eine Idee von Smalltalk übernommen.

    Java ist sogar ein sehr gutes Beispiel für eine OO Sprache.

    Leider hat es die Syntax und einige "dumme" Features von C++ übernommen (genauso wie C#), dafür andere sinnvolle nicht. Viele Möglichkeiten für große Verbesserungen wurden einfach übersehen (z.b. kann man ohne weiteres aus den primitiven Typen Klassen machen, ohne Performanceverlust; Eiffel zeigt, wie's geht). Generizität hätte auch vom Anfang an drin sein sollen. Leider ist es unsauber und typunsicher implementiert, damit man die JVM nicht updaten musste.

    Aber schon allein Garbage Collection ist eine sehr wichtige Neuerung gegenüber C++. Im Allgemeinen ist der Performanceverlust dadurch nur 10% gegenüber manueller Speicherverwaltung. Das ist locker verschmerzbar, weil man dadurch viele Bugs einfach nicht einbauen kann.

    Schade, dass (trotz allen Gegenbekundungen) Java immer noch für Programme mit User Interfaces saulangsam ist und Swing so eine Krücke (in jeder Hinsicht) ist. Beides merkt man sofort, sobald man ein Java Programm vor sich hat. Ersteres sogar schon beim Starten :)

    Dipper dipper dii dipper dii dipper dii duuu

  • Zitat von mdk

    und weil wir gerade dabei sind:

    Code
    .DATA
    HelloWorld db "Hello world.$"
    .CODE
    Start: lea dx, HelloWorld
    mov ah, 09h
    int 21h
    xor al, al
    mov ah, 4Ch
    int 21h
    END Start


    Funktioniert das außerhalb von DOS noch? So was habe ich schon lange nicht mehr gesehen :)

    Dipper dipper dii dipper dii dipper dii duuu

  • Zitat


    Du behauptest also, dass Java genauso performant ist wie C/C++? Das nehm ich mal an, sonst würdest du nicht sagen, dass es ein Gerücht ist. Aber allein, dass es eine Interpretersprache ist, isses schon langsamer. Warum sollte das ein Gerücht sein?

    Tja, definert mal was es bedeutet, eine Sprache X sei performanter als eine Sprache Y.

    Eine Dimension dieser Schwachsinnigkeit ist, daß Sprachen keine Performance haben können.
    Höchstens konkrete Compiler/Interpreter dieser Sprachen.

    C++ sei also performanter als Java ?

    Welcher C++ Compiler mit welchen Optimierungen/Einstellungen ?
    Welche JVM mit welchen Einstellungen ?

    Selbst wenn das fixiert ist, kann ich problemlos einen derart miesen C++ Compiler schreiben, der garantiert schlechter als jede jemals exisitierende JVM ist.

    Daraus folgt -> Java ist performanter als C++ !?
    Der umgekehrte Fall kann genauso konstruiert werden, also
    gilt beides ?! Häh ?

    Gut, wenn das geklärt ist: Wie sieht's denn aus, wenn Programm A performanter in Sprache X ist, aber Programm B performanter in Y ? Ist dann X performanter oder Y ?
    Oder vielleicht umgekehrt ?
    Warum A und B und nicht C ?
    Zählt man alle möglichen Programme ?
    Wenn geklärt ist, wie man das macht, bleibt noch die Killerfrage: bildet man das arithmetische Mittel oder gar das Geometrische ?

    Die höchste Ebene dieser Schwachsinnigkeit kommt aber erst: Es ist völlig irrelevant ;)
    (Ok, nicht in allen Fällen, schon klar, aber viel öfter als
    man denkt)

    Selbst wenn man - wie auch immer - zum Ergebnis kommt Sprache X sei performanter als Y.

    Stichwort Optimize-later bzw ganz allgemein -> Design Patterns "weise" verweden -> sprachunabhängig extrem wichtig ...
    Überlebenswichtig für einen guten Software-Engineer würd ich mal sagen aus eigener leidvoller Erfahrung.
    Ebenso auf dieser Liga -> Algorithmen-Design, das ist noch völlig sprachunabhänig ..

    Weniger Abstrakt: Man nehme einen schlechten Programmierer, der eine Aufgabe in einer "schnellen" Sprache lösen soll, und einen Guten, der die selbe Aufgabe in einer "langsamen" Programmiersprache lösen soll.

    Frageeeeee: Wird das Programm in der schnellen Programmiersprache schneller/besser als das in der Langsamen ?

    ----------------------------------------

    Nimmt man einigermassen moderne C++ Compiler und JVMs, so ist der Performacegap weitaus geringer als meist angenommen.


    z.B hier zu nachzulesen

    edit:


    oder auch hier

    ganz nett, auch wenn memory-usage vergleich imho krass sinnlos ist ...


    End of Blablababla ... :)


    Trading for a living [equities,futures,forex]

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!