Methode für alle Subklassen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Methode für alle Subklassen

    Hallo Zusammen,

    macmoonshine hat irgendwann mal erwähnt, dass die Verwendung von switch auf code smell hindeutet. Das hat mich aufhorchen lassen, ein wenig recherchiert und tatsächlich - es stinkt. In meinem neuen Projekt wollte ich das nun besser machen und erstelle für die unterschiedlichen Ausprägung eines Objektes jeweils eine neue Subklasse.

    Ich habe also eine generelle Klasse Token und 10 Subklassen (der Einfachheit halber nennen wir sie RedToken, BlueToken, GreenToken usw.)
    Jetzt sollen die Subklassen alle eine neue Methode erhalten:

    Quellcode

    1. -(void)addDamage:(int)damage{
    2. self.health -= damage;
    3. if(self.health <= 0){
    4. [self destroy];
    5. }
    6. }


    Mein erster Gedanke war die Methode in der Token Klasse zu implementieren. Das funktioniert natürlich nicht, da self.health ja nicht für Token gesetzt wurde, sondern für z.B. RedToken.

    Meine Frage ist nun wie ich all meinen Subklassen die Methode hinzufüge. Sie 10-mal zu kopieren kann es ja nicht sein, oder?
  • Wenn Deine 10 Subklassen alle eine Property HEALTH haben, dann ist es durchaus sinnvoll, diese Property in Token zu definieren und die Methode dort hin zu schreiben.
    Wenn nur ein paar Deiner Subklassen HEALTH als Property besitzen oder addDamage jeweils einen anderen Wert reduziert, kommst Du um eine Implementierung je Subklasse nicht umhin.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Nein, alle subclassen haben das property health - es ist bereits in der Token Klasse implementiert.

    Marco Feltmann schrieb:

    ... und die Methode dort hin zu schreiben.


    Das bringt mich jetzt ins grübeln. Das war mein erster Ansatz und hat nicht funktioniert, da self.health in Token immer 0 ist.
    Das health property setze ich in den init-Methoden der Subklassen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ioscampus ()

  • Was genau hat denn nicht funktioniert?

    Eventuell solltest Du zur Umgehung des '-destroy' in der Parent Klasse den Health Wert auf -1 festlegen um eventuelle Seiteneffekte zu vermeiden.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P