Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Java ist aufgrund der primitiven Datentypen nicht _rein_ objektorientiert - Integer sind in Java keine Objekte (auch C++ ist nicht _rein_ objektorientiert)
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
C#-Quelltext |
|
1 2 3 4 |
class BoxedInt : Object { int i; } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (13.10.2011, 14:18)
das liegt daran, dass in Java ein int etwas ganz anderes ist, als eine Instanz einer KlasseDass du einen int in ein System.Object packen kannst, liegt daran, dass C# (im Gegensatz zu Java) vernünftiges Boxing kennt.
das wird nicht automatisch gemacht, sondern ist (nicht unbedingt exakt so) im .NET Framework bereits vorhanden (die Klasse heißt Int32)Das ist dann gleichwertig mit sowas:
C#-Quelltext
1 2 3 4 class BoxedInt : Object { int i; }
Nur dass .NET das eben implizit und automatisch für dich bastelt.
einen anderen int gibt es in C# nichtDas ist dann aber eben eigentlich kein int mehr.
Quelle?Ein Objekt ist charakterisiert dadurch dass es
imo erfüllt ein int alle 3 Punkte.
- Eindeutig identifizierbar ist (eine Adresse hat)
- Einen Zustand (Daten) hat
- Ein Verhalten hat, also Operationen auf diesen Daten zur Verfügung stellt
C#-Quelltext |
|
1 2 3 4 5 6 7 8 |
static void Main(string[] args) { int integer = 32; Object objekt = integer; Console.WriteLine(integer.GetType()); Console.WriteLine(objekt.GetType()); Console.ReadLine(); } |
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
das wird nicht automatisch gemacht, sondern ist (nicht unbedingt exakt so) im .NET Framework bereits vorhanden (die Klasse heißt Int32)
Quelle?Ein Objekt ist charakterisiert dadurch dass es
imo erfüllt ein int alle 3 Punkte.
- Eindeutig identifizierbar ist (eine Adresse hat)
- Einen Zustand (Daten) hat
- Ein Verhalten hat, also Operationen auf diesen Daten zur Verfügung stellt
in Java erhält man niemals Zugriff auf die Adresse der einzelnen Objekte, geschweige denn man kann sie darüber ansprechen
ein int in Java und C++ erfüllt den 3. Punkt aber nicht
C#-Quelltext
1 2 3 4 5 6 7 8 static void Main(string[] args) { int integer = 32; Object objekt = integer; Console.WriteLine(integer.GetType()); Console.WriteLine(objekt.GetType()); Console.ReadLine(); }
dieser Code gibt 2 Mal das gleiche aus
wäre der integer nach dem zuweisen an objekt kein integer mehr, dann hätte sich die Ausgabe verändert
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (13.10.2011, 15:20)
dieser Code gibt 2 Mal das gleiche aus
wäre der integer nach dem zuweisen an objekt kein integer mehr, dann hätte sich die Ausgabe verändert
C#-Quelltext |
|
1 2 3 4 |
int integer = 32; Object objekt = integer; integer = 42; Console.Write(integer+ " " + objekt); |
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
allerdings wird C dennoch nicht als objektorientierte Sprache bezeichnet, was dann an einem anderem Grund liegen muss
(und vielleicht liege ich ja mit meiner Meinung falsch, dass man (u. a.) die primitiven Datentypen aus Java nicht als Objekte Bezeichnen kann, vielleicht, weil ich es falsch gelehrt bekommen habe)
"Vollkommen falsch", da hält sich aber jemand für besonders schlau. Ich habe geschrieben, dass ICH es so mache, nicht dass es der einzig richtige Ansatz ist. Bei mir hat die Erfahrung gezeigt, dass Spiele ziemlich schwer zu planen sind, weil ich im vornherein gar nicht alles im Detail weiß. Und da fang ich lieber an als mir noch Wochen Gedanken darüber zu machen was ich denn vergessen haben könnte. Denn vergessen tut man immer etwas, oder einem fällt später noch nen feature ein, was man vlt nicht ohne weiteres einbauen kann. Da ist es besser sein Design nicht in Zement zu gießen sondern etwas flexibler zu halten, unter anderem durch ständiges Refactoring. Meinetwegen kannst du deine Projekte nach dem Wasserfallmodell bestreiten, ich habe mich anders entschieden.Wie scharfsinnig das mit dem Listener zu erwähnen. Bei dieser Geschichte geht es NICHT um vernünftige Namen oder so etwas. Einen Manager nur anders zu benennen ist
damit nicht gemeint. Sondern vielmehr, dass es keinen Grund gibt für solche Klassen.
Seltsamerweise denken viele Leute bei OOP geht es NUR um Klassen und deren Methoden. Kaum einer denkt mal daran, dass Methoden auch außerhalb von Klassen existieren können und vor allem auch sollten.
In solch einem Manager sind oft Methoden drin, die eigentlich gar nicht in eine Klasse gehören. Darum die Aussage, keine Klassen mit "er". Natürlich gibt es Ausnahmen, da es ja englische Worte gibt, die auf er enden (siehe Listener, Player usw.).
In C gibt es den struct um Daten zu einer logischen Einheit zusammenzufassen. Das OOP Konzept stellt die logische Erweiterung dieser struct dar und fügt noch Methoden zu structs hinzu (darum kann man auch class und struct gleich verwenden). Das war seinerzeit die Idee hinter den Klassen und das grundlegende von C++.
Dennoch existieren weiterhin Methoden, die NICHT zu einer Klasse gehören. Da viele aber das Konzept nicht verstehen, entstehen plötzlich Manager/Helper etc. Klassen.
Aber nur weil sie denken, dass eine Methode schließlich in irgendeine Klasse rein MUSS. Das ist aber falsch.
Dieses Mißverständnis eisenhart durchgezogen führt dann zu Performance Problemen.
Also was shiroto schreibt, ist natürlich vollkommen falsch. Ein falsch angewendetes OOP Design kann zu Performance Problemen führen.
Grundsätzlich der Ansatz, ich fang einfach an und dann refactore ich bei Bedarf ist auch etwas schräg. Man sollte schon vorher ein bisschen drüber nachdenken.
Dann kann man sich direkt viel Refactoring ersparen. Aber dazu bedarf es vor allem viel Erfahrung.
Weil structs von Object erben. Zu lesen hier: http://msdn.microsoft.com/en-us/library/ah19swz4(v=vs.71).aspx
C#-Quelltext
1 2 3 4 5 6 7 8 static void Main(string[] args) { int integer = 32; Object objekt = integer; Console.WriteLine(integer.GetType()); Console.WriteLine(objekt.GetType()); Console.ReadLine(); }
dieser Code gibt 2 Mal das gleiche aus
wäre der integer nach dem zuweisen an objekt kein integer mehr, dann hätte sich die Ausgabe verändert
Interessantes Argument. Ich bin mir ehrlich gesagt nicht ganz sicher, wieso das so ist. Vermutlich ist es aber auf den Boxing-Mechanismus zurückzuführen. Unabhängig davon, was nun der genaue Grund sein mag, widerlegt das auch nicht meine eigentliche Aussage, dass int auch in Sprachen wie Java und C++ die Kriterien eines Objektes erfüllt.
Werbeanzeige