Terme können auch Funktionen enthalten:
a + sin( x )
ln( a + b )
exp( x*ln( y ) )
Eine Funktion ist ein Term und besitzt als Argument wiederum einen Term.
oder als Quelltext:
abstract class Funktion extends Term{
protected Term argument;
}
Das Schlüsselwort protected bedeutet hier, dass nur Klassen, die von der Klasse "Funktion" abgeleitet sind auf dieses Attribute zugreifen können.
Um eine konkrete Klasse von "Funktion" abzuleiten, soll hier die Klasse erstellt werden, die den natürlichen Logarithmus einer Zahl berechnet.
Aufgabe:
- Erstellen Sie ein UML-Diagramm der Klasse "Ln" und schreiben Sie, soweit es Ihnen möglich ist, den Quelltext dazu.
Hier das komplette bisherige UML-Diagramm:
abstract class Term {
public abstract double berechne_wert( double belegung[] );
public abstract String als_text();
}
class Zahl extends Term{
private double wert;
public double berechne_wert( double belegung[] ){
return wert;
}
public String als_text(){
return Double.toString( wert );
}
public Zahl( double start_wert ){
wert = start_wert;
}
}
class Variable extends Term{
private Character buchstabe;
public double berechne_wert( double belegung[] ){
int pos = buchstabe.compareTo( new Character( 'a' ) );
return belegung[pos];
}
public String als_text(){
return buchstabe.toString();
}
public Variable( char start_buchstabe ){
buchstabe = new Character( start_buchstabe );
}
}
abstract class Funktion extends Term{
protected Term argument;
}
class Ln extends Funktion{
public Ln( Term start_argument ){
argument = start_argument;
}
public double berechne_wert( double belegung[] ){
return Math.log( operand.berechne_wert( belegung ) );
}
public String als_text(){
return "ln("+operand.als_text()+")";
}
}
Aufgaben:
- Erstellen Sie Quelltext im Unterprogramm "main", der Ihre neue Klasse testet.
- Erzeugen Sie aus dem dargestellten UML-Diagramm eine abstrakte Klasse "ZweiOperanden". Sie wird für die nächste Station benötigt.