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?
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.
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.
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.
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:
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.
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
voidsendeNachrichtAn(intziel){...}
2
voidsendeNachrichtAn(std::stringziel){...}
3
4
intmain(){
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)
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
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?
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>
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.