Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Softwaretechnik (http://www.informatikerboard.de/board/board.php?boardid=18)
----- Vererbung (http://www.informatikerboard.de/board/thread.php?threadid=2145)


Geschrieben von javaneu am 28.02.2015 um 12:44:

  Vererbung

Meine Frage:
Hallo ich habe gerade bei dieser Aufgabe probleme:

In dieser Aufgabe sollen Sie mathematische Ausdrücke
objektorientiert modellieren und dabei die Eigenschaften der Vererbung ausnutzen.
a) Erstellen Sie dazu zunächst ein Interface Term, dass nur die Methode public int getValue()
enthält.
b) Schreiben Sie eine Klasse AbsoluteTerm, die Term implementiert. Jedes Objekt dieser Klasse soll
einen (unveränderlichen) int-Wert speichern, der dem Konstruktor als Parameter übergeben wird.
Die Methode getValue() der Klasse soll diesen Wert zurückgeben.
c) Schreiben Sie als Nächstes die abstrakte Klasse BinaryOperation, die ebenfalls das Interface
Term implementiert. Schreiben Sie die Methoden public Term getLeft() und public Term
getRight(), die den linken bzw. rechten im Konstruktor festgelegten Operanden der Operation
zurückgeben. Die Methode getValue() schreiben Sie hier nicht ? warum geht das?
d) Erstellen Sie die Klasse Addition als Unterklasse von BinaryOperation und implementieren Sie
nun die Methode getValue() so, dass diese die arithmetische Summe der beiden Operanden berechnet
und zurückgibt. Vergessen Sie den Konstruktor der Klasse nicht.
e) Implementieren Sie die Klasse Factorial, die die Fakultät eines anderen Ausdrucks berechnet.
Überlegen Sie sich, was eine geeignete Oberklasse bzw. -interface sein könnte.
f) Überlegen Sie sich weitere mathematische Operationen und implementieren Sie diese, wie z.B. die
Exponentiation: ab. Ggf. müssen Sie Klassen weiterer Grundrechenarten
erstellen.
Zur Erinnerung: Fakultät von n ist definiert als: n! = 1  2  3  . . .  n

Meine Ideen:
Interface

code:
1:
2:
3:
4:
5:
6:
7:
8:
public interface Term
{
    public int getValue();
    
}




class Habe es so versucht
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public class AbsoluteTerm implements Term
{
   Wie soll der Konstruktor sein?

Echt doch nichts konkretes?


}




Geschrieben von eulerscheZahl am 28.02.2015 um 12:55:

 

So soll der Konstruktor sein:
code:
1:
2:
3:
AbsoluteTerm(int value) {
    //hier kommt noch was
}



Geschrieben von javaneu am 28.02.2015 um 13:21:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public class AbsoluteTerm implements Term
{AbsoluteTerm(int value) {
    
    this.value = value;
    //hier kommt noch was
}

public static void getValue(){
    return this.value;

}
}


Mir wird nur hier ein Fehler angezeigt:
public class AbsoluteTerm implements Term
Absolute term is not abstract and does not override abstract method getValue



Geschrieben von Karlito am 28.02.2015 um 15:03:

 

Hallo,

getValue() darf nicht static sein. Methoden und Felder sind nur als static zu kennzeichnen, wenn man sie ohne ein Objekt zu erzeugen aufrufen will.

Hier ein Beispiel zur Funktionsweise von static:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public class Beispiel{
	public static void statischeMethode(){
		System.out.println("Statische Methode aufgerufen.");
	}
	public void objektMethode(){
		System.out.println("Objektmethode aufgerufen.");
	}

	public static void main(String[] args){
		Beispiel.statischeMethode();
		//Beispiel.objektMethode();    //Geht nicht, weil vorher ein Objekt erzeugt werden muss
		Beispiel bsp = new Beispiel(); //Hier wird ein Objekt vom Typ Beispiel erzeugt und der 
																	 //Variable bsp zugewiesen
		bsp.objektMethode();
		bsp.statischeMethode();        //Geht auch
	}
}


Gruß,

Karlito



Geschrieben von javaneu am 28.02.2015 um 16:46:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 
public class AbsoluteTerm implements Term
{AbsoluteTerm(int value) {
    
    this.value = value;
    //hier kommt noch was
}

public  void getValue(){
    return this.value;

}
}              


Die Fehlermeldung bleibt trotzdem ?



Geschrieben von Karlito am 28.02.2015 um 16:59:

 

Ja, weil der Rückgabetyp nicht stimmt. Im Interface soll getValue() int zurückgeben. In der Klasse gibst du void (also nichts) zurück. Die Rückgabetypen müssen übereinstimmen. Im Prinzip kann man den Funktionskopf aus dem Interface kopieren. Sorry, dass ich das vorhin übersehen habe.

Edit: Weiterhin fällt mir gerade auf, dass es kein Feld value gibt. Deswegen solltest Du gleich noch mehr Fehler bekommen, weil this.vaiue nicht existiert.

Gruß,

Karlito



Geschrieben von javaneu am 28.02.2015 um 17:05:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

public class AbsoluteTerm implements Term
{AbsoluteTerm(int value) {
    
    this.value = value;
    //hier kommt noch was
}

public  int getValue(){
    return this.value;

}
}




Aber wie soll ich sonst was zurückgeben ,wenn nicht mit value?



Geschrieben von Karlito am 28.02.2015 um 17:53:

 

Wie gesagt, es fehtl ein entpreichendes Feld in der Klasse:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public class AbsoluteTerm implements Term
{
	private int value; //dieses (private) Feld fehlt...

	AbsoluteTerm(int value) {
		this.value = value;
		//hier kommt noch was
	}

	public  int getValue(){
		return this.value;
	}
}


Diese Felder werden im Normalfall immer als private gekennzeichnet um dem Geheimnisprinzip gerecht zu werden.

Gruß,

Karlito



Geschrieben von javaneu am 28.02.2015 um 18:34:

 

public class AbsoluteTerm implements Term
{
private int value; //dieses (private) Feld fehlt...

AbsoluteTerm(int value) {
this.value = value;
//hier kommt noch was
}

Ich komme gerade nicht darauf , was ich noch hinzufügen kann?



Geschrieben von eulerscheZahl am 28.02.2015 um 18:41:

 

Der Beitrag eins über dir sieht doch gut aus.
Ich habe es jetzt nicht extra in eclipse kopiert, behaupte aber, da fehlt nichts mehr.



Geschrieben von Karlito am 28.02.2015 um 18:58:

 

Zeile 3 war das was gefehlt hatte. Ich habe es hinzugefügt.

Gruß,

Karlito



Geschrieben von javaneu am 28.02.2015 um 19:13:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public class AbsoluteTerm implements Term
{AbsoluteTerm(int value) {
    
    this.value = value;
    //hier kommt noch was
}

public  int getValue(){
    return this.value;

}
}

Mein blue j meckert aber trotzdem das cannot find symbol ( variabel value)



Geschrieben von eulerscheZahl am 28.02.2015 um 19:14:

 

So weit waren wir doch schon!
private int value; //dieses (private) Feld fehlt...



Geschrieben von Karlito am 28.02.2015 um 19:15:

 

Schau dir meinen Code an und deinen und ziehe deine Schlüsse...



Geschrieben von javaneu am 28.02.2015 um 19:32:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:

public class AbsoluteTerm implements Term{

private int value;
{AbsoluteTerm(int value) {
    
    this.value = value;
    //hier kommt noch was
}

public  int getValue(){
    return this.value;

}
}






Immer noch Fehler anzeige .class expected.

Tut mir leid wenn ich euch ein wenig nerve .
Programmieren ist kompletttes neuland für mich im moment.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH