Forum: PC-Programmierung Ist in Java jeder Typ ein Objekt?


von Ero (Gast)


Lesenswert?

Ich würde nein sagen, da beispielsweise bei int Typen keine Methoden 
benutzt werden können. Jedoch sagt man doch alles ist ein objekt in oop 
oder?

Was stimmt jetzt?

von Dennis S. (eltio)


Lesenswert?

Hmm... lange ist's her. Gibt es dafür nicht speziell Wrapper-Klassen? 
Aber ich mag mich irren.

von Dumdi D. (dumdidum)


Lesenswert?

In Java ist nicht jeder Typ ein Objekt. Falls Deine Def von oop das 
verlangt, dann ist java nicht oop.

von Peter II (Gast)


Lesenswert?

Ero schrieb:
> Jedoch sagt man doch alles ist ein objekt in oop
> oder?

sagt eigentlich niemand pauschal.

http://de.wikibooks.org/wiki/Java_Standard:_Primitive_Datentypen

von Dr. Sommer (Gast)


Lesenswert?

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.

von Alexander F. (alexf91)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

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.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

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.

: Bearbeitet durch User
von Arc N. (arc)


Lesenswert?

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.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

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)

von Lukas K. (carrotindustries)


Lesenswert?

Udo Schmitt schrieb:
> Eine Sprache bei der wirklich alles Objekte sind ist meines Wissens
> Smalltalk.

Python >3 auch:
1
>>> 1..__class__
2
<class 'float'>
3
>>> "hallo".__class__
4
<class 'str'>

von Arc N. (arc)


Lesenswert?

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

von Dr. Sommer (Gast)


Lesenswert?

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?

von Rolf Magnus (Gast)


Lesenswert?

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>

von foobar (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.