Ist in Java jeder Typ ein Objekt?

Gast
Kommt drauf an was man unter "Objekt" versteht. In C++ zählt quasi alles 
als "Objekt", auch wenn es keine Member-Funktionen hat (wie int , 
pointer etc). Ist aber dann wohl nicht der klassische OOP-Begriff.
Alexander F. schrieb:
> Es gibt in Java auch primitive Datentypen (int, byte, float, double,
> ...).
> Zusätzlich gibt es für diese Typen Wrapper Klassen.
> Benötigt werden diese etwa bei der Vewendung von Maps, Sets, etc., da
> diese nur mit Objekten umgehen können.

So ist es.
Die primitive Datentypen sind eine "Aufweichung" des streng 
objektorientierten Ansatzes, der für bessere Performance und weniger 
Speicherverbrauch bei großen Datenmengen sorgt.

Dr. Sommer schrieb:
> In C++ zählt quasi alles als "Objekt"
Da gibt es genauso primitive Datentypen wie int und float, die sind auch 
keine Objekte.

Eine Sprache bei der wirklich alles Objekte sind ist meines Wissens 
Smalltalk.
Gast
Udo Schmitt schrieb:
> Da gibt es genauso primitive Datentypen wie int und float
Die heißen dort built-in Types.
> die sind auch keine Objekte.
Quelle? Nach dem C++ Standard sind das Objekte:
https://isocpp.org/files/papers/N3797.pdf S. 7 (PDF-S. 21)
> "The constructs in a C++ program create, destroy, refer to, access, and
> manipulate objects. An object is a region of storage. [Note: A function is
> not an object, regardless of whether or not it occupies storage in the way
> that objects do. —end note ]"
Kein Wort darüber, dass ein Objekt ein "class"/"struct" sein muss!
Dort findet sich sogar ein Beispielcode für Objekte:
1
static const char test1 = ’x’;
2
static const char test2 = ’x’;
Ja, auch "char" ist ein Objekt.
Moderator
Dr. Sommer schrieb:
>> […] An object is a region of storage. […]

Das ist die aus von C übernommene Definition eines Objekts. Nach dieser
Definition sind alle Inhalte von Variablen Objekte, d.h. die Forderung
"alles ist ein Objekt" wäre sogar für C erfüllt ;-)

Hier geht es aber um Objekte im engeren OOP-Sinn. Zur Unterscheidung von
gewöhnlichen Objekten heißen diese im C++-Standard "class object". Da
Datentypen wie int, double usw. keine Klassen sind, sind ihre Instanzen
zwar Objekte, aber keine Klassenobjekte.
Yalu hat das klargestellt was man normaler weise unter Objekt in einer 
OOP Sprache meint.
C++ definiert "object" tatsächlich allgemeiner als "region of storage". 
Danke, wusste ich nicht, da ich eher selten mit der c++ spec. zu tun 
habe.
Das was man in OOP klassisch als Objekt bezeichnet, dürfte in C++ dann 
ein "class object" sein.
Dr. Sommer schrieb:
> Udo Schmitt schrieb:
>> Da gibt es genauso primitive Datentypen wie int und float
> Die heißen dort built-in Types.
>> die sind auch keine Objekte.
> Quelle? Nach dem C++ Standard sind das Objekte:
> https://isocpp.org/files/papers/N3797.pdf S. 7 (PDF-S. 21)
>> "The constructs in a C++ program create, destroy, refer to, access, and
>> manipulate objects. An object is a region of storage. [Note: A function is
>> not an object, regardless of whether or not it occupies storage in the way
>> that objects do. —end note ]"

Das ist freundlich formuliert eine ähnlich "strange" Sicht durch die 
Sprachbrille wie es bei Java gemacht wird.
Funktioniert in C++ bspw. (123 + 456).ToString() ?
Nein. 123 und 456 sind keine Objekte wie in richtig objektorientierten 
Sprachen.

Eine mögliche, verkürzte, Definition von Objekt wäre vielleicht:
Alle Konstanten, Variablen etc. die Ziel von Nachrichten sein können.
Gast
Udo Schmitt schrieb:
> Yalu hat das klargestellt was man normaler weise unter Objekt in einer
> OOP Sprache meint.
Hö? Und was?

Ich wollte eigentlich nur sagen, dass man sich erst einmal überlegen 
sollte, was man überhaupt unter einem "Objekt" versteht. ..



Arc Net schrieb:
> Alle Konstanten, Variablen etc. die Ziel von Nachrichten sein können
Und was ist eine Nachricht? Die gibt's weder in C++ noch in Java... 
Vielleicht so etwas?
1
void sendeNachrichtAn(int ziel) { ... }
2
void sendeNachrichtAn (std::string ziel) { ... }
3

4
int main () {
5
  sendeNachrichtAn(123+455);
6
  sendeNachrichtAn ("asdf");
7
}

Arc Net schrieb:
> Funktioniert in C++ bspw. (123 + 456).ToString() ?
> Nein

Dafür aber std::to_string (123+456)
Dr. Sommer schrieb:
> Arc Net schrieb:
>> Alle Konstanten, Variablen etc. die Ziel von Nachrichten sein können
> Und was ist eine Nachricht? Die gibt's weder in C++ noch in Java...

Bin grad zu faul selbst was zu schreiben:
http://stackoverflow.com/questions/43777/method-vs-message-vs-function-vs

> Vielleicht so etwas?
>
1
void sendeNachrichtAn(int ziel) { ... }
2
> void sendeNachrichtAn (std::string ziel) { ... }
3
> 
4
> int main () {
5
>   sendeNachrichtAn(123+455);
6
>   sendeNachrichtAn ("asdf");
7
> }

Wo ist dort 123+456 Ziel der Nachricht wie im zitierten Beispiel?

>> Funktioniert in C++ bspw. (123 + 456).ToString() ?
>> Nein
>
> Dafür aber std::to_string (123+456)

to_string ist das Ziel nicht 123+456
Gast
Arc Net schrieb:
> Bin grad zu faul selbst was zu schreiben:
> http://stackoverflow.com/questions/43777/method-vs-message-vs-function-vs
Also doch nur eine Funktion...

Arc Net schrieb:
> Wo ist dort 123+456 Ziel der Nachricht wie im zitierten Beispiel?
Da:
sendeNachrichtAn(123+455);
  Nachricht--^   ^-----^-- Ziel der Nachricht

Arc Net schrieb:
>>
>> Dafür aber std::to_string (123+456)
>
> to_string ist das Ziel nicht 123+456
Warum? Warum kann man nicht 123+456 als Ziel ansehen und to_string als 
Nachricht?
Gast
Lukas K. schrieb:
> Udo Schmitt schrieb:
>> Eine Sprache bei der wirklich alles Objekte sind ist meines Wissens
>> Smalltalk.
>
> Python >3 auch:>>> 1..__class__
> <class 'float'>
>>>> "hallo".__class__
> <class 'str'>

Insbesondere sind auch die Klassen selbst wieder Objekte:
1
>>> str.__class__
2
<class 'type'>
3
>>> str.__class__.__basicsize__
4
816

Und auch Funktionen sind Instanzen von Klassen:
1
>>> def foo():
2
...     print("Hello world")
3
... 
4
>>> foo.__class__
5
<class 'function'>
6
>>> foo.__class__.__class__
7
<class 'type'>
8
>>> foo.__code__
9
<code object foo at 0x7f92c63a3810, file "<stdin>", line 1>
Gast
Ja, Java ist keine Objektorientierte Sprache (OO-Sprache), sondern eine 
Sprache, die Objektorientiertes Programmieren unterstützt (OOP-Sprache).

Ob eine Sprache selbst komplett Objektorientiert ist oder nicht ist im 
Grunde egal.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.