Was darf eine Klasse alles?



  • Hi, hi

    ich arbeite jetzt schon einige Zeit mit "kleineren" Klassen. Ein Problem ist immer wieder, dass ich nicht weiß welche Aufgabe ich einer Klasse überlassen soll und welche dem Programmierer dann später selber. Zum Beispiel bei meiner jetzigen Klasse. Sie soll einen einfachen Ball in einer Konsolenanwendung darstellen. Soll ich jetzt die Position des Balles in der Klasse speichern? Ich würde hier noch sagen ja, schließlich sollte ein Objekt wissen wo es ist...
    Ein weiteres Problem ist die Kollisionsabfrage. Ein Konsolenanwendung ist ja immer 80*15 groß. Also würde eine einfache Methode move() ausreichen, wenn die Kollisionsabfrage von der Klasse übernommen wurde. Was ist aber wenn innerhalb der Klasse irgendwelche Hindernisse sind. Wer "sagt" dem Ball das er hier nicht weiter kann? Dann bräuchte mann doch genauere Methoden wie moveX(-7) (nach links) oder moveX(7) (nach rechts).

    Ein weiteres aber eher kleineres Problem habe ich mit "unsigned". Wann sollte mann das genau verwenden immer dann wenn es nur Positive zahlen gibt wie bei der Position des Balles, oder wenn es nur Positive Zahlen gibt und ich dieses "extra Bit" brauche? Bei der Position in einer Konsolen Anwendung wäre das eigentlich überflüssig also könnte ich gleich "short" zum speichern verwenden oder?



  • positionen sollten in float gespeichert werden, aber bei konsolenanwendungen macht das aber nichts aus 🙂
    eine Klasse sollte sich selber verwalten können, also wenn der benutzer sagt moveball(position(10,5)),dann macht die klasse das, aber sie soll auch gleich schaun, ob es hindernisse gibt.

    und dass eine klasse die einen zu bewegenden ball darstellt seine position speichert seh ich als selbstverständlich an 😉



  • Nimm einfach grundsätzlich int (oder double/float), damit machst du fast nie was falsch. short ist nicht schneller, du sparst dir meistens auch nix, weil der Compiler das trotzdem wieder auf 32 Bit ausrichtet.
    Und denk nicht zu kurz. Vielleicht macht dein Ball mal größere Sprünge und ist, bis die Kollision erkannt wird, wirklich mal ganz kurz im negativen Bereich. Wenn du jetzt unsigned verwendest, hast du nen hard-to-find-bug.

    Und natürlich gehört die Position in die Ball Klasse. Genauso wie Farbe, Elastizität und eine Methode move(). Diese muss auch die Kollision erkennen. Vielleicht verwaltest du deine Bälle in einem Array? Das kannst du auch static in die Klasse packen. Wenn möglich mach alles private, bis auf eine static Methode moveAllBalls().



  • Aber wie mach ich das, das sie nach Hindernissen schaut. Gibt es da irgendwelche Beispiele zum anschauen?



  • Die Klasse muss natürlich die Hindernisse kennen.
    Wenn du das jetzt wirklich so machst, dass du alle Bälle in einem Array verwaltest musst du halt mit jedem Element im Array auf Kollision prüfen.
    Wenn du verschiedenartige Hindernisse hast, würde ich sie alle in ein Array packen und von einer gemeinsamen Basisklasse mit Position, Größe und Kollisionserkennung erben lassen.



  • in ner konsole nachschaun ist ganz einfach.
    schau dir einfach mal die 4 begrenzungsseiten an, setze auf jede dieser seiten in gedanken einen ball, und rechne nach, wie ein ball liegen muss , um die seiten zu berühren^^



  • Danke für eure schnellen Antworten!
    So ein richtiger Ball ist gar nicht so einfach:D



  • otze schrieb:

    in ner konsole nachschaun ist ganz einfach.
    schau dir einfach mal die 4 begrenzungsseiten an, setze auf jede dieser seiten in gedanken einen ball, und rechne nach, wie ein ball liegen muss , um die seiten zu berühren^^

    Hä? Wieso soll man sich dafür an den Seiten einen Ball vorstellen?

    Mein Vorschlag wäre, dass der Ball seine Eigenschaften kennt. Die Umgebung muss sich um Kollisionsprüfungen kümmern. Der Ball sollte imho nichts von seiner Umgebung wissen.



  • dient nur zur veranschaulichung des problems.



  • Ich stimme MaStaH zu, es ist unüblich das Array von Bällen innerhalb der Ballklasse zu machen und OO betrachtet ist es auch nicht ok.



  • Wenn ich euch jetzt richtig verstehe soll ich dafür sorgen das die anderen Objekte für die Kollisionsabfrage zuständig sind?



  • wenn du nur ein objekt hast, ist das nicht sinnvoll, aber sobald du einen ball und eine Wand hast,gewinnts an bedeutung..


Anmelden zum Antworten