Konrad-Adenauer-Gymnasium Langenfeld

Informatik Grundkurs Q1

Die Klasse Lieferant

Mit den Lieferanten der einzelnen Teile wird eine Lieferfrist vereinbart, die nicht überschritten werden darf. Die Lieferung kann auch früher erfolgen. Die Klasse Lieferant beschreibt einen Lieferanten. Neben dem Namen des Produkts und dem Auftragsvolumen kennt diese Klasse das Lager, in das geliefert werden soll, sowie die Lieferfrist. Aus der Lieferfrist wird eine zufällige Lieferzeit zwischen 0 und der Lieferfrist erzeugt. Die Lieferanten liefern unabhängig voneinander, daher erweitert Lieferant die Klasse Thread.

public class Lieferant extends Thread
{
private int Lieferfrist, Auftragsvolumen; 
private int produkt; 
private Lager lager;
public Lieferant(int produkt,int Frist,int Volumen,Lager lager)
{
super(lager.gibTeil(produkt));
this.produkt=produkt;
Lieferfrist=Frist;
Auftragsvolumen=Volumen;
this.lager=lager;
}
public void run()
{
for (int i=1;i<=Auftragsvolumen;i++)
{
try
{
int diff=(int)(Math.random()*Lieferfrist);
sleep(diff);
}
catch(InterruptedException e)
{
}
lager.liefern(produkt);
}
}
}

Im Konstruktor wird über den Methodenaufruf super() der Konstruktor der übergeordneten Klasse, hier also Thread aufgerufen. Der Konstruktor von Thread erwartet als String einen Bezeichner des Threads. Dafür wird hier die Methode gibTeil der Lagerklasse aufgerufen, die die Bezeichnung des Produkts zurückliefert. Dann werden die Konstruktorparameter an die internen Eigenschaften der Klasse übergeben.

Da die Klasse Thread das Interface Runnable implementiert, steht in Subklassen von Thread die Methode run() als ausführende Methode zur Verfügung. In einer Schleife wird entsprechend des Auftragsvolumens eine Lieferung der Teile vorgenommen. Die Wartezeit zwischen zwei produzierten Produkten wird über den Zufallszahlengenerator durchgeführt. Danach wird geliefert.

Die Methode Math.random() liefert eine Zufallszahl vom Typ double mit 0<=r<1. Mit der Operation wird eine Wartezeit zwischen 0 und Lieferfrist Millisekunden erreicht.

sleep() ist jetzt eine Methode von Lieferant, denn sie wird durch die Subklassenbildung von Thread geerbt (korrekterweise: this.sleep(diff);).


© Ralph-Erich Hildebrandt, 27. September 2004