OOP Vererbung im Computerspiel

Wayne139

Aktives Mitglied
Hallo ich habe folgende Probleme.
Es soll ein Computerspiel mit Superman programmiert werden.

Problem 1:
Aufgabe: privates Attribut-> personalMission vom Typ Mission:
ist eine Referenz auf die Mission, die der Superman zu erfüllen hat.

Wäre das so richtig? Ich habe auch eine Klasse Mission, aber dort ist nicht vorgegeben, dass ich personalMission habe.
Hat wahrscheinlich was mit der "Referenz" zu tun. Superheroes ist ein Klassenattribut, hab ich das im Code richtig gemacht?
Java:
private Mission personalMission;
pirvate static int superheroes=0;

public Superman(Mission personalMission){
    this.personalMission=personalMission;
  }

Problem2:
Die Implementierung der Methode vergessen() der Schnittstelle vergesslich erniedrigt beim
Aufruf das Wissen (Knowledge) des Superhelden um 1.
Die Schnittstelle vergesslich enthält als einzige Methode die Methode vergessen(),
welche keinen Rückgabewert liefert.

Eine Schnittstelle ist wahrscheinlich ein Interface
Mein Code:
Java:
  public void vergessen(){
    knowledge--;
  }
 
  public interface vergesslich{
    
    public void vergessen();
  }

Problem3:
Die Methode adjustMissionTime (int zeit) subtrahiert die zeit von der verbleibenden
missionTime. Die Methode ist Teil von der Klasse "Mission"

Java:
  public int adjustMissionTime(int zeit){
    return (int) missionTime = (int) missionTime-zeit;
  }
Hier bekomme ich nicht richtig hin, die missionTime(double)-zeit(int) zu rechnen.
Ich glaub das lässt sich mit einem cast lösen?
 

mihe7

Top Contributor
Zu Problem 1: ja, richtig. "Referenz" bedeutet ja nur mal "Verweis". Das Attribut personalMission verweist also auf eine Instanz (Objekt) der Klasse Mission. Intern sieht das so aus, dass personalMission einfach die Adresse des Mission-Objekts speichert, an der dieses im Speicher zu finden ist. Das ist zwar hier unerheblich, aber diese Info erleichtert das Verständnis an einigen Stellen m.E. enorm.

Zu Problem 2: ist das "vergesslich" wirklich klein geschrieben? Das ist ja ekelhaft (in Java schreibt man Namen von Typen - und dazu gehören auch Interfaces - per Konvention in UpperCamelCase). Das aber nur nebenbei. Ansonsten: auch richtig - Schnittstelle ist interface. Das public vor void vergessen() kannst Du Dir sparen, da alle Methoden in einem interface automatisch public sind.

Außerdem muss Deine Klasse die Schnittstelle auch implementieren (implements).

Zu Problem 3: mach das mal in zwei Zeilen und vergiss den Cast - das macht Java automatisch. Fehler gibt es nur in die umgekehrte Richtung (Zuweisung eines double-Werts an eine int-Variable), weil hier Informationen verloren gehen können.
 

Wayne139

Aktives Mitglied
Danke für die Antwort mihe7

Hier ist noch die komplette Aufgabenstellung.
Ich habe die Stellen wo ich Probleme habe schwarz markiert.
----------------------------------------------------------------------------------------------------------------------------------------
Aufgabe

Sie wollen für ein Computerspiel die Actionfigur erstellen. Die Klasse Superman hat folgende privaten Attribute:
realName vom Typ String:
Der Name des Actionhelden im normalen Leben.

knowledge vom Typ int:
Eine Zahl zwischen 1 und 10 (jeweils inklusive), welche sein Wissen angibt (1 ist gering, 10 ist optimal).

superheroes vom Typ int:
Ist ein Klassenattribut und gibt an, wie viele Supermänner zurzeit unterwegs sind. Der Anfangswert ist 0. Er erhöht sich entsprechend bei der Erzeugung neuer Supermänner.

personalMission vom Typ Mission:
ist eine Referenz auf die Mission, die der Superman zu erfüllen hat.

personalTime vom Typ double:
Gibt an, wie viel Zeit der Superman insgesamt für die Mission zur Verfügung hat.

Superman implementiert weiterhin die Schnittstelle vergesslich (Definition der Schnittstelle im Anschluss weiter unten).

Die Klasse verfügt über einen allgemeinen Konstruktor, der alle Attribute initialisiert (außer dem Klassenattribut) und die Anzahl der superheroes um 1 erhöht.

Die öffentliche Methode kaempfen(int zeit) hat keinen Rückgabewert. Der Superman kämpft die angegebene Zeit in Minuten für die PersonalMission. Die Zeit, die er kämpft, wird von der PersonalTime abgezogen. Ist die zeit größer als PersonalTime, so wird eine Meldung ausgegeben „Die Zeit ist abgelaufen“.
Der Erfolg von kaempfen() hängt von dem Wissen (knowledge) des Superman ab, d.h. stimmen knowledge und difficulty überein, verkürzt sich die MissionTime um genau den Betrag zeit. Ist difficulty doppelt so groß wie knowledge, braucht er doppelt soviel zeit. Umgekehrt gilt auch, dass er die halbe zeit braucht, wenn sein knowledge doppelt so groß ist, wie die difficulty, usw.


Die Methode ueben() hat ebenfalls keinen Rückgabewert und erhöht beim Aufruf das Wissen (knowledge) des Superhelden um 1.

Die Methode toString() liefert eine Zeichenkette mit Namen, Wissensstand, Anzahl der Superhelden und Zeit, die der Superheld noch zur Verfügung hat.

Die Implementierung der Methode vergessen() der Schnittstelle vergesslich erniedrigt beim Aufruf das Wissen (Knowledge) des Superhelden um 1.

Die Schnittstelle vergesslich enthält als einzige Methode die Methode vergessen(), welche keinen Rückgabewert liefert.


Weiterhin gibt es eine Klasse Mission, welche die Aufgabe beschreibt, die der Superman erfüllen soll. Sie hat die folgenden privaten Attribute:
missionTime vom Typ double:
Gibt an, in welcher Zeit die Aufgabe gelöst werden muss.

difficulty vom Typ int:
Gibt an, wie schwierig die Mission ist.

Die Klasse verfügt über einen allgemeinen Konstruktor, der alle Attribute initialisiert.

Die Methode adjustMissionTime (int zeit) subtrahiert die zeit von der verbleibenden missionTime.

Weiterhin existiert eine öffentliche Methode zum Zugriff auf das Attribut difficulty.
-------------------------------------------------------------------------------------------------------------------------------------------


Mein Code sieht momentan so aus.
Die Klasse Superman
Java:
public class Superman implements Vergesslich{
  private String realName;
  private int knowledge;
  private static int superheroes=0;
  private Mission personalMission;
  private double personalTime;
  
  public Superman(String realName, int knowledge, Mission personalMission, double personalTime){
    this.realName=realName;
    this.knowledge=knowledge;
    this.personalMission=personalMission;
    this.personalTime=personalTime;
    superheroes++;
  }
  
  public void kaempfen(int zeit){
    if(knowledge==getDifficulty()){
      missionTime-=zeit;
    }
    if(difficulty/knowledge>=2){
      missionTime-=2*zeit;
    }
    if(knowledge/difficulty>=2){
      missionTime-=zeit/2;
    }
    if(zeit>personalTime){
      System.out.println("Zeit ist abgelaufen");
    }
    else{
      personalTime-=zeit;
    }
    
  }
  
  public void ueben(){
    knowledge++;
  }
  
  public String toString(){
    return realName+""+knowledge+""+superheroes+""+personalTime;
  }
  
  public void vergessen(){
    knowledge--;
  }  
}
Mit der Methode kaempfen() habe ich noch Probleme. Könnte es sein, dass Superman noch von Mission erben muss?
Also Superman extends Mission?



Und die Klasse Mission
Java:
public class Mission{
  private double missionTime;
  private int difficulty;
  
  
  public Mission(double missionTime, int difficutly){
    this.missionTime=missionTime;
    this.difficulty=difficulty;
  }
  
  public double adjustMissionTime(int zeit){
    return missionTime-=zeit;
  }
  
  public int getDifficulty(){
    return difficulty;
  }
  
  public void setDifficulty(int d){
    difficulty=d;
  }
}

Zusätzlich habe ich noch eine weitere Klasse für die Methode Vergesslich gemacht
Klasse Vergesslich
Java:
  public interface Vergesslich{   
    public void vergessen();
  }
Dass ich Vergesslich abseits von der Klasse Superman geschrieben habe ist so richtig?
Ich hatte Vergesslich vorher in Superman drin (Es kamen Fehlermeldungen beim Compilieren).
 

temi

Top Contributor

Wayne139

Aktives Mitglied
Ich will jetzt noch eine Klasse SuperJavaMan hinzufügen, die von Superman erbt.
Meine Konstruktoren sehen so aus:
Java:
public class SuperJavaMan extends Superman{
 
  //Allgemeiner Konstruktor
  SuperJavaMan(String realName, int knowledge, Mission personalMission, double personalTime){
    super(realName, knowledge,personalMission,personalTime);
}

  //Standardkonstruktor
  SuperJavaMan(){
    super(realName, knowledge,personalMission,personalTime);
  }
}
Hier ist das Problem, dass die privaten Variablen aus Superman nicht im Standardkonstruktor SuperJavaMan visible sind. Wie kann man das lösen ohne in Superman die Variabeln public zu machen?

Und ich habe noch eine Frage zum UML, ich sollte nur von Superman und Mission ein UML machen und ich möchte nur wissen ob das so passt, die Methode vergessen() müsste ja Abstrakt sein, aber Dia macht die Methode nicht kursiv. Ich benutze für die UML erstellung Dia, wenn mir jemand was anderes empfehlen kann, bitte schreiben.Vielen Dank für alles.
12743

12744
 

mihe7

Top Contributor
Hier ist das Problem, dass die privaten Variablen aus Superman nicht im Standardkonstruktor SuperJavaMan visible sind.
Nein, wenn überhaupt, dann ist das Problem, dass Superman keinen Standardkonstruktor hat. Die Variablen werden ja im Konstruktor gerade erst initialisiert.

Abgesehen davon: protected (im UML # statt -) sorgt dafür, dass auf Methoden und Attribute in abgeleiteten Klassen direkt zugegriffen werden kann - sollte man aber in der Regel nicht brauchen.

die Methode vergessen() müsste ja Abstrakt sein, aber Dia macht die Methode nicht kursiv
Die Methode vergessen() in Superman ist nicht abstrakt - dort gibt es eine konkrete Implementierung. Wäre die Methode in Superman abstrakt, dann wäre die ganze Klasse abstrakt.

Was Du machen solltest wäre folgendes: die Methode vergessen() aus Superman entfernen, ein neues Element mit dem Stereotyp «interface» und dem Namen Vergesslich (kursiv, weil abstrakt) einführen. Dann eine gestrichelte Linie von Superman zu Vergesslich mit Generalisierungspfeil in Richtung Vergesslich. Alternativ: Lolipop. Google einfach mal nach UML und Interface in der Bildsuche, dann siehst Du gleich, was damit gemeint ist :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben